diff options
Diffstat (limited to 'src')
898 files changed, 28613 insertions, 21622 deletions
diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp index 1bf5dcad51f..55517884b8e 100644 --- a/src/server/authserver/Authentication/AuthCodes.cpp +++ b/src/server/authserver/Authentication/AuthCodes.cpp @@ -25,6 +25,7 @@ namespace AuthHelper {15595, 4, 3, 4, ' '}, {14545, 4, 2, 2, ' '}, {13623, 4, 0, 6, 'a'}, + {13930, 3, 3, 5, 'a'}, // 3.3.5a China Mainland build {12340, 3, 3, 5, 'a'}, {11723, 3, 3, 3, 'a'}, {11403, 3, 3, 2, ' '}, @@ -78,4 +79,4 @@ namespace AuthHelper return NULL; } -}; +} diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h index 5e6522f8981..97b4779da0e 100644 --- a/src/server/authserver/Authentication/AuthCodes.h +++ b/src/server/authserver/Authentication/AuthCodes.h @@ -92,6 +92,6 @@ namespace AuthHelper bool IsAcceptedClientBuild(int build); bool IsPostBCAcceptedClientBuild(int build); bool IsPreBCAcceptedClientBuild(int build); -}; +} #endif diff --git a/src/server/authserver/Authentication/TOTP.h b/src/server/authserver/Authentication/TOTP.h index 04b4a8c2110..7ced260758c 100644 --- a/src/server/authserver/Authentication/TOTP.h +++ b/src/server/authserver/Authentication/TOTP.h @@ -16,7 +16,7 @@ */ #ifndef _TOTP_H -#define _TOPT_H +#define _TOTP_H #include "openssl/hmac.h" #include "openssl/evp.h" diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index 28e9f324c19..9f96d21e55e 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -115,7 +115,7 @@ extern int main(int argc, char** argv) TC_LOG_INFO("server.authserver", "<Ctrl-C> to stop.\n"); TC_LOG_INFO("server.authserver", "Using configuration file %s.", configFile); - TC_LOG_WARN("server.authserver", "%s (Library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + TC_LOG_INFO("server.authserver", "%s (Library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); #if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL) ACE_Reactor::instance(new ACE_Reactor(new ACE_Dev_Poll_Reactor(ACE::max_handles(), 1), 1), true); @@ -178,41 +178,43 @@ extern int main(int argc, char** argv) Handler.register_handler(SIGINT, &SignalINT); Handler.register_handler(SIGTERM, &SignalTERM); +#if defined(_WIN32) || defined(__linux__) + ///- Handle affinity for multiple processors and process priority uint32 affinity = sConfigMgr->GetIntDefault("UseProcessors", 0); bool highPriority = sConfigMgr->GetBoolDefault("ProcessPriority", false); #ifdef _WIN32 // Windows + + HANDLE hProcess = GetCurrentProcess(); + if (affinity > 0) { - HANDLE hProcess = GetCurrentProcess(); + ULONG_PTR appAff; + ULONG_PTR sysAff; - if (affinity > 0) + if (GetProcessAffinityMask(hProcess, &appAff, &sysAff)) { - ULONG_PTR appAff; - ULONG_PTR sysAff; - - if (GetProcessAffinityMask(hProcess, &appAff, &sysAff)) - { - ULONG_PTR currentAffinity = affinity & appAff; // remove non accessible processors - - if (!currentAffinity) - TC_LOG_ERROR("server.authserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the authserver. Accessible processors bitmask (hex): %x", affinity, appAff); - else if (SetProcessAffinityMask(hProcess, currentAffinity)) - TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %x", currentAffinity); - else - TC_LOG_ERROR("server.authserver", "Can't set used processors (hex): %x", currentAffinity); - } - } + // remove non accessible processors + ULONG_PTR currentAffinity = affinity & appAff; - if (highPriority) - { - if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)) - TC_LOG_INFO("server.authserver", "authserver process priority class set to HIGH"); + if (!currentAffinity) + TC_LOG_ERROR("server.authserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the authserver. Accessible processors bitmask (hex): %x", affinity, appAff); + else if (SetProcessAffinityMask(hProcess, currentAffinity)) + TC_LOG_INFO("server.authserver", "Using processors (bitmask, hex): %x", currentAffinity); else - TC_LOG_ERROR("server.authserver", "Can't set authserver process priority class."); + TC_LOG_ERROR("server.authserver", "Can't set used processors (hex): %x", currentAffinity); } } -#elif __linux__ // Linux + + if (highPriority) + { + if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)) + TC_LOG_INFO("server.authserver", "authserver process priority class set to HIGH"); + else + TC_LOG_ERROR("server.authserver", "Can't set authserver process priority class."); + } + +#else // Linux if (affinity > 0) { @@ -242,6 +244,7 @@ extern int main(int argc, char** argv) } #endif +#endif // maximum counter for next ping uint32 numLoops = (sConfigMgr->GetIntDefault("MaxPingTime", 30) * (MINUTE * 1000000 / 100000)); diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp index 8a2a6c67496..4ddad3e6eb0 100644 --- a/src/server/authserver/Server/AuthSocket.cpp +++ b/src/server/authserver/Server/AuthSocket.cpp @@ -321,7 +321,7 @@ bool AuthSocket::_HandleLogonChallenge() socket().recv((char *)&buf[0], 4); - EndianConvert(*((uint16*)(buf[0]))); + EndianConvertPtr<uint16>(&buf[0]); uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size; TC_LOG_DEBUG("server.authserver", "[AuthChallenge] got header, body is %#04x bytes", remaining); @@ -341,11 +341,11 @@ bool AuthSocket::_HandleLogonChallenge() // BigEndian code, nop in little endian case // size already converted - EndianConvert(*((uint32*)(&ch->gamename[0]))); + EndianConvertPtr<uint32>(&ch->gamename[0]); EndianConvert(ch->build); - EndianConvert(*((uint32*)(&ch->platform[0]))); - EndianConvert(*((uint32*)(&ch->os[0]))); - EndianConvert(*((uint32*)(&ch->country[0]))); + EndianConvertPtr<uint32>(&ch->platform[0]); + EndianConvertPtr<uint32>(&ch->os[0]); + EndianConvertPtr<uint32>(&ch->country[0]); EndianConvert(ch->timezone_bias); EndianConvert(ch->ip); @@ -715,13 +715,25 @@ bool AuthSocket::_HandleLogonProof() char data[4] = { AUTH_LOGON_PROOF, WOW_FAIL_UNKNOWN_ACCOUNT, 3, 0 }; socket().send(data, sizeof(data)); - TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s tried to login with invalid password!", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str ()); + TC_LOG_DEBUG("server.authserver", "'%s:%d' [AuthChallenge] account %s tried to login with invalid password!", socket().getRemoteAddress().c_str(), socket().getRemotePort(), _login.c_str()); uint32 MaxWrongPassCount = sConfigMgr->GetIntDefault("WrongPass.MaxCount", 0); + + // We can not include the failed account login hook. However, this is a workaround to still log this. + if (sConfigMgr->GetBoolDefault("Additional.IP.Based.Login.Logging", false)) + { + PreparedStatement* logstmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_FALP_IP_LOGGING); + logstmt->setString(0, _login); + logstmt->setString(1, socket().getRemoteAddress()); + logstmt->setString(2, "Logged on failed AccountLogin due wrong password"); + + LoginDatabase.Execute(logstmt); + } + if (MaxWrongPassCount > 0) { //Increment number of failed logins by one and if it reaches the limit temporarily ban that account or IP - PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_FAILEDLOGINS); + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_FAILEDLOGINS); stmt->setString(0, _login); LoginDatabase.Execute(stmt); @@ -779,7 +791,7 @@ bool AuthSocket::_HandleReconnectChallenge() socket().recv((char *)&buf[0], 4); - EndianConvert(*((uint16*)(buf[0]))); + EndianConvertPtr<uint16>(&buf[0]); uint16 remaining = ((sAuthLogonChallenge_C *)&buf[0])->size; TC_LOG_DEBUG("server.authserver", "[ReconnectChallenge] got header, body is %#04x bytes", remaining); diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index 83edf9669ac..b7dee9ac08b 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -148,6 +148,13 @@ LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth" LoginDatabase.WorkerThreads = 1 # +# Wrong.Password.Login.Logging +# Description: Additionally log attempted wrong password logging +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Wrong.Password.Login.Logging = 0 +# ################################################################################################### ################################################################################################### diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt index a83bb9dad1c..a2024bff7cb 100644 --- a/src/server/collision/CMakeLists.txt +++ b/src/server/collision/CMakeLists.txt @@ -34,6 +34,7 @@ include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Configuration ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h index 837c893f038..4b883d43613 100644 --- a/src/server/collision/Management/MMapFactory.h +++ b/src/server/collision/Management/MMapFactory.h @@ -19,11 +19,12 @@ #ifndef _MMAP_FACTORY_H #define _MMAP_FACTORY_H +#include "Define.h" #include "MMapManager.h" -#include "UnorderedMap.h" #include "DetourAlloc.h" #include "DetourNavMesh.h" #include "DetourNavMeshQuery.h" +#include <unordered_map> namespace MMAP { diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h index 8b0d42b83cd..798d0206538 100644 --- a/src/server/collision/Management/MMapManager.h +++ b/src/server/collision/Management/MMapManager.h @@ -19,16 +19,18 @@ #ifndef _MMAP_MANAGER_H #define _MMAP_MANAGER_H -#include "UnorderedMap.h" +#include "Define.h" #include "DetourAlloc.h" #include "DetourNavMesh.h" #include "DetourNavMeshQuery.h" +#include <string> +#include <unordered_map> // move map related classes namespace MMAP { - typedef UNORDERED_MAP<uint32, dtTileRef> MMapTileSet; - typedef UNORDERED_MAP<uint32, dtNavMeshQuery*> NavMeshQuerySet; + typedef std::unordered_map<uint32, dtTileRef> MMapTileSet; + typedef std::unordered_map<uint32, dtNavMeshQuery*> NavMeshQuerySet; // dummy struct to hold map's mmap data struct MMapData @@ -51,7 +53,7 @@ namespace MMAP }; - typedef UNORDERED_MAP<uint32, MMapData*> MMapDataSet; + typedef std::unordered_map<uint32, MMapData*> MMapDataSet; // singleton class // holds all all access to mmap loading unloading and meshes diff --git a/src/server/collision/Management/VMapManager2.h b/src/server/collision/Management/VMapManager2.h index abddd5d7cc3..711025e67c0 100644 --- a/src/server/collision/Management/VMapManager2.h +++ b/src/server/collision/Management/VMapManager2.h @@ -19,9 +19,9 @@ #ifndef _VMAPMANAGER2_H #define _VMAPMANAGER2_H -#include "IVMapManager.h" -#include "Dynamic/UnorderedMap.h" #include "Define.h" +#include "IVMapManager.h" +#include <unordered_map> #include <ace/Thread_Mutex.h> //=========================================================== @@ -63,8 +63,8 @@ namespace VMAP int iRefCount; }; - typedef UNORDERED_MAP<uint32, StaticMapTree*> InstanceTreeMap; - typedef UNORDERED_MAP<std::string, ManagedModel> ModelFileMap; + typedef std::unordered_map<uint32, StaticMapTree*> InstanceTreeMap; + typedef std::unordered_map<std::string, ManagedModel> ModelFileMap; class VMapManager2 : public IVMapManager { diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index bb57079c389..d592d795125 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -157,8 +157,7 @@ namespace VMAP { float maxDist = (pos2 - pos1).magnitude(); // return false if distance is over max float, in case of cheater teleporting to the end of the universe - if (maxDist == std::numeric_limits<float>::max() || - maxDist == std::numeric_limits<float>::infinity()) + if (maxDist == std::numeric_limits<float>::max() || !std::isfinite(maxDist)) return false; // valid map coords should *never ever* produce float overflow, but this would produce NaNs too diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h index 90d61cbb88b..05351b74019 100644 --- a/src/server/collision/Maps/MapTree.h +++ b/src/server/collision/Maps/MapTree.h @@ -20,8 +20,8 @@ #define _MAPTREE_H #include "Define.h" -#include "Dynamic/UnorderedMap.h" #include "BoundingIntervalHierarchy.h" +#include <unordered_map> namespace VMAP { @@ -39,8 +39,8 @@ namespace VMAP class StaticMapTree { - typedef UNORDERED_MAP<uint32, bool> loadedTileMap; - typedef UNORDERED_MAP<uint32, uint32> loadedSpawnMap; + typedef std::unordered_map<uint32, bool> loadedTileMap; + typedef std::unordered_map<uint32, uint32> loadedSpawnMap; private: uint32 iMapID; bool iIsTiled; @@ -81,6 +81,10 @@ namespace VMAP bool isTiled() const { return iIsTiled; } uint32 numLoadedTiles() const { return iLoadedTiles.size(); } void getModelInstances(ModelInstance* &models, uint32 &count); + + private: + StaticMapTree(StaticMapTree const& right) = delete; + StaticMapTree& operator=(StaticMapTree const& right) = delete; }; struct AreaInfo diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp index d254a640279..de97943bb37 100644 --- a/src/server/collision/Models/GameObjectModel.cpp +++ b/src/server/collision/Models/GameObjectModel.cpp @@ -43,7 +43,7 @@ struct GameobjectModelData std::string name; }; -typedef UNORDERED_MAP<uint32, GameobjectModelData> ModelList; +typedef std::unordered_map<uint32, GameobjectModelData> ModelList; ModelList model_list; void LoadGameObjectModelList() @@ -130,20 +130,17 @@ bool GameObjectModel::initialize(const GameObject& go, const GameObjectDisplayIn for (int i = 0; i < 8; ++i) rotated_bounds.merge(iRotation * mdl_box.corner(i)); - this->iBound = rotated_bounds + iPos; + iBound = rotated_bounds + iPos; #ifdef SPAWN_CORNERS // test: for (int i = 0; i < 8; ++i) { Vector3 pos(iBound.corner(i)); - if (Creature* c = const_cast<GameObject&>(go).SummonCreature(24440, pos.x, pos.y, pos.z, 0, TEMPSUMMON_MANUAL_DESPAWN)) - { - c->setFaction(35); - c->SetObjectScale(0.1f); - } + go.SummonCreature(1, pos.x, pos.y, pos.z, 0, TEMPSUMMON_MANUAL_DESPAWN); } #endif + owner = &go; return true; } @@ -165,7 +162,7 @@ GameObjectModel* GameObjectModel::Create(const GameObject& go) bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool StopAtFirstHit, uint32 ph_mask) const { - if (!(phasemask & ph_mask)) + if (!(phasemask & ph_mask) || !owner->isSpawned()) return false; float time = ray.intersectionTime(iBound); @@ -184,3 +181,43 @@ bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool Sto } return hit; } + +bool GameObjectModel::Relocate(const GameObject& go) +{ + if (!iModel) + return false; + + ModelList::const_iterator it = model_list.find(go.GetDisplayId()); + if (it == model_list.end()) + return false; + + G3D::AABox mdl_box(it->second.bound); + // ignore models with no bounds + if (mdl_box == G3D::AABox::zero()) + { + VMAP_ERROR_LOG("misc", "GameObject model %s has zero bounds, loading skipped", it->second.name.c_str()); + return false; + } + + iPos = Vector3(go.GetPositionX(), go.GetPositionY(), go.GetPositionZ()); + + G3D::Matrix3 iRotation = G3D::Matrix3::fromEulerAnglesZYX(go.GetOrientation(), 0, 0); + iInvRot = iRotation.inverse(); + // transform bounding box: + mdl_box = AABox(mdl_box.low() * iScale, mdl_box.high() * iScale); + AABox rotated_bounds; + for (int i = 0; i < 8; ++i) + rotated_bounds.merge(iRotation * mdl_box.corner(i)); + + iBound = rotated_bounds + iPos; +#ifdef SPAWN_CORNERS + // test: + for (int i = 0; i < 8; ++i) + { + Vector3 pos(iBound.corner(i)); + go.SummonCreature(1, pos.x, pos.y, pos.z, 0, TEMPSUMMON_MANUAL_DESPAWN); + } +#endif + + return true; +} diff --git a/src/server/collision/Models/GameObjectModel.h b/src/server/collision/Models/GameObjectModel.h index 06a74cc6eb0..99c9b1337b3 100644 --- a/src/server/collision/Models/GameObjectModel.h +++ b/src/server/collision/Models/GameObjectModel.h @@ -44,8 +44,9 @@ class GameObjectModel /*, public Intersectable*/ float iInvScale; float iScale; VMAP::WorldModel* iModel; + GameObject const* owner; - GameObjectModel() : phasemask(0), iModel(NULL) { } + GameObjectModel() : phasemask(0), iInvScale(0), iScale(0), iModel(NULL), owner(NULL) { } bool initialize(const GameObject& go, const GameObjectDisplayInfoEntry& info); public: @@ -66,6 +67,8 @@ public: bool intersectRay(const G3D::Ray& Ray, float& MaxDist, bool StopAtFirstHit, uint32 ph_mask) const; static GameObjectModel* Create(const GameObject& go); + + bool Relocate(GameObject const& go); }; -#endif // _GAMEOBJECT_MODEL_H
\ No newline at end of file +#endif // _GAMEOBJECT_MODEL_H diff --git a/src/server/collision/Models/WorldModel.h b/src/server/collision/Models/WorldModel.h index 8778998a6b7..da1f58a79c6 100644 --- a/src/server/collision/Models/WorldModel.h +++ b/src/server/collision/Models/WorldModel.h @@ -59,7 +59,7 @@ namespace VMAP bool writeToFile(FILE* wf); static bool readFromFile(FILE* rf, WmoLiquid* &liquid); private: - WmoLiquid(): iTilesX(0), iTilesY(0), iType(0), iHeight(0), iFlags(0) { } + WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(NULL), iFlags(NULL) { } uint32 iTilesX; //!< number of tiles in x direction, each uint32 iTilesY; G3D::Vector3 iCorner; //!< the lower corner @@ -74,10 +74,10 @@ namespace VMAP class GroupModel { public: - GroupModel(): iMogpFlags(0), iGroupWMOID(0), iLiquid(0) { } + GroupModel() : iBound(), iMogpFlags(0), iGroupWMOID(0), iLiquid(NULL) { } GroupModel(const GroupModel &other); GroupModel(uint32 mogpFlags, uint32 groupWMOID, const G3D::AABox &bound): - iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(0) { } + iBound(bound), iMogpFlags(mogpFlags), iGroupWMOID(groupWMOID), iLiquid(NULL) { } ~GroupModel() { delete iLiquid; } //! pass mesh data to object and create BIH. Passed vectors get get swapped with old geometry! diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 943919451a9..27144728a3e 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -151,7 +151,7 @@ void CasterAI::UpdateAI(uint32 diff) events.Update(diff); - if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me)) + if (me->GetVictim() && me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me)) { me->InterruptNonMeleeSpells(false); return; diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index d6e749b942a..8032568434f 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -86,10 +86,11 @@ void PetAI::UpdateAI(uint32 diff) else m_updateAlliesTimer -= diff; - if (me->GetVictim() && me->GetVictim()->IsAlive()) + if (me->GetVictim() && me->EnsureVictim()->IsAlive()) { // is only necessary to stop casting, the pet must not exit combat - if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me)) + if (!me->GetCurrentSpell(CURRENT_CHANNELED_SPELL) && // ignore channeled spells (Pin, Seduction) + me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me)) { me->InterruptNonMeleeSpells(false); return; @@ -182,7 +183,11 @@ void PetAI::UpdateAI(uint32 diff) } if (spellInfo->HasEffect(SPELL_EFFECT_JUMP_DEST)) + { + if (!spellUsed) + delete spell; continue; // Pets must only jump to target + } // No enemy, check friendly if (!spellUsed) @@ -345,7 +350,7 @@ void PetAI::OwnerAttackedBy(Unit* attacker) return; // Prevent pet from disengaging from current target - if (me->GetVictim() && me->GetVictim()->IsAlive()) + if (me->GetVictim() && me->EnsureVictim()->IsAlive()) return; // Continue to evaluate and attack if necessary @@ -366,7 +371,7 @@ void PetAI::OwnerAttacked(Unit* target) return; // Prevent pet from disengaging from current target - if (me->GetVictim() && me->GetVictim()->IsAlive()) + if (me->GetVictim() && me->EnsureVictim()->IsAlive()) return; // Continue to evaluate and attack if necessary @@ -459,9 +464,6 @@ void PetAI::DoAttack(Unit* target, bool chase) if (me->Attack(target, true)) { - if (Unit* owner = me->GetOwner()) - owner->SetInCombatWith(target); - // Play sound to let the player know the pet is attacking something it picked on its own if (me->HasReactState(REACT_AGGRESSIVE) && !me->GetCharmInfo()->IsCommandAttack()) me->SendPetAIReaction(me->GetGUID()); @@ -627,7 +629,7 @@ void PetAI::AttackedBy(Unit* attacker) return; // Prevent pet from disengaging from current target - if (me->GetVictim() && me->GetVictim()->IsAlive()) + if (me->GetVictim() && me->EnsureVictim()->IsAlive()) return; // Continue to evaluate and attack if necessary diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 8bf34527769..cb32740e068 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -28,7 +28,6 @@ void UnitAI::AttackStart(Unit* victim) { - if (victim && me->Attack(victim, true)) me->GetMotionMaster()->MoveChase(victim); } @@ -104,7 +103,7 @@ void UnitAI::DoAddAuraToAllHostilePlayers(uint32 spellid) ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (unit->GetTypeId() == TYPEID_PLAYER) me->AddAura(spellid, unit); } @@ -118,7 +117,7 @@ void UnitAI::DoCastToAllHostilePlayers(uint32 spellid, bool triggered) ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (unit->GetTypeId() == TYPEID_PLAYER) me->CastSpell(unit, spellid, triggered); } diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 960d9f8903b..6ca79dc0a49 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -262,6 +262,10 @@ class UnitAI virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } virtual bool sOnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/) { return false; } virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) { } + + private: + UnitAI(UnitAI const& right) = delete; + UnitAI& operator=(UnitAI const& right) = delete; }; class PlayerAI : public UnitAI diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 07c75eb424f..ac9de00cd10 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -43,6 +43,11 @@ void CreatureAI::Talk(uint8 id, WorldObject const* whisperTarget /*= NULL*/) sCreatureTextMgr->SendChat(me, id, whisperTarget); } +void CreatureAI::TalkToMap(uint8 id, WorldObject const* whisperTarget /*= NULL*/) +{ + sCreatureTextMgr->SendChat(me, id, whisperTarget, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); +} + void CreatureAI::DoZoneInCombat(Creature* creature /*= NULL*/, float maxRangeToNearestTarget /* = 50.0f*/) { if (!creature) @@ -252,15 +257,13 @@ Creature* CreatureAI::DoSummon(uint32 entry, const Position& pos, uint32 despawn Creature* CreatureAI::DoSummon(uint32 entry, WorldObject* obj, float radius, uint32 despawnTime, TempSummonType summonType) { - Position pos; - obj->GetRandomNearPosition(pos, radius); + Position pos = obj->GetRandomNearPosition(radius); return me->SummonCreature(entry, pos, summonType, despawnTime); } Creature* CreatureAI::DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius, uint32 despawnTime, TempSummonType summonType) { - Position pos; - obj->GetRandomNearPosition(pos, radius); + Position pos = obj->GetRandomNearPosition(radius); pos.m_positionZ += flightZ; return me->SummonCreature(entry, pos, summonType, despawnTime); } diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 6357ac33f1e..209995d359d 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -79,6 +79,7 @@ class CreatureAI : public UnitAI public: void Talk(uint8 id, WorldObject const* whisperTarget = NULL); + void TalkToMap(uint8 id, WorldObject const* whisperTarget = NULL); explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false) { } virtual ~CreatureAI() { } diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h index 7447e290ba9..838171a544e 100644 --- a/src/server/game/AI/CreatureAIImpl.h +++ b/src/server/game/AI/CreatureAIImpl.h @@ -311,359 +311,6 @@ const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, c } } -class EventMap -{ - /** - * Internal storage type. - * Key: Time as uint32 when the event should occur. - * Value: The event data as uint32. - * - * Structure of event data: - * - Bit 0 - 15: Event Id. - * - Bit 16 - 23: Group - * - Bit 24 - 31: Phase - * - Pattern: 0xPPGGEEEE - */ - typedef std::multimap<uint32, uint32> EventStore; - - public: - EventMap() : _time(0), _phase(0) { } - - /** - * @name Reset - * @brief Removes all scheduled events and resets time and phase. - */ - void Reset() - { - _eventMap.clear(); - _time = 0; - _phase = 0; - } - - /** - * @name Update - * @brief Updates the timer of the event map. - * @param time Value to be added to time. - */ - void Update(uint32 time) - { - _time += time; - } - - /** - * @name GetTimer - * @return Current timer value. - */ - uint32 GetTimer() const - { - return _time; - } - - /** - * @name GetPhaseMask - * @return Active phases as mask. - */ - uint8 GetPhaseMask() const - { - return _phase; - } - - /** - * @name Empty - * @return True, if there are no events scheduled. - */ - bool Empty() const - { - return _eventMap.empty(); - } - - /** - * @name SetPhase - * @brief Sets the phase of the map (absolute). - * @param phase Phase which should be set. Values: 1 - 8. 0 resets phase. - */ - void SetPhase(uint8 phase) - { - if (!phase) - _phase = 0; - else if (phase <= 8) - _phase = (1 << (phase - 1)); - } - - /** - * @name AddPhase - * @brief Activates the given phase (bitwise). - * @param phase Phase which should be activated. Values: 1 - 8 - */ - void AddPhase(uint8 phase) - { - if (phase && phase <= 8) - _phase |= (1 << (phase - 1)); - } - - /** - * @name RemovePhase - * @brief Deactivates the given phase (bitwise). - * @param phase Phase which should be deactivated. Values: 1 - 8. - */ - void RemovePhase(uint8 phase) - { - if (phase && phase <= 8) - _phase &= ~(1 << (phase - 1)); - } - - /** - * @name ScheduleEvent - * @brief Creates new event entry in map. - * @param eventId The id of the new event. - * @param time The time in milliseconds until the event occurs. - * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. - * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. - */ - void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0) - { - if (group && group <= 8) - eventId |= (1 << (group + 15)); - - if (phase && phase <= 8) - eventId |= (1 << (phase + 23)); - - _eventMap.insert(EventStore::value_type(_time + time, eventId)); - } - - /** - * @name RescheduleEvent - * @brief Cancels the given event and reschedules it. - * @param eventId The id of the event. - * @param time The time in milliseconds until the event occurs. - * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. - * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. - */ - void RescheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0) - { - CancelEvent(eventId); - ScheduleEvent(eventId, time, group, phase); - } - - /** - * @name RepeatEvent - * @brief Cancels the closest event and reschedules it. - * @param time Time until the event occurs. - */ - void RepeatEvent(uint32 time) - { - if (Empty()) - return; - - uint32 eventId = _eventMap.begin()->second; - _eventMap.erase(_eventMap.begin()); - ScheduleEvent(eventId, time); - } - - /** - * @name PopEvent - * @brief Remove the first event in the map. - */ - void PopEvent() - { - if (!Empty()) - _eventMap.erase(_eventMap.begin()); - } - - /** - * @name ExecuteEvent - * @brief Returns the next event to execute and removes it from map. - * @return Id of the event to execute. - */ - uint32 ExecuteEvent() - { - while (!Empty()) - { - EventStore::iterator itr = _eventMap.begin(); - - if (itr->first > _time) - return 0; - else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase)) - _eventMap.erase(itr); - else - { - uint32 eventId = (itr->second & 0x0000FFFF); - _eventMap.erase(itr); - return eventId; - } - } - - return 0; - } - - /** - * @name GetEvent - * @brief Returns the next event to execute. - * @return Id of the event to execute. - */ - uint32 GetEvent() - { - while (!Empty()) - { - EventStore::iterator itr = _eventMap.begin(); - - if (itr->first > _time) - return 0; - else if (_phase && (itr->second & 0xFF000000) && !(itr->second & (_phase << 24))) - _eventMap.erase(itr); - else - return (itr->second & 0x0000FFFF); - } - - return 0; - } - - /** - * @name DelayEvents - * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0. - * @param delay Amount of delay. - */ - void DelayEvents(uint32 delay) - { - _time = delay < _time ? _time - delay : 0; - } - - /** - * @name DelayEvents - * @brief Delay all events of the same group. - * @param delay Amount of delay. - * @param group Group of the events. - */ - void DelayEvents(uint32 delay, uint32 group) - { - if (!group || group > 8 || Empty()) - return; - - EventStore delayed; - - for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) - { - if (itr->second & (1 << (group + 15))) - { - delayed.insert(EventStore::value_type(itr->first + delay, itr->second)); - _eventMap.erase(itr++); - } - else - ++itr; - } - - _eventMap.insert(delayed.begin(), delayed.end()); - } - - /** - * @name CancelEvent - * @brief Cancels all events of the specified id. - * @param eventId Event id to cancel. - */ - void CancelEvent(uint32 eventId) - { - if (Empty()) - return; - - for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) - { - if (eventId == (itr->second & 0x0000FFFF)) - _eventMap.erase(itr++); - else - ++itr; - } - } - - /** - * @name CancelEventGroup - * @brief Cancel events belonging to specified group. - * @param group Group to cancel. - */ - void CancelEventGroup(uint32 group) - { - if (!group || group > 8 || Empty()) - return; - - for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) - { - if (itr->second & (1 << (group + 15))) - _eventMap.erase(itr++); - else - ++itr; - } - } - - /** - * @name GetNextEventTime - * @brief Returns closest occurence of specified event. - * @param eventId Wanted event id. - * @return Time of found event. - */ - uint32 GetNextEventTime(uint32 eventId) const - { - if (Empty()) - return 0; - - for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr) - if (eventId == (itr->second & 0x0000FFFF)) - return itr->first; - - return 0; - } - - /** - * @name GetNextEventTime - * @return Time of next event. - */ - uint32 GetNextEventTime() const - { - return Empty() ? 0 : _eventMap.begin()->first; - } - - /** - * @name IsInPhase - * @brief Returns wether event map is in specified phase or not. - * @param phase Wanted phase. - * @return True, if phase of event map contains specified phase. - */ - bool IsInPhase(uint8 phase) - { - return phase <= 8 && (!phase || _phase & (1 << (phase - 1))); - } - - private: - /** - * @name _time - * @brief Internal timer. - * - * This does not represent the real date/time value. - * It's more like a stopwatch: It can run, it can be stopped, - * it can be resetted and so on. Events occur when this timer - * has reached their time value. Its value is changed in the - * Update method. - */ - uint32 _time; - - /** - * @name _phase - * @brief Phase mask of the event map. - * - * Contains the phases the event map is in. Multiple - * phases from 1 to 8 can be set with SetPhase or - * AddPhase. RemovePhase deactives a phase. - */ - uint8 _phase; - - /** - * @name _eventMap - * @brief Internal event storage map. Contains the scheduled events. - * - * See typedef at the beginning of the class for more - * details. - */ - EventStore _eventMap; -}; - enum AITarget { AITARGET_SELF, diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 36c1d384693..06820b03218 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -37,7 +37,7 @@ void SummonList::DoZoneInCombat(uint32 entry) { for (StorageType::iterator i = storage_.begin(); i != storage_.end();) { - Creature* summon = Unit::GetCreature(*me, *i); + Creature* summon = ObjectAccessor::GetCreature(*me, *i); ++i; if (summon && summon->IsAIEnabled && (!entry || summon->GetEntry() == entry)) @@ -51,7 +51,7 @@ void SummonList::DespawnEntry(uint32 entry) { for (StorageType::iterator i = storage_.begin(); i != storage_.end();) { - Creature* summon = Unit::GetCreature(*me, *i); + Creature* summon = ObjectAccessor::GetCreature(*me, *i); if (!summon) i = storage_.erase(i); else if (summon->GetEntry() == entry) @@ -68,7 +68,7 @@ void SummonList::DespawnAll() { while (!storage_.empty()) { - Creature* summon = Unit::GetCreature(*me, storage_.front()); + Creature* summon = ObjectAccessor::GetCreature(*me, storage_.front()); storage_.pop_front(); if (summon) summon->DespawnOrUnsummon(); @@ -79,7 +79,7 @@ void SummonList::RemoveNotExisting() { for (StorageType::iterator i = storage_.begin(); i != storage_.end();) { - if (Unit::GetCreature(*me, *i)) + if (ObjectAccessor::GetCreature(*me, *i)) ++i; else i = storage_.erase(i); @@ -90,7 +90,7 @@ bool SummonList::HasEntry(uint32 entry) const { for (StorageType::const_iterator i = storage_.begin(); i != storage_.end(); ++i) { - Creature* summon = Unit::GetCreature(*me, *i); + Creature* summon = ObjectAccessor::GetCreature(*me, *i); if (summon && summon->GetEntry() == entry) return true; } @@ -271,7 +271,7 @@ void ScriptedAI::DoResetThreat() for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && DoGetThreat(unit)) DoModifyThreatPercent(unit, -100); } @@ -478,10 +478,7 @@ void BossAI::_JustDied() events.Reset(); summons.DespawnAll(); if (instance) - { instance->SetBossState(_bossId, DONE); - instance->SaveToDB(); - } } void BossAI::_EnterCombat() diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index cee6ba3c379..c9f7f342183 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -98,7 +98,7 @@ public: Trinity::Containers::RandomResizeList<uint64, Predicate>(listCopy, predicate, max); for (StorageType::iterator i = listCopy.begin(); i != listCopy.end(); ) { - Creature* summon = Unit::GetCreature(*me, *i++); + Creature* summon = ObjectAccessor::GetCreature(*me, *i++); if (summon && summon->IsAIEnabled) summon->AI()->DoAction(info); } diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index dcf5bd56fa6..d06f90c1aeb 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -77,7 +77,7 @@ bool npc_escortAI::AssistPlayerInCombat(Unit* who) return false; //not a player - if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) return false; //never attack friendly @@ -166,7 +166,7 @@ void npc_escortAI::JustRespawned() //add a small delay before going to first waypoint, normal in near all cases m_uiWPWaitTimer = 2500; - if (me->getFaction() != me->GetCreatureTemplate()->faction_A) + if (me->getFaction() != me->GetCreatureTemplate()->faction) me->RestoreFaction(); Reset(); diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 0fbfc2cebac..a106c98c786 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -74,7 +74,7 @@ bool FollowerAI::AssistPlayerInCombat(Unit* who) return false; //not a player - if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) return false; //never attack friendly @@ -165,8 +165,8 @@ void FollowerAI::JustRespawned() if (!IsCombatMovementAllowed()) SetCombatMovement(true); - if (me->getFaction() != me->GetCreatureTemplate()->faction_A) - me->setFaction(me->GetCreatureTemplate()->faction_A); + if (me->getFaction() != me->GetCreatureTemplate()->faction) + me->setFaction(me->GetCreatureTemplate()->faction); Reset(); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index a203aeb6b97..af47b52f500 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -47,7 +47,7 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c) me->SetWalk(false); mRun = false; - me->GetPosition(&mLastOOCPos); + mLastOOCPos = me->GetPosition(); mCanAutoAttack = true; mCanCombatMove = true; @@ -132,7 +132,7 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* /*invoker*/) if (WayPoint* wp = GetNextWayPoint()) { - me->GetPosition(&mLastOOCPos); + mLastOOCPos = me->GetPosition(); me->GetMotionMaster()->MovePoint(wp->id, wp->x, wp->y, wp->z); GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, NULL, wp->id, GetScript()->GetPathId()); } @@ -162,7 +162,7 @@ void SmartAI::PausePath(uint32 delay, bool forced) return; } mForcedPaused = forced; - me->GetPosition(&mLastOOCPos); + mLastOOCPos = me->GetPosition(); AddEscortState(SMART_ESCORT_PAUSED); mWPPauseTimer = delay; if (forced) @@ -184,7 +184,7 @@ void SmartAI::StopPath(uint32 DespawnTime, uint32 quest, bool fail) SetDespawnTime(DespawnTime); //mDespawnTime = DespawnTime; - me->GetPosition(&mLastOOCPos); + mLastOOCPos = me->GetPosition(); me->StopMoving();//force stop me->GetMotionMaster()->MoveIdle(); GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_STOPPED, NULL, mLastWP->id, GetScript()->GetPathId()); @@ -412,26 +412,12 @@ void SmartAI::MovementInform(uint32 MovementType, uint32 Data) MovepointReached(Data); } -void SmartAI::RemoveAuras() -{ - /// @fixme: duplicated logic in CreatureAI::_EnterEvadeMode (could use RemoveAllAurasExceptType) - Unit::AuraApplicationMap& appliedAuras = me->GetAppliedAuras(); - for (Unit::AuraApplicationMap::iterator iter = appliedAuras.begin(); iter != appliedAuras.end();) - { - Aura const* aura = iter->second->GetBase(); - if (!aura->IsPassive() && !aura->HasEffectType(SPELL_AURA_CONTROL_VEHICLE) && !aura->HasEffectType(SPELL_AURA_CLONE_CASTER) && aura->GetCasterGUID() != me->GetGUID()) - me->RemoveAura(iter); - else - ++iter; - } -} - void SmartAI::EnterEvadeMode() { if (!me->IsAlive() || me->IsInEvadeMode()) return; - RemoveAuras(); + me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_CLONE_CASTER); me->AddUnitState(UNIT_STATE_EVADE); me->DeleteThreatList(); @@ -451,8 +437,11 @@ void SmartAI::EnterEvadeMode() } else if (mFollowGuid) { - if (Unit* target = me->GetUnit(*me, mFollowGuid)) + if (Unit* target = ObjectAccessor::GetUnit(*me, mFollowGuid)) me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle); + + // evade is not cleared in MoveFollow, so we can't keep it + me->ClearUnitState(UNIT_STATE_EVADE); } else me->GetMotionMaster()->MoveTargetedHome(); @@ -513,7 +502,7 @@ bool SmartAI::AssistPlayerInCombat(Unit* who) return false; //not a player - if (!who->GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (!who->EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()) return false; //never attack friendly @@ -546,11 +535,11 @@ void SmartAI::JustRespawned() mDespawnState = 0; mEscortState = SMART_ESCORT_NONE; me->SetVisible(true); - if (me->getFaction() != me->GetCreatureTemplate()->faction_A) + if (me->getFaction() != me->GetCreatureTemplate()->faction) me->RestoreFaction(); - GetScript()->ProcessEventsFor(SMART_EVENT_RESPAWN); mJustReset = true; JustReachedHome(); + GetScript()->ProcessEventsFor(SMART_EVENT_RESPAWN); mFollowGuid = 0;//do not reset follower on Reset(), we need it after combat evade mFollowDist = 0; mFollowAngle = 0; @@ -586,7 +575,7 @@ void SmartAI::EnterCombat(Unit* enemy) { me->InterruptNonMeleeSpells(false); // must be before ProcessEvents GetScript()->ProcessEventsFor(SMART_EVENT_AGGRO, enemy); - me->GetPosition(&mLastOOCPos); + mLastOOCPos = me->GetPosition(); SetRun(mRun); if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == POINT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); @@ -632,10 +621,7 @@ void SmartAI::DamageTaken(Unit* doneBy, uint32& damage) { GetScript()->ProcessEventsFor(SMART_EVENT_DAMAGED, doneBy, damage); if (mInvincibilityHpLevel && (damage >= me->GetHealth() - mInvincibilityHpLevel)) - { - damage = 0; - me->SetHealth(mInvincibilityHpLevel); - } + damage = me->GetHealth() - mInvincibilityHpLevel; // damage should not be nullified, because of player damage req. } void SmartAI::HealReceived(Unit* doneBy, uint32& addhealth) @@ -958,7 +944,7 @@ class SmartTrigger : public AreaTriggerScript } }; -void AddSC_SmartSCripts() +void AddSC_SmartScripts() { new SmartTrigger(); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index dcf64b657f8..4d66b976746 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -193,8 +193,6 @@ class SmartAI : public CreatureAI } void StartDespawn() { mDespawnState = 2; } - void RemoveAuras(); - void OnSpellClick(Unit* clicker, bool& result); private: diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index bd51fe0a85b..114a48c60ca 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -38,25 +38,24 @@ #include "MoveSplineInit.h" #include "GameEventMgr.h" -class TrinityStringTextBuilder +class BroadcastTextBuilder { public: - TrinityStringTextBuilder(WorldObject* obj, ChatMsg msgtype, int32 id, uint32 language, WorldObject* target) - : _source(obj), _msgType(msgtype), _textId(id), _language(language), _target(target) - { - } + BroadcastTextBuilder(WorldObject const* obj, ChatMsg msgtype, uint32 id, WorldObject const* target, uint32 gender = GENDER_MALE) + : _source(obj), _msgType(msgtype), _textId(id), _target(target), _gender(gender) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { - std::string text = sObjectMgr->GetTrinityString(_textId, locale); - return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale); + BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId); + + return ChatHandler::BuildChatPacket(*data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _gender) : "", 0, "", locale); } - WorldObject* _source; + WorldObject const* _source; ChatMsg _msgType; - int32 _textId; - uint32 _language; - WorldObject* _target; + uint32 _textId; + WorldObject const* _target; + uint32 _gender; }; SmartScript::SmartScript() @@ -76,6 +75,7 @@ SmartScript::SmartScript() goOrigGUID = 0; mLastInvoker = 0; mScriptType = SMART_SCRIPT_TYPE_CREATURE; + isProcessingTimedActionList = false; } SmartScript::~SmartScript() @@ -261,11 +261,11 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate((*itr)->ToCreature()->GetEntry())) { - if ((*itr)->ToCreature()->getFaction() != ci->faction_A) + if ((*itr)->ToCreature()->getFaction() != ci->faction) { - (*itr)->ToCreature()->setFaction(ci->faction_A); + (*itr)->ToCreature()->setFaction(ci->faction); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u", - (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction_A); + (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction); } } } @@ -429,7 +429,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i) { - if (Unit* target = Unit::GetUnit(*me, (*i)->getUnitGuid())) + if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) { me->getThreatManager().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature guidLow %u modify threat for unit %u, value %i", @@ -488,9 +488,6 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_CAST: { - if (!me) - break; - ObjectList* targets = GetTargets(e, unit); if (!targets) break; @@ -502,31 +499,36 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!(e.action.cast.flags & SMARTCAST_AURA_NOT_PRESENT) || !(*itr)->ToUnit()->HasAura(e.action.cast.spell)) { - if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS) - me->InterruptNonMeleeSpells(false); - - if (e.action.cast.flags & SMARTCAST_COMBAT_MOVE) + if (me) { - // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed - // unless target is outside spell range, out of mana, or LOS. + if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS) + me->InterruptNonMeleeSpells(false); - bool _allowMove = false; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(e.action.cast.spell); - int32 mana = me->GetPower(POWER_MANA); + if (e.action.cast.flags & SMARTCAST_COMBAT_MOVE) + { + // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed + // unless target is outside spell range, out of mana, or LOS. + + bool _allowMove = false; + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(e.action.cast.spell); + int32 mana = me->GetPower(POWER_MANA); - if (me->GetDistance(*itr) > spellInfo->GetMaxRange(true) || - me->GetDistance(*itr) < spellInfo->GetMinRange(true) || - !me->IsWithinLOSInMap(*itr) || - mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask())) + if (me->GetDistance(*itr) > spellInfo->GetMaxRange(true) || + me->GetDistance(*itr) < spellInfo->GetMinRange(true) || + !me->IsWithinLOSInMap(*itr) || + mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask())) _allowMove = true; - CAST_AI(SmartAI, me->AI())->SetCombatMove(_allowMove); - } + CAST_AI(SmartAI, me->AI())->SetCombatMove(_allowMove); + } - me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); + me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); + } + else if (go) + go->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED)); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: Creature %u casts spell %u on target %u with castflags %u", - me->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: %s: %u casts spell %u on target %u with castflags %u", + GetLogNameForGuid(me ? me->GetGUID() : go->GetGUID()), me ? me->GetGUIDLow() : go->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); } else TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (Guid: " UI64FMTD " Entry: %u Type: %u) already has the aura", e.action.cast.spell, (*itr)->GetGUID(), (*itr)->GetEntry(), uint32((*itr)->GetTypeId())); @@ -759,7 +761,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->DoFleeToGetAssistance(); if (e.action.flee.withEmote) { - TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_FLEE, LANG_UNIVERSAL, NULL); + BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_FLEE_FOR_ASSIST, NULL, me->getGender()); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUIDLow()); @@ -972,7 +974,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToCreature()->UpdateEntry(e.action.updateTemplate.creature, e.action.updateTemplate.team ? HORDE : ALLIANCE); + (*itr)->ToCreature()->UpdateEntry(e.action.updateTemplate.creature); delete targets; break; @@ -1002,7 +1004,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->CallForHelp((float)e.action.callHelp.range); if (e.action.callHelp.withEmote) { - TrinityStringTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, LANG_CALL_FOR_HELP, LANG_UNIVERSAL, NULL); + BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP, NULL, me->getGender()); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUIDLow()); @@ -2602,7 +2604,7 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* { ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i) - if (Unit* temp = Unit::GetUnit(*me, (*i)->getUnitGuid())) + if (Unit* temp = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) l->push_back(temp); } break; @@ -2690,9 +2692,9 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui } case SMART_EVENT_TARGET_HEALTH_PCT: { - if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxHealth()) + if (!me || !me->IsInCombat() || !me->GetVictim() || !me->EnsureVictim()->GetMaxHealth()) return; - uint32 perc = (uint32)me->GetVictim()->GetHealthPct(); + uint32 perc = (uint32)me->EnsureVictim()->GetHealthPct(); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->GetVictim()); @@ -2710,9 +2712,9 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui } case SMART_EVENT_TARGET_MANA_PCT: { - if (!me || !me->IsInCombat() || !me->GetVictim() || !me->GetVictim()->GetMaxPower(POWER_MANA)) + if (!me || !me->IsInCombat() || !me->GetVictim() || !me->EnsureVictim()->GetMaxPower(POWER_MANA)) return; - uint32 perc = uint32(100.0f * me->GetVictim()->GetPower(POWER_MANA) / me->GetVictim()->GetMaxPower(POWER_MANA)); + uint32 perc = uint32(100.0f * me->EnsureVictim()->GetPower(POWER_MANA) / me->EnsureVictim()->GetMaxPower(POWER_MANA)); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->GetVictim()); @@ -2792,7 +2794,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui { if (!me || !me->GetVictim()) return; - uint32 count = me->GetVictim()->GetAuraCount(e.event.aura.spell); + uint32 count = me->EnsureVictim()->GetAuraCount(e.event.aura.spell); if (count < e.event.aura.count) return; ProcessTimedAction(e, e.event.aura.repeatMin, e.event.aura.repeatMax); @@ -3117,6 +3119,68 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui ProcessTimedAction(e, e.event.friendlyHealthPct.repeatMin, e.event.friendlyHealthPct.repeatMax, target); break; } + case SMART_EVENT_DISTANCE_CREATURE: + { + if (!me) + return; + + WorldObject* creature = NULL; + + if (e.event.distance.guid != 0) + { + creature = FindCreatureNear(me, e.event.distance.guid); + + if (!creature) + return; + + if (!me->IsInRange(creature, 0, (float)e.event.distance.dist)) + return; + } + else if (e.event.distance.entry != 0) + { + std::list<Creature*> list; + me->GetCreatureListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist); + + if (list.size() > 0) + creature = list.front(); + } + + if (creature) + ProcessTimedAction(e, e.event.distance.repeat, e.event.distance.repeat); + + break; + } + case SMART_EVENT_DISTANCE_GAMEOBJECT: + { + if (!me) + return; + + WorldObject* gameobject = NULL; + + if (e.event.distance.guid != 0) + { + gameobject = FindGameObjectNear(me, e.event.distance.guid); + + if (!gameobject) + return; + + if (!me->IsInRange(gameobject, 0, (float)e.event.distance.dist)) + return; + } + else if (e.event.distance.entry != 0) + { + std::list<GameObject*> list; + me->GetGameObjectListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist); + + if (list.size() > 0) + gameobject = list.front(); + } + + if (gameobject) + ProcessTimedAction(e, e.event.distance.repeat, e.event.distance.repeat); + + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessEvent: Unhandled Event type %u", e.GetEventType()); break; @@ -3137,6 +3201,10 @@ void SmartScript::InitTimer(SmartScriptHolder& e) case SMART_EVENT_OOC_LOS: RecalcTimer(e, e.event.los.cooldownMin, e.event.los.cooldownMax); break; + case SMART_EVENT_DISTANCE_CREATURE: + case SMART_EVENT_DISTANCE_GAMEOBJECT: + RecalcTimer(e, e.event.distance.repeat, e.event.distance.repeat); + break; default: e.active = true; break; @@ -3197,6 +3265,8 @@ void SmartScript::UpdateTimer(SmartScriptHolder& e, uint32 const diff) case SMART_EVENT_TARGET_BUFFED: case SMART_EVENT_IS_BEHIND_TARGET: case SMART_EVENT_FRIENDLY_HEALTH_PCT: + case SMART_EVENT_DISTANCE_CREATURE: + case SMART_EVENT_DISTANCE_GAMEOBJECT: { ProcessEvent(e); if (e.GetScriptType() == SMART_SCRIPT_TYPE_TIMED_ACTIONLIST) @@ -3253,6 +3323,7 @@ void SmartScript::OnUpdate(uint32 const diff) bool needCleanup = true; if (!mTimedActionList.empty()) { + isProcessingTimedActionList = true; for (SmartAIEventList::iterator i = mTimedActionList.begin(); i != mTimedActionList.end(); ++i) { if ((*i).enableTimed) @@ -3261,6 +3332,8 @@ void SmartScript::OnUpdate(uint32 const diff) needCleanup = false; } } + + isProcessingTimedActionList = false; } if (needCleanup) mTimedActionList.clear(); @@ -3391,16 +3464,10 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at) void SmartScript::OnMoveInLineOfSight(Unit* who) { - ProcessEventsFor(SMART_EVENT_OOC_LOS, who); - if (!me) return; - if (me->GetVictim()) - return; - - ProcessEventsFor(SMART_EVENT_IC_LOS, who); - + ProcessEventsFor(me->IsInCombat() ? SMART_EVENT_IC_LOS : SMART_EVENT_OOC_LOS, who); } /* @@ -3502,6 +3569,14 @@ Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry) { + //do NOT clear mTimedActionList if it's being iterated because it will invalidate the iterator and delete + // any SmartScriptHolder contained like the "e" parameter passed to this function + if (isProcessingTimedActionList) + { + TC_LOG_ERROR("scripts.ai", "Entry %d SourceType %u Event %u Action %u is trying to overwrite timed action list from a timed action, this is not allowed!.", e.entryOrGuid, e.GetScriptType(), e.GetEventType(), e.GetActionType()); + return; + } + mTimedActionList.clear(); mTimedActionList = sSmartScriptMgr->GetScript(entry, SMART_SCRIPT_TYPE_TIMED_ACTIONLIST); if (mTimedActionList.empty()) diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 2e1068d1bff..b83222dc263 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -118,7 +118,7 @@ class SmartScript smart = false; if (!smart) - TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action skipped to prevent crash.", c ? c->GetDBTableGUIDLow() : (me ? me->GetDBTableGUIDLow() : 0), c ? c->GetEntry() : (me ? me->GetEntry() : 0)); + TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action called by Creature (GUID: %u Entry: %u) skipped to prevent crash.", c ? c->GetDBTableGUIDLow() : 0, c ? c->GetEntry() : 0, me ? me->GetDBTableGUIDLow() : 0, me ? me->GetEntry() : 0); return smart; } @@ -132,7 +132,7 @@ class SmartScript if (!go || go->GetAIName() != "SmartGameObjectAI") smart = false; if (!smart) - TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action skipped to prevent crash.", g ? g->GetDBTableGUIDLow() : (go ? go->GetDBTableGUIDLow() : 0), g ? g->GetEntry() : (go ? go->GetEntry() : 0)); + TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action called by GameObject (GUID: %u Entry: %u) skipped to prevent crash.", g ? g->GetDBTableGUIDLow() : 0, g ? g->GetEntry() : 0, go ? go->GetDBTableGUIDLow() : 0, go ? go->GetEntry() : 0); return smart; } @@ -222,6 +222,7 @@ class SmartScript SmartAIEventList mEvents; SmartAIEventList mInstallEvents; SmartAIEventList mTimedActionList; + bool isProcessingTimedActionList; Creature* me; uint64 meOrigGUID; GameObject* go; @@ -230,7 +231,7 @@ class SmartScript SmartScriptType mScriptType; uint32 mEventPhase; - UNORDERED_MAP<int32, int32> mStoredDecimals; + std::unordered_map<int32, int32> mStoredDecimals; uint32 mPathId; SmartAIEventList mStoredEvents; std::list<uint32>mRemIDs; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index d912de2a72c..2e8453904a1 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -37,7 +37,7 @@ void SmartWaypointMgr::LoadFromDB() { uint32 oldMSTime = getMSTime(); - for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) + for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) { for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr) delete pathItr->second; @@ -96,7 +96,7 @@ void SmartWaypointMgr::LoadFromDB() SmartWaypointMgr::~SmartWaypointMgr() { - for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) + for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) { for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr) delete pathItr->second; @@ -583,6 +583,56 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } break; + case SMART_EVENT_DISTANCE_CREATURE: + if (e.event.distance.guid == 0 && e.event.distance.entry == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE did not provide creature guid or entry, skipped."); + return false; + } + + if (e.event.distance.guid != 0 && e.event.distance.entry != 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE provided both an entry and guid, skipped."); + return false; + } + + if (e.event.distance.guid != 0 && !sObjectMgr->GetCreatureData(e.event.distance.guid)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE using invalid creature guid %u, skipped.", e.event.distance.guid); + return false; + } + + if (e.event.distance.entry != 0 && !sObjectMgr->GetCreatureTemplate(e.event.distance.entry)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE using invalid creature entry %u, skipped.", e.event.distance.entry); + return false; + } + break; + case SMART_EVENT_DISTANCE_GAMEOBJECT: + if (e.event.distance.guid == 0 && e.event.distance.entry == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT did not provide gameobject guid or entry, skipped."); + return false; + } + + if (e.event.distance.guid != 0 && e.event.distance.entry != 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT provided both an entry and guid, skipped."); + return false; + } + + if (e.event.distance.guid != 0 && !sObjectMgr->GetGOData(e.event.distance.guid)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT using invalid gameobject guid %u, skipped.", e.event.distance.guid); + return false; + } + + if (e.event.distance.entry != 0 && !sObjectMgr->GetGameObjectTemplate(e.event.distance.entry)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT using invalid gameobject entry %u, skipped.", e.event.distance.entry); + return false; + } + break; case SMART_EVENT_GO_STATE_CHANGED: case SMART_EVENT_GO_EVENT_INFORM: case SMART_EVENT_TIMED_EVENT_TRIGGERED: @@ -887,6 +937,12 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; break; } + case SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST: + { + if (!IsMinMaxValid(e, e.action.randTimedActionList.entry1, e.action.randTimedActionList.entry2)) + return false; + break; + } case SMART_ACTION_SET_POWER: case SMART_ACTION_ADD_POWER: case SMART_ACTION_REMOVE_POWER: @@ -934,6 +990,24 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; } + case SMART_ACTION_EQUIP: + { + if (e.GetScriptType() == SMART_SCRIPT_TYPE_CREATURE) + { + int8 equipId = (int8)e.action.equip.entry; + + if (equipId) + { + EquipmentInfo const* einfo = sObjectMgr->GetEquipmentInfo(e.entryOrGuid, equipId); + if (!einfo) + { + TC_LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_EQUIP uses non-existent equipment info id %u for creature %u, skipped.", equipId, e.entryOrGuid); + return false; + } + } + } + break; + } case SMART_ACTION_FOLLOW: case SMART_ACTION_SET_ORIENTATION: case SMART_ACTION_STORE_TARGET_LIST: @@ -970,7 +1044,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_MOVE_TO_POS: case SMART_ACTION_RESPAWN_TARGET: case SMART_ACTION_CLOSE_GOSSIP: - case SMART_ACTION_EQUIP: case SMART_ACTION_TRIGGER_TIMED_EVENT: case SMART_ACTION_REMOVE_TIMED_EVENT: case SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT: @@ -986,7 +1059,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SIMPLE_TALK: case SMART_ACTION_CROSS_CAST: case SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST: - case SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST: case SMART_ACTION_RANDOM_MOVE: case SMART_ACTION_SET_UNIT_FIELD_BYTES_1: case SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 265df8e2ac4..3d14b8f69e9 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -165,8 +165,10 @@ enum SMART_EVENT SMART_EVENT_ACTION_DONE = 72, // eventId (SharedDefines.EventId) SMART_EVENT_ON_SPELLCLICK = 73, // clicker (unit) SMART_EVENT_FRIENDLY_HEALTH_PCT = 74, // minHpPct, maxHpPct, repeatMin, repeatMax + SMART_EVENT_DISTANCE_CREATURE = 75, // guid, entry, distance, repeat + SMART_EVENT_DISTANCE_GAMEOBJECT = 76, // guid, entry, distance, repeat - SMART_EVENT_END = 75 + SMART_EVENT_END = 77 }; struct SmartEvent @@ -388,6 +390,14 @@ struct SmartEvent struct { + uint32 guid; + uint32 entry; + uint32 dist; + uint32 repeat; + } distance; + + struct + { uint32 param1; uint32 param2; uint32 param3; @@ -442,7 +452,7 @@ enum SMART_ACTION SMART_ACTION_CALL_KILLEDMONSTER = 33, // CreatureId, SMART_ACTION_SET_INST_DATA = 34, // Field, Data SMART_ACTION_SET_INST_DATA64 = 35, // Field, - SMART_ACTION_UPDATE_TEMPLATE = 36, // Entry, Team + SMART_ACTION_UPDATE_TEMPLATE = 36, // Entry SMART_ACTION_DIE = 37, // No Params SMART_ACTION_SET_IN_COMBAT_WITH_ZONE = 38, // No Params SMART_ACTION_CALL_FOR_HELP = 39, // Radius, With Emote @@ -691,7 +701,6 @@ struct SmartAction struct { uint32 creature; - uint32 team; } updateTemplate; struct @@ -1220,7 +1229,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_REACHED_HOME, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_RECEIVE_EMOTE, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_HAS_AURA, SMART_SCRIPT_TYPE_MASK_CREATURE }, - {SMART_EVENT_TARGET_BUFFED, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, + {SMART_EVENT_TARGET_BUFFED, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_RESET, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_IC_LOS, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_PASSENGER_BOARDED, SMART_SCRIPT_TYPE_MASK_CREATURE }, @@ -1271,6 +1280,8 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_ACTION_DONE, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_ON_SPELLCLICK, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_DISTANCE_CREATURE, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_DISTANCE_GAMEOBJECT, SMART_SCRIPT_TYPE_MASK_CREATURE }, }; enum SmartEventFlags @@ -1327,7 +1338,7 @@ struct SmartScriptHolder bool enableTimed; }; -typedef UNORDERED_MAP<uint32, WayPoint*> WPPath; +typedef std::unordered_map<uint32, WayPoint*> WPPath; typedef std::list<WorldObject*> ObjectList; typedef std::list<uint64> GuidList; @@ -1381,7 +1392,7 @@ public: delete m_guidList; } }; -typedef UNORDERED_MAP<uint32, ObjectGuidList*> ObjectListMap; +typedef std::unordered_map<uint32, ObjectGuidList*> ObjectListMap; class SmartWaypointMgr { @@ -1400,14 +1411,14 @@ class SmartWaypointMgr } private: - UNORDERED_MAP<uint32, WPPath*> waypoint_map; + std::unordered_map<uint32, WPPath*> waypoint_map; }; // all events for a single entry typedef std::vector<SmartScriptHolder> SmartAIEventList; // all events for all entries / guids -typedef UNORDERED_MAP<int32, SmartAIEventList> SmartAIEventMap; +typedef std::unordered_map<int32, SmartAIEventList> SmartAIEventMap; // Helper Stores typedef std::map<uint32 /*entry*/, std::pair<uint32 /*spellId*/, SpellEffIndex /*effIndex*/> > CacheSpellContainer; diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 8a5c6937ca0..ff30fe7ba35 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -21,6 +21,7 @@ #include "DatabaseEnv.h" #include "ObjectAccessor.h" #include "Player.h" +#include "ScriptMgr.h" #include "Util.h" #include "SHA1.h" #include "WorldSession.h" @@ -166,10 +167,16 @@ AccountOpResult AccountMgr::ChangePassword(uint32 accountId, std::string newPass std::string username; if (!GetName(accountId, username)) + { + sScriptMgr->OnFailedPasswordChange(accountId); return AOR_NAME_NOT_EXIST; // account doesn't exist + } if (utf8length(newPassword) > MAX_ACCOUNT_STR) + { + sScriptMgr->OnFailedPasswordChange(accountId); return AOR_PASS_TOO_LONG; + } normalizeString(username); normalizeString(newPassword); @@ -189,6 +196,7 @@ AccountOpResult AccountMgr::ChangePassword(uint32 accountId, std::string newPass LoginDatabase.Execute(stmt); + sScriptMgr->OnPasswordChange(accountId); return AOR_OK; } @@ -197,10 +205,16 @@ AccountOpResult AccountMgr::ChangeEmail(uint32 accountId, std::string newEmail) std::string username; if (!GetName(accountId, username)) + { + sScriptMgr->OnFailedEmailChange(accountId); return AOR_NAME_NOT_EXIST; // account doesn't exist + } if (utf8length(newEmail) > MAX_EMAIL_STR) + { + sScriptMgr->OnFailedEmailChange(accountId); return AOR_EMAIL_TOO_LONG; + } normalizeString(username); normalizeString(newEmail); @@ -212,6 +226,7 @@ AccountOpResult AccountMgr::ChangeEmail(uint32 accountId, std::string newEmail) LoginDatabase.Execute(stmt); + sScriptMgr->OnEmailChange(accountId); return AOR_OK; } @@ -220,10 +235,16 @@ AccountOpResult AccountMgr::ChangeRegEmail(uint32 accountId, std::string newEmai std::string username; if (!GetName(accountId, username)) + { + sScriptMgr->OnFailedEmailChange(accountId); return AOR_NAME_NOT_EXIST; // account doesn't exist + } if (utf8length(newEmail) > MAX_EMAIL_STR) + { + sScriptMgr->OnFailedEmailChange(accountId); return AOR_EMAIL_TOO_LONG; + } normalizeString(username); normalizeString(newEmail); @@ -235,6 +256,7 @@ AccountOpResult AccountMgr::ChangeRegEmail(uint32 accountId, std::string newEmai LoginDatabase.Execute(stmt); + sScriptMgr->OnEmailChange(accountId); return AOR_OK; } @@ -348,13 +370,8 @@ bool AccountMgr::normalizeString(std::string& utf8String) size_t maxLength = MAX_ACCOUNT_STR; if (!Utf8toWStr(utf8String, buffer, maxLength)) return false; -#ifdef _MSC_VER -#pragma warning(disable: 4996) -#endif + std::transform(&buffer[0], buffer+maxLength, &buffer[0], wcharToUpperOnlyLatin); -#ifdef _MSC_VER -#pragma warning(default: 4996) -#endif return WStrToUtf8(buffer, maxLength, utf8String); } @@ -522,7 +539,7 @@ bool AccountMgr::HasPermission(uint32 accountId, uint32 permissionId, uint32 rea return false; } - rbac::RBACData rbac(accountId, "", realmId); + rbac::RBACData rbac(accountId, "", realmId, GetSecurity(accountId)); rbac.LoadFromDB(); bool hasPermission = rbac.HasPermission(permissionId); diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index dc5a2768668..9ce1f9bb67a 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -517,7 +517,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_RELOAD_ALL = 611, RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT = 612, RBAC_PERM_COMMAND_RELOAD_ALL_AREA = 613, - RBAC_PERM_UNUSED_614 = 614, // unused + RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT = 614, RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP = 615, RBAC_PERM_COMMAND_RELOAD_ALL_ITEM = 616, RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES = 617, @@ -702,7 +702,7 @@ class RBACPermission { public: RBACPermission(uint32 id = 0, std::string const& name = ""): - _id(id), _name(name) { } + _id(id), _name(name), _perms() { } /// Gets the Name of the Object std::string const& GetName() const { return _name; } @@ -737,7 +737,8 @@ class RBACData { public: RBACData(uint32 id, std::string const& name, int32 realmId, uint8 secLevel = 255): - _id(id), _name(name), _realmId(realmId), _secLevel(secLevel) { } + _id(id), _name(name), _realmId(realmId), _secLevel(secLevel), + _grantedPerms(), _deniedPerms(), _globalPerms() { } /// Gets the Name of the Object std::string const& GetName() const { return _name; } diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 7d53f481fe8..302adda0c8e 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -47,22 +47,23 @@ namespace Trinity class AchievementChatBuilder { public: - AchievementChatBuilder(Player const& player, ChatMsg msgtype, int32 textId, uint32 ach_id) - : i_player(player), i_msgtype(msgtype), i_textId(textId), i_achievementId(ach_id) { } + AchievementChatBuilder(Player const* player, ChatMsg msgType, uint32 textId, uint32 achievementId) + : _player(player), _msgType(msgType), _textId(textId), _achievementId(achievementId) { } - void operator()(WorldPacket& data, LocaleConstant loc_idx) + void operator()(WorldPacket& data, LocaleConstant locale) { - std::string text = sObjectMgr->GetTrinityString(i_textId, loc_idx); - ChatHandler::BuildChatPacket(data, i_msgtype, LANG_UNIVERSAL, &i_player, &i_player, text, i_achievementId); + BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId); + + ChatHandler::BuildChatPacket(data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _player, _player, bct ? bct->GetText(locale, _player->getGender()) : "", _achievementId); } private: - Player const& i_player; - ChatMsg i_msgtype; - int32 i_textId; - uint32 i_achievementId; + Player const* _player; + ChatMsg _msgType; + int32 _textId; + uint32 _achievementId; }; -} // namespace Trinity +} // namespace Trinity bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) { @@ -97,6 +98,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS: case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL: + case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN: break; default: if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT) @@ -110,7 +112,8 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) switch (dataType) { case ACHIEVEMENT_CRITERIA_DATA_TYPE_NONE: - case ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT: + case ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT: + case ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY: return true; case ACHIEVEMENT_CRITERIA_DATA_TYPE_T_CREATURE: if (!creature.id || !sObjectMgr->GetCreatureTemplate(creature.id)) @@ -259,7 +262,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM: if (equipped_item.item_quality >= MAX_ITEM_QUALITY) { - TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: %u Type: %u) for requirement ACHIEVEMENT_CRITERIA_REQUIRE_S_EQUIPED_ITEM (%u) has unknown quality state in value1 (%u), ignored.", + TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM (%u) has unknown quality state in value1 (%u), ignored.", criteria->ID, criteria->requiredType, dataType, equipped_item.item_quality); return false; } @@ -267,7 +270,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID: if (!sMapStore.LookupEntry(map_id.mapId)) { - TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: %u Type: %u) for requirement ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID (%u) has unknown map id in value1 (%u), ignored.", + TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID (%u) has unknown map id in value1 (%u), ignored.", criteria->ID, criteria->requiredType, dataType, map_id.mapId); return false; } @@ -292,6 +295,14 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria) return false; } return true; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE: + if (!sCharTitlesStore.LookupEntry(known_title.title_id)) + { + TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE (%u) have unknown title_id in value1 (%u), ignore.", + criteria->ID, criteria->requiredType, dataType, known_title.title_id); + return false; + } + return true; default: TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) has data for non-supported data type (%u), ignored.", criteria->ID, criteria->requiredType, dataType); return false; @@ -317,7 +328,7 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un return false; return true; case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE: - if (!source || source->GetTypeId() != TYPEID_PLAYER) + if (source->GetTypeId() != TYPEID_PLAYER) return false; if (classRace.class_id && classRace.class_id != source->ToPlayer()->getClass()) return false; @@ -381,22 +392,22 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un uint32 score = bg->GetTeamScore(source->GetTeamId() == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE); return score >= bg_loss_team_score.min_score && score <= bg_loss_team_score.max_score; } - case ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT: + case ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT: { if (!source->IsInWorld()) return false; Map* map = source->GetMap(); if (!map->IsDungeon()) { - TC_LOG_ERROR("achievement", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT (%u) for achievement criteria %u for non-dungeon/non-raid map %u", - ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT, criteria_id, map->GetId()); - return false; + TC_LOG_ERROR("achievement", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT (%u) for achievement criteria %u for non-dungeon/non-raid map %u", + dataType, criteria_id, map->GetId()); + return false; } - InstanceScript* instance = ((InstanceMap*)map)->GetInstanceScript(); + InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript(); if (!instance) { - TC_LOG_ERROR("achievement", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT (%u) for achievement criteria %u for map %u but map does not have a instance script", - ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT, criteria_id, map->GetId()); + TC_LOG_ERROR("achievement", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT (%u) for achievement criteria %u for map %u but map does not have a instance script", + dataType, criteria_id, map->GetId()); return false; } return instance->CheckAchievementCriteriaMeet(criteria_id, source, target, miscvalue1); @@ -410,6 +421,25 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un } case ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID: return source->GetMapId() == map_id.mapId; + case ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY: + { + time_t birthday_start = time_t(sWorld->getIntConfig(CONFIG_BIRTHDAY_TIME)); + tm birthday_tm; + ACE_OS::localtime_r(&birthday_start, &birthday_tm); + + // exactly N birthday + birthday_tm.tm_year += birthday_login.nth_birthday; + + time_t birthday = mktime(&birthday_tm); + time_t now = sWorld->GetGameTime(); + return now <= birthday + DAY && now >= birthday; + } + case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE: + { + if (CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(known_title.title_id)) + return source->HasTitle(titleInfo->bit_index); + return false; + } default: break; } @@ -631,9 +661,9 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId())) { - Trinity::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID); - Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> say_do(say_builder); - guild->BroadcastWorker(say_do, GetPlayer()); + Trinity::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_GUILD_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID); + Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> _localizer(_builder); + guild->BroadcastWorker(_localizer, GetPlayer()); } if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) @@ -649,16 +679,10 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement) // if player is in world he can tell his friends about new achievement else if (GetPlayer()->IsInWorld()) { - CellCoord p = Trinity::ComputeCellCoord(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY()); - - Cell cell(p); - cell.SetNoCreate(); - - Trinity::AchievementChatBuilder say_builder(*GetPlayer(), CHAT_MSG_ACHIEVEMENT, LANG_ACHIEVEMENT_EARNED, achievement->ID); - Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> say_do(say_builder); - Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> > say_worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), say_do); - TypeContainerVisitor<Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> >, WorldTypeMapContainer > message(say_worker); - cell.Visit(p, message, *GetPlayer()->GetMap(), *GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY)); + Trinity::AchievementChatBuilder _builder(GetPlayer(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, achievement->ID); + Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> _localizer(_builder); + Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::AchievementChatBuilder> > _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer); + GetPlayer()->VisitNearbyWorldObject(sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _worker); } WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8); @@ -1562,6 +1586,20 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); break; } + case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN: + { + // This criteria is only called directly after login - with expected miscvalue1 == 1 + if (!miscValue1) + continue; + + // They have no proper requirements in dbc + AchievementCriteriaDataSet const* data = sAchievementMgr->GetCriteriaDataSet(achievementCriteria); + if (!data || !data->Meets(GetPlayer(), unit)) + continue; + + SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE); + break; + } // std case: not exist in DBC, not triggered in code as result case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER: @@ -1574,7 +1612,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID: case ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA: case ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK: - case ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE: break; // Not implemented yet :( } @@ -1717,6 +1754,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return progress->counter >= achievementCriteria->get_killing_blow.killCount; case ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA: return achievementCriteria->win_arena.count && progress->counter >= achievementCriteria->win_arena.count; + case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN: + return true; // handle all statistic-only criteria here case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP: @@ -2038,25 +2077,30 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) // mail if (reward->sender) { - Item* item = reward->itemId ? Item::CreateItem(reward->itemId, 1, GetPlayer()) : NULL; - - int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex(); + MailDraft draft(reward->mailTemplate); - // subject and text - std::string subject = reward->subject; - std::string text = reward->text; - if (loc_idx >= 0) + if (!reward->mailTemplate) { - if (AchievementRewardLocale const* loc = sAchievementMgr->GetAchievementRewardLocale(achievement)) + // subject and text + std::string subject = reward->subject; + std::string text = reward->text; + + int locIdx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex(); + if (locIdx >= 0) { - ObjectMgr::GetLocaleString(loc->subject, loc_idx, subject); - ObjectMgr::GetLocaleString(loc->text, loc_idx, text); + if (AchievementRewardLocale const* loc = sAchievementMgr->GetAchievementRewardLocale(achievement)) + { + ObjectMgr::GetLocaleString(loc->subject, locIdx, subject); + ObjectMgr::GetLocaleString(loc->text, locIdx, text); + } } - } - MailDraft draft(subject, text); + draft = MailDraft(subject, text); + } SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + Item* item = reward->itemId ? Item::CreateItem(reward->itemId, 1, GetPlayer()) : NULL; if (item) { // save new item before send @@ -2287,11 +2331,24 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() switch (criteria->requiredType) { - case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: // any cases - break; case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE: + case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: + case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING: + case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: + case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: + case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: + case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL: + case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS: + case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2: + case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL: + case ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN: case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE: - break; // any cases + case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: + // achievement requires db data + break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: { AchievementEntry const* achievement = sAchievementMgr->GetAchievement(criteria->referredAchievement); @@ -2304,44 +2361,22 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() continue; } - case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING: - break; // any cases - case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: // any cases - break; - case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: // any cases - break; case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA: // need skip generic cases if (criteria->additionalRequirements[0].additionalRequirement_type != ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE) continue; break; - case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: // any cases - break; - case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: - break; // any cases - case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: - break; // any cases case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE: // need skip generic cases if (criteria->do_emote.count == 0) continue; break; - case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2: - break; // any cases case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL: // skip statistics if (criteria->win_duel.duelCount == 0) continue; break; - case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: // any cases - break; case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE: // need skip generic cases if (criteria->loot_type.lootTypeCount != 1) continue; break; - case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: - break; // any cases - case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL: - break; // any cases - case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL: // any cases - break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements { @@ -2352,8 +2387,6 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() continue; break; } - case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS: - break; default: // type not use DB data, ignore continue; } @@ -2408,8 +2441,8 @@ void AchievementGlobalMgr::LoadRewards() m_achievementRewards.clear(); // need for reload case - // 0 1 2 3 4 5 6 - QueryResult result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text FROM achievement_reward"); + // 0 1 2 3 4 5 6 7 + QueryResult result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text, mailTemplate FROM achievement_reward"); if (!result) { @@ -2423,20 +2456,21 @@ void AchievementGlobalMgr::LoadRewards() { Field* fields = result->Fetch(); uint32 entry = fields[0].GetUInt32(); - const AchievementEntry* pAchievement = GetAchievement(entry); - if (!pAchievement) + AchievementEntry const* achievement = GetAchievement(entry); + if (!achievement) { TC_LOG_ERROR("sql.sql", "Table `achievement_reward` has wrong achievement (Entry: %u), ignored.", entry); continue; } AchievementReward reward; - reward.titleId[0] = fields[1].GetUInt32(); - reward.titleId[1] = fields[2].GetUInt32(); - reward.itemId = fields[3].GetUInt32(); - reward.sender = fields[4].GetUInt32(); - reward.subject = fields[5].GetString(); - reward.text = fields[6].GetString(); + reward.titleId[0] = fields[1].GetUInt32(); + reward.titleId[1] = fields[2].GetUInt32(); + reward.itemId = fields[3].GetUInt32(); + reward.sender = fields[4].GetUInt32(); + reward.subject = fields[5].GetString(); + reward.text = fields[6].GetString(); + reward.mailTemplate = fields[7].GetUInt32(); // must be title or mail at least if (!reward.titleId[0] && !reward.titleId[1] && !reward.sender) @@ -2445,7 +2479,7 @@ void AchievementGlobalMgr::LoadRewards() continue; } - if (pAchievement->requiredFaction == ACHIEVEMENT_FACTION_ANY && ((reward.titleId[0] == 0) != (reward.titleId[1] == 0))) + if (achievement->requiredFaction == ACHIEVEMENT_FACTION_ANY && (!reward.titleId[0] ^ !reward.titleId[1])) TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has title (A: %u H: %u) for only one team.", entry, reward.titleId[0], reward.titleId[1]); if (reward.titleId[0]) @@ -2487,6 +2521,20 @@ void AchievementGlobalMgr::LoadRewards() if (!reward.text.empty()) TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) does not have sender data but has mail text.", entry); + + if (reward.mailTemplate) + TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) does not have sender data but has mailTemplate.", entry); + } + + if (reward.mailTemplate) + { + if (!sMailTemplateStore.LookupEntry(reward.mailTemplate)) + { + TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has invalid mailTemplate (%u).", entry, reward.mailTemplate); + reward.mailTemplate = 0; + } + else if (!reward.subject.empty() || !reward.text.empty()) + TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has mailTemplate (%u) and mail subject/text.", entry, reward.mailTemplate); } if (reward.itemId) diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 1a6777d1055..c3a1481bb2e 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -35,8 +35,8 @@ class WorldPacket; typedef std::vector<AchievementCriteriaEntry const*> AchievementCriteriaEntryList; typedef std::vector<AchievementEntry const*> AchievementEntryList; -typedef UNORDERED_MAP<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement; -typedef UNORDERED_MAP<uint32, AchievementEntryList> AchievementListByReferencedId; +typedef std::unordered_map<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement; +typedef std::unordered_map<uint32, AchievementEntryList> AchievementListByReferencedId; struct CriteriaProgress { @@ -65,13 +65,15 @@ enum AchievementCriteriaDataType ACHIEVEMENT_CRITERIA_DATA_TYPE_S_DRUNK = 15, // drunken_state 0 (enum DrunkenState) of player ACHIEVEMENT_CRITERIA_DATA_TYPE_HOLIDAY = 16, // holiday_id 0 event in holiday time ACHIEVEMENT_CRITERIA_DATA_TYPE_BG_LOSS_TEAM_SCORE = 17, // min_score max_score player's team win bg and opposition team have team score in range - ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT = 18, // 0 0 maker instance script call for check current criteria requirements fit + ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT = 18, // 0 0 maker instance script call for check current criteria requirements fit ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19, // item_level item_quality for equipped item in slot to check item level and quality ACHIEVEMENT_CRITERIA_DATA_TYPE_MAP_ID = 20, // map_id 0 player must be on map with id in map_id - ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21 // class_id race_id + ACHIEVEMENT_CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE = 21, // class_id race_id + ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 22, // N login on day of N-th Birthday + ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE = 23 // title_id known (pvp) title, values from dbc }; -#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 22 // maximum value in AchievementCriteriaDataType enum +#define MAX_ACHIEVEMENT_CRITERIA_DATA_TYPE 24 // maximum value in AchievementCriteriaDataType enum struct AchievementCriteriaData { @@ -161,7 +163,7 @@ struct AchievementCriteriaData uint32 min_score; uint32 max_score; } bg_loss_team_score; - // ACHIEVEMENT_CRITERIA_DATA_INSTANCE_SCRIPT = 18 (no data) + // ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT = 18 (no data) // ACHIEVEMENT_CRITERIA_DATA_TYPE_S_EQUIPED_ITEM = 19 struct { @@ -173,6 +175,16 @@ struct AchievementCriteriaData { uint32 mapId; } map_id; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_NTH_BIRTHDAY = 21 + struct + { + uint32 nth_birthday; + } birthday_login; + // ACHIEVEMENT_CRITERIA_DATA_TYPE_KNOWN_TITLE = 22 + struct + { + uint32 title_id; + } known_title; // ... struct { @@ -221,9 +233,10 @@ struct AchievementReward uint32 sender; std::string subject; std::string text; + uint32 mailTemplate; }; -typedef UNORDERED_MAP<uint32, AchievementReward> AchievementRewards; +typedef std::unordered_map<uint32, AchievementReward> AchievementRewards; struct AchievementRewardLocale { @@ -231,7 +244,7 @@ struct AchievementRewardLocale std::vector<std::string> text; }; -typedef UNORDERED_MAP<uint32, AchievementRewardLocale> AchievementRewardLocales; +typedef std::unordered_map<uint32, AchievementRewardLocale> AchievementRewardLocales; struct CompletedAchievementData { @@ -239,8 +252,8 @@ struct CompletedAchievementData bool changed; }; -typedef UNORDERED_MAP<uint32, CriteriaProgress> CriteriaProgressMap; -typedef UNORDERED_MAP<uint32, CompletedAchievementData> CompletedAchievementMap; +typedef std::unordered_map<uint32, CriteriaProgress> CriteriaProgressMap; +typedef std::unordered_map<uint32, CompletedAchievementData> CompletedAchievementMap; enum ProgressType { diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 29d80f5fa6b..f4699f0519e 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -702,7 +702,7 @@ bool AuctionEntry::LoadFromDB(Field* fields) return false; } - factionTemplateId = auctioneerInfo->faction_A; + factionTemplateId = auctioneerInfo->faction; auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId); if (!auctionHouseEntry) { @@ -825,7 +825,7 @@ bool AuctionEntry::LoadFromFieldList(Field* fields) return false; } - factionTemplateId = auctioneerInfo->faction_A; + factionTemplateId = auctioneerInfo->faction; auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId); if (!auctionHouseEntry) diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 506c4bea0c5..f45fc4100de 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -145,7 +145,7 @@ class AuctionHouseMgr public: - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId); AuctionHouseObject* GetBidsMap(uint32 factionTemplateId); diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index d8674ed476b..3f9c6cf0617 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -54,7 +54,7 @@ Battlefield::Battlefield() m_uiKickAfkPlayersTimer = 1000; - m_LastResurectTimer = 30 * IN_MILLISECONDS; + m_LastResurrectTimer = 30 * IN_MILLISECONDS; m_StartGroupingTimer = 0; m_StartGrouping = false; StalkerGuid = 0; @@ -184,15 +184,15 @@ bool Battlefield::Update(uint32 diff) } - if (m_LastResurectTimer <= diff) + if (m_LastResurrectTimer <= diff) { for (uint8 i = 0; i < m_GraveyardList.size(); i++) if (GetGraveyardById(i)) m_GraveyardList[i]->Resurrect(); - m_LastResurectTimer = RESURRECTION_INTERVAL; + m_LastResurrectTimer = RESURRECTION_INTERVAL; } else - m_LastResurectTimer -= diff; + m_LastResurrectTimer -= diff; return objective_changed; } @@ -632,7 +632,7 @@ void Battlefield::RemovePlayerFromResurrectQueue(uint64 playerGuid) void Battlefield::SendAreaSpiritHealerQueryOpcode(Player* player, uint64 guid) { WorldPacket data(SMSG_AREA_SPIRIT_HEALER_TIME, 12); - uint32 time = m_LastResurectTimer; // resurrect every 30 seconds + uint32 time = m_LastResurrectTimer; // resurrect every 30 seconds data << guid << time; ASSERT(player && player->GetSession()); @@ -711,7 +711,7 @@ void BfGraveyard::Resurrect() if (Creature* spirit = m_Bf->GetCreature(m_SpiritGuide[m_ControlTeam])) spirit->CastSpell(spirit, SPELL_SPIRIT_HEAL, true); - // Resurect player + // Resurrect player player->CastSpell(player, SPELL_RESURRECTION_VISUAL, true); player->ResurrectPlayer(1.0f); player->CastSpell(player, 6962, true); @@ -781,7 +781,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, const Position& pos, TeamId t return SpawnCreature(entry, pos.m_positionX, pos.m_positionY, pos.m_positionZ, pos.m_orientation, team); } -Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team) +Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId /*team*/) { //Get map object Map* map = sMapMgr->CreateBaseMap(m_MapId); @@ -792,7 +792,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl } Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, 0, team, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o)) { TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: %u", entry); delete creature; @@ -807,9 +807,6 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: entry %u does not exist.", entry); return NULL; } - // force using DB speeds -- do we really need this? - creature->SetSpeed(MOVE_WALK, cinfo->speed_walk); - creature->SetSpeed(MOVE_RUN, cinfo->speed_run); // Set creature in world map->AddToMap(creature); diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index e0e223c9e56..296c48b0697 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -173,7 +173,7 @@ class BfGraveyard // Check if this graveyard has a spirit guide bool HasNpc(uint64 guid); - // Check if a player is in this graveyard's ressurect queue + // Check if a player is in this graveyard's resurrect queue bool HasPlayer(uint64 guid) { return m_ResurrectQueue.find(guid) != m_ResurrectQueue.end(); } // Get the graveyard's ID. @@ -285,7 +285,7 @@ class Battlefield : public ZoneScript BfGraveyard* GetGraveyardById(uint32 id) const; // Misc methods - Creature* SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team); + virtual Creature* SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team); Creature* SpawnCreature(uint32 entry, const Position& pos, TeamId team); GameObject* SpawnGameObject(uint32 entry, float x, float y, float z, float o); @@ -383,7 +383,7 @@ class Battlefield : public ZoneScript // Graveyard variables GraveyardVect m_GraveyardList; // Vector witch contain the different GY of the battle - uint32 m_LastResurectTimer; // Timer for resurect player every 30 sec + uint32 m_LastResurrectTimer; // Timer for resurrect player every 30 sec uint32 m_StartGroupingTimer; // Timer for invite players in area 15 minute before start battle bool m_StartGrouping; // bool for know if all players in area has been invited diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 7ec5a09508a..41539b9cda6 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -41,14 +41,14 @@ BattlefieldWG::~BattlefieldWG() bool BattlefieldWG::SetupBattlefield() { - InitStalker(BATTLEFIELD_WG_NPC_STALKER, WintergraspStalkerPos[0], WintergraspStalkerPos[1], WintergraspStalkerPos[2], WintergraspStalkerPos[3]); - m_TypeId = BATTLEFIELD_WG; // See enum BattlefieldTypes m_BattleId = BATTLEFIELD_BATTLEID_WG; m_ZoneId = BATTLEFIELD_WG_ZONEID; m_MapId = BATTLEFIELD_WG_MAPID; m_Map = sMapMgr->FindMap(m_MapId, 0); + InitStalker(BATTLEFIELD_WG_NPC_STALKER, WintergraspStalkerPos[0], WintergraspStalkerPos[1], WintergraspStalkerPos[2], WintergraspStalkerPos[3]); + m_MaxPlayer = sWorld->getIntConfig(CONFIG_WINTERGRASP_PLR_MAX); m_IsEnabled = sWorld->getBoolConfig(CONFIG_WINTERGRASP_ENABLE); m_MinPlayer = sWorld->getIntConfig(CONFIG_WINTERGRASP_PLR_MIN); @@ -156,8 +156,7 @@ bool BattlefieldWG::SetupBattlefield() // Spawn turrets and hide them per default for (uint8 i = 0; i < WG_MAX_TURRET; i++) { - Position towerCannonPos; - WGTurret[i].GetPosition(&towerCannonPos); + Position towerCannonPos = WGTurret[i].GetPosition(); if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TEAM_ALLIANCE)) { CanonList.insert(creature->GetGUID()); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index c54d8915a33..3a64458c48b 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -1309,8 +1309,7 @@ struct BfWGGameObjectBuilding // Spawn Turret bottom for (uint8 i = 0; i < TowerCannon[towerid].nbTowerCannonBottom; i++) { - Position turretPos; - TowerCannon[towerid].TowerCannonBottom[i].GetPosition(&turretPos); + Position turretPos = TowerCannon[towerid].TowerCannonBottom[i].GetPosition(); if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE)) { m_TowerCannonBottomList.insert(turret->GetGUID()); @@ -1335,8 +1334,7 @@ struct BfWGGameObjectBuilding // Spawn Turret top for (uint8 i = 0; i < TowerCannon[towerid].nbTurretTop; i++) { - Position towerCannonPos; - TowerCannon[towerid].TurretTop[i].GetPosition(&towerCannonPos); + Position towerCannonPos = TowerCannon[towerid].TurretTop[i].GetPosition(); if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) { m_TurretTopList.insert(turret->GetGUID()); diff --git a/src/server/game/Battlegrounds/ArenaScore.h b/src/server/game/Battlegrounds/ArenaScore.h new file mode 100644 index 00000000000..fdeb13adc3d --- /dev/null +++ b/src/server/game/Battlegrounds/ArenaScore.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITY_ARENA_SCORE_H +#define TRINITY_ARENA_SCORE_H + +#include "BattlegroundScore.h" +#include "SharedDefines.h" + +struct ArenaScore : public BattlegroundScore +{ + friend class BattlegroundBE; + friend class BattlegroundDS; + friend class BattlegroundNA; + friend class BattlegroundRL; + friend class BattlegroundRV; + + protected: + ArenaScore(uint64 playerGuid, uint32 team) : BattlegroundScore(playerGuid), TeamId(team == ALLIANCE ? 1 : 0) { } + + void AppendToPacket(WorldPacket& data) final + { + data << uint64(PlayerGuid); + + data << uint32(KillingBlows); + data << uint8(TeamId); + data << uint32(DamageDone); + data << uint32(HealingDone); + + BuildObjectivesBlock(data); + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(0); // Objectives Count + } + + // For Logging purpose + std::string ToString() const override + { + std::ostringstream stream; + stream << "Damage done: " << DamageDone << ", Healing done: " << HealingDone << ", Killing blows: " << KillingBlows; + return stream.str(); + } + + uint8 TeamId; // bgTeamId +}; + +#endif // TRINITY_ARENA_SCORE_H diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index cd9e2be4318..c977a137c2a 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -130,7 +130,7 @@ class ArenaTeam uint8 GetSlot() const { return GetSlotByType(GetType()); } static uint8 GetSlotByType(uint32 type); uint64 GetCaptain() const { return CaptainGuid; } - std::string const& GetName() const { return TeamName; } + std::string const& GetName() const { return TeamName; } const ArenaTeamStats& GetStats() const { return Stats; } uint32 GetRating() const { return Stats.Rating; } diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index dba891c96db..347db73f991 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -162,7 +162,7 @@ void ArenaTeamMgr::DistributeArenaPoints() player->ModifyArenaPoints(playerItr->second, &trans); else // Update database { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_CHAR_ARENA_POINTS); stmt->setUInt32(0, playerItr->second); stmt->setUInt32(1, playerItr->first); trans->Append(stmt); diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h index 123cbe2d41b..946824fb656 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.h +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h @@ -27,7 +27,7 @@ class ArenaTeamMgr ~ArenaTeamMgr(); public: - typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer; + typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamContainer; ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const; ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const; diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3fcfab81c73..4e077979b3e 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -16,11 +16,14 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "ArenaTeam.h" #include "ArenaTeamMgr.h" #include "Battleground.h" #include "BattlegroundMgr.h" +#include "BattlegroundScore.h" #include "Creature.h" +#include "CreatureTextMgr.h" #include "Chat.h" #include "Formulas.h" #include "GridNotifiersImpl.h" @@ -100,13 +103,13 @@ namespace Trinity int32 _arg1; int32 _arg2; }; -} // namespace Trinity +} // namespace Trinity template<class Do> void Battleground::BroadcastWorker(Do& _do) { for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) + if (Player* player = _GetPlayer(itr, "BroadcastWorker")) _do(player); } @@ -164,9 +167,6 @@ Battleground::Battleground() m_ArenaTeamIds[TEAM_ALLIANCE] = 0; m_ArenaTeamIds[TEAM_HORDE] = 0; - m_ArenaTeamRatingChanges[TEAM_ALLIANCE] = 0; - m_ArenaTeamRatingChanges[TEAM_HORDE] = 0; - m_ArenaTeamMMR[TEAM_ALLIANCE] = 0; m_ArenaTeamMMR[TEAM_HORDE] = 0; @@ -268,7 +268,7 @@ void Battleground::Update(uint32 diff) } else { - _ProcessRessurect(diff); + _ProcessResurrect(diff); if (sBattlegroundMgr->GetPrematureFinishTime() && (GetPlayersCountByTeam(ALLIANCE) < GetMinPlayersPerTeam() || GetPlayersCountByTeam(HORDE) < GetMinPlayersPerTeam())) _ProcessProgress(diff); else if (m_PrematureCountDown) @@ -300,12 +300,11 @@ inline void Battleground::_CheckSafePositions(uint32 diff) { m_ValidStartPositionTimer = 0; - Position pos; float x, y, z, o; for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(itr->first)) { - player->GetPosition(&pos); + Position pos = player->GetPosition(); GetTeamStartLoc(player->GetBGTeam(), x, y, z, o); if (pos.GetExactDistSq(x, y, z) > maxDist) { @@ -334,10 +333,10 @@ inline void Battleground::_ProcessOfflineQueue() } } -inline void Battleground::_ProcessRessurect(uint32 diff) +inline void Battleground::_ProcessResurrect(uint32 diff) { // ********************************************************* - // *** BATTLEGROUND RESSURECTION SYSTEM *** + // *** BATTLEGROUND RESURRECTION SYSTEM *** // ********************************************************* // this should be handled by spell system m_LastResurrectTime += diff; @@ -643,6 +642,11 @@ void Battleground::SendPacketToTeam(uint32 TeamID, WorldPacket* packet, Player* } } +void Battleground::SendChatMessage(Creature* source, uint8 textId, WorldObject* target /*= NULL*/) +{ + sCreatureTextMgr->SendChat(source, textId, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); +} + void Battleground::PlaySoundToAll(uint32 SoundID) { WorldPacket data; @@ -751,7 +755,7 @@ void Battleground::EndBattleground(uint32 winner) } else { - SetWinner(3); + SetWinner(3); // weird } SetStatus(STATUS_WAIT_LEAVE); @@ -766,49 +770,52 @@ void Battleground::EndBattleground(uint32 winner) if (winnerArenaTeam && loserArenaTeam && winnerArenaTeam != loserArenaTeam) { + loserTeamRating = loserArenaTeam->GetRating(); + loserMatchmakerRating = GetArenaMatchmakerRating(GetOtherTeam(winner)); + winnerTeamRating = winnerArenaTeam->GetRating(); + winnerMatchmakerRating = GetArenaMatchmakerRating(winner); + if (winner != WINNER_NONE) { - loserTeamRating = loserArenaTeam->GetRating(); - loserMatchmakerRating = GetArenaMatchmakerRating(GetOtherTeam(winner)); - winnerTeamRating = winnerArenaTeam->GetRating(); - winnerMatchmakerRating = GetArenaMatchmakerRating(winner); winnerMatchmakerChange = winnerArenaTeam->WonAgainst(winnerMatchmakerRating, loserMatchmakerRating, winnerChange); loserMatchmakerChange = loserArenaTeam->LostAgainst(loserMatchmakerRating, winnerMatchmakerRating, loserChange); TC_LOG_DEBUG("bg.arena", "match Type: %u --- Winner: old rating: %u, rating gain: %d, old MMR: %u, MMR gain: %d --- Loser: old rating: %u, rating loss: %d, old MMR: %u, MMR loss: %d ---", m_ArenaType, winnerTeamRating, winnerChange, winnerMatchmakerRating, winnerMatchmakerChange, loserTeamRating, loserChange, loserMatchmakerRating, loserMatchmakerChange); SetArenaMatchmakerRating(winner, winnerMatchmakerRating + winnerMatchmakerChange); SetArenaMatchmakerRating(GetOtherTeam(winner), loserMatchmakerRating + loserMatchmakerChange); - SetArenaTeamRatingChangeForTeam(winner, winnerChange); - SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loserChange); + + // bg team that the client expects is different to TeamId + // alliance 1, horde 0 + uint8 winnerTeam = winner == ALLIANCE ? WINNER_ALLIANCE : WINNER_HORDE; + uint8 loserTeam = winner == ALLIANCE ? WINNER_HORDE : WINNER_ALLIANCE; + + _arenaTeamScores[winnerTeam].Assign(winnerChange, winnerMatchmakerRating, winnerArenaTeam->GetName()); + _arenaTeamScores[loserTeam].Assign(loserChange, loserMatchmakerRating, loserArenaTeam->GetName()); + TC_LOG_DEBUG("bg.arena", "Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE], winnerArenaTeam->GetId(), winnerChange, loserChange); if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO)) - for (Battleground::BattlegroundScoreMap::const_iterator itr = GetPlayerScoresBegin(); itr != GetPlayerScoresEnd(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(itr->first)) + for (auto const& score : PlayerScores) + if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(score.first, 0, HIGHGUID_PLAYER))) { - TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: " UI64FMTD ", Team: %d, IP: %s): %u damage, %u healing, %u killing blows", - m_ArenaType, player->GetName().c_str(), itr->first, player->GetArenaTeamId(m_ArenaType == 5 ? 2 : m_ArenaType == 3), - player->GetSession()->GetRemoteAddress().c_str(), itr->second->DamageDone, itr->second->HealingDone, - itr->second->KillingBlows); + TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: %u, Team: %d, IP: %s): %s", + m_ArenaType, player->GetName().c_str(), score.first, player->GetArenaTeamId(m_ArenaType == 5 ? 2 : m_ArenaType == 3), + player->GetSession()->GetRemoteAddress().c_str(), score.second->ToString().c_str()); } } // Deduct 16 points from each teams arena-rating if there are no winners after 45+2 minutes else { - SetArenaTeamRatingChangeForTeam(ALLIANCE, ARENA_TIMELIMIT_POINTS_LOSS); - SetArenaTeamRatingChangeForTeam(HORDE, ARENA_TIMELIMIT_POINTS_LOSS); + _arenaTeamScores[WINNER_ALLIANCE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, winnerMatchmakerRating, winnerArenaTeam->GetName()); + _arenaTeamScores[WINNER_HORDE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, loserMatchmakerRating, loserArenaTeam->GetName()); + winnerArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS); loserArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS); } } - else - { - SetArenaTeamRatingChangeForTeam(ALLIANCE, 0); - SetArenaTeamRatingChangeForTeam(HORDE, 0); - } } WorldPacket pvpLogData; - sBattlegroundMgr->BuildPvpLogDataPacket(&pvpLogData, this); + BuildPvPLogDataPacket(pvpLogData); BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetTypeID(), GetArenaType()); @@ -953,7 +960,7 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac participant = true; } - BattlegroundScoreMap::iterator itr2 = PlayerScores.find(guid); + BattlegroundScoreMap::iterator itr2 = PlayerScores.find(GUID_LOPART(guid)); if (itr2 != PlayerScores.end()) { delete itr2->second; // delete player's score @@ -1094,6 +1101,9 @@ void Battleground::Reset() delete itr->second; PlayerScores.clear(); + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].Reset(); + ResetBGSubclass(); } @@ -1344,47 +1354,47 @@ bool Battleground::HasFreeSlots() const return GetPlayersSize() < GetMaxPlayers(); } -void Battleground::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) +void Battleground::BuildPvPLogDataPacket(WorldPacket& data) { - //this procedure is called from virtual function implemented in bg subclass - BattlegroundScoreMap::const_iterator itr = PlayerScores.find(Source->GetGUID()); - if (itr == PlayerScores.end()) // player not found... - return; + uint8 type = (isArena() ? 1 : 0); + + data.Initialize(MSG_PVP_LOG_DATA, 1 + 1 + 4 + 40 * GetPlayerScoresSize()); + data << uint8(type); // type (battleground = 0 / arena = 1) - switch (type) + if (type) // arena { - case SCORE_KILLING_BLOWS: // Killing blows - itr->second->KillingBlows += value; - break; - case SCORE_DEATHS: // Deaths - itr->second->Deaths += value; - break; - case SCORE_HONORABLE_KILLS: // Honorable kills - itr->second->HonorableKills += value; - break; - case SCORE_BONUS_HONOR: // Honor bonus - // do not add honor in arenas - if (isBattleground()) - { - // reward honor instantly - if (doAddHonor) - Source->RewardHonor(NULL, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false - else - itr->second->BonusHonor += value; - } - break; - // used only in EY, but in MSG_PVP_LOG_DATA opcode - case SCORE_DAMAGE_DONE: // Damage Done - itr->second->DamageDone += value; - break; - case SCORE_HEALING_DONE: // Healing Done - itr->second->HealingDone += value; - break; - default: - TC_LOG_ERROR("bg.battleground", "Battleground::UpdatePlayerScore: unknown score type (%u) for BG (map: %u, instance id: %u)!", - type, m_MapId, m_InstanceID); - break; + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].BuildRatingInfoBlock(data); + + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].BuildTeamInfoBlock(data); + } + + if (GetStatus() == STATUS_WAIT_LEAVE) + { + data << uint8(1); // bg ended + data << uint8(GetWinner()); // who win } + else + data << uint8(0); // bg not ended + + data << uint32(GetPlayerScoresSize()); + for (auto const& score : PlayerScores) + score.second->AppendToPacket(data); +} + +bool Battleground::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) +{ + BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUIDLow()); + if (itr == PlayerScores.end()) // player not found... + return false; + + itr->second->UpdateScore(type, value); + + if (type == SCORE_BONUS_HONOR && doAddHonor && isBattleground()) + player->RewardHonor(NULL, 1, value); // RewardHonor calls UpdatePlayerScore with doAddHonor = false + + return true; } void Battleground::AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid) @@ -1453,8 +1463,6 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(), PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY)) { - TC_LOG_ERROR("sql.sql", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!", - entry, m_MapId, m_InstanceID); TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!", entry, m_MapId, m_InstanceID); delete go; @@ -1492,6 +1500,11 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float return true; } +bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime /*= 0*/) +{ + return AddObject(type, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), rotation0, rotation1, rotation2, rotation3, respawnTime); +} + // Some doors aren't despawned so we cannot handle their closing in gameobject::update() // It would be nice to correctly implement GO_ACTIVATED state and open/close doors in gameobject code void Battleground::DoorClose(uint32 type) @@ -1522,21 +1535,33 @@ void Battleground::DoorOpen(uint32 type) type, GUID_LOPART(BgObjects[type]), m_MapId, m_InstanceID); } -GameObject* Battleground::GetBGObject(uint32 type) +GameObject* Battleground::GetBGObject(uint32 type, bool logError) { GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]); if (!obj) - TC_LOG_ERROR("bg.battleground", "Battleground::GetBGObject: gameobject (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", - type, GUID_LOPART(BgObjects[type]), m_MapId, m_InstanceID); + { + if (logError) + TC_LOG_ERROR("bg.battleground", "Battleground::GetBGObject: gameobject (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", + type, GUID_LOPART(BgObjects[type]), m_MapId, m_InstanceID); + else + TC_LOG_INFO("bg.battleground", "Battleground::GetBGObject: gameobject (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", + type, GUID_LOPART(BgObjects[type]), m_MapId, m_InstanceID); + } return obj; } -Creature* Battleground::GetBGCreature(uint32 type) +Creature* Battleground::GetBGCreature(uint32 type, bool logError) { Creature* creature = GetBgMap()->GetCreature(BgCreatures[type]); if (!creature) - TC_LOG_ERROR("bg.battleground", "Battleground::GetBGCreature: creature (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", - type, GUID_LOPART(BgCreatures[type]), m_MapId, m_InstanceID); + { + if (logError) + TC_LOG_ERROR("bg.battleground", "Battleground::GetBGCreature: creature (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", + type, GUID_LOPART(BgCreatures[type]), m_MapId, m_InstanceID); + else + TC_LOG_INFO("bg.battleground", "Battleground::GetBGCreature: creature (type: %u, GUID: %u) not found for BG (map: %u, instance id: %u)!", + type, GUID_LOPART(BgCreatures[type]), m_MapId, m_InstanceID); + } return creature; } @@ -1556,7 +1581,7 @@ void Battleground::SpawnBGObject(uint32 type, uint32 respawntime) } } -Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime) +Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/) { // If the assert is called, means that BgCreatures must be resized! ASSERT(type < BgCreatures.size()); @@ -1566,7 +1591,7 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f return NULL; Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, 0, teamval, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o)) { TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!", entry, m_MapId, m_InstanceID); @@ -1584,9 +1609,6 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f delete creature; return NULL; } - // Force using DB speeds - creature->SetSpeed(MOVE_WALK, cinfo->speed_walk); - creature->SetSpeed(MOVE_RUN, cinfo->speed_run); if (!map->AddToMap(creature)) { @@ -1599,7 +1621,12 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, uint32 teamval, f if (respawntime) creature->SetRespawnDelay(respawntime); - return creature; + return creature; +} + +Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/, uint32 respawntime /*= 0*/) +{ + return AddCreature(entry, type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId, respawntime); } bool Battleground::DelCreature(uint32 type) @@ -1638,13 +1665,11 @@ bool Battleground::DelObject(uint32 type) return false; } -bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team) +bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId /*= TEAM_NEUTRAL*/) { - uint32 entry = (team == ALLIANCE) ? - BG_CREATURE_ENTRY_A_SPIRITGUIDE : - BG_CREATURE_ENTRY_H_SPIRITGUIDE; + uint32 entry = (teamId == TEAM_ALLIANCE) ? BG_CREATURE_ENTRY_A_SPIRITGUIDE : BG_CREATURE_ENTRY_H_SPIRITGUIDE; - if (Creature* creature = AddCreature(entry, type, team, x, y, z, o)) + if (Creature* creature = AddCreature(entry, type, x, y, z, o, teamId)) { creature->setDeathState(DEAD); creature->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, creature->GetGUID()); @@ -1664,6 +1689,11 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float return false; } +bool Battleground::AddSpiritGuide(uint32 type, Position const& pos, TeamId teamId /*= TEAM_NEUTRAL*/) +{ + return AddSpiritGuide(type, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId); +} + void Battleground::SendMessageToAll(int32 entry, ChatMsg type, Player const* source) { if (!entry) @@ -1696,7 +1726,7 @@ void Battleground::SendWarningToAll(int32 entry, ...) std::map<uint32, WorldPacket> localizedPackets; for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) + if (Player* player = _GetPlayer(itr, "SendWarningToAll")) { if (localizedPackets.find(player->GetSession()->GetSessionDbLocaleIndex()) == localizedPackets.end()) { @@ -1843,7 +1873,7 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player) BlockMovement(player); - sBattlegroundMgr->BuildPvpLogDataPacket(&data, this); + BuildPvPLogDataPacket(data); player->SendDirectMessage(&data); sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBGTeam()); diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index a866f09639a..2904ec1dc7e 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -22,15 +22,19 @@ #include "Common.h" #include "SharedDefines.h" #include "DBCEnums.h" +#include "WorldPacket.h" class Creature; class GameObject; class Group; class Player; class Unit; +class WorldObject; class WorldPacket; class BattlegroundMap; +struct BattlegroundScore; +struct Position; struct PvPDifficultyEntry; struct WorldSafeLocsEntry; @@ -169,34 +173,6 @@ struct BattlegroundObjectInfo uint32 spellid; }; -enum ScoreType -{ - SCORE_KILLING_BLOWS = 1, - SCORE_DEATHS = 2, - SCORE_HONORABLE_KILLS = 3, - SCORE_BONUS_HONOR = 4, - //EY, but in MSG_PVP_LOG_DATA opcode! - SCORE_DAMAGE_DONE = 5, - SCORE_HEALING_DONE = 6, - //WS - SCORE_FLAG_CAPTURES = 7, - SCORE_FLAG_RETURNS = 8, - //AB and IC - SCORE_BASES_ASSAULTED = 9, - SCORE_BASES_DEFENDED = 10, - //AV - SCORE_GRAVEYARDS_ASSAULTED = 11, - SCORE_GRAVEYARDS_DEFENDED = 12, - SCORE_TOWERS_ASSAULTED = 13, - SCORE_TOWERS_DEFENDED = 14, - SCORE_MINES_CAPTURED = 15, - SCORE_LEADERS_KILLED = 16, - SCORE_SECONDARY_OBJECTIVES = 17, - //SOTA - SCORE_DESTROYED_DEMOLISHER = 18, - SCORE_DESTROYED_WALL = 19 -}; - enum ArenaType { ARENA_TYPE_2v2 = 2, @@ -237,22 +213,6 @@ enum BattlegroundStartingEventsIds }; #define BG_STARTING_EVENT_COUNT 4 -struct BattlegroundScore -{ - BattlegroundScore() : KillingBlows(0), Deaths(0), HonorableKills(0), BonusHonor(0), - DamageDone(0), HealingDone(0) - { } - - virtual ~BattlegroundScore() { } //virtual destructor is used when deleting score from scores map - - uint32 KillingBlows; - uint32 Deaths; - uint32 HonorableKills; - uint32 BonusHonor; - uint32 DamageDone; - uint32 HealingDone; -}; - enum BGHonorMode { BG_NORMAL = 0, @@ -367,9 +327,7 @@ class Battleground BattlegroundPlayerMap const& GetPlayers() const { return m_Players; } uint32 GetPlayersSize() const { return m_Players.size(); } - typedef std::map<uint64, BattlegroundScore*> BattlegroundScoreMap; - BattlegroundScoreMap::const_iterator GetPlayerScoresBegin() const { return PlayerScores.begin(); } - BattlegroundScoreMap::const_iterator GetPlayerScoresEnd() const { return PlayerScores.end(); } + typedef std::map<uint32, BattlegroundScore*> BattlegroundScoreMap; uint32 GetPlayerScoresSize() const { return PlayerScores.size(); } uint32 GetReviveQueueSize() const { return m_ReviveQueue.size(); } @@ -382,8 +340,8 @@ class Battleground void StartBattleground(); - GameObject* GetBGObject(uint32 type); - Creature* GetBGCreature(uint32 type); + GameObject* GetBGObject(uint32 type, bool logError = true); + Creature* GetBGCreature(uint32 type, bool logError = true); // Location void SetMapId(uint32 MapID) { m_MapId = MapID; } @@ -414,6 +372,8 @@ class Battleground void SendPacketToAll(WorldPacket* packet); void YellToAll(Creature* creature, const char* text, uint32 language); + void SendChatMessage(Creature* source, uint8 textId, WorldObject* target = NULL); + template<class Do> void BroadcastWorker(Do& _do); @@ -439,7 +399,8 @@ class Battleground Group* GetBgRaid(uint32 TeamID) const { return TeamID == ALLIANCE ? m_BgRaids[TEAM_ALLIANCE] : m_BgRaids[TEAM_HORDE]; } void SetBgRaid(uint32 TeamID, Group* bg_raid); - virtual void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); + void BuildPvPLogDataPacket(WorldPacket& data); + virtual bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); static TeamId GetTeamIndexByTeamId(uint32 Team) { return Team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; } uint32 GetPlayersCountByTeam(uint32 Team) const { return m_PlayersCount[GetTeamIndexByTeamId(Team)]; } @@ -456,12 +417,8 @@ class Battleground void SetArenaTeamIdForTeam(uint32 Team, uint32 ArenaTeamId) { m_ArenaTeamIds[GetTeamIndexByTeamId(Team)] = ArenaTeamId; } uint32 GetArenaTeamIdForTeam(uint32 Team) const { return m_ArenaTeamIds[GetTeamIndexByTeamId(Team)]; } uint32 GetArenaTeamIdByIndex(uint32 index) const { return m_ArenaTeamIds[index]; } - void SetArenaTeamRatingChangeForTeam(uint32 Team, int32 RatingChange) { m_ArenaTeamRatingChanges[GetTeamIndexByTeamId(Team)] = RatingChange; } - int32 GetArenaTeamRatingChangeForTeam(uint32 Team) const { return m_ArenaTeamRatingChanges[GetTeamIndexByTeamId(Team)]; } - int32 GetArenaTeamRatingChangeByIndex(uint32 index) const { return m_ArenaTeamRatingChanges[index]; } void SetArenaMatchmakerRating(uint32 Team, uint32 MMR){ m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)] = MMR; } uint32 GetArenaMatchmakerRating(uint32 Team) const { return m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)]; } - uint32 GetArenaMatchmakerRatingByIndex(uint32 index) const { return m_ArenaTeamMMR[index]; } void CheckArenaAfterTimerConditions(); void CheckArenaWinConditions(); void UpdateArenaWorldState(); @@ -478,8 +435,7 @@ class Battleground virtual void EventPlayerClickedOnFlag(Player* /*player*/, GameObject* /*target_obj*/) { } void EventPlayerLoggedIn(Player* player); void EventPlayerLoggedOut(Player* player); - virtual void EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) { } - virtual void EventPlayerUsedGO(Player* /*player*/, GameObject* /*go*/){ } + virtual void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/ = NULL) { } // this function can be used by spell to interact with the BG map virtual void DoAction(uint32 /*action*/, uint64 /*var*/) { } @@ -505,11 +461,14 @@ class Battleground BGObjects BgObjects; BGCreatures BgCreatures; void SpawnBGObject(uint32 type, uint32 respawntime); - bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0); - Creature* AddCreature(uint32 entry, uint32 type, uint32 teamval, float x, float y, float z, float o, uint32 respawntime = 0); + virtual bool AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0); + bool AddObject(uint32 type, uint32 entry, Position const& pos, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime = 0); + virtual Creature* AddCreature(uint32 entry, uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0); + Creature* AddCreature(uint32 entry, uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 respawntime = 0); bool DelCreature(uint32 type); bool DelObject(uint32 type); - bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, uint32 team); + virtual bool AddSpiritGuide(uint32 type, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL); + bool AddSpiritGuide(uint32 type, Position const& pos, TeamId teamId = TEAM_NEUTRAL); int32 GetObjectType(uint64 guid); void DoorOpen(uint32 type); @@ -550,7 +509,7 @@ class Battleground Player* _GetPlayerForTeam(uint32 teamId, BattlegroundPlayerMap::const_iterator itr, const char* context) const; void _ProcessOfflineQueue(); - void _ProcessRessurect(uint32 diff); + void _ProcessResurrect(uint32 diff); void _ProcessProgress(uint32 diff); void _ProcessLeave(uint32 diff); void _ProcessJoin(uint32 diff); @@ -651,9 +610,54 @@ class Battleground // Arena team ids by team uint32 m_ArenaTeamIds[BG_TEAMS_COUNT]; - int32 m_ArenaTeamRatingChanges[BG_TEAMS_COUNT]; uint32 m_ArenaTeamMMR[BG_TEAMS_COUNT]; + struct ArenaTeamScore + { + friend class Battleground; + + protected: + ArenaTeamScore() : RatingChange(0), MatchmakerRating(0) { } + + virtual ~ArenaTeamScore() { } + + void Assign(int32 ratingChange, uint32 matchMakerRating, std::string const& teamName) + { + RatingChange = ratingChange; + MatchmakerRating = matchMakerRating; + TeamName = teamName; + } + + void BuildRatingInfoBlock(WorldPacket& data) + { + uint32 ratingLost = std::abs(std::min(RatingChange, 0)); + uint32 ratingWon = std::max(RatingChange, 0); + + // should be old rating, new rating, and client will calculate rating change itself + data << uint32(ratingLost); + data << uint32(ratingWon); + data << uint32(MatchmakerRating); + } + + void BuildTeamInfoBlock(WorldPacket& data) + { + data << TeamName; + } + + void Reset() + { + RatingChange = 0; + MatchmakerRating = 0; + TeamName.clear(); + } + + int32 RatingChange; + uint32 MatchmakerRating; + std::string TeamName; + }; + + ArenaTeamScore _arenaTeamScores[BG_TEAMS_COUNT]; + // Limits uint32 m_LevelMin; uint32 m_LevelMax; diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 9d7a67ee0dc..ef78594626a 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -216,176 +216,6 @@ void BattlegroundMgr::BuildBattlegroundStatusPacket(WorldPacket* data, Battlegro } } -void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg) -{ - uint8 type = (bg->isArena() ? 1 : 0); - - data->Initialize(MSG_PVP_LOG_DATA, (1+1+4+40*bg->GetPlayerScoresSize())); - *data << uint8(type); // type (battleground=0/arena=1) - - if (type) // arena - { - // it seems this must be according to BG_WINNER_A/H and _NOT_ TEAM_A/H - for (int8 i = 1; i >= 0; --i) - { - int32 rating_change = bg->GetArenaTeamRatingChangeByIndex(i); - - uint32 pointsLost = rating_change < 0 ? -rating_change : 0; - uint32 pointsGained = rating_change > 0 ? rating_change : 0; - uint32 MatchmakerRating = bg->GetArenaMatchmakerRatingByIndex(i); - - *data << uint32(pointsLost); // Rating Lost - *data << uint32(pointsGained); // Rating gained - *data << uint32(MatchmakerRating); // Matchmaking Value - TC_LOG_DEBUG("bg.battleground", "rating change: %d", rating_change); - } - for (int8 i = 1; i >= 0; --i) - { - if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(bg->GetArenaTeamIdByIndex(i))) - *data << at->GetName(); - else - *data << uint8(0); - } - } - - if (bg->GetStatus() != STATUS_WAIT_LEAVE) - *data << uint8(0); // bg not ended - else - { - *data << uint8(1); // bg ended - *data << uint8(bg->GetWinner()); // who win - } - - size_t wpos = data->wpos(); - uint32 scoreCount = 0; - *data << uint32(scoreCount); // placeholder - - Battleground::BattlegroundScoreMap::const_iterator itr2 = bg->GetPlayerScoresBegin(); - for (Battleground::BattlegroundScoreMap::const_iterator itr = itr2; itr != bg->GetPlayerScoresEnd();) - { - itr2 = itr++; - BattlegroundScore* score = itr2->second; - if (!bg->IsPlayerInBattleground(itr2->first)) - { - TC_LOG_ERROR("bg.battleground", "Player " UI64FMTD " has scoreboard entry for battleground %u but is not in battleground!", itr->first, bg->GetTypeID(true)); - continue; - } - - *data << uint64(itr2->first); - *data << uint32(score->KillingBlows); - if (type == 0) - { - *data << uint32(score->HonorableKills); - *data << uint32(score->Deaths); - *data << uint32(score->BonusHonor); - } - else - { - Player* player = ObjectAccessor::FindPlayer(itr2->first); - uint32 team = bg->GetPlayerTeam(itr2->first); - if (!team && player) - team = player->GetBGTeam(); - *data << uint8(team == ALLIANCE ? 1 : 0); // green or yellow - } - *data << uint32(score->DamageDone); // damage done - *data << uint32(score->HealingDone); // healing done - switch (bg->GetTypeID(true)) // battleground specific things - { - case BATTLEGROUND_RB: - switch (bg->GetMapId()) - { - case 489: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundWGScore*)score)->FlagCaptures); // flag captures - *data << uint32(((BattlegroundWGScore*)score)->FlagReturns); // flag returns - break; - case 566: - *data << uint32(0x00000001); // count of next fields - *data << uint32(((BattlegroundEYScore*)score)->FlagCaptures); // flag captures - break; - case 529: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundABScore*)score)->BasesAssaulted); // bases asssulted - *data << uint32(((BattlegroundABScore*)score)->BasesDefended); // bases defended - break; - case 30: - *data << uint32(0x00000005); // count of next fields - *data << uint32(((BattlegroundAVScore*)score)->GraveyardsAssaulted); // GraveyardsAssaulted - *data << uint32(((BattlegroundAVScore*)score)->GraveyardsDefended); // GraveyardsDefended - *data << uint32(((BattlegroundAVScore*)score)->TowersAssaulted); // TowersAssaulted - *data << uint32(((BattlegroundAVScore*)score)->TowersDefended); // TowersDefended - *data << uint32(((BattlegroundAVScore*)score)->MinesCaptured); // MinesCaptured - break; - case 607: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundSAScore*)score)->demolishers_destroyed); - *data << uint32(((BattlegroundSAScore*)score)->gates_destroyed); - break; - case 628: // IC - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundICScore*)score)->BasesAssaulted); // bases asssulted - *data << uint32(((BattlegroundICScore*)score)->BasesDefended); // bases defended - default: - *data << uint32(0); - break; - } - break; - case BATTLEGROUND_AV: - *data << uint32(0x00000005); // count of next fields - *data << uint32(((BattlegroundAVScore*)score)->GraveyardsAssaulted); // GraveyardsAssaulted - *data << uint32(((BattlegroundAVScore*)score)->GraveyardsDefended); // GraveyardsDefended - *data << uint32(((BattlegroundAVScore*)score)->TowersAssaulted); // TowersAssaulted - *data << uint32(((BattlegroundAVScore*)score)->TowersDefended); // TowersDefended - *data << uint32(((BattlegroundAVScore*)score)->MinesCaptured); // MinesCaptured - break; - case BATTLEGROUND_WS: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundWGScore*)score)->FlagCaptures); // flag captures - *data << uint32(((BattlegroundWGScore*)score)->FlagReturns); // flag returns - break; - case BATTLEGROUND_AB: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundABScore*)score)->BasesAssaulted); // bases assaulted - *data << uint32(((BattlegroundABScore*)score)->BasesDefended); // bases defended - break; - case BATTLEGROUND_EY: - *data << uint32(0x00000001); // count of next fields - *data << uint32(((BattlegroundEYScore*)score)->FlagCaptures); // flag captures - break; - case BATTLEGROUND_SA: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundSAScore*)score)->demolishers_destroyed); - *data << uint32(((BattlegroundSAScore*)score)->gates_destroyed); - break; - case BATTLEGROUND_IC: - *data << uint32(0x00000002); // count of next fields - *data << uint32(((BattlegroundICScore*)score)->BasesAssaulted); // bases assaulted - *data << uint32(((BattlegroundICScore*)score)->BasesDefended); // bases defended - break; - case BATTLEGROUND_NA: - case BATTLEGROUND_BE: - case BATTLEGROUND_AA: - case BATTLEGROUND_RL: - case BATTLEGROUND_DS: - case BATTLEGROUND_RV: - *data << uint32(0); - break; - default: - TC_LOG_DEBUG("network", "Unhandled MSG_PVP_LOG_DATA for BG id %u", bg->GetTypeID()); - *data << uint32(0); - break; - } - // should never happen - if (++scoreCount >= bg->GetMaxPlayers() && itr != bg->GetPlayerScoresEnd()) - { - TC_LOG_ERROR("bg.battleground", "Battleground %u scoreboard has more entries (%u) than allowed players in this bg (%u)", bg->GetTypeID(true), bg->GetPlayerScoresSize(), bg->GetMaxPlayers()); - break; - } - } - - data->put(wpos, scoreCount); -} - void BattlegroundMgr::BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result) { data->Initialize(SMSG_GROUP_JOINED_BATTLEGROUND, 4); @@ -1082,6 +912,17 @@ void BattlegroundMgr::LoadBattleMastersEntry() Field* fields = result->Fetch(); uint32 entry = fields[0].GetUInt32(); + if (CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(entry)) + { + if ((cInfo->npcflag & UNIT_NPC_FLAG_BATTLEMASTER) == 0) + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) listed in `battlemaster_entry` is not a battlemaster.", entry); + } + else + { + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) listed in `battlemaster_entry` does not exist.", entry); + continue; + } + uint32 bgTypeId = fields[1].GetUInt32(); if (!sBattlemasterListStore.LookupEntry(bgTypeId)) { @@ -1093,9 +934,24 @@ void BattlegroundMgr::LoadBattleMastersEntry() } while (result->NextRow()); + CheckBattleMasters(); + TC_LOG_INFO("server.loading", ">> Loaded %u battlemaster entries in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void BattlegroundMgr::CheckBattleMasters() +{ + CreatureTemplateContainer const* ctc = sObjectMgr->GetCreatureTemplates(); + for (CreatureTemplateContainer::const_iterator itr = ctc->begin(); itr != ctc->end(); ++itr) + { + if ((itr->second.npcflag & UNIT_NPC_FLAG_BATTLEMASTER) && mBattleMastersMap.find(itr->second.Entry) == mBattleMastersMap.end()) + { + TC_LOG_ERROR("sql.sql", "CreatureTemplate (Entry: %u) has UNIT_NPC_FLAG_BATTLEMASTER but no data in `battlemaster_entry` table. Removing flag!", itr->second.Entry); + const_cast<CreatureTemplate*>(&itr->second)->npcflag &= ~UNIT_NPC_FLAG_BATTLEMASTER; + } + } +} + HolidayIds BattlegroundMgr::BGTypeToWeekendHolidayId(BattlegroundTypeId bgTypeId) { switch (bgTypeId) diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h index f10614baafc..b57efc045d8 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.h +++ b/src/server/game/Battlegrounds/BattlegroundMgr.h @@ -28,7 +28,7 @@ typedef std::map<uint32, Battleground*> BattlegroundContainer; typedef std::set<uint32> BattlegroundClientIdsContainer; -typedef UNORDERED_MAP<uint32, BattlegroundTypeId> BattleMastersMap; +typedef std::unordered_map<uint32, BattlegroundTypeId> BattleMastersMap; #define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day #define WS_ARENA_DISTRIBUTION_TIME 20001 // Custom worldstate @@ -79,7 +79,6 @@ class BattlegroundMgr void BuildBattlegroundListPacket(WorldPacket* data, uint64 guid, Player* player, BattlegroundTypeId bgTypeId, uint8 fromWhere); void BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result); void BuildUpdateWorldStatePacket(WorldPacket* data, uint32 field, uint32 value); - void BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg); void BuildBattlegroundStatusPacket(WorldPacket* data, Battleground* bg, uint8 queueSlot, uint8 statusId, uint32 time1, uint32 time2, uint8 arenaType, uint32 arenaFaction); void BuildPlaySoundPacket(WorldPacket* data, uint32 soundId); void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, uint64 guid); @@ -126,12 +125,13 @@ class BattlegroundMgr uint32 GetRatingDiscardTimer() const; void InitAutomaticArenaPointDistribution(); void LoadBattleMastersEntry(); + void CheckBattleMasters(); BattlegroundTypeId GetBattleMasterBG(uint32 entry) const { BattleMastersMap::const_iterator itr = mBattleMastersMap.find(entry); if (itr != mBattleMastersMap.end()) return itr->second; - return BATTLEGROUND_WS; + return BATTLEGROUND_TYPE_NONE; } private: diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h index 37c7928b3de..af283cb825f 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.h +++ b/src/server/game/Battlegrounds/BattlegroundQueue.h @@ -88,8 +88,8 @@ class BattlegroundQueue typedef std::map<uint64, PlayerQueueInfo> QueuedPlayersMap; QueuedPlayersMap m_QueuedPlayers; - //we need constant add to begin and constant remove / add from the end, therefore deque suits our problem well - typedef std::deque<GroupQueueInfo*> GroupsQueueType; + //do NOT use deque because deque.erase() invalidates ALL iterators + typedef std::list<GroupQueueInfo*> GroupsQueueType; /* This two dimensional array is used to store All queued groups diff --git a/src/server/game/Battlegrounds/BattlegroundScore.h b/src/server/game/Battlegrounds/BattlegroundScore.h new file mode 100644 index 00000000000..95d1db2c337 --- /dev/null +++ b/src/server/game/Battlegrounds/BattlegroundScore.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITY_BATTLEGROUND_SCORE_H +#define TRINITY_BATTLEGROUND_SCORE_H + +#include "WorldPacket.h" + +enum ScoreType +{ + SCORE_KILLING_BLOWS = 1, + SCORE_DEATHS = 2, + SCORE_HONORABLE_KILLS = 3, + SCORE_BONUS_HONOR = 4, + SCORE_DAMAGE_DONE = 5, + SCORE_HEALING_DONE = 6, + + // WS and EY + SCORE_FLAG_CAPTURES = 7, + SCORE_FLAG_RETURNS = 8, + + // AB and IC + SCORE_BASES_ASSAULTED = 9, + SCORE_BASES_DEFENDED = 10, + + // AV + SCORE_GRAVEYARDS_ASSAULTED = 11, + SCORE_GRAVEYARDS_DEFENDED = 12, + SCORE_TOWERS_ASSAULTED = 13, + SCORE_TOWERS_DEFENDED = 14, + SCORE_MINES_CAPTURED = 15, + + // SOTA + SCORE_DESTROYED_DEMOLISHER = 16, + SCORE_DESTROYED_WALL = 17 +}; + +struct BattlegroundScore +{ + friend class Battleground; + + protected: + BattlegroundScore(uint64 playerGuid) : PlayerGuid(playerGuid), KillingBlows(0), Deaths(0), + HonorableKills(0), BonusHonor(0), DamageDone(0), HealingDone(0) { } + + virtual ~BattlegroundScore() { } + + virtual void UpdateScore(uint32 type, uint32 value) + { + switch (type) + { + case SCORE_KILLING_BLOWS: // Killing blows + KillingBlows += value; + break; + case SCORE_DEATHS: // Deaths + Deaths += value; + break; + case SCORE_HONORABLE_KILLS: // Honorable kills + HonorableKills += value; + break; + case SCORE_BONUS_HONOR: // Honor bonus + BonusHonor += value; + break; + case SCORE_DAMAGE_DONE: // Damage Done + DamageDone += value; + break; + case SCORE_HEALING_DONE: // Healing Done + HealingDone += value; + break; + default: + ASSERT(false && "Not implemented Battleground score type!"); + break; + } + } + + virtual void AppendToPacket(WorldPacket& data) + { + data << uint64(PlayerGuid); + + data << uint32(KillingBlows); + data << uint32(HonorableKills); + data << uint32(Deaths); + data << uint32(BonusHonor); + data << uint32(DamageDone); + data << uint32(HealingDone); + + BuildObjectivesBlock(data); + } + + virtual void BuildObjectivesBlock(WorldPacket& /*data*/) = 0; + + // For Logging purpose + virtual std::string ToString() const { return ""; } + + uint64 PlayerGuid; + + // Default score, present in every type + uint32 KillingBlows; + uint32 Deaths; + uint32 HonorableKills; + uint32 BonusHonor; + uint32 DamageDone; + uint32 HealingDone; +}; + +#endif // TRINITY_BATTLEGROUND_SCORE_H diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index c05bd98b908..2622ab9501f 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -23,7 +23,6 @@ #include "BattlegroundMgr.h" #include "Creature.h" #include "Language.h" -#include "Object.h" #include "Player.h" #include "Util.h" #include "WorldSession.h" @@ -225,15 +224,11 @@ void BattlegroundAB::StartingEventOpenDoors() void BattlegroundAB::AddPlayer(Player* player) { Battleground::AddPlayer(player); - //create score and add it to map, default values are set in the constructor - BattlegroundABScore* sc = new BattlegroundABScore; - - PlayerScores[player->GetGUID()] = sc; + PlayerScores[player->GetGUIDLow()] = new BattlegroundABScore(player->GetGUID()); } void BattlegroundAB::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/) { - } void BattlegroundAB::HandleAreaTrigger(Player* player, uint32 trigger) @@ -381,7 +376,7 @@ void BattlegroundAB::_SendNodeUpdate(uint8 node) void BattlegroundAB::_NodeOccupied(uint8 node, Team team) { - if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team)) + if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node], GetTeamIndexByTeamId(team))) TC_LOG_ERROR("bg.battleground", "Failed to spawn spirit guide! point: %u, team: %u, ", node, team); if (node >= BG_AB_DYNAMIC_NODES_COUNT)//only dynamic nodes, no start points @@ -397,9 +392,9 @@ void BattlegroundAB::_NodeOccupied(uint8 node, Team team) if (capturedNodes >= 4) CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team); - Creature* trigger = BgCreatures[node+7] ? GetBGCreature(node+7) : NULL;//0-6 spirit guides + Creature* trigger = BgCreatures[node+7] ? GetBGCreature(node+7) : NULL; // 0-6 spirit guides if (!trigger) - trigger = AddCreature(WORLD_TRIGGER, node+7, team, BG_AB_NodePositions[node][0], BG_AB_NodePositions[node][1], BG_AB_NodePositions[node][2], BG_AB_NodePositions[node][3]); + trigger = AddCreature(WORLD_TRIGGER, node+7, BG_AB_NodePositions[node], GetTeamIndexByTeamId(team)); //add bonus honor aura trigger creature when node is accupied //cast bonus aura (+50% honor in 25yards) @@ -578,34 +573,33 @@ bool BattlegroundAB::SetupBattleground() { for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) { - if (!AddObject(BG_AB_OBJECT_BANNER_NEUTRAL + 8*i, BG_AB_OBJECTID_NODE_BANNER_0 + i, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_BANNER_CONT_A + 8*i, BG_AB_OBJECTID_BANNER_CONT_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_BANNER_CONT_H + 8*i, BG_AB_OBJECTID_BANNER_CONT_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_BANNER_ALLY + 8*i, BG_AB_OBJECTID_BANNER_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_BANNER_HORDE + 8*i, BG_AB_OBJECTID_BANNER_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_AURA_ALLY + 8*i, BG_AB_OBJECTID_AURA_A, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_AURA_HORDE + 8*i, BG_AB_OBJECTID_AURA_H, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_AURA_CONTESTED + 8*i, BG_AB_OBJECTID_AURA_C, BG_AB_NodePositions[i][0], BG_AB_NodePositions[i][1], BG_AB_NodePositions[i][2], BG_AB_NodePositions[i][3], 0, 0, std::sin(BG_AB_NodePositions[i][3]/2), std::cos(BG_AB_NodePositions[i][3]/2), RESPAWN_ONE_DAY) -) + if (!AddObject(BG_AB_OBJECT_BANNER_NEUTRAL + 8*i, BG_AB_OBJECTID_NODE_BANNER_0 + i, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_BANNER_CONT_A + 8*i, BG_AB_OBJECTID_BANNER_CONT_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_BANNER_CONT_H + 8*i, BG_AB_OBJECTID_BANNER_CONT_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_BANNER_ALLY + 8*i, BG_AB_OBJECTID_BANNER_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_BANNER_HORDE + 8*i, BG_AB_OBJECTID_BANNER_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_AURA_ALLY + 8*i, BG_AB_OBJECTID_AURA_A, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_AURA_HORDE + 8*i, BG_AB_OBJECTID_AURA_H, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY) + || !AddObject(BG_AB_OBJECT_AURA_CONTESTED + 8*i, BG_AB_OBJECTID_AURA_C, BG_AB_NodePositions[i], 0, 0, std::sin(BG_AB_NodePositions[i].GetOrientation()/2), std::cos(BG_AB_NodePositions[i].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn some object Battleground not created!"); return false; } } + if (!AddObject(BG_AB_OBJECT_GATE_A, BG_AB_OBJECTID_GATE_A, BG_AB_DoorPositions[0][0], BG_AB_DoorPositions[0][1], BG_AB_DoorPositions[0][2], BG_AB_DoorPositions[0][3], BG_AB_DoorPositions[0][4], BG_AB_DoorPositions[0][5], BG_AB_DoorPositions[0][6], BG_AB_DoorPositions[0][7], RESPAWN_IMMEDIATELY) - || !AddObject(BG_AB_OBJECT_GATE_H, BG_AB_OBJECTID_GATE_H, BG_AB_DoorPositions[1][0], BG_AB_DoorPositions[1][1], BG_AB_DoorPositions[1][2], BG_AB_DoorPositions[1][3], BG_AB_DoorPositions[1][4], BG_AB_DoorPositions[1][5], BG_AB_DoorPositions[1][6], BG_AB_DoorPositions[1][7], RESPAWN_IMMEDIATELY) -) + || !AddObject(BG_AB_OBJECT_GATE_H, BG_AB_OBJECTID_GATE_H, BG_AB_DoorPositions[1][0], BG_AB_DoorPositions[1][1], BG_AB_DoorPositions[1][2], BG_AB_DoorPositions[1][3], BG_AB_DoorPositions[1][4], BG_AB_DoorPositions[1][5], BG_AB_DoorPositions[1][6], BG_AB_DoorPositions[1][7], RESPAWN_IMMEDIATELY)) { TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn door object Battleground not created!"); return false; } + //buffs for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) { if (!AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i, Buff_Entries[0], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY) || !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 1, Buff_Entries[1], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY) - || !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 2, Buff_Entries[2], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY) -) + || !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 2, Buff_Entries[2], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, std::sin(BG_AB_BuffPositions[i][3]/2), std::cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)) TC_LOG_ERROR("sql.sql", "BatteGroundAB: Failed to spawn buff object!"); } @@ -698,26 +692,23 @@ WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveYard(Player* player) return good_entry; } -void BattlegroundAB::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) +bool BattlegroundAB::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) { - BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID()); - if (itr == PlayerScores.end()) // player not found... - return; + if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor)) + return false; switch (type) { case SCORE_BASES_ASSAULTED: - ((BattlegroundABScore*)itr->second)->BasesAssaulted += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_ASSAULT_BASE); break; case SCORE_BASES_DEFENDED: - ((BattlegroundABScore*)itr->second)->BasesDefended += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AB_OBJECTIVE_DEFEND_BASE); break; default: - Battleground::UpdatePlayerScore(Source, type, value, doAddHonor); break; } + return true; } bool BattlegroundAB::IsAllNodesControlledByTeam(uint32 team) const diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 9ed34691adf..a6b4be10fdf 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -20,6 +20,8 @@ #define __BATTLEGROUNDAB_H #include "Battleground.h" +#include "BattlegroundScore.h" +#include "Object.h" enum BG_AB_WorldStates { @@ -184,8 +186,7 @@ enum BG_AB_Objectives #define AB_EVENT_START_BATTLE 9158 // Achievement: Let's Get This Done -// x, y, z, o -const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4] = +Position const BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT] = { {1166.785f, 1200.132f, -56.70859f, 0.9075713f}, // stables {977.0156f, 1046.616f, -44.80923f, -2.600541f}, // blacksmith @@ -218,8 +219,7 @@ const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4] = {1146.62f, 816.94f, -98.49f, 6.14f} // gold mine }; -// x, y, z, o -const float BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT][4] = +Position const BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT] = { {1200.03f, 1171.09f, -56.47f, 5.15f}, // stables {1017.43f, 960.61f, -42.95f, 4.88f}, // blacksmith @@ -237,12 +237,38 @@ struct BG_AB_BannerTimer uint8 teamIndex; }; -struct BattlegroundABScore : public BattlegroundScore +struct BattlegroundABScore final : public BattlegroundScore { - BattlegroundABScore(): BasesAssaulted(0), BasesDefended(0) { } - ~BattlegroundABScore() { } - uint32 BasesAssaulted; - uint32 BasesDefended; + friend class BattlegroundAB; + + protected: + BattlegroundABScore(uint64 playerGuid) : BattlegroundScore(playerGuid), BasesAssaulted(0), BasesDefended(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_BASES_ASSAULTED: + BasesAssaulted += value; + break; + case SCORE_BASES_DEFENDED: + BasesDefended += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(2); + data << uint32(BasesAssaulted); + data << uint32(BasesDefended); + } + + uint32 BasesAssaulted; + uint32 BasesDefended; }; class BattlegroundAB : public Battleground @@ -262,7 +288,7 @@ class BattlegroundAB : public Battleground WorldSafeLocsEntry const* GetClosestGraveYard(Player* player); /* Scorekeeping */ - void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true); + bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override; void FillInitialWorldStates(WorldPacket& data); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 6256f53f07b..eafb02f031d 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -47,7 +47,6 @@ BattlegroundAV::BattlegroundAV() } m_Mine_Timer = 0; - m_MaxLevel = 0; for (BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i) InitNode(i, 0, false); @@ -60,11 +59,6 @@ BattlegroundAV::BattlegroundAV() BattlegroundAV::~BattlegroundAV() { } -uint16 BattlegroundAV::GetBonusHonor(uint8 kills) /// @todo move this function to Battleground.cpp (needs to find a way to get m_MaxLevel) -{ - return Trinity::Honor::hk_honor_at_level(m_MaxLevel, kills); -} - void BattlegroundAV::HandleKillPlayer(Player* player, Player* killer) { if (GetStatus() != STATUS_IN_PROGRESS) @@ -95,7 +89,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) { CastSpellOnTeam(23658, HORDE); //this is a spell which finishes a quest where a player has to kill the boss RewardReputationToTeam(729, BG_AV_REP_BOSS, HORDE); - RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_BOSS), HORDE); + RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), HORDE); EndBattleground(HORDE); DelCreature(AV_CPLACE_TRIGGER17); } @@ -103,7 +97,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) { CastSpellOnTeam(23658, ALLIANCE); //this is a spell which finishes a quest where a player has to kill the boss RewardReputationToTeam(730, BG_AV_REP_BOSS, ALLIANCE); - RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_BOSS), ALLIANCE); + RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_BOSS), ALLIANCE); EndBattleground(ALLIANCE); DelCreature(AV_CPLACE_TRIGGER19); } @@ -116,7 +110,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) } m_CaptainAlive[0]=false; RewardReputationToTeam(729, BG_AV_REP_CAPTAIN, HORDE); - RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_CAPTAIN), HORDE); + RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), HORDE); UpdateScore(ALLIANCE, (-1)*BG_AV_RES_CAPTAIN); //spawn destroyed aura for (uint8 i=0; i <= 9; i++) @@ -135,7 +129,7 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer) } m_CaptainAlive[1]=false; RewardReputationToTeam(730, BG_AV_REP_CAPTAIN, ALLIANCE); - RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_CAPTAIN), ALLIANCE); + RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_CAPTAIN), ALLIANCE); UpdateScore(HORDE, (-1)*BG_AV_RES_CAPTAIN); //spawn destroyed aura for (uint8 i=0; i <= 9; i++) @@ -279,38 +273,24 @@ void BattlegroundAV::UpdateScore(uint16 team, int16 points) Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) { - uint8 level; bool isStatic = false; Creature* creature = NULL; ASSERT(type <= AV_CPLACE_MAX + AV_STATICCPLACE_MAX); if (type >= AV_CPLACE_MAX) //static { type -= AV_CPLACE_MAX; - cinfoid=uint16(BG_AV_StaticCreaturePos[type][4]); - creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid][0], - (type+AV_CPLACE_MAX), - BG_AV_StaticCreatureInfo[cinfoid][1], + cinfoid = uint16(BG_AV_StaticCreaturePos[type][4]); + creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid], + type + AV_CPLACE_MAX, BG_AV_StaticCreaturePos[type][0], BG_AV_StaticCreaturePos[type][1], BG_AV_StaticCreaturePos[type][2], BG_AV_StaticCreaturePos[type][3]); - level = (BG_AV_StaticCreatureInfo[cinfoid][2] == BG_AV_StaticCreatureInfo[cinfoid][3]) - ? BG_AV_StaticCreatureInfo[cinfoid][2] - : urand(BG_AV_StaticCreatureInfo[cinfoid][2], BG_AV_StaticCreatureInfo[cinfoid][3]); isStatic = true; } else { - creature = AddCreature(BG_AV_CreatureInfo[cinfoid][0], - type, - BG_AV_CreatureInfo[cinfoid][1], - BG_AV_CreaturePos[type][0], - BG_AV_CreaturePos[type][1], - BG_AV_CreaturePos[type][2], - BG_AV_CreaturePos[type][3]); - level = (BG_AV_CreatureInfo[cinfoid][2] == BG_AV_CreatureInfo[cinfoid][3]) - ? BG_AV_CreatureInfo[cinfoid][2] - : urand(BG_AV_CreatureInfo[cinfoid][2], BG_AV_CreatureInfo[cinfoid][3]); + creature = AddCreature(BG_AV_CreatureInfo[cinfoid][0], type, BG_AV_CreaturePos[type]); } if (!creature) return NULL; @@ -335,10 +315,6 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) //just copied this code from a gm-command } - if (level != 0) - level += m_MaxLevel - 60; //maybe we can do this more generic for custom level-range.. actually it's blizzlike - creature->SetLevel(level); - uint32 triggerSpawnID = 0; uint32 newFaction = 0; if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN][0]) @@ -363,13 +339,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) } if (triggerSpawnID && newFaction) { - if (Creature* trigger = AddCreature(WORLD_TRIGGER, - triggerSpawnID, - BG_AV_CreatureInfo[creature->GetEntry()][1], - BG_AV_CreaturePos[triggerSpawnID][0], - BG_AV_CreaturePos[triggerSpawnID][1], - BG_AV_CreaturePos[triggerSpawnID][2], - BG_AV_CreaturePos[triggerSpawnID][3])) + if (Creature* trigger = AddCreature(WORLD_TRIGGER, triggerSpawnID, BG_AV_CreaturePos[triggerSpawnID])) { trigger->setFaction(newFaction); trigger->CastSpell(trigger, SPELL_HONORABLE_DEFENDER_25Y, false); @@ -468,11 +438,7 @@ void BattlegroundAV::StartingEventOpenDoors() void BattlegroundAV::AddPlayer(Player* player) { Battleground::AddPlayer(player); - //create score and add it to map, default values are set in constructor - BattlegroundAVScore* sc = new BattlegroundAVScore; - PlayerScores[player->GetGUID()] = sc; - if (m_MaxLevel == 0) - m_MaxLevel=(player->getLevel()%10 == 0)? player->getLevel() : (player->getLevel()-(player->getLevel()%10))+10; /// @todo just look at the code \^_^/ --but queue-info should provide this information.. + PlayerScores[player->GetGUIDLow()] = new BattlegroundAVScore(player->GetGUID()); } void BattlegroundAV::EndBattleground(uint32 winner) @@ -508,7 +474,7 @@ void BattlegroundAV::EndBattleground(uint32 winner) if (rep[i] != 0) RewardReputationToTeam(i == 0 ? 730 : 729, rep[i], i == 0 ? ALLIANCE : HORDE); if (kills[i] != 0) - RewardHonorToTeam(GetBonusHonor(kills[i]), i == 0 ? ALLIANCE : HORDE); + RewardHonorToTeam(GetBonusHonorFromKill(kills[i]), i == 0 ? ALLIANCE : HORDE); } /// @todo add enterevademode for all attacking creatures @@ -562,43 +528,29 @@ void BattlegroundAV::HandleAreaTrigger(Player* player, uint32 trigger) } } -void BattlegroundAV::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) +bool BattlegroundAV::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) { - BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID()); - if (itr == PlayerScores.end()) // player not found... - return; + if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor)) + return false; switch (type) { case SCORE_GRAVEYARDS_ASSAULTED: - ((BattlegroundAVScore*)itr->second)->GraveyardsAssaulted += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_GRAVEYARD); break; case SCORE_GRAVEYARDS_DEFENDED: - ((BattlegroundAVScore*)itr->second)->GraveyardsDefended += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_GRAVEYARD); break; case SCORE_TOWERS_ASSAULTED: - ((BattlegroundAVScore*)itr->second)->TowersAssaulted += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_ASSAULT_TOWER); break; case SCORE_TOWERS_DEFENDED: - ((BattlegroundAVScore*)itr->second)->TowersDefended += value; - Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER); - break; - case SCORE_MINES_CAPTURED: - ((BattlegroundAVScore*)itr->second)->MinesCaptured += value; - break; - case SCORE_LEADERS_KILLED: - ((BattlegroundAVScore*)itr->second)->LeadersKilled += value; - break; - case SCORE_SECONDARY_OBJECTIVES: - ((BattlegroundAVScore*)itr->second)->SecondaryObjectives += value; + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, AV_OBJECTIVE_DEFEND_TOWER); break; default: - Battleground::UpdatePlayerScore(Source, type, value, doAddHonor); break; } + return true; } void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node) @@ -626,7 +578,7 @@ void BattlegroundAV::EventPlayerDestroyedPoint(BG_AV_Nodes node) UpdateScore((owner == ALLIANCE) ? HORDE : ALLIANCE, -1 * BG_AV_RES_TOWER); RewardReputationToTeam(owner == ALLIANCE ? 730 : 729, BG_AV_REP_TOWER, owner); - RewardHonorToTeam(GetBonusHonor(BG_AV_KILL_TOWER), owner); + RewardHonorToTeam(GetBonusHonorFromKill(BG_AV_KILL_TOWER), owner); SpawnBGObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+GetTeamIndexByTeamId(owner)+(2*tmp), RESPAWN_ONE_DAY); SpawnBGObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+GetTeamIndexByTeamId(owner)+(2*tmp), RESPAWN_ONE_DAY); @@ -782,7 +734,7 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node) //spiritguide if (BgCreatures[node]) DelCreature(node); - if (!AddSpiritGuide(node, BG_AV_CreaturePos[node][0], BG_AV_CreaturePos[node][1], BG_AV_CreaturePos[node][2], BG_AV_CreaturePos[node][3], owner)) + if (!AddSpiritGuide(node, BG_AV_CreaturePos[node], GetTeamIndexByTeamId(owner))) TC_LOG_ERROR("bg.battleground", "AV: couldn't spawn spiritguide at node %i", node); } for (uint8 i=0; i<4; i++) @@ -790,16 +742,13 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node) if (node >= BG_AV_NODES_MAX)//fail safe return; - Creature* trigger = GetBGCreature(node + 302);//0-302 other creatures + Creature* trigger = GetBGCreature(node + 302, false);//0-302 other creatures if (!trigger) { trigger = AddCreature(WORLD_TRIGGER, node + 302, - owner, - BG_AV_CreaturePos[node + 302][0], - BG_AV_CreaturePos[node + 302][1], - BG_AV_CreaturePos[node + 302][2], - BG_AV_CreaturePos[node + 302][3]); + BG_AV_CreaturePos[node + 302], + GetTeamIndexByTeamId(owner)); } //add bonus honor aura trigger creature when node is accupied @@ -1219,15 +1168,10 @@ WorldSafeLocsEntry const* BattlegroundAV::GetClosestGraveYard(Player* player) bool BattlegroundAV::SetupBattleground() { // Create starting objects - if ( - // alliance gates - !AddObject(BG_AV_OBJECT_DOOR_A, BG_AV_OBJECTID_GATE_A, - BG_AV_DoorPositons[0][0], BG_AV_DoorPositons[0][1], BG_AV_DoorPositons[0][2], BG_AV_DoorPositons[0][3], - 0, 0, std::sin(BG_AV_DoorPositons[0][3]/2), std::cos(BG_AV_DoorPositons[0][3]/2), RESPAWN_IMMEDIATELY) + if (// alliance gates + !AddObject(BG_AV_OBJECT_DOOR_A, BG_AV_OBJECTID_GATE_A, BG_AV_DoorPositons[0], 0, 0, std::sin(BG_AV_DoorPositons[0].GetOrientation()/2), std::cos(BG_AV_DoorPositons[0].GetOrientation()/2), RESPAWN_IMMEDIATELY) // horde gates - || !AddObject(BG_AV_OBJECT_DOOR_H, BG_AV_OBJECTID_GATE_H, - BG_AV_DoorPositons[1][0], BG_AV_DoorPositons[1][1], BG_AV_DoorPositons[1][2], BG_AV_DoorPositons[1][3], - 0, 0, std::sin(BG_AV_DoorPositons[1][3]/2), std::cos(BG_AV_DoorPositons[1][3]/2), RESPAWN_IMMEDIATELY)) + || !AddObject(BG_AV_OBJECT_DOOR_H, BG_AV_OBJECTID_GATE_H, BG_AV_DoorPositons[1], 0, 0, std::sin(BG_AV_DoorPositons[1].GetOrientation()/2), std::cos(BG_AV_DoorPositons[1].GetOrientation()/2), RESPAWN_IMMEDIATELY)) { TC_LOG_ERROR("sql.sql", "BatteGroundAV: Failed to spawn some object Battleground not created!1"); return false; @@ -1239,27 +1183,27 @@ bool BattlegroundAV::SetupBattleground() if (i <= BG_AV_NODES_FROSTWOLF_HUT) { if (!AddObject(i, BG_AV_OBJECTID_BANNER_A_B, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(i+11, BG_AV_OBJECTID_BANNER_CONT_A_B, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(i+33, BG_AV_OBJECTID_BANNER_H_B, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(i+22, BG_AV_OBJECTID_BANNER_CONT_H_B, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) //aura || !AddObject(BG_AV_OBJECT_AURA_N_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_N, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_AURA_A_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_A, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_AURA_H_FIRSTAID_STATION+i*3, BG_AV_OBJECTID_AURA_H, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY)) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!2"); return false; @@ -1270,23 +1214,23 @@ bool BattlegroundAV::SetupBattleground() if (i <= BG_AV_NODES_STONEHEART_BUNKER) //alliance towers { if (!AddObject(i, BG_AV_OBJECTID_BANNER_A, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(i+22, BG_AV_OBJECTID_BANNER_CONT_H, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_A, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_A, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_PH, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!3"); return false; @@ -1295,23 +1239,23 @@ bool BattlegroundAV::SetupBattleground() else //horde towers { if (!AddObject(i+7, BG_AV_OBJECTID_BANNER_CONT_A, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(i+29, BG_AV_OBJECTID_BANNER_H, - BG_AV_ObjectPos[i][0], BG_AV_ObjectPos[i][1], BG_AV_ObjectPos[i][2], BG_AV_ObjectPos[i][3], - 0, 0, std::sin(BG_AV_ObjectPos[i][3]/2), std::cos(BG_AV_ObjectPos[i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i], + 0, 0, std::sin(BG_AV_ObjectPos[i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TAURA_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_N, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TAURA_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_AURA_H, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TFLAG_A_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_PA, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_TFLAG_H_DUNBALDAR_SOUTH+(2*(i-BG_AV_NODES_DUNBALDAR_SOUTH)), BG_AV_OBJECTID_TOWER_BANNER_H, - BG_AV_ObjectPos[i+8][0], BG_AV_ObjectPos[i+8][1], BG_AV_ObjectPos[i+8][2], BG_AV_ObjectPos[i+8][3], - 0, 0, std::sin(BG_AV_ObjectPos[i+8][3]/2), std::cos(BG_AV_ObjectPos[i+8][3]/2), RESPAWN_ONE_DAY)) + BG_AV_ObjectPos[i+8], + 0, 0, std::sin(BG_AV_ObjectPos[i+8].GetOrientation()/2), std::cos(BG_AV_ObjectPos[i+8].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!4"); return false; @@ -1321,14 +1265,11 @@ bool BattlegroundAV::SetupBattleground() { if (!AddObject(BG_AV_OBJECT_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j, BG_AV_OBJECTID_FIRE, - BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][0], - BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][1], - BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][2], - BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3], + BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j], 0, 0, - std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3]/2), - std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j][3]/2), + std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_DUNBALDAR_SOUTH+((i-BG_AV_NODES_DUNBALDAR_SOUTH)*10)+j].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!5.%i", i); @@ -1345,14 +1286,11 @@ bool BattlegroundAV::SetupBattleground() { if (!AddObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE+(i*10)+j, BG_AV_OBJECTID_SMOKE, - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][0], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][1], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][2], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3], + BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j], 0, 0, - std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2), - std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2), + std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!6.%i", i); @@ -1363,14 +1301,11 @@ bool BattlegroundAV::SetupBattleground() { if (!AddObject(BG_AV_OBJECT_BURN_BUILDING_ALLIANCE+(i*10)+j, BG_AV_OBJECTID_FIRE, - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][0], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][1], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][2], - BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3], + BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j], 0, 0, - std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2), - std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j][3]/2), + std::sin(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[AV_OPLACE_BURN_BUILDING_A+(i*10)+j].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!7.%i", i); @@ -1383,14 +1318,11 @@ bool BattlegroundAV::SetupBattleground() { if (!AddObject(BG_AV_OBJECT_MINE_SUPPLY_N_MIN+i, BG_AV_OBJECTID_MINE_N, - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][0], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][1], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][2], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3], + BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i], 0, 0, - std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3]/2), - std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i][3]/2), + std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_N_MIN+i].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.5.%i", i); @@ -1401,14 +1333,11 @@ bool BattlegroundAV::SetupBattleground() { if (!AddObject(BG_AV_OBJECT_MINE_SUPPLY_S_MIN+i, BG_AV_OBJECTID_MINE_S, - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][0], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][1], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][2], - BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3], + BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i], 0, 0, - std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3]/2), - std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i][3]/2), + std::sin(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[AV_OPLACE_MINE_SUPPLY_S_MIN+i].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some mine supplies Battleground not created!7.6.%i", i); @@ -1418,14 +1347,11 @@ bool BattlegroundAV::SetupBattleground() if (!AddObject(BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE, BG_AV_OBJECTID_BANNER_SNOWFALL_N, - BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][0], - BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][1], - BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][2], - BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3], + BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE], 0, 0, - std::sin(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3]/2), - std::cos(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE][3]/2), + std::sin(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE].GetOrientation()/2), + std::cos(BG_AV_ObjectPos[BG_AV_NODES_SNOWFALL_GRAVE].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!8"); @@ -1434,17 +1360,17 @@ bool BattlegroundAV::SetupBattleground() for (uint8 i = 0; i < 4; i++) { if (!AddObject(BG_AV_OBJECT_SNOW_EYECANDY_A+i, BG_AV_OBJECTID_SNOWFALL_CANDY_A, - BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3], - 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i], + 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_PA+i, BG_AV_OBJECTID_SNOWFALL_CANDY_PA, - BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3], - 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i], + 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_H+i, BG_AV_OBJECTID_SNOWFALL_CANDY_H, - BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3], - 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY) + BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i], + 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY) || !AddObject(BG_AV_OBJECT_SNOW_EYECANDY_PH+i, BG_AV_OBJECTID_SNOWFALL_CANDY_PH, - BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][0], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][1], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][2], BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3], - 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i][3]/2), RESPAWN_ONE_DAY)) + BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i], + 0, 0, std::sin(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), std::cos(BG_AV_ObjectPos[AV_OPLACE_SNOW_1+i].GetOrientation()/2), RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "BatteGroundAV: Failed to spawn some object Battleground not created!9.%i", i); return false; @@ -1504,8 +1430,8 @@ bool BattlegroundAV::SetupBattleground() AddAVCreature(0, i + AV_CPLACE_MAX); //mainspiritguides: TC_LOG_DEBUG("bg.battleground", "BG_AV: start spawning spiritguides creatures"); - AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE); - AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE); + AddSpiritGuide(7, BG_AV_CreaturePos[7], TEAM_ALLIANCE); + AddSpiritGuide(8, BG_AV_CreaturePos[8], TEAM_HORDE); //spawn the marshals (those who get deleted, if a tower gets destroyed) TC_LOG_DEBUG("bg.battleground", "BG_AV: start spawning marshal creatures"); for (i = AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++) @@ -1608,8 +1534,6 @@ void BattlegroundAV::DefendNode(BG_AV_Nodes node, uint16 team) void BattlegroundAV::ResetBGSubclass() { - m_MaxLevel=0; - for (uint8 i=0; i<2; i++) //forloop for both teams (it just make 0 == alliance and 1 == horde also for both mines 0=north 1=south { for (uint8 j=0; j<9; j++) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 716e675a840..feb3c016e55 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -20,6 +20,8 @@ #define __BATTLEGROUNDAV_H #include "Battleground.h" +#include "BattlegroundScore.h" +#include "Object.h" #define LANG_BG_AV_A_CAPTAIN_BUFF "Begone. Uncouth scum! The Alliance shall prevail in Alterac Valley!" #define LANG_BG_AV_H_CAPTAIN_BUFF "Now is the time to attack! For the Horde!" @@ -130,10 +132,10 @@ enum BG_AV_ObjectIds BG_AV_OBJECTID_SNOWFALL_CANDY_PH = 179425, //banners on top of towers: - BG_AV_OBJECTID_TOWER_BANNER_A = 178927, //[PH] Alliance A1 Tower Banner BIG - BG_AV_OBJECTID_TOWER_BANNER_H = 178955, //[PH] Horde H1 Tower Banner BIG - BG_AV_OBJECTID_TOWER_BANNER_PA = 179446, //[PH] Alliance H1 Tower Pre-Banner BIG - BG_AV_OBJECTID_TOWER_BANNER_PH = 179436, //[PH] Horde A1 Tower Pre-Banner BIG + BG_AV_OBJECTID_TOWER_BANNER_A = 178927, //[PH] Alliance A1 Tower Banner BIG + BG_AV_OBJECTID_TOWER_BANNER_H = 178955, //[PH] Horde H1 Tower Banner BIG + BG_AV_OBJECTID_TOWER_BANNER_PA = 179446, //[PH] Alliance H1 Tower Pre-Banner BIG + BG_AV_OBJECTID_TOWER_BANNER_PH = 179436, //[PH] Horde A1 Tower Pre-Banner BIG //Auras BG_AV_OBJECTID_AURA_A = 180421, @@ -147,11 +149,11 @@ enum BG_AV_ObjectIds BG_AV_OBJECTID_GATE_H = 180424, //mine supplies - BG_AV_OBJECTID_MINE_N = 178785, - BG_AV_OBJECTID_MINE_S = 178784, + BG_AV_OBJECTID_MINE_N = 178785, + BG_AV_OBJECTID_MINE_S = 178784, BG_AV_OBJECTID_FIRE = 179065, - BG_AV_OBJECTID_SMOKE = 179066 + BG_AV_OBJECTID_SMOKE = 179066 }; enum BG_AV_Nodes @@ -305,58 +307,58 @@ enum BG_AV_ObjectTypes BG_AV_OBJECT_MINE_SUPPLY_S_MIN = 225, BG_AV_OBJECT_MINE_SUPPLY_S_MAX = 236, - BG_AV_OBJECT_MAX = 237 + BG_AV_OBJECT_MAX = 237 }; enum BG_AV_OBJECTS { - AV_OPLACE_FIRSTAID_STATION = 0, - AV_OPLACE_STORMPIKE_GRAVE = 1, - AV_OPLACE_STONEHEART_GRAVE = 2, - AV_OPLACE_SNOWFALL_GRAVE = 3, - AV_OPLACE_ICEBLOOD_GRAVE = 4, - AV_OPLACE_FROSTWOLF_GRAVE = 5, - AV_OPLACE_FROSTWOLF_HUT = 6, - AV_OPLACE_DUNBALDAR_SOUTH = 7, - AV_OPLACE_DUNBALDAR_NORTH = 8, - AV_OPLACE_ICEWING_BUNKER = 9, - AV_OPLACE_STONEHEART_BUNKER = 10, - AV_OPLACE_ICEBLOOD_TOWER = 11, - AV_OPLACE_TOWER_POINT = 12, - AV_OPLACE_FROSTWOLF_ETOWER = 13, - AV_OPLACE_FROSTWOLF_WTOWER = 14, - AV_OPLACE_BIGBANNER_DUNBALDAR_SOUTH = 15, - AV_OPLACE_BIGBANNER_DUNBALDAR_NORTH = 16, - AV_OPLACE_BIGBANNER_ICEWING_BUNKER = 17, - AV_OPLACE_BIGBANNER_STONEHEART_BUNKER = 18, - AV_OPLACE_BIGBANNER_ICEBLOOD_TOWER = 19, - AV_OPLACE_BIGBANNER_TOWER_POINT = 20, - AV_OPLACE_BIGBANNER_FROSTWOLF_ETOWER = 21, - AV_OPLACE_BIGBANNER_FROSTWOLF_WTOWER = 22, - - AV_OPLACE_BURN_DUNBALDAR_SOUTH = 23, - AV_OPLACE_BURN_DUNBALDAR_NORTH = 33, - AV_OPLACE_BURN_ICEWING_BUNKER = 43, - AV_OPLACE_BURN_STONEHEART_BUNKER = 53, - AV_OPLACE_BURN_ICEBLOOD_TOWER = 63, - AV_OPLACE_BURN_TOWER_POINT = 73, - AV_OPLACE_BURN_FROSTWOLF_ETOWER = 83, - AV_OPLACE_BURN_FROSTWOLF_WTOWER = 93, - AV_OPLACE_BURN_BUILDING_A = 103, - AV_OPLACE_BURN_BUILDING_H = 113, - AV_OPLACE_SNOW_1 = 123, - AV_OPLACE_SNOW_2 = 124, - AV_OPLACE_SNOW_3 = 125, - AV_OPLACE_SNOW_4 = 126, - AV_OPLACE_MINE_SUPPLY_N_MIN = 127, - AV_OPLACE_MINE_SUPPLY_N_MAX = 136, - AV_OPLACE_MINE_SUPPLY_S_MIN = 137, - AV_OPLACE_MINE_SUPPLY_S_MAX = 148, - - AV_OPLACE_MAX = 149 + AV_OPLACE_FIRSTAID_STATION = 0, + AV_OPLACE_STORMPIKE_GRAVE = 1, + AV_OPLACE_STONEHEART_GRAVE = 2, + AV_OPLACE_SNOWFALL_GRAVE = 3, + AV_OPLACE_ICEBLOOD_GRAVE = 4, + AV_OPLACE_FROSTWOLF_GRAVE = 5, + AV_OPLACE_FROSTWOLF_HUT = 6, + AV_OPLACE_DUNBALDAR_SOUTH = 7, + AV_OPLACE_DUNBALDAR_NORTH = 8, + AV_OPLACE_ICEWING_BUNKER = 9, + AV_OPLACE_STONEHEART_BUNKER = 10, + AV_OPLACE_ICEBLOOD_TOWER = 11, + AV_OPLACE_TOWER_POINT = 12, + AV_OPLACE_FROSTWOLF_ETOWER = 13, + AV_OPLACE_FROSTWOLF_WTOWER = 14, + AV_OPLACE_BIGBANNER_DUNBALDAR_SOUTH = 15, + AV_OPLACE_BIGBANNER_DUNBALDAR_NORTH = 16, + AV_OPLACE_BIGBANNER_ICEWING_BUNKER = 17, + AV_OPLACE_BIGBANNER_STONEHEART_BUNKER = 18, + AV_OPLACE_BIGBANNER_ICEBLOOD_TOWER = 19, + AV_OPLACE_BIGBANNER_TOWER_POINT = 20, + AV_OPLACE_BIGBANNER_FROSTWOLF_ETOWER = 21, + AV_OPLACE_BIGBANNER_FROSTWOLF_WTOWER = 22, + + AV_OPLACE_BURN_DUNBALDAR_SOUTH = 23, + AV_OPLACE_BURN_DUNBALDAR_NORTH = 33, + AV_OPLACE_BURN_ICEWING_BUNKER = 43, + AV_OPLACE_BURN_STONEHEART_BUNKER = 53, + AV_OPLACE_BURN_ICEBLOOD_TOWER = 63, + AV_OPLACE_BURN_TOWER_POINT = 73, + AV_OPLACE_BURN_FROSTWOLF_ETOWER = 83, + AV_OPLACE_BURN_FROSTWOLF_WTOWER = 93, + AV_OPLACE_BURN_BUILDING_A = 103, + AV_OPLACE_BURN_BUILDING_H = 113, + AV_OPLACE_SNOW_1 = 123, + AV_OPLACE_SNOW_2 = 124, + AV_OPLACE_SNOW_3 = 125, + AV_OPLACE_SNOW_4 = 126, + AV_OPLACE_MINE_SUPPLY_N_MIN = 127, + AV_OPLACE_MINE_SUPPLY_N_MAX = 136, + AV_OPLACE_MINE_SUPPLY_S_MIN = 137, + AV_OPLACE_MINE_SUPPLY_S_MAX = 148, + + AV_OPLACE_MAX = 149 }; -const float BG_AV_ObjectPos[AV_OPLACE_MAX][4] = +Position const BG_AV_ObjectPos[AV_OPLACE_MAX] = { {638.592f, -32.422f, 46.0608f, -1.62316f }, //firstaid station {669.007f, -294.078f, 30.2909f, 2.77507f }, //stormpike @@ -528,7 +530,7 @@ const float BG_AV_ObjectPos[AV_OPLACE_MAX][4] = {-951.394f, -193.695f, 67.634f, 0.802851f} }; -const float BG_AV_DoorPositons[2][4] = +Position const BG_AV_DoorPositons[2] = { {780.487f, -493.024f, 99.9553f, 3.0976f}, //alliance {-1375.193f, -538.981f, 55.2824f, 0.72178f} //horde @@ -624,8 +626,7 @@ enum BG_AV_CreaturePlace AV_CPLACE_MAX = 321 }; -//x, y, z, o -const float BG_AV_CreaturePos[AV_CPLACE_MAX][4] = +Position const BG_AV_CreaturePos[AV_CPLACE_MAX] = { //spiritguides {643.000000f, 44.000000f, 69.740196f, -0.001854f}, @@ -1228,59 +1229,59 @@ const float BG_AV_StaticCreaturePos[AV_STATICCPLACE_MAX][5] = {-1370.9f, -219.793f, 98.4258f, 5.04381f, 47}, //drek thar }; -const uint32 BG_AV_StaticCreatureInfo[51][4] = +const uint32 BG_AV_StaticCreatureInfo[51] = { - { 2225, 1215, 55, 55 }, //Zora Guthrek - { 3343, 1215, 55, 55 }, //Grelkor - { 3625, 1215, 55, 55 }, //Rarck - { 4255, 1217, 55, 55 }, //Brogus Thunderbrew - { 4257, 1217, 55, 55 }, //Lana Thunderbrew - { 5134, 1217, 55, 55 }, //Jonivera Farmountain - { 5135, 1217, 55, 55 }, //Svalbrad Farmountain - { 5139, 1217, 55, 55 }, //Kurdrum Barleybeard - { 10364, 1215, 55, 55 }, //Yaelika Farclaw - { 10367, 1215, 55, 55 }, //Shrye Ragefist - { 10981, 38, 50, 51 }, //Frostwolf - { 10986, 514, 52, 53 }, //Snowblind Harpy - { 10990, 1274, 50, 51 }, //Alterac Ram - { 11675, 514, 53, 53 }, //Snowblind Windcaller - { 11678, 14, 52, 53 }, //Snowblind Ambusher - { 11839, 39, 56, 56 }, //Wildpaw Brute - { 11947, 1214, 61, 61 }, // Captain Galvangar /// @todo: Duplicate ? Check and confirm - { 11948, 1216, 63, 63 }, //Vanndar Stormpike - { 11949, 1216, 61, 61 }, //Captain Balinda Stonehearth - { 11997, 1334, 60, 60 }, //Stormpike Herald - { 12051, 1214, 57, 57 }, //Frostwolf Legionnaire - { 12096, 1217, 55, 55 }, //Stormpike Quartermaster - { 12097, 1215, 55, 55 }, //Frostwolf Quartermaster - { 12127, 1216, 57, 57 }, //Stormpike Guardsman - { 13176, 1215, 60, 60 }, //Smith Regzar - { 13179, 1215, 59, 59 }, //Wing Commander Guse - { 13216, 1217, 58, 58 }, //Gaelden Hammersmith - { 13218, 1215, 58, 58 }, //Grunnda Wolfheart - { 13236, 1214, 60, 60 }, //Primalist Thurloga - { 13257, 1216, 60, 60 }, //Murgot Deepforge - { 13284, 1214, 58, 58 }, //Frostwolf Shaman - { 13438, 1217, 58, 58 }, //Wing Commander Slidore - { 13442, 1216, 60, 60 }, //Arch Druid Renferal - { 13443, 1216, 60, 60 }, //Druid of the Grove - { 13447, 1216, 58, 58 }, //Corporal Noreg Stormpike - { 13577, 1216, 60, 60 }, //Stormpike Ram Rider Commander - { 13617, 1216, 60, 60 }, //Stormpike Stable Master - { 13797, 32, 60, 61 }, //Mountaineer Boombellow - { 13798, 1214, 60, 61 }, //Jotek - { 13816, 1216, 61, 61 }, //Prospector Stonehewer - { 14185, 877, 59, 59 }, //Najak Hexxen - { 14186, 105, 60, 60 }, //Ravak Grimtotem - { 14187, 1594, 60, 60 }, //Athramanis - { 14188, 57, 59, 59 }, //Dirk Swindle - { 14282, 1214, 53, 54 }, //Frostwolf Bloodhound - { 14283, 1216, 53, 54 }, //Stormpike Owl - { 14284, 1216, 61, 61 }, //Stormpike Battleguard - { 11946, 1214, 63, 63 }, //Drek'Thar /// @todo: Correct the level (Level 80 for boss ?) - { 11948, 1216, 63, 63 }, //Vanndar Stormpike - { 11947, 1214, 61, 61 }, //Captain Galvangar - { 11949, 1216, 61, 61 } //Captain Balinda Stonehearth + 2225, // Zora Guthrek + 3343, // Grelkor + 3625, // Rarck + 4255, // Brogus Thunderbrew + 4257, // Lana Thunderbrew + 5134, // Jonivera Farmountain + 5135, // Svalbrad Farmountain + 5139, // Kurdrum Barleybeard + 10364, // Yaelika Farclaw + 10367, // Shrye Ragefist + 10981, // Frostwolf + 10986, // Snowblind Harpy + 10990, // Alterac Ram + 11675, // Snowblind Windcaller + 11678, // Snowblind Ambusher + 11839, // Wildpaw Brute + 11947, // Captain Galvangar + 11948, // Vanndar Stormpike + 11949, // Captain Balinda Stonehearth + 11997, // Stormpike Herald + 12051, // Frostwolf Legionnaire + 12096, // Stormpike Quartermaster + 12097, // Frostwolf Quartermaster + 12127, // Stormpike Guardsman + 13176, // Smith Regzar + 13179, // Wing Commander Guse + 13216, // Gaelden Hammersmith + 13218, // Grunnda Wolfheart + 13236, // Primalist Thurloga + 13257, // Murgot Deepforge + 13284, // Frostwolf Shaman + 13438, // Wing Commander Slidore + 13442, // Arch Druid Renferal + 13443, // Druid of the Grove + 13447, // Corporal Noreg Stormpike + 13577, // Stormpike Ram Rider Commander + 13617, // Stormpike Stable Master + 13797, // Mountaineer Boombellow + 13798, // Jotek + 13816, // Prospector Stonehewer + 14185, // Najak Hexxen + 14186, // Ravak Grimtotem + 14187, // Athramanis + 14188, // Dirk Swindle + 14282, // Frostwolf Bloodhound + 14283, // Stormpike Owl + 14284, // Stormpike Battleguard + 11946, // Drek'Thar + 11948, // Vanndar Stormpike + 11947, // Captain Galvangar + 11949, // Captain Balinda Stonehearth }; enum BG_AV_Graveyards @@ -1525,18 +1526,53 @@ struct BG_AV_NodeInfo inline BG_AV_Nodes &operator++(BG_AV_Nodes &i){ return i = BG_AV_Nodes(i + 1); } -struct BattlegroundAVScore : public BattlegroundScore +struct BattlegroundAVScore final : public BattlegroundScore { - BattlegroundAVScore() : GraveyardsAssaulted(0), GraveyardsDefended(0), TowersAssaulted(0), - TowersDefended(0), MinesCaptured(0), LeadersKilled(0), SecondaryObjectives(0) { } - ~BattlegroundAVScore() { } - uint32 GraveyardsAssaulted; - uint32 GraveyardsDefended; - uint32 TowersAssaulted; - uint32 TowersDefended; - uint32 MinesCaptured; - uint32 LeadersKilled; - uint32 SecondaryObjectives; + friend class BattlegroundAV; + + protected: + BattlegroundAVScore(uint64 playerGuid) : BattlegroundScore(playerGuid), GraveyardsAssaulted(0), GraveyardsDefended(0), TowersAssaulted(0), TowersDefended(0), MinesCaptured(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_GRAVEYARDS_ASSAULTED: + GraveyardsAssaulted += value; + break; + case SCORE_GRAVEYARDS_DEFENDED: + GraveyardsDefended += value; + break; + case SCORE_TOWERS_ASSAULTED: + TowersAssaulted += value; + break; + case SCORE_TOWERS_DEFENDED: + TowersDefended += value; + break; + case SCORE_MINES_CAPTURED: + MinesCaptured += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(5); // Objectives Count + data << uint32(GraveyardsAssaulted); + data << uint32(GraveyardsDefended); + data << uint32(TowersAssaulted); + data << uint32(TowersDefended); + data << uint32(MinesCaptured); + } + + uint32 GraveyardsAssaulted; + uint32 GraveyardsDefended; + uint32 TowersAssaulted; + uint32 TowersDefended; + uint32 MinesCaptured; }; class BattlegroundAV : public Battleground @@ -1557,7 +1593,7 @@ class BattlegroundAV : public Battleground /*general stuff*/ void UpdateScore(uint16 team, int16 points); - void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); + bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override; /*handlestuff*/ //these are functions which get called from extern void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj); @@ -1607,7 +1643,6 @@ class BattlegroundAV : public Battleground /*general */ Creature* AddAVCreature(uint16 cinfoid, uint16 type); - uint16 GetBonusHonor(uint8 kills); /// @todo: Remove this when the core handles this properly /*variables */ int32 m_Team_Scores[2]; @@ -1622,7 +1657,6 @@ class BattlegroundAV : public Battleground uint32 m_CaptainBuffTimer[2]; bool m_CaptainAlive[2]; - uint8 m_MaxLevel; /// @todo: Remove this once battleground->getmaxlevel() returns something usefull/is reworked (?) bool m_IsInformedNearVictory[2]; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp index c89fc57b8aa..548e0bf463b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "BattlegroundBE.h" #include "Language.h" #include "Object.h" @@ -64,7 +65,7 @@ void BattlegroundBE::StartingEventOpenDoors() void BattlegroundBE::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundScore; + PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); UpdateArenaWorldState(); } @@ -139,13 +140,3 @@ bool BattlegroundBE::SetupBattleground() return true; } - -void BattlegroundBE::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) -{ - BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID()); - if (itr == PlayerScores.end()) // player not found... - return; - - //there is nothing special in this score - Battleground::UpdatePlayerScore(Source, type, value, doAddHonor); -} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h index be801dfff2b..6fd4dc37fc8 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h @@ -59,8 +59,5 @@ class BattlegroundBE : public Battleground void Reset(); void FillInitialWorldStates(WorldPacket &d); void HandleKillPlayer(Player* player, Player* killer); - - /* Scorekeeping */ - void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true); }; #endif diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp index 3eb52945236..1d6970f8317 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "BattlegroundDS.h" #include "Creature.h" #include "GameObject.h" @@ -152,7 +153,7 @@ void BattlegroundDS::StartingEventOpenDoors() void BattlegroundDS::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundScore; + PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); UpdateArenaWorldState(); } @@ -223,16 +224,16 @@ bool BattlegroundDS::SetupBattleground() // gates if (!AddObject(BG_DS_OBJECT_DOOR_1, BG_DS_OBJECT_TYPE_DOOR_1, 1350.95f, 817.2f, 20.8096f, 3.15f, 0, 0, 0.99627f, 0.0862864f, RESPAWN_IMMEDIATELY) || !AddObject(BG_DS_OBJECT_DOOR_2, BG_DS_OBJECT_TYPE_DOOR_2, 1232.65f, 764.913f, 20.0729f, 6.3f, 0, 0, 0.0310211f, -0.999519f, RESPAWN_IMMEDIATELY) - // water + // water || !AddObject(BG_DS_OBJECT_WATER_1, BG_DS_OBJECT_TYPE_WATER_1, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120) || !AddObject(BG_DS_OBJECT_WATER_2, BG_DS_OBJECT_TYPE_WATER_2, 1291.56f, 790.837f, 7.1f, 3.14238f, 0, 0, 0.694215f, -0.719768f, 120) - // buffs + // buffs || !AddObject(BG_DS_OBJECT_BUFF_1, BG_DS_OBJECT_TYPE_BUFF_1, 1291.7f, 813.424f, 7.11472f, 4.64562f, 0, 0, 0.730314f, -0.683111f, 120) || !AddObject(BG_DS_OBJECT_BUFF_2, BG_DS_OBJECT_TYPE_BUFF_2, 1291.7f, 768.911f, 7.11472f, 1.55194f, 0, 0, 0.700409f, 0.713742f, 120) - // knockback creatures - || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_WATERFALL_KNOCKBACK, 0, 1292.587f, 790.2205f, 7.19796f, 3.054326f, RESPAWN_IMMEDIATELY) - || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_1, 0, 1369.977f, 817.2882f, 16.08718f, 3.106686f, RESPAWN_IMMEDIATELY) - || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_2, 0, 1212.833f, 765.3871f, 16.09484f, 0.0f, RESPAWN_IMMEDIATELY)) + // knockback creatures + || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_WATERFALL_KNOCKBACK, 1292.587f, 790.2205f, 7.19796f, 3.054326f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY) + || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_1, 1369.977f, 817.2882f, 16.08718f, 3.106686f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY) + || !AddCreature(BG_DS_NPC_TYPE_WATER_SPOUT, BG_DS_NPC_PIPE_KNOCKBACK_2, 1212.833f, 765.3871f, 16.09484f, 0.0f, TEAM_NEUTRAL, RESPAWN_IMMEDIATELY)) { TC_LOG_ERROR("sql.sql", "BatteGroundDS: Failed to spawn some object!"); return false; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index be2684631df..ca96140f5da 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -23,7 +23,6 @@ #include "BattlegroundMgr.h" #include "Creature.h" #include "Language.h" -#include "Object.h" #include "Player.h" #include "Util.h" @@ -364,12 +363,9 @@ void BattlegroundEY::UpdatePointsIcons(uint32 Team, uint32 Point) void BattlegroundEY::AddPlayer(Player* player) { Battleground::AddPlayer(player); - //create score and add it to map - BattlegroundEYScore* sc = new BattlegroundEYScore; + PlayerScores[player->GetGUIDLow()] = new BattlegroundEYScore(player->GetGUID()); m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID()); - - PlayerScores[player->GetGUID()] = sc; } void BattlegroundEY::RemovePlayer(Player* player, uint64 guid, uint32 /*team*/) @@ -523,14 +519,14 @@ bool BattlegroundEY::SetupBattleground() WorldSafeLocsEntry const* sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_ALLIANCE); - if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE)) + if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE)) { TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!"); return false; } sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_HORDE); - if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE)) + if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE)) { TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide! Battleground not created!"); return false; @@ -768,7 +764,7 @@ void BattlegroundEY::EventTeamCapturedPoint(Player* player, uint32 Point) WorldSafeLocsEntry const* sg = NULL; sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[Point].GraveYardId); - if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, Team)) + if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, GetTeamIndexByTeamId(Team))) TC_LOG_ERROR("bg.battleground", "BatteGroundEY: Failed to spawn spirit guide! point: %u, team: %u, graveyard_id: %u", Point, Team, m_CapturingPointTypes[Point].GraveYardId); @@ -780,9 +776,9 @@ void BattlegroundEY::EventTeamCapturedPoint(Player* player, uint32 Point) if (Point >= EY_POINTS_MAX) return; - Creature* trigger = GetBGCreature(Point + 6);//0-5 spirit guides + Creature* trigger = GetBGCreature(Point + 6, false);//0-5 spirit guides if (!trigger) - trigger = AddCreature(WORLD_TRIGGER, Point+6, Team, BG_EY_TriggerPositions[Point][0], BG_EY_TriggerPositions[Point][1], BG_EY_TriggerPositions[Point][2], BG_EY_TriggerPositions[Point][3]); + trigger = AddCreature(WORLD_TRIGGER, Point+6, BG_EY_TriggerPositions[Point], GetTeamIndexByTeamId(Team)); //add bonus honor aura trigger creature when node is accupied //cast bonus aura (+50% honor in 25yards) @@ -833,22 +829,20 @@ void BattlegroundEY::EventPlayerCapturedFlag(Player* player, uint32 BgObjectType UpdatePlayerScore(player, SCORE_FLAG_CAPTURES, 1); } -void BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) +bool BattlegroundEY::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) { - BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID()); - if (itr == PlayerScores.end()) // player not found - return; + if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor)) + return false; switch (type) { - case SCORE_FLAG_CAPTURES: // flags captured - ((BattlegroundEYScore*)itr->second)->FlagCaptures += value; + case SCORE_FLAG_CAPTURES: player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, EY_OBJECTIVE_CAPTURE_FLAG); break; default: - Battleground::UpdatePlayerScore(player, type, value, doAddHonor); break; } + return true; } void BattlegroundEY::FillInitialWorldStates(WorldPacket& data) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index baa75129c1e..056deb3498b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -19,8 +19,10 @@ #ifndef __BATTLEGROUNDEY_H #define __BATTLEGROUNDEY_H -#include "Language.h" #include "Battleground.h" +#include "BattlegroundScore.h" +#include "Language.h" +#include "Object.h" enum BG_EY_Misc { @@ -255,8 +257,7 @@ struct BattlegroundEYPointIconsStruct uint32 WorldStateHordeControlledIndex; }; -// x, y, z, o -const float BG_EY_TriggerPositions[EY_POINTS_MAX][4] = +Position const BG_EY_TriggerPositions[EY_POINTS_MAX] = { {2044.28f, 1729.68f, 1189.96f, 0.017453f}, // FEL_REAVER center {2048.83f, 1393.65f, 1194.49f, 0.20944f}, // BLOOD_ELF center @@ -322,11 +323,33 @@ const BattlegroundEYCapturingPointStruct m_CapturingPointTypes[EY_POINTS_MAX] = BattlegroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_A_M_TOWER, BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_H_M_TOWER, EY_GRAVEYARD_MAGE_TOWER) }; -struct BattlegroundEYScore : public BattlegroundScore +struct BattlegroundEYScore final : public BattlegroundScore { - BattlegroundEYScore() : FlagCaptures(0) { } - ~BattlegroundEYScore() { } - uint32 FlagCaptures; + friend class BattlegroundEY; + + protected: + BattlegroundEYScore(uint64 playerGuid) : BattlegroundScore(playerGuid), FlagCaptures(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_FLAG_CAPTURES: // Flags captured + FlagCaptures += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(1); // Objectives Count + data << uint32(FlagCaptures); + } + + uint32 FlagCaptures; }; class BattlegroundEY : public Battleground @@ -357,7 +380,7 @@ class BattlegroundEY : public Battleground void Reset(); void UpdateTeamScore(uint32 Team); void EndBattleground(uint32 winner); - void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true); + bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override; void FillInitialWorldStates(WorldPacket& data); void SetDroppedFlagGUID(uint64 guid, int32 /*TeamID*/ = -1) { m_DroppedFlagGUID = guid;} uint64 GetDroppedFlagGUID() const { return m_DroppedFlagGUID;} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 590a07541fe..da0b00af40f 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -80,12 +80,11 @@ void BattlegroundIC::DoAction(uint32 action, uint64 var) if (!player) return; - player->SetTransport(player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde); + (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->AddPassenger(player); player->m_movementInfo.transport.pos.m_positionX = TransportMovementInfo.GetPositionX(); player->m_movementInfo.transport.pos.m_positionY = TransportMovementInfo.GetPositionY(); player->m_movementInfo.transport.pos.m_positionZ = TransportMovementInfo.GetPositionZ(); - player->m_movementInfo.transport.guid = (player->GetTeamId() == TEAM_ALLIANCE ? gunshipAlliance : gunshipHorde)->GetGUID(); if (player->TeleportTo(GetMapId(), TeleportToTransportPosition.GetPositionX(), TeleportToTransportPosition.GetPositionY(), @@ -274,7 +273,7 @@ void BattlegroundIC::StartingEventOpenDoors() void BattlegroundIC::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundICScore; + PlayerScores[player->GetGUIDLow()] = new BattlegroundICScore(player->GetGUID()); if (nodePoint[NODE_TYPE_QUARRY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H)) player->CastSpell(player, SPELL_QUARRY, true); @@ -315,27 +314,6 @@ void BattlegroundIC::HandleAreaTrigger(Player* player, uint32 trigger) } } -void BattlegroundIC::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) -{ - std::map<uint64, BattlegroundScore*>::iterator itr = PlayerScores.find(player->GetGUID()); - - if (itr == PlayerScores.end()) // player not found... - return; - - switch (type) - { - case SCORE_BASES_ASSAULTED: - ((BattlegroundICScore*)itr->second)->BasesAssaulted += value; - break; - case SCORE_BASES_DEFENDED: - ((BattlegroundICScore*)itr->second)->BasesDefended += value; - break; - default: - Battleground::UpdatePlayerScore(player, type, value, doAddHonor); - break; - } -} - void BattlegroundIC::FillInitialWorldStates(WorldPacket& data) { data << uint32(BG_IC_ALLIANCE_RENFORT_SET) << uint32(1); @@ -369,20 +347,20 @@ bool BattlegroundIC::SetupBattleground() for (uint8 i = 2; i < MAX_NORMAL_NPCS_SPAWNS; ++i) { - if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type, BG_IC_NpcSpawnlocs[i].team, + if (!AddCreature(BG_IC_NpcSpawnlocs[i].entry, BG_IC_NpcSpawnlocs[i].type, BG_IC_NpcSpawnlocs[i].x, BG_IC_NpcSpawnlocs[i].y, BG_IC_NpcSpawnlocs[i].z, BG_IC_NpcSpawnlocs[i].o, - RESPAWN_ONE_DAY)) + BG_IC_NpcSpawnlocs[i].team, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[i].entry); return false; } } - if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5][0], BG_IC_SpiritGuidePos[5][1], BG_IC_SpiritGuidePos[5][2], BG_IC_SpiritGuidePos[5][3], ALLIANCE) - || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6][0], BG_IC_SpiritGuidePos[6][1], BG_IC_SpiritGuidePos[6][2], BG_IC_SpiritGuidePos[6][3], HORDE) - || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7][0], BG_IC_SpiritGuidePos[7][1], BG_IC_SpiritGuidePos[7][2], BG_IC_SpiritGuidePos[7][3], ALLIANCE) - || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8][0], BG_IC_SpiritGuidePos[8][1], BG_IC_SpiritGuidePos[8][2], BG_IC_SpiritGuidePos[8][3], HORDE)) + if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+5, BG_IC_SpiritGuidePos[5], TEAM_ALLIANCE) + || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+6, BG_IC_SpiritGuidePos[6], TEAM_HORDE) + || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+3, BG_IC_SpiritGuidePos[7], TEAM_ALLIANCE) + || !AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+4, BG_IC_SpiritGuidePos[8], TEAM_HORDE)) { TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn initial spirit guide!"); return false; @@ -607,10 +585,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { if (nodePoint->nodeType != NODE_TYPE_REFINERY && nodePoint->nodeType != NODE_TYPE_QUARRY) { - if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, - BG_IC_SpiritGuidePos[nodePoint->nodeType][0], BG_IC_SpiritGuidePos[nodePoint->nodeType][1], - BG_IC_SpiritGuidePos[nodePoint->nodeType][2], BG_IC_SpiritGuidePos[nodePoint->nodeType][3], - (nodePoint->faction == TEAM_ALLIANCE ? ALLIANCE : HORDE))) + if (!AddSpiritGuide(BG_IC_NPC_SPIRIT_GUIDE_1+nodePoint->nodeType-2, BG_IC_SpiritGuidePos[nodePoint->nodeType], nodePoint->faction)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: Failed to spawn spirit guide! point: %u, team: %u, ", nodePoint->nodeType, nodePoint->faction); } @@ -625,9 +600,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { uint8 type = BG_IC_GO_HANGAR_TELEPORTER_1+u; if (!AddObject(type, (nodePoint->faction == TEAM_ALLIANCE ? GO_ALLIANCE_GUNSHIP_PORTAL : GO_HORDE_GUNSHIP_PORTAL), - BG_IC_HangarTeleporters[u].GetPositionX(), BG_IC_HangarTeleporters[u].GetPositionY(), - BG_IC_HangarTeleporters[u].GetPositionZ(), BG_IC_HangarTeleporters[u].GetOrientation(), - 0, 0, 0, 0, RESPAWN_ONE_DAY)) + BG_IC_HangarTeleporters[u], 0, 0, 0, 0, RESPAWN_ONE_DAY)) { TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning a gunship portal. Type: %u", BG_IC_GO_HANGAR_TELEPORTER_1+u); } @@ -658,7 +631,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_H : BG_IC_NPC_GLAIVE_THROWER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_2_H : BG_IC_NPC_GLAIVE_THROWER_2_A); ++i) { - if (Creature* glaiveThrower = GetBGCreature(i)) + if (Creature* glaiveThrower = GetBGCreature(i, false)) { if (Vehicle* vehicleGlaive = glaiveThrower->GetVehicleKit()) { @@ -670,7 +643,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_H : BG_IC_NPC_CATAPULT_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_4_H : BG_IC_NPC_CATAPULT_4_A); ++i) { - if (Creature* catapult = GetBGCreature(i)) + if (Creature* catapult = GetBGCreature(i, false)) { if (Vehicle* vehicleGlaive = catapult->GetVehicleKit()) { @@ -685,14 +658,12 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_GLAIVE_THROWER_1_A : BG_IC_NPC_GLAIVE_THROWER_1_H)+i; - if (GetBGCreature(type) && GetBGCreature(type)->IsAlive()) + if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; - if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, nodePoint->faction, - BG_IC_DocksVehiclesGlaives[i].GetPositionX(), BG_IC_DocksVehiclesGlaives[i].GetPositionY(), - BG_IC_DocksVehiclesGlaives[i].GetPositionZ(), BG_IC_DocksVehiclesGlaives[i].GetOrientation(), - RESPAWN_ONE_DAY)) - GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); + if (AddCreature(nodePoint->faction == TEAM_ALLIANCE ? NPC_GLAIVE_THROWER_A : NPC_GLAIVE_THROWER_H, type, + BG_IC_DocksVehiclesGlaives[i], nodePoint->faction, RESPAWN_ONE_DAY)) + GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // spawning catapults @@ -700,14 +671,11 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_CATAPULT_1_A : BG_IC_NPC_CATAPULT_1_H)+i; - if (GetBGCreature(type) && GetBGCreature(type)->IsAlive()) + if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; - if (AddCreature(NPC_CATAPULT, type, nodePoint->faction, - BG_IC_DocksVehiclesCatapults[i].GetPositionX(), BG_IC_DocksVehiclesCatapults[i].GetPositionY(), - BG_IC_DocksVehiclesCatapults[i].GetPositionZ(), BG_IC_DocksVehiclesCatapults[i].GetOrientation(), - RESPAWN_ONE_DAY)) - GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); + if (AddCreature(NPC_CATAPULT, type, BG_IC_DocksVehiclesCatapults[i], nodePoint->faction, RESPAWN_ONE_DAY)) + GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } break; case BG_IC_GO_WORKSHOP_BANNER: @@ -720,7 +688,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) // we must del opposing faction vehicles when the node is captured (unused ones) for (uint8 i = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_H : BG_IC_NPC_DEMOLISHER_1_A); i < (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_H : BG_IC_NPC_DEMOLISHER_4_A); ++i) { - if (Creature* demolisher = GetBGCreature(i)) + if (Creature* demolisher = GetBGCreature(i, false)) { if (Vehicle* vehicleDemolisher = demolisher->GetVehicleKit()) { @@ -735,20 +703,17 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) { uint8 type = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H)+i; - if (GetBGCreature(type) && GetBGCreature(type)->IsAlive()) + if (GetBGCreature(type, false) && GetBGCreature(type)->IsAlive()) continue; - if (AddCreature(NPC_DEMOLISHER, type, nodePoint->faction, - BG_IC_WorkshopVehicles[i].GetPositionX(), BG_IC_WorkshopVehicles[i].GetPositionY(), - BG_IC_WorkshopVehicles[i].GetPositionZ(), BG_IC_WorkshopVehicles[i].GetOrientation(), - RESPAWN_ONE_DAY)) + if (AddCreature(NPC_DEMOLISHER, type, BG_IC_WorkshopVehicles[i], nodePoint->faction, RESPAWN_ONE_DAY)) GetBGCreature(type)->setFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } // we check if the opossing siege engine is in use int8 enemySiege = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_H : BG_IC_NPC_SIEGE_ENGINE_A); - if (Creature* siegeEngine = GetBGCreature(enemySiege)) + if (Creature* siegeEngine = GetBGCreature(enemySiege, false)) { if (Vehicle* vehicleSiege = siegeEngine->GetVehicleKit()) { @@ -759,12 +724,10 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) } uint8 siegeType = (nodePoint->faction == TEAM_ALLIANCE ? BG_IC_NPC_SIEGE_ENGINE_A : BG_IC_NPC_SIEGE_ENGINE_H); - if (!GetBGCreature(siegeType) || !GetBGCreature(siegeType)->IsAlive()) + if (!GetBGCreature(siegeType, false) || !GetBGCreature(siegeType)->IsAlive()) { - AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, nodePoint->faction, - BG_IC_WorkshopVehicles[4].GetPositionX(), BG_IC_WorkshopVehicles[4].GetPositionY(), - BG_IC_WorkshopVehicles[4].GetPositionZ(), BG_IC_WorkshopVehicles[4].GetOrientation(), - RESPAWN_ONE_DAY); + AddCreature((nodePoint->faction == TEAM_ALLIANCE ? NPC_SIEGE_ENGINE_A : NPC_SIEGE_ENGINE_H), siegeType, + BG_IC_WorkshopVehicles[4], nodePoint->faction, RESPAWN_ONE_DAY); if (Creature* siegeEngine = GetBGCreature(siegeType)) { @@ -784,7 +747,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* nodePoint, bool recapture) if (GameObject* seaforiumBombs = GetBGObject(BG_IC_GO_SEAFORIUM_BOMBS_1+i)) { seaforiumBombs->SetRespawnTime(10); - seaforiumBombs->SetUInt32Value(GAMEOBJECT_FACTION, BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); + seaforiumBombs->SetFaction(BG_IC_Factions[(nodePoint->faction == TEAM_ALLIANCE ? 0 : 1)]); } } break; @@ -830,20 +793,18 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go) if (go->GetEntry() == GO_HORDE_GATE_1 || go->GetEntry() == GO_HORDE_GATE_2 || go->GetEntry() == GO_HORDE_GATE_3) { - if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].team, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].o, RESPAWN_ONE_DAY)) + if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].o, BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].team, RESPAWN_ONE_DAY)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[BG_IC_NPC_OVERLORD_AGMAR].entry); } else if (go->GetEntry() == GO_ALLIANCE_GATE_1 || go->GetEntry() == GO_ALLIANCE_GATE_2 || go->GetEntry() == GO_ALLIANCE_GATE_3) { - if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].team, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].o, RESPAWN_ONE_DAY)) + if (!GetBgMap()->GetCreature(BgCreatures[BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type]) && !AddCreature(BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].type, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].x, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].y, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].z, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].o, BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].team, RESPAWN_ONE_DAY)) TC_LOG_ERROR("bg.battleground", "Isle of Conquest: There was an error spawning creature %u", BG_IC_NpcSpawnlocs[BG_IC_NPC_HIGH_COMMANDER_HALFORD_WYRMBANE].entry); } SendMessage2ToAll(lang_entry, CHAT_MSG_BG_SYSTEM_NEUTRAL, NULL, (player->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_HORDE_KEEP : LANG_BG_IC_ALLIANCE_KEEP)); } -void BattlegroundIC::EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/, uint32 /*eventType*/) { } - WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player) { TeamId teamIndex = GetTeamIndexByTeamId(player->GetTeam()); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index 5238342ffcb..0b317cabef3 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -20,6 +20,7 @@ #define __BATTLEGROUNDIC_H #include "Battleground.h" +#include "BattlegroundScore.h" #include "Language.h" #include "Object.h" @@ -204,7 +205,7 @@ struct ICNpc { uint32 type; uint32 entry; - uint32 team; + TeamId team; float x; float y; float z; @@ -783,7 +784,7 @@ const uint32 BG_IC_GraveyardIds[MAX_NODE_TYPES+2] = {0, 0, 1480, 1481, 1482, 148 const Position TransportMovementInfo = {7.305609f, -0.095246f, 34.51022f, 0.0f}; const Position TeleportToTransportPosition = {661.0f, -1244.0f, 288.0f, 0.0f}; -const float BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2][4] = +Position const BG_IC_SpiritGuidePos[MAX_NODE_TYPES+2] = { {0.0f, 0.0f, 0.0f, 0.0f}, // no grave {0.0f, 0.0f, 0.0f, 0.0f}, // no grave @@ -819,7 +820,7 @@ struct ICNodePoint { uint32 gameobject_type; // with this we will get the GameObject of that point uint32 gameobject_entry; // what gameobject entry is active here. - uint8 faction; // who has this node + TeamId faction; // who has this node ICNodePointType nodeType; // here we can specify if it is graveyards, hangar etc... uint32 banners[4]; // the banners that have this point bool needChange; // this is used for the 1 minute time period after the point is captured @@ -847,12 +848,38 @@ enum HonorRewards WINNER_HONOR_AMOUNT = 500 }; -struct BattlegroundICScore : public BattlegroundScore +struct BattlegroundICScore final : public BattlegroundScore { - BattlegroundICScore() : BasesAssaulted(0), BasesDefended(0) { } - ~BattlegroundICScore() { } - uint32 BasesAssaulted; - uint32 BasesDefended; + friend class BattlegroundIC; + + protected: + BattlegroundICScore(uint64 playerGuid) : BattlegroundScore(playerGuid), BasesAssaulted(0), BasesDefended(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_BASES_ASSAULTED: + BasesAssaulted += value; + break; + case SCORE_BASES_DEFENDED: + BasesDefended += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(2); // Objectives Count + data << uint32(BasesAssaulted); + data << uint32(BasesDefended); + } + + uint32 BasesAssaulted; + uint32 BasesDefended; }; class BattlegroundIC : public Battleground @@ -876,14 +903,11 @@ class BattlegroundIC : public Battleground void EndBattleground(uint32 winner); void EventPlayerClickedOnFlag(Player* source, GameObject* /*target_obj*/); - void EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType); void DestroyGate(Player* player, GameObject* go); WorldSafeLocsEntry const* GetClosestGraveYard(Player* player); /* Scorekeeping */ - void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); - void FillInitialWorldStates(WorldPacket& data); void DoAction(uint32 action, uint64 var); @@ -895,6 +919,7 @@ class BattlegroundIC : public Battleground bool IsAllNodesControlledByTeam(uint32 team) const; bool IsSpellAllowed(uint32 spellId, Player const* player) const; + private: uint32 closeFortressDoorsTimer; bool doorsClosed; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp index 70a940ec853..82fcb2f6f91 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "BattlegroundNA.h" #include "Language.h" #include "Object.h" @@ -61,7 +62,7 @@ void BattlegroundNA::StartingEventOpenDoors() void BattlegroundNA::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundScore; + PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); UpdateArenaWorldState(); } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp index 5f77c57c064..712d9a6e296 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "BattlegroundRL.h" #include "Language.h" #include "Object.h" @@ -61,7 +62,7 @@ void BattlegroundRL::StartingEventOpenDoors() void BattlegroundRL::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundScore; + PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); UpdateArenaWorldState(); } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp index dd61b8b9e6f..1059124d041 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ArenaScore.h" #include "Battleground.h" #include "BattlegroundRV.h" #include "ObjectAccessor.h" @@ -99,7 +100,7 @@ void BattlegroundRV::StartingEventOpenDoors() void BattlegroundRV::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUID()] = new BattlegroundScore; + PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); UpdateWorldState(BG_RV_WORLD_STATE_A, GetAlivePlayersCountByTeam(ALLIANCE)); UpdateWorldState(BG_RV_WORLD_STATE_H, GetAlivePlayersCountByTeam(HORDE)); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index 126077f7988..7e90c0b3db0 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -17,10 +17,11 @@ */ #include "BattlegroundSA.h" -#include "Language.h" -#include "Player.h" #include "GameObject.h" +#include "Language.h" #include "ObjectMgr.h" +#include "Player.h" +#include "ScriptedCreature.h" #include "WorldPacket.h" #include "WorldSession.h" @@ -29,7 +30,8 @@ BattlegroundSA::BattlegroundSA() StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_SA_START_TWO_MINUTES; StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_SA_START_ONE_MINUTE; StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_BG_SA_START_HALF_MINUTE; - StartMessageIds[BG_STARTING_EVENT_FOURTH] = LANG_BG_SA_HAS_BEGUN; + StartMessageIds[BG_STARTING_EVENT_FOURTH] = 0; + BgObjects.resize(BG_SA_MAXOBJ); BgCreatures.resize(BG_SA_MAXNPC + BG_SA_MAX_GY); TimerEnabled = false; @@ -37,14 +39,14 @@ BattlegroundSA::BattlegroundSA() SignaledRoundTwo = false; SignaledRoundTwoHalfMin = false; InitSecondRound = false; - gateDestroyed = false; + _gateDestroyed = false; Attackers = TEAM_ALLIANCE; TotalTime = 0; EndRoundTimer = 0; ShipsStarted = false; - Status = BG_SA_NOTSTARTED; + Status = BG_SA_NOT_STARTED; - for (uint8 i = 0; i < 6; i++) + for (uint8 i = 0; i < MAX_GATES; ++i) GateStatus[i] = BG_SA_GATE_OK; for (uint8 i = 0; i < 2; i++) @@ -69,7 +71,7 @@ void BattlegroundSA::Reset() for (uint8 i = 0; i <= 5; i++) GateStatus[i] = BG_SA_GATE_OK; ShipsStarted = false; - gateDestroyed = false; + _gateDestroyed = false; _allVehiclesAlive[TEAM_ALLIANCE] = true; _allVehiclesAlive[TEAM_HORDE] = true; Status = BG_SA_WARMUP; @@ -101,9 +103,11 @@ bool BattlegroundSA::ResetObjs() for (uint8 i = 0; i < 6; i++) GateStatus[i] = BG_SA_GATE_OK; + AddCreature(BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD], BG_SA_NPC_KANRETHAD, BG_SA_NpcSpawnlocs[BG_SA_NPC_KANRETHAD]); + for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { - if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) + if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } @@ -121,20 +125,17 @@ bool BattlegroundSA::ResetObjs() default: break; } - if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i][0], - BG_SA_ObjSpawnlocs[i][1], - BG_SA_ObjSpawnlocs[i][2]+(Attackers ? -3.750f: 0), - BG_SA_ObjSpawnlocs[i][3], 0, 0, 0, 0, RESPAWN_ONE_DAY)) + if (!AddObject(i, boatid, BG_SA_ObjSpawnlocs[i].GetPositionX(), + BG_SA_ObjSpawnlocs[i].GetPositionY(), + BG_SA_ObjSpawnlocs[i].GetPositionZ() + (Attackers ? -3.750f: 0), + BG_SA_ObjSpawnlocs[i].GetOrientation(), 0, 0, 0, 0, RESPAWN_ONE_DAY)) return false; } for (uint8 i = BG_SA_SIGIL_1; i <= BG_SA_LEFT_FLAGPOLE; i++) { - if (!AddObject(i, BG_SA_ObjEntries[i], - BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], - BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], - 0, 0, 0, 0, RESPAWN_ONE_DAY)) - return false; + if (!AddObject(i, BG_SA_ObjEntries[i], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) + return false; } // MAD props for Kiper for discovering those values - 4 hours of his work. @@ -147,10 +148,8 @@ bool BattlegroundSA::ResetObjs() //By capturing GYs. for (uint8 i = 0; i < BG_SA_DEMOLISHER_5; i++) { - if (!AddCreature(BG_SA_NpcEntries[i], i, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), - BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1], - BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3], 600)) - return false; + if (!AddCreature(BG_SA_NpcEntries[i], i, BG_SA_NpcSpawnlocs[i], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600)) + return false; } OverrideGunFaction(); @@ -159,10 +158,10 @@ bool BattlegroundSA::ResetObjs() for (uint8 i = 0; i <= BG_SA_PORTAL_DEFFENDER_RED; i++) { SpawnBGObject(i, RESPAWN_IMMEDIATELY); - GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, defF); + GetBGObject(i)->SetFaction(defF); } - GetBGObject(BG_SA_TITAN_RELIC)->SetUInt32Value(GAMEOBJECT_FACTION, atF); + GetBGObject(BG_SA_TITAN_RELIC)->SetFaction(atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); for (uint8 i = 0; i <= 5; i++) @@ -186,12 +185,12 @@ bool BattlegroundSA::ResetObjs() if (i == BG_SA_BEACH_GY) { GraveyardStatus[i] = Attackers; - AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? HORDE : ALLIANCE)); + AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers); } else { GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE); - if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], ((Attackers == TEAM_HORDE)? ALLIANCE : HORDE))) + if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], Attackers == TEAM_HORDE ? TEAM_ALLIANCE : TEAM_HORDE)) TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: %u", i); } } @@ -199,20 +198,14 @@ bool BattlegroundSA::ResetObjs() //GY capture points for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; i++) { - AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), - BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], - BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], - 0, 0, 0, 0, RESPAWN_ONE_DAY); - GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF); + AddObject(i, (BG_SA_ObjEntries[i] - (Attackers == TEAM_ALLIANCE ? 1 : 0)), BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY); + GetBGObject(i)->SetFaction(atF); } for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { - AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], - BG_SA_ObjSpawnlocs[i][0], BG_SA_ObjSpawnlocs[i][1], - BG_SA_ObjSpawnlocs[i][2], BG_SA_ObjSpawnlocs[i][3], - 0, 0, 0, 0, RESPAWN_ONE_DAY); - GetBGObject(i)->SetUInt32Value(GAMEOBJECT_FACTION, atF); + AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY); + GetBGObject(i)->SetFaction(atF); } //Player may enter BEFORE we set up BG - lets update his worldstates anyway... @@ -316,11 +309,14 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff) } TotalTime += diff; - if (Status == BG_SA_WARMUP ) + if (Status == BG_SA_WARMUP) { EndRoundTimer = BG_SA_ROUNDLENGTH; if (TotalTime >= BG_SA_WARMUPLENGTH) { + if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) + SendChatMessage(c, TEXT_ROUND_STARTED); + TotalTime = 0; ToggleTimer(); DemolisherStartState(false); @@ -340,7 +336,9 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff) if (TotalTime >= 60000) { - SendWarningToAll(LANG_BG_SA_HAS_BEGUN); + if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) + SendChatMessage(c, TEXT_ROUND_STARTED); + TotalTime = 0; ToggleTimer(); DemolisherStartState(false); @@ -380,6 +378,9 @@ void BattlegroundSA::PostUpdateImpl(uint32 diff) InitSecondRound = true; ToggleTimer(); ResetObjs(); + GetBgMap()->UpdateAreaDependentAuras(); + CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE); + CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE); return; } } @@ -412,55 +413,56 @@ void BattlegroundSA::StartingEventOpenDoors() { } void BattlegroundSA::FillInitialWorldStates(WorldPacket& data) { - uint32 ally_attacks = uint32(Attackers == TEAM_ALLIANCE ? 1 : 0); - uint32 horde_attacks = uint32(Attackers == TEAM_HORDE ? 1 : 0); - - data << uint32(BG_SA_ANCIENT_GATEWS) << uint32(GateStatus[BG_SA_ANCIENT_GATE]); - data << uint32(BG_SA_YELLOW_GATEWS) << uint32(GateStatus[BG_SA_YELLOW_GATE]); - data << uint32(BG_SA_GREEN_GATEWS) << uint32(GateStatus[BG_SA_GREEN_GATE]); - data << uint32(BG_SA_BLUE_GATEWS) << uint32(GateStatus[BG_SA_BLUE_GATE]); - data << uint32(BG_SA_RED_GATEWS) << uint32(GateStatus[BG_SA_RED_GATE]); - data << uint32(BG_SA_PURPLE_GATEWS) << uint32(GateStatus[BG_SA_PURPLE_GATE]); - - data << uint32(BG_SA_BONUS_TIMER) << uint32(0); - - data << uint32(BG_SA_HORDE_ATTACKS) << horde_attacks; - data << uint32(BG_SA_ALLY_ATTACKS) << ally_attacks; - - //Time will be sent on first update... - data << uint32(BG_SA_ENABLE_TIMER) << ((TimerEnabled) ? uint32(1) : uint32(0)); - data << uint32(BG_SA_TIMER_MINS) << uint32(0); - data << uint32(BG_SA_TIMER_SEC_TENS) << uint32(0); - data << uint32(BG_SA_TIMER_SEC_DECS) << uint32(0); - - data << uint32(BG_SA_RIGHT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); - data << uint32(BG_SA_LEFT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); - data << uint32(BG_SA_CENTER_GY_HORDE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE ? 1 : 0); - - data << uint32(BG_SA_RIGHT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); - data << uint32(BG_SA_LEFT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); - data << uint32(BG_SA_CENTER_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE ? 1 : 0); - - data << uint32(BG_SA_HORDE_DEFENCE_TOKEN) << ally_attacks; - data << uint32(BG_SA_ALLIANCE_DEFENCE_TOKEN) << horde_attacks; - - data << uint32(BG_SA_LEFT_ATT_TOKEN_HRD) << horde_attacks; - data << uint32(BG_SA_RIGHT_ATT_TOKEN_HRD) << horde_attacks; - data << uint32(BG_SA_RIGHT_ATT_TOKEN_ALL) << ally_attacks; - data << uint32(BG_SA_LEFT_ATT_TOKEN_ALL) << ally_attacks; + bool allyAttacks = Attackers == TEAM_ALLIANCE; + bool hordeAttacks = Attackers == TEAM_HORDE; + + data << uint32(BG_SA_ANCIENT_GATEWS) << uint32(GateStatus[BG_SA_ANCIENT_GATE]); + data << uint32(BG_SA_YELLOW_GATEWS) << uint32(GateStatus[BG_SA_YELLOW_GATE]); + data << uint32(BG_SA_GREEN_GATEWS) << uint32(GateStatus[BG_SA_GREEN_GATE]); + data << uint32(BG_SA_BLUE_GATEWS) << uint32(GateStatus[BG_SA_BLUE_GATE]); + data << uint32(BG_SA_RED_GATEWS) << uint32(GateStatus[BG_SA_RED_GATE]); + data << uint32(BG_SA_PURPLE_GATEWS) << uint32(GateStatus[BG_SA_PURPLE_GATE]); + + data << uint32(BG_SA_BONUS_TIMER) << uint32(0); + + data << uint32(BG_SA_HORDE_ATTACKS) << uint32(hordeAttacks); + data << uint32(BG_SA_ALLY_ATTACKS) << uint32(allyAttacks); + + // Time will be sent on first update... + data << uint32(BG_SA_ENABLE_TIMER) << uint32(TimerEnabled); + data << uint32(BG_SA_TIMER_MINS) << uint32(0); + data << uint32(BG_SA_TIMER_SEC_TENS) << uint32(0); + data << uint32(BG_SA_TIMER_SEC_DECS) << uint32(0); + + data << uint32(BG_SA_RIGHT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_HORDE); + data << uint32(BG_SA_LEFT_GY_HORDE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_HORDE); + data << uint32(BG_SA_CENTER_GY_HORDE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_HORDE); + + data << uint32(BG_SA_RIGHT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_RIGHT_CAPTURABLE_GY] == TEAM_ALLIANCE); + data << uint32(BG_SA_LEFT_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_LEFT_CAPTURABLE_GY] == TEAM_ALLIANCE); + data << uint32(BG_SA_CENTER_GY_ALLIANCE) << uint32(GraveyardStatus[BG_SA_CENTRAL_CAPTURABLE_GY] == TEAM_ALLIANCE); + + data << uint32(BG_SA_HORDE_DEFENCE_TOKEN) << uint32(allyAttacks); + data << uint32(BG_SA_ALLIANCE_DEFENCE_TOKEN) << uint32(hordeAttacks); + + data << uint32(BG_SA_LEFT_ATT_TOKEN_HRD) << uint32(hordeAttacks); + data << uint32(BG_SA_RIGHT_ATT_TOKEN_HRD) << uint32(hordeAttacks); + data << uint32(BG_SA_RIGHT_ATT_TOKEN_ALL) << uint32(allyAttacks); + data << uint32(BG_SA_LEFT_ATT_TOKEN_ALL) << uint32(allyAttacks); } void BattlegroundSA::AddPlayer(Player* player) { Battleground::AddPlayer(player); - //create score and add it to map, default values are set in constructor - BattlegroundSAScore* sc = new BattlegroundSAScore; + PlayerScores[player->GetGUIDLow()] = new BattlegroundSAScore(player->GetGUID()); + + SendTransportInit(player); if (!ShipsStarted) { if (player->GetTeamId() == Attackers) { - player->CastSpell(player, 12438, true);//Without this player falls before boat loads... + player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); if (urand(0, 1)) player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0); @@ -478,8 +480,6 @@ void BattlegroundSA::AddPlayer(Player* player) else player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0); } - SendTransportInit(player); - PlayerScores[player->GetGUID()] = sc; } void BattlegroundSA::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /*team*/) { } @@ -491,20 +491,6 @@ void BattlegroundSA::HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/) return; } -void BattlegroundSA::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) -{ - BattlegroundScoreMap::iterator itr = PlayerScores.find(Source->GetGUID()); - if (itr == PlayerScores.end()) // player not found... - return; - - if (type == SCORE_DESTROYED_DEMOLISHER) - ((BattlegroundSAScore*)itr->second)->demolishers_destroyed += value; - else if (type == SCORE_DESTROYED_WALL) - ((BattlegroundSAScore*)itr->second)->gates_destroyed += value; - else - Battleground::UpdatePlayerScore(Source, type, value, doAddHonor); -} - void BattlegroundSA::TeleportPlayers() { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) @@ -530,7 +516,7 @@ void BattlegroundSA::TeleportPlayers() if (player->GetTeamId() == Attackers) { - player->CastSpell(player, 12438, true); //Without this player falls before boat loads... + player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); if (urand(0, 1)) player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0); @@ -543,30 +529,94 @@ void BattlegroundSA::TeleportPlayers() } } -void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType) +void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker /*= NULL*/) { - if (!go || !go->GetGOInfo()) - return; - - if (eventType == go->GetGOInfo()->building.damagedEvent) + if (GameObject* go = obj->ToGameObject()) { - uint32 i = getGateIdFromDamagedOrDestroyEventId(eventType); - GateStatus[i] = BG_SA_GATE_DAMAGED; - uint32 uws = getWorldStateFromGateId(i); - if (uws) - UpdateWorldState(uws, GateStatus[i]); - } + switch (go->GetGoType()) + { + case GAMEOBJECT_TYPE_GOOBER: + if (invoker) + if (eventId == BG_SA_EVENT_TITAN_RELIC_ACTIVATED) + TitanRelicActivated(invoker->ToPlayer()); + break; + case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING: + { + if (GateInfo const* gate = GetGate(obj->GetEntry())) + { + uint8 gateId = gate->GateId; - if (eventType == go->GetGOInfo()->building.destroyedEvent) - { - if (go->GetGOInfo()->building.destroyedEvent == BG_SA_EVENT_ANCIENT_GATE_DESTROYED) - SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED); - else - SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str()); - } + // damaged + if (eventId == go->GetGOInfo()->building.damagedEvent) + { + GateStatus[gateId] = BG_SA_GATE_DAMAGED; + + if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, gate->DamagedText, invoker); + + PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_ATTACKED_ALLIANCE : SOUND_WALL_ATTACKED_HORDE); + } + // destroyed + else if (eventId == go->GetGOInfo()->building.destroyedEvent) + { + GateStatus[gate->GateId] = BG_SA_GATE_DESTROYED; + _gateDestroyed = true; + + if (gateId < 5) + DelObject(gateId + 14); + + if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, gate->DestroyedText, invoker); + + PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_DESTROYED_ALLIANCE : SOUND_WALL_DESTROYED_HORDE); + + bool rewardHonor = true; + switch (gateId) + { + case BG_SA_GREEN_GATE: + if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) + rewardHonor = false; + break; + case BG_SA_BLUE_GATE: + if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) + rewardHonor = false; + break; + case BG_SA_RED_GATE: + if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) + rewardHonor = false; + break; + case BG_SA_PURPLE_GATE: + if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) + rewardHonor = false; + break; + default: + break; + } + + if (invoker) + { + if (Unit* unit = invoker->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); + if (rewardHonor) + UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); + } + } + } + } + else + break; - if (eventType == go->GetGOInfo()->building.damageEvent) - SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name.c_str()); + UpdateWorldState(gate->WorldState, GateStatus[gateId]); + } + break; + } + default: + break; + } + } } void BattlegroundSA::HandleKillUnit(Creature* creature, Player* killer) @@ -618,51 +668,8 @@ void BattlegroundSA::DemolisherStartState(bool start) } } -void BattlegroundSA::DestroyGate(Player* player, GameObject* go) +void BattlegroundSA::DestroyGate(Player* /*player*/, GameObject* /*go*/) { - uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent); - if (!GateStatus[i]) - return; - - if (GameObject* g = GetBGObject(i)) - { - if (g->GetGOValue()->Building.Health == 0) - { - GateStatus[i] = BG_SA_GATE_DESTROYED; - uint32 uws = getWorldStateFromGateId(i); - if (uws) - UpdateWorldState(uws, GateStatus[i]); - bool rewardHonor = true; - gateDestroyed = true; - switch (i) - { - case BG_SA_GREEN_GATE: - if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) - rewardHonor = false; - break; - case BG_SA_BLUE_GATE: - if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) - rewardHonor = false; - break; - case BG_SA_RED_GATE: - if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) - rewardHonor = false; - break; - case BG_SA_PURPLE_GATE: - if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) - rewardHonor = false; - break; - default: - break; - } - - if (i < 5) - DelObject(i + 14); - UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); - if (rewardHonor) - UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); - } - } } WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player) @@ -708,24 +715,24 @@ void BattlegroundSA::SendTime() UpdateWorldState(BG_SA_TIMER_SEC_DECS, ((end_of_round%60000)%10000)/1000); } -void BattlegroundSA::EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj) +void BattlegroundSA::EventPlayerClickedOnFlag(Player* source, GameObject* go) { - switch (target_obj->GetEntry()) + switch (go->GetEntry()) { case 191307: case 191308: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) - CaptureGraveyard(BG_SA_LEFT_CAPTURABLE_GY, Source); + CaptureGraveyard(BG_SA_LEFT_CAPTURABLE_GY, source); break; case 191305: case 191306: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) - CaptureGraveyard(BG_SA_RIGHT_CAPTURABLE_GY, Source); + CaptureGraveyard(BG_SA_RIGHT_CAPTURABLE_GY, source); break; case 191310: case 191309: if ((GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)) - CaptureGraveyard(BG_SA_CENTRAL_CAPTURABLE_GY, Source); + CaptureGraveyard(BG_SA_CENTRAL_CAPTURABLE_GY, source); break; default: return; @@ -746,7 +753,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) return; } - AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], (GraveyardStatus[i] == TEAM_ALLIANCE? ALLIANCE : HORDE)); + AddSpiritGuide(i + BG_SA_MAXNPC, sg->x, sg->y, sg->z, BG_SA_GYOrientation[i], GraveyardStatus[i]); uint32 npc = 0; uint32 flag = 0; @@ -756,73 +763,64 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) flag = BG_SA_LEFT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), - BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], - BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); + BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_RIGSPARK; - AddCreature(BG_SA_NpcEntries[npc], npc, Attackers, - BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], - BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); + if (Creature* rigspark = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers)) + rigspark->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN); for (uint8 j = BG_SA_DEMOLISHER_7; j <= BG_SA_DEMOLISHER_8; j++) { - AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), - BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1], - BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600); + AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } - UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); - UpdateWorldState(BG_SA_LEFT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); - if (Source->GetTeamId() == TEAM_ALLIANCE) - SendWarningToAll(LANG_BG_SA_A_GY_WEST); - else - SendWarningToAll(LANG_BG_SA_H_GY_WEST); + UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); + UpdateWorldState(BG_SA_LEFT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); + + if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_WEST_GRAVEYARD_CAPTURED_A : TEXT_WEST_GRAVEYARD_CAPTURED_H, Source); + break; case BG_SA_RIGHT_CAPTURABLE_GY: flag = BG_SA_RIGHT_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), - BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], - BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); + BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); npc = BG_SA_NPC_SPARKLIGHT; - AddCreature(BG_SA_NpcEntries[npc], npc, Attackers, - BG_SA_NpcSpawnlocs[npc][0], BG_SA_NpcSpawnlocs[npc][1], - BG_SA_NpcSpawnlocs[npc][2], BG_SA_NpcSpawnlocs[npc][3]); + if (Creature* sparklight = AddCreature(BG_SA_NpcEntries[npc], npc, BG_SA_NpcSpawnlocs[npc], Attackers)) + sparklight->AI()->Talk(TEXT_SPARKLIGHT_RIGSPARK_SPAWN); for (uint8 j = BG_SA_DEMOLISHER_5; j <= BG_SA_DEMOLISHER_6; j++) { - AddCreature(BG_SA_NpcEntries[j], j, (Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE), - BG_SA_NpcSpawnlocs[j][0], BG_SA_NpcSpawnlocs[j][1], - BG_SA_NpcSpawnlocs[j][2], BG_SA_NpcSpawnlocs[j][3], 600); + AddCreature(BG_SA_NpcEntries[j], j, BG_SA_NpcSpawnlocs[j], Attackers == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE, 600); if (Creature* dem = GetBGCreature(j)) dem->setFaction(BG_SA_Factions[Attackers]); } - UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); - UpdateWorldState(BG_SA_RIGHT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); - if (Source->GetTeamId() == TEAM_ALLIANCE) - SendWarningToAll(LANG_BG_SA_A_GY_EAST); - else - SendWarningToAll(LANG_BG_SA_H_GY_EAST); + UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); + UpdateWorldState(BG_SA_RIGHT_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); + + if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_EAST_GRAVEYARD_CAPTURED_A : TEXT_EAST_GRAVEYARD_CAPTURED_H, Source); + break; case BG_SA_CENTRAL_CAPTURABLE_GY: flag = BG_SA_CENTRAL_FLAG; DelObject(flag); AddObject(flag, (BG_SA_ObjEntries[flag] - (Source->GetTeamId() == TEAM_ALLIANCE ? 0 : 1)), - BG_SA_ObjSpawnlocs[flag][0], BG_SA_ObjSpawnlocs[flag][1], - BG_SA_ObjSpawnlocs[flag][2], BG_SA_ObjSpawnlocs[flag][3], 0, 0, 0, 0, RESPAWN_ONE_DAY); + BG_SA_ObjSpawnlocs[flag], 0, 0, 0, 0, RESPAWN_ONE_DAY); + + UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, GraveyardStatus[i] == TEAM_ALLIANCE); + UpdateWorldState(BG_SA_CENTER_GY_HORDE, GraveyardStatus[i] == TEAM_HORDE); + + if (Creature* c = Source->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, Source->GetTeamId() == TEAM_ALLIANCE ? TEXT_SOUTH_GRAVEYARD_CAPTURED_A : TEXT_SOUTH_GRAVEYARD_CAPTURED_H, Source); - UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 1 : 0)); - UpdateWorldState(BG_SA_CENTER_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE ? 0 : 1)); - if (Source->GetTeamId() == TEAM_ALLIANCE) - SendWarningToAll(LANG_BG_SA_A_GY_SOUTH); - else - SendWarningToAll(LANG_BG_SA_H_GY_SOUTH); break; default: ASSERT(false); @@ -830,25 +828,28 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) }; } -void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object) +void BattlegroundSA::TitanRelicActivated(Player* clicker) { - if (object->GetEntry() == BG_SA_ObjEntries[BG_SA_TITAN_RELIC] && - GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED && + if (!clicker) + return; + + if (GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED && GateStatus[BG_SA_YELLOW_GATE] == BG_SA_GATE_DESTROYED && (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)) { - if (Source->GetTeamId() == Attackers) + if (clicker->GetTeamId() == Attackers) { - if (Source->GetTeamId() == TEAM_ALLIANCE) + if (clicker->GetTeamId() == TEAM_ALLIANCE) SendMessageToAll(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL); - else SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL); + else + SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL); if (Status == BG_SA_ROUND_ONE) { RoundScores[0].winner = Attackers; RoundScores[0].time = TotalTime; - //Achievement Storm the Beach (1310) + // Achievement Storm the Beach (1310) for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->first)) @@ -860,19 +861,25 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object) Status = BG_SA_SECOND_WARMUP; TotalTime = 0; ToggleTimer(); - SendWarningToAll(LANG_BG_SA_ROUND_ONE_END); + + if (Creature* c = GetBGCreature(BG_SA_NPC_KANRETHAD)) + SendChatMessage(c, TEXT_ROUND_1_FINISHED); + UpdateWaitTimer = 5000; SignaledRoundTwo = false; SignaledRoundTwoHalfMin = false; InitSecondRound = true; ResetObjs(); + GetBgMap()->UpdateAreaDependentAuras(); + CastSpellOnTeam(SPELL_END_OF_ROUND, ALLIANCE); + CastSpellOnTeam(SPELL_END_OF_ROUND, HORDE); } else if (Status == BG_SA_ROUND_TWO) { RoundScores[1].winner = Attackers; RoundScores[1].time = TotalTime; ToggleTimer(); - //Achievement Storm the Beach (1310) + // Achievement Storm the Beach (1310) for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->first)) @@ -894,18 +901,18 @@ void BattlegroundSA::EventPlayerUsedGO(Player* Source, GameObject* object) void BattlegroundSA::ToggleTimer() { TimerEnabled = !TimerEnabled; - UpdateWorldState(BG_SA_ENABLE_TIMER, (TimerEnabled) ? 1 : 0); + UpdateWorldState(BG_SA_ENABLE_TIMER, TimerEnabled); } void BattlegroundSA::EndBattleground(uint32 winner) { - //honor reward for winning + // honor reward for winning if (winner == ALLIANCE) RewardHonorToTeam(GetBonusHonorFromKill(1), ALLIANCE); else if (winner == HORDE) RewardHonorToTeam(GetBonusHonorFromKill(1), HORDE); - //complete map_end rewards (even if no team wins) + // complete map_end rewards (even if no team wins) RewardHonorToTeam(GetBonusHonorFromKill(2), ALLIANCE); RewardHonorToTeam(GetBonusHonorFromKill(2), HORDE); @@ -931,9 +938,7 @@ void BattlegroundSA::UpdateDemolisherSpawns() { if (DemoliserRespawnList[i] < getMSTime()) { - Demolisher->Relocate(BG_SA_NpcSpawnlocs[i][0], BG_SA_NpcSpawnlocs[i][1], - BG_SA_NpcSpawnlocs[i][2], BG_SA_NpcSpawnlocs[i][3]); - + Demolisher->Relocate(BG_SA_NpcSpawnlocs[i]); Demolisher->Respawn(); DemoliserRespawnList.erase(i); } @@ -981,8 +986,25 @@ bool BattlegroundSA::CheckAchievementCriteriaMeet(uint32 criteriaId, Player cons case BG_CRITERIA_CHECK_NOT_EVEN_A_SCRATCH: return _allVehiclesAlive[GetTeamIndexByTeamId(source->GetTeam())]; case BG_CRITERIA_CHECK_DEFENSE_OF_THE_ANCIENTS: - return source->GetTeamId() != Attackers && !gateDestroyed; + return source->GetTeamId() != Attackers && !_gateDestroyed; } return Battleground::CheckAchievementCriteriaMeet(criteriaId, source, target, miscValue); } + +bool BattlegroundSA::IsSpellAllowed(uint32 spellId, Player const* /*player*/) const +{ + switch (spellId) + { + case SPELL_ALLIANCE_CONTROL_PHASE_SHIFT: + return Attackers == TEAM_HORDE; + case SPELL_HORDE_CONTROL_PHASE_SHIFT: + return Attackers == TEAM_ALLIANCE; + case SPELL_PREPARATION: + return Status == BG_SA_WARMUP || Status == BG_SA_SECOND_WARMUP; + default: + break; + } + + return true; +} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index eb5e54231b5..a3947334417 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -20,21 +20,15 @@ #define __BATTLEGROUNDSA_H #include "Battleground.h" - -struct BattlegroundSAScore : public BattlegroundScore -{ - BattlegroundSAScore(): demolishers_destroyed(0), gates_destroyed(0) { } - ~BattlegroundSAScore() { } - uint8 demolishers_destroyed; - uint8 gates_destroyed; -}; +#include "BattlegroundScore.h" +#include "Object.h" #define BG_SA_FLAG_AMOUNT 3 #define BG_SA_DEMOLISHER_AMOUNT 4 enum BG_SA_Status { - BG_SA_NOTSTARTED = 0, + BG_SA_NOT_STARTED = 0, BG_SA_WARMUP, BG_SA_ROUND_ONE, BG_SA_SECOND_WARMUP, @@ -49,7 +43,7 @@ enum BG_SA_GateState BG_SA_GATE_DESTROYED = 3 }; -enum BG_SA_EventIdGate +enum BG_SA_EventIds { BG_SA_EVENT_BLUE_GATE_DAMAGED = 19040, BG_SA_EVENT_BLUE_GATE_DESTROYED = 19045, @@ -67,7 +61,42 @@ enum BG_SA_EventIdGate BG_SA_EVENT_YELLOW_GATE_DESTROYED = 19049, BG_SA_EVENT_ANCIENT_GATE_DAMAGED = 19836, - BG_SA_EVENT_ANCIENT_GATE_DESTROYED = 19837 + BG_SA_EVENT_ANCIENT_GATE_DESTROYED = 19837, + + BG_SA_EVENT_TITAN_RELIC_ACTIVATED = 22097 +}; + +enum SASpellIds +{ + SPELL_TELEPORT_DEFENDER = 52364, + SPELL_TELEPORT_ATTACKERS = 60178, + SPELL_END_OF_ROUND = 52459, + SPELL_REMOVE_SEAFORIUM = 59077, + SPELL_ALLIANCE_CONTROL_PHASE_SHIFT = 60027, + SPELL_HORDE_CONTROL_PHASE_SHIFT = 60028 +}; + +enum SACreatureIds +{ + NPC_KANRETHAD = 29, + NPC_INVISIBLE_STALKER = 15214, + NPC_WORLD_TRIGGER = 22515, + NPC_WORLD_TRIGGER_LARGE_AOI_NOT_IMMUNE_PC_NPC = 23472, + + NPC_ANTI_PERSONNAL_CANNON = 27894, + NPC_DEMOLISHER_SA = 28781, + NPC_RIGGER_SPARKLIGHT = 29260, + NPC_GORGRIL_RIGSPARK = 29262 +}; + +enum SAGameObjectIds +{ + GO_GATE_OF_THE_GREEN_EMERALD = 190722, + GO_GATE_OF_THE_PURPLE_AMETHYST = 190723, + GO_GATE_OF_THE_BLUE_SAPPHIRE = 190724, + GO_GATE_OF_THE_RED_SUN = 190726, + GO_GATE_OF_THE_YELLOW_MOON = 190727, + GO_CHAMBER_OF_ANCIENT_RELICS = 192549, }; enum BG_SA_Timers @@ -77,7 +106,51 @@ enum BG_SA_Timers BG_SA_ROUNDLENGTH = 600 * IN_MILLISECONDS }; -enum BG_SA_WorldStates +enum SASounds +{ + SOUND_GRAVEYARD_TAKEN_HORDE = 8174, + SOUND_GRAVEYARD_TAKEN_ALLIANCE = 8212, + SOUND_DEFEAT_HORDE = 15905, + SOUND_VICTORY_HORDE = 15906, + SOUND_VICTORY_ALLIANCE = 15907, + SOUND_DEFEAT_ALLIANCE = 15908, + SOUND_WALL_DESTROYED_ALLIANCE = 15909, + SOUND_WALL_DESTROYED_HORDE = 15910, + SOUND_WALL_ATTACKED_HORDE = 15911, + SOUND_WALL_ATTACKED_ALLIANCE = 15912 +}; + +enum SATexts +{ + // Kanrethad + TEXT_ROUND_STARTED = 1, + TEXT_ROUND_1_FINISHED = 2, + + // Rigger Sparklight / Gorgril Rigspark + TEXT_SPARKLIGHT_RIGSPARK_SPAWN = 1, + + // World Trigger + TEXT_BLUE_GATE_UNDER_ATTACK = 1, + TEXT_GREEN_GATE_UNDER_ATTACK = 2, + TEXT_RED_GATE_UNDER_ATTACK = 3, + TEXT_PURPLE_GATE_UNDER_ATTACK = 4, + TEXT_YELLOW_GATE_UNDER_ATTACK = 5, + TEXT_YELLOW_GATE_DESTROYED = 6, + TEXT_PURPLE_GATE_DESTROYED = 7, + TEXT_RED_GATE_DESTROYED = 8, + TEXT_GREEN_GATE_DESTROYED = 9, + TEXT_BLUE_GATE_DESTROYED = 10, + TEXT_EAST_GRAVEYARD_CAPTURED_A = 11, + TEXT_WEST_GRAVEYARD_CAPTURED_A = 12, + TEXT_SOUTH_GRAVEYARD_CAPTURED_A = 13, + TEXT_EAST_GRAVEYARD_CAPTURED_H = 14, + TEXT_WEST_GRAVEYARD_CAPTURED_H = 15, + TEXT_SOUTH_GRAVEYARD_CAPTURED_H = 16, + TEXT_ANCIENT_GATE_UNDER_ATTACK = 17, + TEXT_ANCIENT_GATE_DESTROYED = 18 +}; + +enum SAWorldStates { BG_SA_TIMER_MINS = 3559, BG_SA_TIMER_SEC_TENS = 3560, @@ -102,20 +175,12 @@ enum BG_SA_WorldStates BG_SA_RIGHT_GY_HORDE = 3632, BG_SA_LEFT_GY_HORDE = 3633, BG_SA_CENTER_GY_HORDE = 3634, - BG_SA_BONUS_TIMER = 0xdf3, + BG_SA_BONUS_TIMER = 3571, BG_SA_ENABLE_TIMER = 3564 }; -enum npc -{ - NPC_ANTI_PERSONNAL_CANNON = 27894, - NPC_DEMOLISHER_SA = 28781, - NPC_RIGGER_SPARKLIGHT = 29260, - NPC_GORGRIL_RIGSPARK = 29262 -}; - enum BG_SA_NPCs - { +{ BG_SA_GUN_1 = 0, BG_SA_GUN_2, BG_SA_GUN_3, @@ -126,11 +191,6 @@ enum BG_SA_NPCs BG_SA_GUN_8, BG_SA_GUN_9, BG_SA_GUN_10, - BG_SA_NPC_TRIGGER_1, - BG_SA_NPC_TRIGGER_2, - BG_SA_NPC_TRIGGER_3, - BG_SA_NPC_TRIGGER_4, - BG_SA_NPC_TRIGGER_5, BG_SA_DEMOLISHER_1, BG_SA_DEMOLISHER_2, BG_SA_DEMOLISHER_3, @@ -141,8 +201,9 @@ enum BG_SA_NPCs BG_SA_DEMOLISHER_8, BG_SA_NPC_SPARKLIGHT, BG_SA_NPC_RIGSPARK, + BG_SA_NPC_KANRETHAD, BG_SA_MAXNPC - }; +}; enum BG_SA_Boat { @@ -164,12 +225,6 @@ uint32 const BG_SA_NpcEntries[BG_SA_MAXNPC] = NPC_ANTI_PERSONNAL_CANNON, NPC_ANTI_PERSONNAL_CANNON, NPC_ANTI_PERSONNAL_CANNON, - // Triggers - 23472, - 23472, - 23472, - 23472, - 23472, // 4 beach demolishers NPC_DEMOLISHER_SA, NPC_DEMOLISHER_SA, @@ -182,10 +237,12 @@ uint32 const BG_SA_NpcEntries[BG_SA_MAXNPC] = NPC_DEMOLISHER_SA, // Used Demolisher Salesman NPC_RIGGER_SPARKLIGHT, - NPC_GORGRIL_RIGSPARK + NPC_GORGRIL_RIGSPARK, + // Kanrethad + NPC_KANRETHAD }; -float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] = +Position const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC] = { // Cannons { 1436.429f, 110.05f, 41.407f, 5.4f }, @@ -198,12 +255,6 @@ float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] = { 1249.634f, -224.189f, 66.72f, 0.635f }, { 1236.213f, 92.287f, 64.965f, 5.751f }, { 1215.11f, 57.772f, 64.739f, 5.78f }, - // Triggers - { 1453.49f, -250.453f, 30.896f, 4.2883f}, - { 1377.05f, 97.036f, 30.8605f, 2.46539f}, - { 1186.05f, 58.8048f, 56.5491f, 2.75992f}, - { 1042.83f, -72.839f, 84.8145f, 3.58615f}, - { 1233.62f, -250.49f, 55.4036f, 3.7016f}, // Demolishers { 1611.597656f, -117.270073f, 8.719355f, 2.513274f}, { 1575.562500f, -158.421875f, 5.024450f, 2.129302f}, @@ -216,7 +267,8 @@ float const BG_SA_NpcSpawnlocs[BG_SA_MAXNPC + BG_SA_DEMOLISHER_AMOUNT][4] = { 1404.809570f, 197.027237f, 32.046032f, 3.605401f}, // Npcs { 1348.644165f, -298.786469f, 31.080130f, 1.710423f}, - { 1358.191040f, 195.527786f, 31.018187f, 4.171337f} + { 1358.191040f, 195.527786f, 31.018187f, 4.171337f}, + { 841.921f, -134.194f, 196.838f, 6.23082f } }; enum BG_SA_Objects @@ -250,7 +302,7 @@ enum BG_SA_Objects BG_SA_MAXOBJ = BG_SA_BOMB+68 }; -float const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ][4] = +Position const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ] = { { 1411.57f, 108.163f, 28.692f, 5.441f }, { 1055.452f, -108.1f, 82.134f, 0.034f }, @@ -430,12 +482,66 @@ float const BG_SA_GYOrientation[BG_SA_MAX_GY] = 6.148f, // defender last GY }; +struct GateInfo +{ + uint8 GateId; + uint32 GameObjectId; + uint32 WorldState; + uint8 DamagedText; + uint8 DestroyedText; +}; + +#define MAX_GATES 6 +GateInfo const Gates[MAX_GATES] = +{ + { BG_SA_GREEN_GATE, GO_GATE_OF_THE_GREEN_EMERALD, BG_SA_GREEN_GATEWS, TEXT_GREEN_GATE_UNDER_ATTACK, TEXT_GREEN_GATE_DESTROYED }, + { BG_SA_YELLOW_GATE, GO_GATE_OF_THE_YELLOW_MOON, BG_SA_YELLOW_GATEWS, TEXT_YELLOW_GATE_UNDER_ATTACK, TEXT_YELLOW_GATE_DESTROYED }, + { BG_SA_BLUE_GATE, GO_GATE_OF_THE_BLUE_SAPPHIRE, BG_SA_BLUE_GATEWS, TEXT_BLUE_GATE_UNDER_ATTACK, TEXT_BLUE_GATE_DESTROYED }, + { BG_SA_RED_GATE, GO_GATE_OF_THE_RED_SUN, BG_SA_RED_GATEWS, TEXT_RED_GATE_UNDER_ATTACK, TEXT_RED_GATE_DESTROYED }, + { BG_SA_PURPLE_GATE, GO_GATE_OF_THE_PURPLE_AMETHYST, BG_SA_PURPLE_GATEWS, TEXT_PURPLE_GATE_UNDER_ATTACK, TEXT_PURPLE_GATE_DESTROYED }, + { BG_SA_ANCIENT_GATE, GO_CHAMBER_OF_ANCIENT_RELICS, BG_SA_ANCIENT_GATEWS, TEXT_ANCIENT_GATE_UNDER_ATTACK, TEXT_ANCIENT_GATE_DESTROYED } +}; + struct BG_SA_RoundScore { TeamId winner; uint32 time; }; +struct BattlegroundSAScore final : public BattlegroundScore +{ + friend class BattlegroundSA; + + protected: + BattlegroundSAScore(uint64 playerGuid) : BattlegroundScore(playerGuid), DemolishersDestroyed(0), GatesDestroyed(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_DESTROYED_DEMOLISHER: + DemolishersDestroyed += value; + break; + case SCORE_DESTROYED_WALL: + GatesDestroyed += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(2); // Objectives Count + data << uint32(DemolishersDestroyed); + data << uint32(GatesDestroyed); + } + + uint32 DemolishersDestroyed; + uint32 GatesDestroyed; +}; + /// Class for manage Strand of Ancient battleground class BattlegroundSA : public Battleground { @@ -461,92 +567,40 @@ class BattlegroundSA : public Battleground void Reset(); /// Called for generate packet contain worldstate data void FillInitialWorldStates(WorldPacket& data); - /// Called when a player deal damage to building (door) - void EventPlayerDamagedGO(Player* player, GameObject* go, uint32 eventType); /// Called when a player kill a unit in bg void HandleKillUnit(Creature* creature, Player* killer); /// Return the nearest graveyard where player can respawn WorldSafeLocsEntry const* GetClosestGraveYard(Player* player); + /// Called when someone activates an event + void ProcessEvent(WorldObject* /*obj*/, uint32 /*eventId*/, WorldObject* /*invoker*/ = NULL) override; /// Called when a player click on flag (graveyard flag) - void EventPlayerClickedOnFlag(Player* Source, GameObject* target_obj); - /// Called when a player use a gamobject (relic) - void EventPlayerUsedGO(Player* Source, GameObject* object); - /// Return gate id, relative to bg data, according to gameobject id - uint32 getGateIdFromDamagedOrDestroyEventId(uint32 id) - { - switch (id) - { - // Green gate - case BG_SA_EVENT_GREEN_GATE_DAMAGED: - case BG_SA_EVENT_GREEN_GATE_DESTROYED: - return BG_SA_GREEN_GATE; - // Blue gate - case BG_SA_EVENT_BLUE_GATE_DAMAGED: - case BG_SA_EVENT_BLUE_GATE_DESTROYED: - return BG_SA_BLUE_GATE; - // Red gate - case BG_SA_EVENT_RED_GATE_DAMAGED: - case BG_SA_EVENT_RED_GATE_DESTROYED: - return BG_SA_RED_GATE; - // Purple gate - case BG_SA_EVENT_PURPLE_GATE_DAMAGED: - case BG_SA_EVENT_PURPLE_GATE_DESTROYED: - return BG_SA_PURPLE_GATE; - // Yellow gate - case BG_SA_EVENT_YELLOW_GATE_DAMAGED: - case BG_SA_EVENT_YELLOW_GATE_DESTROYED: - return BG_SA_YELLOW_GATE; - // Ancient gate - case BG_SA_EVENT_ANCIENT_GATE_DAMAGED: - case BG_SA_EVENT_ANCIENT_GATE_DESTROYED: - return BG_SA_ANCIENT_GATE; - default: - break; - } - return 0; - } - /// Return worldstate id, according to door id - uint32 getWorldStateFromGateId(uint32 id) + void EventPlayerClickedOnFlag(Player* source, GameObject* go); + /// Called when a player clicked on relic + void TitanRelicActivated(Player* clicker); + + /// Return GateInfo, relative to bg data, according to gameobject entry + GateInfo const* GetGate(uint32 entry) { - switch (id) - { - case BG_SA_GREEN_GATE: - return BG_SA_GREEN_GATEWS; - case BG_SA_YELLOW_GATE: - return BG_SA_YELLOW_GATEWS; - case BG_SA_BLUE_GATE: - return BG_SA_BLUE_GATEWS; - case BG_SA_RED_GATE: - return BG_SA_RED_GATEWS; - case BG_SA_PURPLE_GATE: - return BG_SA_PURPLE_GATEWS; - case BG_SA_ANCIENT_GATE: - return BG_SA_ANCIENT_GATEWS; - default: - break; - } - return 0; + for (uint8 i = 0; i < MAX_GATES; ++i) + if (Gates[i].GameObjectId == entry) + return &Gates[i]; + return NULL; } /// Called on battleground ending void EndBattleground(uint32 winner); - /// CAlled when a player leave battleground + /// Called when a player leave battleground void RemovePlayer(Player* player, uint64 guid, uint32 team); void HandleAreaTrigger(Player* Source, uint32 Trigger); /* Scorekeeping */ - /// Update score board - void UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor = true); - - // Achievement: Defense of the Ancients - bool gateDestroyed; // Achievement: Not Even a Scratch - bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscvalue1 = 0); + bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* source, Unit const* target = NULL, uint32 miscValue = 0) override; - /// Id of attacker team - TeamId Attackers; + // Control Phase Shift + bool IsSpellAllowed(uint32 spellId, Player const* player) const override; private: @@ -600,6 +654,9 @@ class BattlegroundSA : public Battleground /// Send packet to player for destroy boats (client part) void SendTransportsRemove(Player* player); + /// Id of attacker team + TeamId Attackers; + /// Totale elapsed time of current round uint32 TotalTime; /// Max time of round @@ -607,7 +664,7 @@ class BattlegroundSA : public Battleground /// For know if boats has start moving or not yet bool ShipsStarted; /// Status of each gate (Destroy/Damage/Intact) - BG_SA_GateState GateStatus[6]; + BG_SA_GateState GateStatus[MAX_GATES]; /// Statu of battle (Start or not, and what round) BG_SA_Status Status; /// Team witch conntrol each graveyard @@ -626,6 +683,9 @@ class BattlegroundSA : public Battleground bool InitSecondRound; std::map<uint32/*id*/, uint32/*timer*/> DemoliserRespawnList; + // Achievement: Defense of the Ancients + bool _gateDestroyed; + // Achievement: Not Even a Scratch bool _allVehiclesAlive[BG_TEAMS_COUNT]; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 92d56bbf5f0..1faa3361975 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -229,10 +229,7 @@ void BattlegroundWS::StartingEventOpenDoors() void BattlegroundWS::AddPlayer(Player* player) { Battleground::AddPlayer(player); - //create score and add it to map, default values are set in constructor - BattlegroundWGScore* sc = new BattlegroundWGScore; - - PlayerScores[player->GetGUID()] = sc; + PlayerScores[player->GetGUIDLow()] = new BattlegroundWGScore(player->GetGUID()); } void BattlegroundWS::RespawnFlag(uint32 Team, bool captured) @@ -711,14 +708,14 @@ bool BattlegroundWS::SetupBattleground() } WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE); - if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE)) + if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE)) { TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Alliance spirit guide! Battleground not created!"); return false; } sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE); - if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE)) + if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE)) { TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Horde spirit guide! Battleground not created!"); return false; @@ -790,26 +787,23 @@ void BattlegroundWS::HandleKillPlayer(Player* player, Player* killer) Battleground::HandleKillPlayer(player, killer); } -void BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) +bool BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) { - BattlegroundScoreMap::iterator itr = PlayerScores.find(player->GetGUID()); - if (itr == PlayerScores.end()) // player not found - return; + if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor)) + return false; switch (type) { case SCORE_FLAG_CAPTURES: // flags captured - ((BattlegroundWGScore*)itr->second)->FlagCaptures += value; player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_CAPTURE_FLAG); break; case SCORE_FLAG_RETURNS: // flags returned - ((BattlegroundWGScore*)itr->second)->FlagReturns += value; player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, WS_OBJECTIVE_RETURN_FLAG); break; default: - Battleground::UpdatePlayerScore(player, type, value, doAddHonor); break; } + return true; } WorldSafeLocsEntry const* BattlegroundWS::GetClosestGraveYard(Player* player) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index c6c25ec52de..3d449580fb9 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -20,6 +20,7 @@ #define __BATTLEGROUNDWS_H #include "Battleground.h" +#include "BattlegroundScore.h" enum BG_WS_TimerOrScore { @@ -146,12 +147,38 @@ enum BG_WS_Objectives #define WS_EVENT_START_BATTLE 8563 -struct BattlegroundWGScore : public BattlegroundScore +struct BattlegroundWGScore final : public BattlegroundScore { - BattlegroundWGScore() : FlagCaptures(0), FlagReturns(0) { } - ~BattlegroundWGScore() { } - uint32 FlagCaptures; - uint32 FlagReturns; + friend class BattlegroundWS; + + protected: + BattlegroundWGScore(uint64 playerGuid) : BattlegroundScore(playerGuid), FlagCaptures(0), FlagReturns(0) { } + + void UpdateScore(uint32 type, uint32 value) override + { + switch (type) + { + case SCORE_FLAG_CAPTURES: // Flags captured + FlagCaptures += value; + break; + case SCORE_FLAG_RETURNS: // Flags returned + FlagReturns += value; + break; + default: + BattlegroundScore::UpdateScore(type, value); + break; + } + } + + void BuildObjectivesBlock(WorldPacket& data) final + { + data << uint32(2); // Objectives Count + data << uint32(FlagCaptures); + data << uint32(FlagReturns); + } + + uint32 FlagCaptures; + uint32 FlagReturns; }; class BattlegroundWS : public Battleground @@ -197,7 +224,7 @@ class BattlegroundWS : public Battleground void UpdateFlagState(uint32 team, uint32 value); void SetLastFlagCapture(uint32 team) { _lastFlagCaptureTeam = team; } void UpdateTeamScore(uint32 team); - void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); + bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override; void SetDroppedFlagGUID(uint64 guid, int32 team = -1) { if (team == TEAM_ALLIANCE || team == TEAM_HORDE) diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index bf46c1fd7c6..26fd0814dcb 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -103,7 +103,9 @@ set(game_STAT_SRCS include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/SFMT ${CMAKE_SOURCE_DIR}/dep/zlib diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index 52ed50f3948..a4cb972e625 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -17,7 +17,6 @@ #include "CalendarMgr.h" #include "QueryResult.h" -#include "DatabaseEnv.h" #include "Log.h" #include "Player.h" #include "GuildMgr.h" @@ -128,6 +127,12 @@ void CalendarMgr::AddEvent(CalendarEvent* calendarEvent, CalendarSendEventType s void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite) { + SQLTransaction dummy; + AddInvite(calendarEvent, invite, dummy); +} + +void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans) +{ if (!calendarEvent->IsGuildAnnouncement()) SendCalendarEventInvite(*invite); @@ -137,7 +142,7 @@ void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite if (!calendarEvent->IsGuildAnnouncement()) { _invites[invite->GetEventId()].push_back(invite); - UpdateInvite(invite); + UpdateInvite(invite, trans); } } @@ -221,7 +226,6 @@ void CalendarMgr::RemoveInvite(uint64 inviteId, uint64 eventId, uint64 /*remover void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent) { - SQLTransaction trans = CharacterDatabase.BeginTransaction(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_EVENT); stmt->setUInt64(0, calendarEvent->GetEventId()); stmt->setUInt32(1, GUID_LOPART(calendarEvent->GetCreatorGUID())); @@ -232,13 +236,17 @@ void CalendarMgr::UpdateEvent(CalendarEvent* calendarEvent) stmt->setUInt32(6, uint32(calendarEvent->GetEventTime())); stmt->setUInt32(7, calendarEvent->GetFlags()); stmt->setUInt32(8, calendarEvent->GetTimeZoneTime()); // correct? - trans->Append(stmt); - CharacterDatabase.CommitTransaction(trans); + CharacterDatabase.Execute(stmt); } void CalendarMgr::UpdateInvite(CalendarInvite* invite) { - SQLTransaction trans = CharacterDatabase.BeginTransaction(); + SQLTransaction dummy; + UpdateInvite(invite, dummy); +} + +void CalendarMgr::UpdateInvite(CalendarInvite* invite, SQLTransaction& trans) +{ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CALENDAR_INVITE); stmt->setUInt64(0, invite->GetInviteId()); stmt->setUInt64(1, invite->GetEventId()); @@ -248,8 +256,7 @@ void CalendarMgr::UpdateInvite(CalendarInvite* invite) stmt->setUInt32(5, uint32(invite->GetStatusTime())); stmt->setUInt8(6, invite->GetRank()); stmt->setString(7, invite->GetText()); - trans->Append(stmt); - CharacterDatabase.CommitTransaction(trans); + CharacterDatabase.ExecuteOrAppend(trans, stmt); } void CalendarMgr::RemoveAllPlayerEventsAndInvites(uint64 guid) diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h index da185d519d5..8f44b013e5c 100644 --- a/src/server/game/Calendar/CalendarMgr.h +++ b/src/server/game/Calendar/CalendarMgr.h @@ -20,6 +20,7 @@ #include <ace/Singleton.h> #include "Common.h" +#include "DatabaseEnv.h" #include "WorldPacket.h" enum CalendarMailAnswers @@ -305,8 +306,10 @@ class CalendarMgr void UpdateEvent(CalendarEvent* calendarEvent); void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite); + void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, SQLTransaction& trans); void RemoveInvite(uint64 inviteId, uint64 eventId, uint64 remover); void UpdateInvite(CalendarInvite* invite); + void UpdateInvite(CalendarInvite* invite, SQLTransaction& trans); void RemoveAllPlayerEventsAndInvites(uint64 guid); void RemovePlayerGuildEventsAndSignups(uint64 guid, uint32 guildId); diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 9ad6877d929..115e340762e 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -25,7 +25,7 @@ #include "Common.h" -#include "Opcodes.h" +#include "WorldSession.h" #include "WorldPacket.h" class Player; diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index d90fd6f8443..d77ee5b7f61 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -782,6 +782,24 @@ Creature* ChatHandler::getSelectedCreature() return ObjectAccessor::GetCreatureOrPetOrVehicle(*m_session->GetPlayer(), m_session->GetPlayer()->GetTarget()); } +Player* ChatHandler::getSelectedPlayerOrSelf() +{ + if (!m_session) + return NULL; + + uint64 selected = m_session->GetPlayer()->GetTarget(); + if (!selected) + return m_session->GetPlayer(); + + // first try with selected target + Player* targetPlayer = ObjectAccessor::FindPlayer(selected); + // if the target is not a player, then return self + if (!targetPlayer) + targetPlayer = m_session->GetPlayer(); + + return targetPlayer; +} + char* ChatHandler::extractKeyFromLink(char* text, char const* linkType, char** something1) { // skip empty @@ -1180,10 +1198,34 @@ char* ChatHandler::extractQuotedArg(char* args) return strtok(args+1, "\""); else { - char* space = strtok(args, "\""); - if (!space) + // skip spaces + while (*args == ' ') + { + args += 1; + continue; + } + + // return NULL if we reached the end of the string + if (!*args) + return NULL; + + // since we skipped all spaces, we expect another token now + if (*args == '"') + { + // return an empty string if there are 2 "" in a row. + // strtok doesn't handle this case + if (*(args + 1) == '"') + { + strtok(args, " "); + static char arg[1]; + arg[0] = '\0'; + return arg; + } + else + return strtok(args + 1, "\""); + } + else return NULL; - return strtok(NULL, "\""); } } diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index f9000f636c5..a56b79077d7 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -97,6 +97,8 @@ class ChatHandler Creature* getSelectedCreature(); Unit* getSelectedUnit(); WorldObject* getSelectedObject(); + // Returns either the selected player or self if there is no selected player + Player* getSelectedPlayerOrSelf(); char* extractKeyFromLink(char* text, char const* linkType, char** something1 = NULL); char* extractKeyFromLink(char* text, char const* const* linkTypes, int* found_idx, char** something1 = NULL); diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp index 66758930f7f..12f4b082a9c 100644 --- a/src/server/game/Chat/ChatLink.cpp +++ b/src/server/game/Chat/ChatLink.cpp @@ -314,7 +314,8 @@ bool SpellChatLink::ValidateName(char* buffer, const char* context) // found the prefix, remove it to perform spellname validation below // -2 = strlen(": ") uint32 spellNameLength = strlen(buffer) - skillLineNameLength - 2; - memcpy(buffer, buffer + skillLineNameLength + 2, spellNameLength + 1); + memmove(buffer, buffer + skillLineNameLength + 2, spellNameLength + 1); + break; } } } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index e76ba18f1e2..bb1a722ec42 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1078,8 +1078,7 @@ bool ConditionMgr::addToGossipMenuItems(Condition* cond) bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) { uint32 conditionEffMask = cond->SourceGroup; - SpellInfo* spellInfo = const_cast<SpellInfo*>(sSpellMgr->GetSpellInfo(cond->SourceEntry)); - ASSERT(spellInfo); + SpellInfo* spellInfo = const_cast<SpellInfo*>(sSpellMgr->EnsureSpellInfo(cond->SourceEntry)); std::list<uint32> sharedMasks; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { @@ -1994,7 +1993,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) } case CONDITION_UNIT_STATE: { - if (cond->ConditionValue1 > uint32(UNIT_STATE_ALL_STATE)) + if (!(cond->ConditionValue1 & UNIT_STATE_ALL_STATE_SUPPORTED)) { TC_LOG_ERROR("sql.sql", "UnitState condition has non existing UnitState in value1 (%u), skipped", cond->ConditionValue1); return false; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 87397c6685b..03180b35cb5 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -91,9 +91,9 @@ enum AchievementCriteriaFlags { ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar ACHIEVEMENT_CRITERIA_FLAG_HIDDEN = 0x00000002, // Not show criteria in client - ACHIEVEMENT_CRITERIA_FLAG_UNK3 = 0x00000004, // BG related?? - ACHIEVEMENT_CRITERIA_FLAG_UNK4 = 0x00000008, // - ACHIEVEMENT_CRITERIA_FLAG_UNK5 = 0x00000010, // not used + ACHIEVEMENT_CRITERIA_FLAG_FAIL_ACHIEVEMENT = 0x00000004, // BG related?? + ACHIEVEMENT_CRITERIA_FLAG_RESET_ON_START = 0x00000008, // + ACHIEVEMENT_CRITERIA_FLAG_IS_DATE = 0x00000010, // not used ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER = 0x00000020 // Displays counter as money }; @@ -174,7 +174,7 @@ enum AchievementCriteriaTypes ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL = 70, ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72, /// @todo 73: Achievements 1515, 1241, 1103 (Name: Mal'Ganis) - ACHIEVEMENT_CRITERIA_TYPE_EARNED_PVP_TITLE = 74, /// @todo title id is not mentioned in dbc + ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN = 74, ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75, ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76, ACHIEVEMENT_CRITERIA_TYPE_LOSE_DUEL = 77, @@ -319,10 +319,15 @@ enum MapTypes // Lua_IsInInstance MAP_ARENA = 4 // arena }; +enum MapFlags +{ + MAP_FLAG_DYNAMIC_DIFFICULTY = 0x100 +}; + enum AbilytyLearnType { - ABILITY_LEARNED_ON_GET_PROFESSION_SKILL = 1, - ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL = 2 + SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE = 1, // Spell state will update depending on skill value + SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN = 2 // Spell will be learned/removed together with entire skill }; enum ItemEnchantmentType @@ -344,21 +349,20 @@ enum ItemLimitCategoryMode ITEM_LIMIT_CATEGORY_MODE_EQUIP = 1 // limit applied to amount equipped items (including used gems) }; -enum SpellCategoryFlags +enum SkillRaceClassInfoFlags { - SPELL_CATEGORY_FLAG_COOLDOWN_SCALES_WITH_WEAPON_SPEED = 0x01, // unused - SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT = 0x04 + SKILL_FLAG_NO_SKILLUP_MESSAGE = 0x2, + SKILL_FLAG_ALWAYS_MAX_VALUE = 0x10, + SKILL_FLAG_UNLEARNABLE = 0x20, // Skill can be unlearned + SKILL_FLAG_INCLUDE_IN_SORT = 0x80, // Spells belonging to a skill with this flag will additionally compare skill ids when sorting spellbook in client + SKILL_FLAG_NOT_TRAINABLE = 0x100, + SKILL_FLAG_MONO_VALUE = 0x400 // Skill always has value 1 - clientside display flag, real value can be different }; -enum TotemCategoryType +enum SpellCategoryFlags { - TOTEM_CATEGORY_TYPE_KNIFE = 1, - TOTEM_CATEGORY_TYPE_TOTEM = 2, - TOTEM_CATEGORY_TYPE_ROD = 3, - TOTEM_CATEGORY_TYPE_PICK = 21, - TOTEM_CATEGORY_TYPE_STONE = 22, - TOTEM_CATEGORY_TYPE_HAMMER = 23, - TOTEM_CATEGORY_TYPE_SPANNER = 24 + SPELL_CATEGORY_FLAG_COOLDOWN_SCALES_WITH_WEAPON_SPEED = 0x01, // unused + SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT = 0x04 }; // SummonProperties.dbc, col 1 @@ -393,6 +397,17 @@ enum SummonPropFlags SUMMON_PROP_FLAG_UNK16 = 0x00008000 // Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase related? }; +enum TotemCategoryType +{ + TOTEM_CATEGORY_TYPE_KNIFE = 1, + TOTEM_CATEGORY_TYPE_TOTEM = 2, + TOTEM_CATEGORY_TYPE_ROD = 3, + TOTEM_CATEGORY_TYPE_PICK = 21, + TOTEM_CATEGORY_TYPE_STONE = 22, + TOTEM_CATEGORY_TYPE_HAMMER = 23, + TOTEM_CATEGORY_TYPE_SPANNER = 24 +}; + enum VehicleSeatFlags { VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER = 0x00000001, @@ -437,6 +452,7 @@ enum VehicleSeatFlagsB VEHICLE_SEAT_FLAG_B_EJECTABLE = 0x00000020, // ejectable VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2 = 0x00000040, VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3 = 0x00000100, + VEHICLE_SEAT_FLAG_B_KEEP_PET = 0x00020000, VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4 = 0x02000000, VEHICLE_SEAT_FLAG_B_CAN_SWITCH = 0x04000000, VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000 // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000 diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index a4b3ded80e5..e960422cbbc 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -73,6 +73,7 @@ DBCStorage <ChrClassesEntry> sChrClassesStore(ChrClassesEntryfmt); DBCStorage <ChrRacesEntry> sChrRacesStore(ChrRacesEntryfmt); DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore(CinematicSequencesEntryfmt); DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt); +DBCStorage <CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore(CreatureDisplayInfoExtrafmt); DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt); DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore(CreatureModelDatafmt); DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt); @@ -123,6 +124,7 @@ DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore(ItemRandomSuffixfmt); DBCStorage <ItemSetEntry> sItemSetStore(ItemSetEntryfmt); DBCStorage <LFGDungeonEntry> sLFGDungeonStore(LFGDungeonEntryfmt); +DBCStorage <LightEntry> sLightStore(LightEntryfmt); DBCStorage <LiquidTypeEntry> sLiquidTypeStore(LiquidTypefmt); DBCStorage <LockEntry> sLockStore(LockEntryfmt); @@ -137,6 +139,7 @@ DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt); DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt); +DBCStorage <PowerDisplayEntry> sPowerDisplayStore(PowerDisplayfmt); DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt); DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt); @@ -148,6 +151,9 @@ DBCStorage <ScalingStatValuesEntry> sScalingStatValuesStore(ScalingStatValuesfmt DBCStorage <SkillLineEntry> sSkillLineStore(SkillLinefmt); DBCStorage <SkillLineAbilityEntry> sSkillLineAbilityStore(SkillLineAbilityfmt); +DBCStorage <SkillRaceClassInfoEntry> sSkillRaceClassInfoStore(SkillRaceClassInfofmt); +SkillRaceClassInfoMap SkillRaceClassInfoBySkill; +DBCStorage <SkillTiersEntry> sSkillTiersStore(SkillTiersfmt); DBCStorage <SoundEntriesEntry> sSoundEntriesStore(SoundEntriesfmt); @@ -305,6 +311,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sChrRacesStore, dbcPath, "ChrRaces.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sCinematicSequencesStore, dbcPath, "CinematicSequences.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureDisplayInfoStore, dbcPath, "CreatureDisplayInfo.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureDisplayInfoExtraStore, dbcPath, "CreatureDisplayInfoExtra.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureFamilyStore, dbcPath, "CreatureFamily.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureModelDataStore, dbcPath, "CreatureModelData.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sCreatureSpellDataStore, dbcPath, "CreatureSpellData.dbc"); @@ -371,6 +378,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sItemSetStore, dbcPath, "ItemSet.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sLFGDungeonStore, dbcPath, "LFGDungeons.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sLightStore, dbcPath, "Light.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sLiquidTypeStore, dbcPath, "LiquidType.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sLockStore, dbcPath, "Lock.dbc"); @@ -387,6 +395,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sPvPDifficultyStore, dbcPath, "PvpDifficulty.dbc"); for (uint32 i = 0; i < sPvPDifficultyStore.GetNumRows(); ++i) if (PvPDifficultyEntry const* entry = sPvPDifficultyStore.LookupEntry(i)) @@ -403,6 +412,13 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sScalingStatValuesStore, dbcPath, "ScalingStatValues.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSkillLineStore, dbcPath, "SkillLine.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSkillLineAbilityStore, dbcPath, "SkillLineAbility.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sSkillRaceClassInfoStore, dbcPath, "SkillRaceClassInfo.dbc"); + for (uint32 i = 0; i < sSkillRaceClassInfoStore.GetNumRows(); ++i) + if (SkillRaceClassInfoEntry const* entry = sSkillRaceClassInfoStore.LookupEntry(i)) + if (sSkillLineStore.LookupEntry(entry->SkillId)) + SkillRaceClassInfoBySkill.emplace(entry->SkillId, entry); + + LoadDBC(availableDbcLocales, bad_dbc_files, sSkillTiersStore, dbcPath, "SkillTiers.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSoundEntriesStore, dbcPath, "SoundEntries.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellStore, dbcPath, "Spell.dbc", &CustomSpellEntryfmt, &CustomSpellEntryIndex); for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i) @@ -434,7 +450,7 @@ void LoadDBCStores(const std::string& dataPath) if (spellInfo->spellLevel) continue; - if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) + if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; sPetFamilySpellsStore[i].insert(spellInfo->Id); @@ -944,3 +960,34 @@ LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty) return NULL; } + +uint32 GetDefaultMapLight(uint32 mapId) +{ + for (int32 i = sLightStore.GetNumRows(); i >= 0; --i) + { + LightEntry const* light = sLightStore.LookupEntry(uint32(i)); + if (!light) + continue; + + if (light->MapId == mapId && light->X == 0.0f && light->Y == 0.0f && light->Z == 0.0f) + return light->Id; + } + + return 0; +} + +SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_) +{ + SkillRaceClassInfoBounds bounds = SkillRaceClassInfoBySkill.equal_range(skill); + for (SkillRaceClassInfoMap::iterator itr = bounds.first; itr != bounds.second; ++itr) + { + if (itr->second->RaceMask && !(itr->second->RaceMask & (1 << (race - 1)))) + continue; + if (itr->second->ClassMask && !(itr->second->ClassMask & (1 << (class_ - 1)))) + continue; + + return itr->second; + } + + return NULL; +} diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index fe8fb35220b..8b89a86fafe 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -72,6 +72,12 @@ CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, ui LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty); +uint32 GetDefaultMapLight(uint32 mapId); + +typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoMap; +typedef std::pair<SkillRaceClassInfoMap::iterator, SkillRaceClassInfoMap::iterator> SkillRaceClassInfoBounds; +SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); + extern DBCStorage <AchievementEntry> sAchievementStore; extern DBCStorage <AchievementCriteriaEntry> sAchievementCriteriaStore; extern DBCStorage <AreaTableEntry> sAreaStore;// recommend access using functions @@ -90,6 +96,7 @@ extern DBCStorage <ChrClassesEntry> sChrClassesStore; extern DBCStorage <ChrRacesEntry> sChrRacesStore; extern DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore; extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore; +extern DBCStorage <CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore; extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore; extern DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore; extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore; @@ -138,6 +145,7 @@ extern DBCStorage <MapEntry> sMapStore; extern MapDifficultyMap sMapDifficultyMap; extern DBCStorage <MovieEntry> sMovieStore; extern DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore; +extern DBCStorage <PowerDisplayEntry> sPowerDisplayStore; extern DBCStorage <QuestSortEntry> sQuestSortStore; extern DBCStorage <QuestXPEntry> sQuestXPStore; extern DBCStorage <QuestFactionRewEntry> sQuestFactionRewardStore; @@ -146,6 +154,7 @@ extern DBCStorage <ScalingStatDistributionEntry> sScalingStatDistributionStore; extern DBCStorage <ScalingStatValuesEntry> sScalingStatValuesStore; extern DBCStorage <SkillLineEntry> sSkillLineStore; extern DBCStorage <SkillLineAbilityEntry> sSkillLineAbilityStore; +extern DBCStorage <SkillTiersEntry> sSkillTiersStore; extern DBCStorage <SoundEntriesEntry> sSoundEntriesStore; extern DBCStorage <SpellCastTimesEntry> sSpellCastTimesStore; extern DBCStorage <SpellCategoryEntry> sSpellCategoryStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 7fb82ac8e03..946cbc42f25 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -651,9 +651,9 @@ struct CharTitlesEntry { uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId() //uint32 unk1; // 1 flags? - char* name[16]; // 2-17 + char* nameMale[16]; // 2-17 // 18 string flag, unused - //char* name2[16]; // 19-34, unused + char* nameFemale[16]; // 19-34 // 35 string flag, unused uint32 bit_index; // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES }; @@ -690,7 +690,7 @@ struct ChrClassesEntry struct ChrRacesEntry { uint32 RaceID; // 0 - // 1 unused + uint32 Flags; // 1 uint32 FactionID; // 2 facton template id // 3 unused uint32 model_m; // 4 @@ -736,7 +736,7 @@ struct CreatureDisplayInfoEntry uint32 Displayid; // 0 m_ID uint32 ModelId; // 1 m_modelID // 2 m_soundID - // 3 m_extendedDisplayInfoID + uint32 ExtraId; // 3 m_extendedDisplayInfoID float scale; // 4 m_creatureModelScale // 5 m_creatureModelAlpha // 6-8 m_textureVariation[3] @@ -749,6 +749,31 @@ struct CreatureDisplayInfoEntry // 15 m_objectEffectPackageID }; +struct CreatureDisplayInfoExtraEntry +{ + //uint32 Id; // 0 + uint32 Race; // 1 + uint32 Gender; // 2 + //uint32 SkinColor; // 3 + //uint32 FaceType; // 4 + //uint32 HairType; // 5 + //uint32 HairStyle; // 6 + //uint32 FacialHair; // 7 + //uint32 HelmDisplayId; // 8 + //uint32 ShoulderDisplayId; // 9 + //uint32 ShirtDisplayId; // 10 + //uint32 ChestDisplayId; // 11 + //uint32 BeltDisplayId; // 12 + //uint32 LegsDisplayId; // 13 + //uint32 BootsDisplayId; // 14 + //uint32 WristDisplayId; // 15 + //uint32 GlovesDisplayId; // 16 + //uint32 TabardDisplayId; // 17 + //uint32 CloakDisplayId; // 18 + //uint32 CanEquip; // 19 + //char const* Texture; // 20 +}; + struct CreatureFamilyEntry { uint32 ID; // 0 m_ID @@ -768,7 +793,7 @@ struct CreatureFamilyEntry struct CreatureModelDataEntry { uint32 Id; - //uint32 Flags; + uint32 Flags; //char* ModelPath[16] //uint32 Unk1; float Scale; // Used in calculation of unit collision data @@ -1230,6 +1255,24 @@ struct LFGDungeonEntry uint32 Entry() const { return ID + (type << 24); } }; +struct LightEntry +{ + uint32 Id; + uint32 MapId; + float X; + float Y; + float Z; + //float FalloffStart; + //float FalloffEnd; + //uint32 SkyAndFog; + //uint32 WaterSettings; + //uint32 SunsetParams; + //uint32 OtherParams; + //uint32 DeathParams; + //uint32 Unknown; + //uint32 Unknown; + //uint32 Unknown; +}; struct LiquidTypeEntry { @@ -1270,7 +1313,7 @@ struct MailTemplateEntry uint32 ID; // 0 //char* subject[16]; // 1-16 // 17 name flags, unused - char* content[16]; // 18-33 + char* content[16]; // 18-33 }; struct MapEntry @@ -1278,7 +1321,7 @@ struct MapEntry uint32 MapID; // 0 //char* internalname; // 1 unused uint32 map_type; // 2 - //uint32 unk_330; // 3 + uint32 Flags; // 3 // 4 0 or 1 for battlegrounds (not arenas) char* name[16]; // 5-20 // 21 name flags, unused @@ -1288,14 +1331,14 @@ struct MapEntry //char* allianceIntro[16]; // 40-55 text for PvP Zones // 56 intro text flags uint32 multimap_id; // 57 - // 58 + //float BattlefieldMapIconScale; // 58 int32 entrance_map; // 59 map_id of entrance map float entrance_x; // 60 entrance x coordinate (if exist single entry) float entrance_y; // 61 entrance y coordinate (if exist single entry) - // 62 -1, 0 and 720 + //uint32 TimeOfDayOverride; // 62 -1, 0 and 720 uint32 addon; // 63 (0-original maps, 1-tbc addon) uint32 unk_time; // 64 some kind of time? - //uint32 maxPlayers; // 65 max players + uint32 maxPlayers; // 65 max players, fallback if not present in MapDifficulty.dbc // Helpers uint32 Expansion() const { return addon; } @@ -1323,6 +1366,8 @@ struct MapEntry { return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571; } + + bool IsDynamicDifficultyMap() const { return Flags & MAP_FLAG_DYNAMIC_DIFFICULTY; } }; struct MapDifficultyEntry @@ -1353,6 +1398,16 @@ struct OverrideSpellDataEntry //uint32 unk0; // 11 }; +struct PowerDisplayEntry +{ + uint32 Id; // 0 + uint32 PowerType; // 1 + //char* Name; // 2 + //uint32 R; // 3 + //uint32 G; // 4 + //uint32 B; // 5 +}; + struct PvPDifficultyEntry { //uint32 id; // 0 m_ID @@ -1480,23 +1535,6 @@ struct ScalingStatValuesEntry // uint32 displayOrder; // 19 m_sortIndex //}; -//struct SkillRaceClassInfoEntry{ -// uint32 id; // 0 m_ID -// uint32 skillId; // 1 m_skillID -// uint32 raceMask; // 2 m_raceMask -// uint32 classMask; // 3 m_classMask -// uint32 flags; // 4 m_flags -// uint32 reqLevel; // 5 m_minLevel -// uint32 skillTierId; // 6 m_skillTierID -// uint32 skillCostID; // 7 m_skillCostIndex -//}; - -//struct SkillTiersEntry{ -// uint32 id; // 0 m_ID -// uint32 skillValue[16]; // 1-17 m_cost -// uint32 maxSkillValue[16]; // 18-32 m_valueMax -//}; - struct SkillLineEntry { uint32 id; // 0 m_ID @@ -1523,12 +1561,33 @@ struct SkillLineAbilityEntry //uint32 classmaskNot; // 6 m_excludeClass uint32 req_skill_value; // 7 m_minSkillLineRank uint32 forward_spellid; // 8 m_supercededBySpell - uint32 learnOnGetSkill; // 9 m_acquireMethod + uint32 AutolearnType; // 9 m_acquireMethod uint32 max_value; // 10 m_trivialSkillLineRankHigh uint32 min_value; // 11 m_trivialSkillLineRankLow //uint32 characterPoints[2]; // 12-13 m_characterPoints[2] }; +struct SkillRaceClassInfoEntry +{ + //uint32 Id; // 0 + uint32 SkillId; // 1 + uint32 RaceMask; // 2 + uint32 ClassMask; // 3 + uint32 Flags; // 4 + //uint32 MinLevel; // 5 + uint32 SkillTier; // 6 + //uint32 SkillCostType; // 7 +}; + +#define MAX_SKILL_STEP 16 + +struct SkillTiersEntry +{ + uint32 Id; // 0 + //uint32 StepCost[MAX_SKILL_STEP]; // 1-16 + uint32 MaxSkill[MAX_SKILL_STEP]; // 17-32 +}; + struct SoundEntriesEntry { uint32 Id; // 0 m_ID @@ -1937,7 +1996,7 @@ struct VehicleEntry uint32 m_uiLocomotionType; // 34 float m_msslTrgtImpactTexRadius; // 35 uint32 m_uiSeatIndicatorType; // 36 - uint32 m_powerType; // 37, new in 3.1 + uint32 m_powerDisplayId; // 37, new in 3.1 // 38, new in 3.1 // 39, new in 3.1 }; diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index a1ebaa70018..a90cc48c5af 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -33,14 +33,15 @@ char const BannedAddOnsfmt[] = "nxxxxxxxxxx"; char const BarberShopStyleEntryfmt[] = "nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii"; char const BattlemasterListEntryfmt[] = "niiiiiiiiixssssssssssssssssxiixx"; char const CharStartOutfitEntryfmt[] = "dbbbXiiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; -char const CharTitlesEntryfmt[] = "nxssssssssssssssssxxxxxxxxxxxxxxxxxxi"; +char const CharTitlesEntryfmt[] = "nxssssssssssssssssxssssssssssssssssxi"; char const ChatChannelsEntryfmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxx"; char const ChrClassesEntryfmt[] = "nxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii"; -char const ChrRacesEntryfmt[] = "nxixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi"; +char const ChrRacesEntryfmt[] = "niixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi"; char const CinematicSequencesEntryfmt[] = "nxxxxxxxxx"; -char const CreatureDisplayInfofmt[] = "nixxfxxxxxxxxxxx"; +char const CreatureDisplayInfofmt[] = "nixifxxxxxxxxxxx"; +char const CreatureDisplayInfoExtrafmt[] = "diixxxxxxxxxxxxxxxxxx"; char const CreatureFamilyfmt[] = "nfifiiiiixssssssssssssssssxx"; -char const CreatureModelDatafmt[] = "nxxxfxxxxxxxxxxffxxxxxxxxxxx"; +char const CreatureModelDatafmt[] = "nixxfxxxxxxxxxxffxxxxxxxxxxx"; char const CreatureSpellDatafmt[] = "niiiixxxx"; char const CreatureTypefmt[] = "nxxxxxxxxxxxxxxxxxx"; char const CurrencyTypesfmt[] = "xnxi"; @@ -79,22 +80,26 @@ char const ItemRandomPropertiesfmt[] = "nxiiixxssssssssssssssssx"; char const ItemRandomSuffixfmt[] = "nssssssssssssssssxxiiixxiiixx"; char const ItemSetEntryfmt[] = "dssssssssssssssssxiiiiiiiiiixxxxxxxiiiiiiiiiiiiiiiiii"; char const LFGDungeonEntryfmt[] = "nssssssssssssssssxiiiiiiiiixxixixxxxxxxxxxxxxxxxx"; +char const LightEntryfmt[] = "nifffxxxxxxxxxx"; char const LiquidTypefmt[] = "nxxixixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; char const LockEntryfmt[] = "niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx"; char const MailTemplateEntryfmt[] = "nxxxxxxxxxxxxxxxxxssssssssssssssssx"; -char const MapEntryfmt[] = "nxixxssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiix"; +char const MapEntryfmt[] = "nxiixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiii"; char const MapDifficultyEntryfmt[] = "diisxxxxxxxxxxxxxxxxiix"; char const MovieEntryfmt[] = "nxx"; char const OverrideSpellDatafmt[] = "niiiiiiiiiix"; char const QuestFactionRewardfmt[] = "niiiiiiiiii"; char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx"; char const QuestXPfmt[] = "niiiiiiiiii"; +char const PowerDisplayfmt[] = "nixxxx"; char const PvPDifficultyfmt[] = "diiiii"; char const RandomPropertiesPointsfmt[] = "niiiiiiiiiiiiiii"; char const ScalingStatDistributionfmt[] = "niiiiiiiiiiiiiiiiiiiii"; char const ScalingStatValuesfmt[] = "iniiiiiiiiiiiiiiiiiiiiii"; char const SkillLinefmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxi"; char const SkillLineAbilityfmt[] = "niiiixxiiiiixx"; +char const SkillRaceClassInfofmt[] = "diiiixix"; +char const SkillTiersfmt[] = "nxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiii"; char const SoundEntriesfmt[] = "nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; char const SpellCastTimefmt[] = "nixx"; char const SpellCategoryfmt[] = "ni"; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 2dcba7b6a76..d353efb58c7 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -60,8 +60,8 @@ void LFGMgr::_LoadFromDB(Field* fields, uint64 guid) SetLeader(guid, MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER)); - uint32 dungeon = fields[16].GetUInt32(); - uint8 state = fields[17].GetUInt8(); + uint32 dungeon = fields[17].GetUInt32(); + uint8 state = fields[18].GetUInt8(); if (!dungeon || !state) return; @@ -257,10 +257,6 @@ void LFGMgr::LoadLFGDungeons(bool reload /* = false */) if (reload) { CachedDungeonMapStore.clear(); - // Recalculate locked dungeons - for (LfgPlayerDataContainer::const_iterator it = PlayersStore.begin(); it != PlayersStore.end(); ++it) - if (Player* player = ObjectAccessor::FindPlayer(it->first)) - InitializeLockedDungeons(player); } } @@ -368,73 +364,6 @@ void LFGMgr::Update(uint32 diff) } /** - Generate the dungeon lock map for a given player - - @param[in] player Player we need to initialize the lock status map -*/ -void LFGMgr::InitializeLockedDungeons(Player* player, uint8 level /* = 0 */) -{ - uint64 guid = player->GetGUID(); - if (!level) - level = player->getLevel(); - uint8 expansion = player->GetSession()->Expansion(); - LfgDungeonSet const& dungeons = GetDungeonsByRandom(0); - LfgLockMap lock; - bool denyJoin = !player->GetSession()->HasPermission(rbac::RBAC_PERM_JOIN_DUNGEON_FINDER); - - for (LfgDungeonSet::const_iterator it = dungeons.begin(); it != dungeons.end(); ++it) - { - LFGDungeonData const* dungeon = GetLFGDungeon(*it); - if (!dungeon) // should never happen - We provide a list from sLFGDungeonStore - continue; - - uint32 lockData = 0; - if (denyJoin) - lockData = LFG_LOCKSTATUS_RAID_LOCKED; - else if (dungeon->expansion > expansion) - lockData = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION; - else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player)) - lockData = LFG_LOCKSTATUS_RAID_LOCKED; - else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && player->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty))) - lockData = LFG_LOCKSTATUS_RAID_LOCKED; - else if (dungeon->minlevel > level) - lockData = LFG_LOCKSTATUS_TOO_LOW_LEVEL; - else if (dungeon->maxlevel < level) - lockData = LFG_LOCKSTATUS_TOO_HIGH_LEVEL; - else if (dungeon->seasonal && !IsSeasonActive(dungeon->id)) - lockData = LFG_LOCKSTATUS_NOT_IN_SEASON; - else if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty))) - { - if (ar->achievement && !player->HasAchieved(ar->achievement)) - lockData = LFG_LOCKSTATUS_MISSING_ACHIEVEMENT; - else if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A)) - lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; - else if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H)) - lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; - else - if (ar->item) - { - if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2))) - lockData = LFG_LOCKSTATUS_MISSING_ITEM; - } - else if (ar->item2 && !player->HasItemCount(ar->item2)) - lockData = LFG_LOCKSTATUS_MISSING_ITEM; - } - - /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED) - lockData = LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE; - lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE; - lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL; - lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL; - */ - - if (lockData) - lock[dungeon->Entry()] = lockData; - } - SetLockedDungeons(guid, lock); -} - -/** Adds the player/group to lfg queue. If player is in a group then it is the leader of the group tying to join the group. Join conditions are checked before adding to the new queue. @@ -967,6 +896,7 @@ void LFGMgr::MakeNewGroup(LfgProposal const& proposal) player->CastSpell(player, LFG_SPELL_DUNGEON_COOLDOWN, false); } + ASSERT(grp); grp->SetDungeonDifficulty(Difficulty(dungeon->difficulty)); uint64 gguid = grp->GetGUID(); SetDungeon(gguid, dungeon->Entry()); @@ -1608,10 +1538,74 @@ LfgDungeonSet const& LFGMgr::GetSelectedDungeons(uint64 guid) return PlayersStore[guid].GetSelectedDungeons(); } -LfgLockMap const& LFGMgr::GetLockedDungeons(uint64 guid) +LfgLockMap const LFGMgr::GetLockedDungeons(uint64 guid) { TC_LOG_TRACE("lfg.data.player.dungeons.locked.get", "Player: %u, LockedDungeons.", GUID_LOPART(guid)); - return PlayersStore[guid].GetLockedDungeons(); + LfgLockMap lock; + Player* player = ObjectAccessor::FindPlayer(guid); + if (!player) + { + TC_LOG_WARN("lfg.data.player.dungeons.locked.get", "Player: %u not ingame while retrieving his LockedDungeons.", GUID_LOPART(guid)); + return lock; + } + + uint8 level = player->getLevel(); + uint8 expansion = player->GetSession()->Expansion(); + LfgDungeonSet const& dungeons = GetDungeonsByRandom(0); + bool denyJoin = !player->GetSession()->HasPermission(rbac::RBAC_PERM_JOIN_DUNGEON_FINDER); + + for (LfgDungeonSet::const_iterator it = dungeons.begin(); it != dungeons.end(); ++it) + { + LFGDungeonData const* dungeon = GetLFGDungeon(*it); + if (!dungeon) // should never happen - We provide a list from sLFGDungeonStore + continue; + + uint32 lockData = 0; + if (denyJoin) + lockData = LFG_LOCKSTATUS_RAID_LOCKED; + else if (dungeon->expansion > expansion) + lockData = LFG_LOCKSTATUS_INSUFFICIENT_EXPANSION; + else if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, dungeon->map, player)) + lockData = LFG_LOCKSTATUS_RAID_LOCKED; + else if (dungeon->difficulty > DUNGEON_DIFFICULTY_NORMAL && player->GetBoundInstance(dungeon->map, Difficulty(dungeon->difficulty))) + lockData = LFG_LOCKSTATUS_RAID_LOCKED; + else if (dungeon->minlevel > level) + lockData = LFG_LOCKSTATUS_TOO_LOW_LEVEL; + else if (dungeon->maxlevel < level) + lockData = LFG_LOCKSTATUS_TOO_HIGH_LEVEL; + else if (dungeon->seasonal && !IsSeasonActive(dungeon->id)) + lockData = LFG_LOCKSTATUS_NOT_IN_SEASON; + else if (AccessRequirement const* ar = sObjectMgr->GetAccessRequirement(dungeon->map, Difficulty(dungeon->difficulty))) + { + if (ar->item_level && player->GetAverageItemLevel() < ar->item_level) + lockData = LFG_LOCKSTATUS_TOO_LOW_GEAR_SCORE; + else if (ar->achievement && !player->HasAchieved(ar->achievement)) + lockData = LFG_LOCKSTATUS_MISSING_ACHIEVEMENT; + else if (player->GetTeam() == ALLIANCE && ar->quest_A && !player->GetQuestRewardStatus(ar->quest_A)) + lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; + else if (player->GetTeam() == HORDE && ar->quest_H && !player->GetQuestRewardStatus(ar->quest_H)) + lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED; + else + if (ar->item) + { + if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2))) + lockData = LFG_LOCKSTATUS_MISSING_ITEM; + } + else if (ar->item2 && !player->HasItemCount(ar->item2)) + lockData = LFG_LOCKSTATUS_MISSING_ITEM; + } + + /* @todo VoA closed if WG is not under team control (LFG_LOCKSTATUS_RAID_LOCKED) + lockData = LFG_LOCKSTATUS_TOO_HIGH_GEAR_SCORE; + lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_LOW_LEVEL; + lockData = LFG_LOCKSTATUS_ATTUNEMENT_TOO_HIGH_LEVEL; + */ + + if (lockData) + lock[dungeon->Entry()] = lockData; + } + + return lock; } uint8 LFGMgr::GetKicksLeft(uint64 guid) @@ -1689,12 +1683,6 @@ void LFGMgr::SetSelectedDungeons(uint64 guid, LfgDungeonSet const& dungeons) PlayersStore[guid].SetSelectedDungeons(dungeons); } -void LFGMgr::SetLockedDungeons(uint64 guid, LfgLockMap const& lock) -{ - TC_LOG_TRACE("lfg.data.player.dungeon.locked.set", "Player: %u, LockedDungeons", GUID_LOPART(guid)); - PlayersStore[guid].SetLockedDungeons(lock); -} - void LFGMgr::DecreaseKicksLeft(uint64 guid) { GroupsStore[guid].DecreaseKicksLeft(); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 8e33ba0a2f6..2c31fe37d4d 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -145,7 +145,7 @@ typedef std::map<uint64, LfgProposalPlayer> LfgProposalPlayerContainer; typedef std::map<uint64, LfgPlayerBoot> LfgPlayerBootContainer; typedef std::map<uint64, LfgGroupData> LfgGroupDataContainer; typedef std::map<uint64, LfgPlayerData> LfgPlayerDataContainer; -typedef UNORDERED_MAP<uint32, LFGDungeonData> LFGDungeonContainer; +typedef std::unordered_map<uint32, LFGDungeonData> LFGDungeonContainer; // Data needed by SMSG_LFG_JOIN_RESULT struct LfgJoinResultData @@ -351,8 +351,6 @@ class LFGMgr // LFGScripts /// Get leader of the group (using internal data) uint64 GetLeader(uint64 guid); - /// Initializes locked dungeons for given player (called at login or level change) - void InitializeLockedDungeons(Player* player, uint8 level = 0); /// Sets player team void SetTeam(uint64 guid, uint8 team); /// Sets player group @@ -370,7 +368,7 @@ class LFGMgr // LFGHandler /// Get locked dungeons - LfgLockMap const& GetLockedDungeons(uint64 guid); + LfgLockMap const GetLockedDungeons(uint64 guid); /// Returns current lfg status LfgUpdateData GetLfgStatus(uint64 guid); /// Checks if Seasonal dungeon is active @@ -422,7 +420,6 @@ class LFGMgr void ClearState(uint64 guid, char const* debugMsg); void SetDungeon(uint64 guid, uint32 dungeon); void SetSelectedDungeons(uint64 guid, LfgDungeonSet const& dungeons); - void SetLockedDungeons(uint64 guid, LfgLockMap const& lock); void DecreaseKicksLeft(uint64 guid); void SetState(uint64 guid, LfgState state); void RemovePlayerData(uint64 guid); diff --git a/src/server/game/DungeonFinding/LFGPlayerData.cpp b/src/server/game/DungeonFinding/LFGPlayerData.cpp index 0553d4ac4fe..84b93543d7f 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.cpp +++ b/src/server/game/DungeonFinding/LFGPlayerData.cpp @@ -54,11 +54,6 @@ void LfgPlayerData::RestoreState() m_State = m_OldState; } -void LfgPlayerData::SetLockedDungeons(LfgLockMap const& lockStatus) -{ - m_LockedDungeons = lockStatus; -} - void LfgPlayerData::SetTeam(uint8 team) { m_Team = team; @@ -94,11 +89,6 @@ LfgState LfgPlayerData::GetOldState() const return m_OldState; } -const LfgLockMap& LfgPlayerData::GetLockedDungeons() const -{ - return m_LockedDungeons; -} - uint8 LfgPlayerData::GetTeam() const { return m_Team; diff --git a/src/server/game/DungeonFinding/LFGPlayerData.h b/src/server/game/DungeonFinding/LFGPlayerData.h index e20e914a9c9..996764e7620 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.h +++ b/src/server/game/DungeonFinding/LFGPlayerData.h @@ -35,7 +35,6 @@ class LfgPlayerData // General void SetState(LfgState state); void RestoreState(); - void SetLockedDungeons(LfgLockMap const& lock); void SetTeam(uint8 team); void SetGroup(uint64 group); @@ -47,7 +46,6 @@ class LfgPlayerData // General LfgState GetState() const; LfgState GetOldState() const; - LfgLockMap const& GetLockedDungeons() const; uint8 GetTeam() const; uint64 GetGroup() const; @@ -61,7 +59,6 @@ class LfgPlayerData LfgState m_State; ///< State if group in LFG LfgState m_OldState; ///< Old State - Used to restore state after failed Rolecheck/Proposal // Player - LfgLockMap m_LockedDungeons; ///< Dungeons player can't do and reason uint8 m_Team; ///< Player team - determines the queue to join uint64 m_Group; ///< Original group of player when joined LFG diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 1f182ce0761..181e04e04fc 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -34,14 +34,6 @@ namespace lfg LFGPlayerScript::LFGPlayerScript() : PlayerScript("LFGPlayerScript") { } -void LFGPlayerScript::OnLevelChanged(Player* player, uint8 /*oldLevel*/) -{ - if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) - return; - - sLFGMgr->InitializeLockedDungeons(player); -} - void LFGPlayerScript::OnLogout(Player* player) { if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) @@ -54,7 +46,7 @@ void LFGPlayerScript::OnLogout(Player* player) } } -void LFGPlayerScript::OnLogin(Player* player) +void LFGPlayerScript::OnLogin(Player* player, bool /*loginFirst*/) { if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) return; @@ -74,18 +66,10 @@ void LFGPlayerScript::OnLogin(Player* player) } } - sLFGMgr->InitializeLockedDungeons(player); sLFGMgr->SetTeam(player->GetGUID(), player->GetTeam()); /// @todo - Restore LfgPlayerData and send proper status to player if it was in a group } -void LFGPlayerScript::OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool /*permanent*/) -{ - MapEntry const* mapEntry = sMapStore.LookupEntry(mapId); - if (mapEntry->IsDungeon() && difficulty > DUNGEON_DIFFICULTY_NORMAL) - sLFGMgr->InitializeLockedDungeons(player); -} - void LFGPlayerScript::OnMapChanged(Player* player) { Map const* map = player->GetMap(); diff --git a/src/server/game/DungeonFinding/LFGScripts.h b/src/server/game/DungeonFinding/LFGScripts.h index c4e1cf0a203..1ed37bd9d05 100644 --- a/src/server/game/DungeonFinding/LFGScripts.h +++ b/src/server/game/DungeonFinding/LFGScripts.h @@ -35,10 +35,8 @@ class LFGPlayerScript : public PlayerScript LFGPlayerScript(); // Player Hooks - void OnLevelChanged(Player* player, uint8 oldLevel); void OnLogout(Player* player); - void OnLogin(Player* player); - void OnBindToInstance(Player* player, Difficulty difficulty, uint32 mapId, bool permanent); + void OnLogin(Player* player, bool loginFirst); void OnMapChanged(Player* player); }; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index e4bdc2d58fe..fd8aaff8159 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -111,11 +111,11 @@ uint32 CreatureTemplate::GetFirstValidModelId() const bool AssistDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) { - if (Unit* victim = Unit::GetUnit(m_owner, m_victim)) + if (Unit* victim = ObjectAccessor::GetUnit(m_owner, m_victim)) { while (!m_assistants.empty()) { - Creature* assistant = Unit::GetCreature(m_owner, *m_assistants.begin()); + Creature* assistant = ObjectAccessor::GetCreature(m_owner, *m_assistants.begin()); m_assistants.pop_front(); if (assistant && assistant->CanAssistTo(&m_owner, victim)) @@ -142,8 +142,8 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) } Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), -lootForPickPocketed(false), lootForBody(false), m_groupLootTimer(0), lootingGroupLowGUID(0), -m_PlayerDamageReq(0), m_lootRecipient(0), m_lootRecipientGroup(0), m_corpseRemoveTime(0), m_respawnTime(0), +m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), +m_lootRecipient(0), m_lootRecipientGroup(0), _skinner(0), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE), m_DBTableGuid(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), @@ -257,7 +257,7 @@ void Creature::RemoveCorpse(bool setSpawnTime) /** * change the entry of creature until respawn */ -bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data) +bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) { CreatureTemplate const* normalInfo = sObjectMgr->GetCreatureTemplate(entry); if (!normalInfo) @@ -333,10 +333,10 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - SetSpeed(MOVE_WALK, cinfo->speed_walk); - SetSpeed(MOVE_RUN, cinfo->speed_run); - SetSpeed(MOVE_SWIM, 1.0f); // using 1.0 rate - SetSpeed(MOVE_FLIGHT, 1.0f); // using 1.0 rate + SetSpeed(MOVE_WALK, cinfo->speed_walk); + SetSpeed(MOVE_RUN, cinfo->speed_run); + SetSpeed(MOVE_SWIM, 1.0f); // using 1.0 rate + SetSpeed(MOVE_FLIGHT, 1.0f); // using 1.0 rate // Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH SetObjectScale(cinfo->scale); @@ -354,9 +354,9 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data return true; } -bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data) +bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/) { - if (!InitEntry(Entry, team, data)) + if (!InitEntry(entry, data)) return false; CreatureTemplate const* cInfo = GetCreatureTemplate(); @@ -367,10 +367,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data) if (!GetCreatureAddon()) SetSheath(SHEATH_STATE_MELEE); - if (team == HORDE) - setFaction(cInfo->faction_H); - else - setFaction(cInfo->faction_A); + setFaction(cInfo->faction); uint32 npcflag, unit_flags, dynamicflags; ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data); @@ -408,7 +405,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data) UpdateAllStats(); // checked and error show at loading templates - if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_A)) + if (FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction)) { if (factionTemplate->factionFlags & FACTION_TEMPLATE_FLAG_PVP) SetPvP(true); @@ -550,6 +547,15 @@ void Creature::Update(uint32 diff) if (!IsAlive()) break; + time_t now = time(NULL); + + // Check if we should refill the pickpocketing loot + if (loot.loot_type == LOOT_PICKPOCKETING && _pickpocketLootRestore && _pickpocketLootRestore <= now) + { + loot.clear(); + _pickpocketLootRestore = 0; + } + if (m_regenTimer > 0) { if (diff >= m_regenTimer) @@ -562,21 +568,21 @@ void Creature::Update(uint32 diff) break; bool bInCombat = IsInCombat() && (!GetVictim() || // if IsInCombat() is true and this has no victim - !GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() || // or the victim/owner/charmer is not a player - !GetVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->IsGameMaster()); // or the victim/owner/charmer is not a GameMaster + !EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself() || // or the victim/owner/charmer is not a player + !EnsureVictim()->GetCharmerOrOwnerPlayerOrPlayerItself()->IsGameMaster()); // or the victim/owner/charmer is not a GameMaster /*if (m_regenTimer <= diff) {*/ if (!IsInEvadeMode() && (!bInCombat || IsPolymorphed())) // regenerate health if not in combat or if polymorphed RegenerateHealth(); - if (getPowerType() == POWER_ENERGY) + if (HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER)) { - if (!IsVehicle() || GetVehicleKit()->GetVehicleInfo()->m_powerType != POWER_PYRITE) + if (getPowerType() == POWER_ENERGY) Regenerate(POWER_ENERGY); + else + RegenerateMana(); } - else - RegenerateMana(); /*if (!bIsPolymorphed) // only increase the timer if not polymorphed m_regenTimer += CREATURE_REGEN_INTERVAL - diff; @@ -693,7 +699,7 @@ void Creature::DoFleeToGetAssistance() UpdateSpeed(MOVE_RUN, false); if (!creature) - //SetFeared(true, GetVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY)); + //SetFeared(true, EnsureVictim()->GetGUID(), 0, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_FLEE_DELAY)); /// @todo use 31365 SetControlled(true, UNIT_STATE_FLEEING); else @@ -739,16 +745,16 @@ void Creature::Motion_Initialize() GetMotionMaster()->Initialize(); } -bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data) +bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) { ASSERT(map); SetMap(map); SetPhaseMask(phaseMask, false); - CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry); + CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry); if (!cinfo) { - TC_LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, Entry); + TC_LOG_ERROR("sql.sql", "Creature::Create(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, entry); return false; } @@ -756,13 +762,12 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, //! returning correct zone id for selecting OutdoorPvP/Battlefield script Relocate(x, y, z, ang); - //oX = x; oY = y; dX = x; dY = y; m_moveTime = 0; m_startMove = 0; - if (!CreateFromProto(guidlow, Entry, vehId, team, data)) + if (!CreateFromProto(guidlow, entry, data, vehId)) return false; if (!IsPositionValid()) { - TC_LOG_ERROR("entities.unit", "Creature::Create(): given coordinates for creature (guidlow %d, entry %d) are not valid (X: %f, Y: %f, Z: %f, O: %f)", guidlow, Entry, x, y, z, ang); + TC_LOG_ERROR("entities.unit", "Creature::Create(): given coordinates for creature (guidlow %d, entry %d) are not valid (X: %f, Y: %f, Z: %f, O: %f)", guidlow, entry, x, y, z, ang); return false; } @@ -814,9 +819,6 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); } - if (Entry == VISUAL_WAYPOINT) - SetVisible(false); - return true; } @@ -824,10 +826,12 @@ void Creature::InitializeReactState() { if (IsTotem() || IsTrigger() || GetCreatureType() == CREATURE_TYPE_CRITTER || IsSpiritService()) SetReactState(REACT_PASSIVE); + /* + else if (IsCivilian()) + SetReactState(REACT_DEFENSIVE); + */ else SetReactState(REACT_AGGRESSIVE); - /*else if (IsCivilian()) - SetReactState(REACT_DEFENSIVE);*/; } bool Creature::isCanInteractWithBattleMaster(Player* player, bool msg) const @@ -1159,35 +1163,43 @@ float Creature::GetSpellDamageMod(int32 Rank) const } } -bool Creature::CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data) +bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) { SetZoneScript(); if (GetZoneScript() && data) { - Entry = GetZoneScript()->GetCreatureEntry(guidlow, data); - if (!Entry) + entry = GetZoneScript()->GetCreatureEntry(guidlow, data); + if (!entry) return false; } - CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(Entry); + CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry); if (!cinfo) { - TC_LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, Entry); + TC_LOG_ERROR("sql.sql", "Creature::CreateFromProto(): creature template (guidlow: %u, entry: %u) does not exist.", guidlow, entry); return false; } - SetOriginalEntry(Entry); - - if (!vehId) - vehId = cinfo->VehicleId; + SetOriginalEntry(entry); - Object::_Create(guidlow, Entry, vehId ? HIGHGUID_VEHICLE : HIGHGUID_UNIT); + Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HIGHGUID_VEHICLE : HIGHGUID_UNIT); - if (!UpdateEntry(Entry, team, data)) + if (!UpdateEntry(entry, data)) return false; + if (!vehId) + { + if (GetCreatureTemplate()->VehicleId) + { + vehId = GetCreatureTemplate()->VehicleId; + entry = GetCreatureTemplate()->Entry; + } + else + vehId = cinfo->VehicleId; + } + if (vehId) - CreateVehicleKit(vehId, Entry); + CreateVehicleKit(vehId, entry); return true; } @@ -1211,8 +1223,7 @@ bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap) else guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); - uint16 team = 0; - if (!Create(guid, map, data->phaseMask, data->id, 0, team, data->posX, data->posY, data->posZ, data->orientation, data)) + if (!Create(guid, map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data)) return false; //We should set first home position, because then AI calls home movement @@ -1461,11 +1472,6 @@ void Creature::setDeathState(DeathState s) setActive(false); - if (!IsPet() && GetCreatureTemplate()->SkinLootId) - if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId)) - if (hasLootRecipient()) - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - if (HasSearchedAssistance()) { SetNoSearchAssistance(false); @@ -1525,9 +1531,8 @@ void Creature::Respawn(bool force) TC_LOG_DEBUG("entities.unit", "Respawning creature %s (GuidLow: %u, Full GUID: " UI64FMTD " Entry: %u)", GetName().c_str(), GetGUIDLow(), GetGUID(), GetEntry()); m_respawnTime = 0; - lootForPickPocketed = false; - lootForBody = false; - + _pickpocketLootRestore = 0; + loot.clear(); if (m_originalEntry != GetEntry()) UpdateEntry(m_originalEntry); @@ -1845,7 +1850,7 @@ void Creature::CallAssistance() if (!assistList.empty()) { - AssistDelayEvent* e = new AssistDelayEvent(GetVictim()->GetGUID(), *this); + AssistDelayEvent* e = new AssistDelayEvent(EnsureVictim()->GetGUID(), *this); while (!assistList.empty()) { // Pushing guids because in delay can happen some creature gets despawned => invalid pointer @@ -2266,26 +2271,23 @@ void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, floa void Creature::AllLootRemovedFromCorpse() { - if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE)) - { - time_t now = time(NULL); - if (m_corpseRemoveTime <= now) - return; + if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient()) + if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId)) + SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - float decayRate; - CreatureTemplate const* cinfo = GetCreatureTemplate(); + time_t now = time(NULL); + if (m_corpseRemoveTime <= now) + return; - decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED); - uint32 diff = uint32((m_corpseRemoveTime - now) * decayRate); + float decayRate = sWorld->getRate(RATE_CORPSE_DECAY_LOOTED); - m_respawnTime -= diff; + // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update + if (loot.loot_type == LOOT_SKINNING) + m_corpseRemoveTime = time(NULL); + else + m_corpseRemoveTime = now + m_corpseDelay * decayRate; - // corpse skinnable, but without skinning flag, and then skinned, corpse will despawn next update - if (cinfo && cinfo->SkinLootId) - m_corpseRemoveTime = time(NULL); - else - m_corpseRemoveTime -= diff; - } + m_respawnTime = m_corpseRemoveTime + m_respawnDelay; } uint8 Creature::getLevelForTarget(WorldObject const* target) const @@ -2710,3 +2712,8 @@ void Creature::ReleaseFocus(Spell const* focusSpell) ClearUnitState(UNIT_STATE_ROTATING); } +void Creature::StartPickPocketRefillTimer() +{ + _pickpocketLootRestore = time(NULL) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL); +} + diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 737e3072091..ca536e44e43 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -88,8 +88,7 @@ struct CreatureTemplate uint8 minlevel; uint8 maxlevel; uint32 expansion; - uint32 faction_A; - uint32 faction_H; + uint32 faction; uint32 npcflag; float speed_walk; float speed_run; @@ -171,7 +170,7 @@ struct CreatureTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, CreatureTemplate> CreatureTemplateContainer; +typedef std::unordered_map<uint32, CreatureTemplate> CreatureTemplateContainer; // GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform #if defined(__GNUC__) @@ -219,7 +218,7 @@ struct CreatureBaseStats static CreatureBaseStats const* GetBaseStats(uint8 level, uint8 unitClass); }; -typedef UNORDERED_MAP<uint16, CreatureBaseStats> CreatureBaseStatsContainer; +typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer; struct CreatureLocale { @@ -244,8 +243,8 @@ struct EquipmentInfo }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint8, EquipmentInfo> EquipmentInfoContainerInternal; -typedef UNORDERED_MAP<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; +typedef std::unordered_map<uint8, EquipmentInfo> EquipmentInfoContainerInternal; +typedef std::unordered_map<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; // from `creature` table struct CreatureData @@ -285,7 +284,7 @@ struct CreatureModelInfo }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint16, CreatureModelInfo> CreatureModelContainer; +typedef std::unordered_map<uint16, CreatureModelInfo> CreatureModelContainer; enum InhabitTypeValues { @@ -326,7 +325,7 @@ struct CreatureAddon std::vector<uint32> auras; }; -typedef UNORDERED_MAP<uint32, CreatureAddon> CreatureAddonContainer; +typedef std::unordered_map<uint32, CreatureAddon> CreatureAddonContainer; // Vendors struct VendorItem @@ -402,7 +401,7 @@ struct TrainerSpell bool IsCastable() const { return learnedSpell[0] != spell; } }; -typedef UNORDERED_MAP<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap; +typedef std::unordered_map<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap; struct TrainerSpellData { @@ -437,7 +436,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject void DisappearAndDie(); - bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data = NULL); + bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0); bool LoadCreaturesAddon(bool reload = false); void SelectLevel(); void LoadEquipment(int8 id = 1, bool force = false); @@ -505,7 +504,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject bool HasSpell(uint32 spellID) const; - bool UpdateEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL); + bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr); void UpdateMovementFlags(); @@ -516,9 +515,9 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject void UpdateMaxHealth(); void UpdateMaxPower(Powers power); void UpdateAttackPowerAndDamage(bool ranged = false); - void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) OVERRIDE; + void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) override; - void SetCanDualWield(bool value) OVERRIDE; + void SetCanDualWield(bool value) override; int8 GetOriginalEquipmentId() const { return m_originalEquipmentId; } uint8 GetCurrentEquipmentId() { return m_equipmentId; } void SetCurrentEquipmentId(uint8 id) { m_equipmentId = id; } @@ -552,8 +551,10 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject virtual void DeleteFromDB(); // overriden in Pet Loot loot; - bool lootForPickPocketed; - bool lootForBody; + void StartPickPocketRefillTimer(); + void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; } + void SetSkinner(uint64 guid) { _skinner = guid; } + uint64 GetSkinner() const { return _skinner; } // Returns the player who skinned this creature Player* GetLootRecipient() const; Group* GetLootRecipientGroup() const; bool hasLootRecipient() const { return m_lootRecipient || m_lootRecipientGroup; } @@ -635,13 +636,13 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject void SetHomePosition(float x, float y, float z, float o) { m_homePosition.Relocate(x, y, z, o); } void SetHomePosition(const Position &pos) { m_homePosition.Relocate(pos); } - void GetHomePosition(float &x, float &y, float &z, float &ori) const { m_homePosition.GetPosition(x, y, z, ori); } - Position GetHomePosition() const { return m_homePosition; } + void GetHomePosition(float& x, float& y, float& z, float& ori) const { m_homePosition.GetPosition(x, y, z, ori); } + Position const& GetHomePosition() const { return m_homePosition; } void SetTransportHomePosition(float x, float y, float z, float o) { m_transportHomePosition.Relocate(x, y, z, o); } void SetTransportHomePosition(const Position &pos) { m_transportHomePosition.Relocate(pos); } - void GetTransportHomePosition(float &x, float &y, float &z, float &ori) { m_transportHomePosition.GetPosition(x, y, z, ori); } - Position GetTransportHomePosition() { return m_transportHomePosition; } + void GetTransportHomePosition(float& x, float& y, float& z, float& ori) const { m_transportHomePosition.GetPosition(x, y, z, ori); } + Position const& GetTransportHomePosition() const { return m_transportHomePosition; } uint32 GetWaypointPath() const { return m_path_id; } void LoadPath(uint32 pathid) { m_path_id = pathid; } @@ -679,8 +680,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject void ReleaseFocus(Spell const* focusSpell); protected: - bool CreateFromProto(uint32 guidlow, uint32 Entry, uint32 vehId, uint32 team, const CreatureData* data = NULL); - bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL); + bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); + bool InitEntry(uint32 entry, CreatureData const* data = nullptr); // vendor items VendorItemCounts m_vendorItemCounts; @@ -689,8 +690,10 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject uint64 m_lootRecipient; uint32 m_lootRecipientGroup; + uint64 _skinner; /// Timers + time_t _pickpocketLootRestore; time_t m_corpseRemoveTime; // (msecs)timer for death or corpse disappearance time_t m_respawnTime; // (secs) time of next respawn uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index 846b05abc17..b790853f5e1 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -20,7 +20,7 @@ #define _FORMATIONS_H #include "Define.h" -#include "UnorderedMap.h" +#include <unordered_map> #include <map> class Creature; @@ -36,7 +36,7 @@ struct FormationInfo uint16 point_2; }; -typedef UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; +typedef std::unordered_map<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; class FormationMgr { diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index ffb28849925..492d82c5a03 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -28,6 +28,7 @@ GossipMenu::GossipMenu() { _menuId = 0; _locale = DEFAULT_LOCALE; + _senderGUID = 0; } GossipMenu::~GossipMenu() @@ -90,19 +91,40 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui continue; /// Store texts for localization. - std::string strOptionText = itr->second.OptionText; - std::string strBoxText = itr->second.BoxText; + std::string strOptionText, strBoxText; + BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId); + BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId); + + /// OptionText + if (optionBroadcastText) + strOptionText = optionBroadcastText->GetText(GetLocale()); + else + strOptionText = itr->second.OptionText; + + /// BoxText + if (boxBroadcastText) + strBoxText = boxBroadcastText->GetText(GetLocale()); + else + strBoxText = itr->second.BoxText; /// Check need of localization. - if (GetLocale() > LOCALE_enUS) - /// Find localizations from database. - if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId))) + if (GetLocale() != DEFAULT_LOCALE) + { + if (!optionBroadcastText) { - /// Translate texts if there are any. - ObjectMgr::GetLocaleString(no->OptionText, GetLocale(), strOptionText); - ObjectMgr::GetLocaleString(no->BoxText, GetLocale(), strBoxText); + /// Find localizations from database. + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId))) + ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText); } + if (!boxBroadcastText) + { + /// Find localizations from database. + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId))) + ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText); + } + } + /// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro. AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded); } @@ -166,8 +188,10 @@ void PlayerMenu::ClearMenus() _questMenu.ClearMenu(); } -void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const +void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) { + _gossipMenu.SetSenderGUID(objectGUID); + WorldPacket data(SMSG_GOSSIP_MESSAGE, 100); // guess size data << uint64(objectGUID); data << uint32(_gossipMenu.GetMenuId()); // new 2.4.0 @@ -222,8 +246,10 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const _session->SendPacket(&data); } -void PlayerMenu::SendCloseGossip() const +void PlayerMenu::SendCloseGossip() { + _gossipMenu.SetSenderGUID(0); + WorldPacket data(SMSG_GOSSIP_COMPLETE, 0); _session->SendPacket(&data); } diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 9a30fdeee2b..e8fac878409 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -25,7 +25,7 @@ class WorldSession; -#define GOSSIP_MAX_MENU_ITEMS 64 // client supported items unknown, but provided number must be enough +#define GOSSIP_MAX_MENU_ITEMS 32 #define DEFAULT_GOSSIP_MESSAGE 0xffffff enum Gossip_Option @@ -167,6 +167,8 @@ class GossipMenu void SetMenuId(uint32 menu_id) { _menuId = menu_id; } uint32 GetMenuId() const { return _menuId; } + void SetSenderGUID(uint64 guid) { _senderGUID = guid; } + uint64 GetSenderGUID() const { return _senderGUID; } void SetLocale(LocaleConstant locale) { _locale = locale; } LocaleConstant GetLocale() const { return _locale; } @@ -215,6 +217,7 @@ class GossipMenu GossipMenuItemContainer _menuItems; GossipMenuItemDataContainer _menuItemData; uint32 _menuId; + uint64 _senderGUID; LocaleConstant _locale; }; @@ -264,8 +267,8 @@ class PlayerMenu uint32 GetGossipOptionAction(uint32 selection) const { return _gossipMenu.GetMenuItemAction(selection); } bool IsGossipOptionCoded(uint32 selection) const { return _gossipMenu.IsMenuItemCoded(selection); } - void SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const; - void SendCloseGossip() const; + void SendGossipMenu(uint32 titleTextId, uint64 objectGUID); + void SendCloseGossip(); void SendPointOfInterest(uint32 poiId) const; /*********************************************************/ diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index e93f66ed726..1cee6361172 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -95,7 +95,7 @@ class Guardian : public Minion void UpdateMaxHealth(); void UpdateMaxPower(Powers power); void UpdateAttackPowerAndDamage(bool ranged = false); - void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE; + void UpdateDamagePhysical(WeaponAttackType attType) override; int32 GetBonusDamage() const { return m_bonusSpellDamage; } void SetBonusDamage(int32 damage); diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index f4e956e8839..e008146bb85 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -26,6 +26,7 @@ #include "CellImpl.h" #include "GridNotifiersImpl.h" #include "ScriptMgr.h" +#include "Transport.h" DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject), _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _isViewpoint(false) @@ -108,8 +109,25 @@ bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spe if (IsWorldObject()) setActive(true); //must before add to map to be put in world container + Transport* transport = caster->GetTransport(); + if (transport) + { + float x, y, z, o; + pos.GetPosition(x, y, z, o); + transport->CalculatePassengerOffset(x, y, z, &o); + m_movementInfo.transport.pos.Relocate(x, y, z, o); + + // This object must be added to transport before adding to map for the client to properly display it + transport->AddPassenger(this); + } + if (!GetMap()->AddToMap(this)) + { + // Returning false will cause the object to be deleted - remove from transport + if (transport) + transport->RemovePassenger(this); return false; + } return true; } diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index 5b68bf377b9..c9fd1d29f8b 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -32,7 +32,7 @@ enum DynamicObjectType DYNAMIC_OBJECT_FARSIGHT_FOCUS = 0x2 }; -class DynamicObject : public WorldObject, public GridObject<DynamicObject> +class DynamicObject : public WorldObject, public GridObject<DynamicObject>, public MapObject { public: DynamicObject(bool isWorldObject); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index e326e0155c1..23e40382fa2 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -47,12 +47,13 @@ GameObject::GameObject() : WorldObject(false), MapObject(), m_respawnTime = 0; m_respawnDelayTime = 300; m_lootState = GO_NOT_READY; + m_lootStateUnitGUID = 0; m_spawnedByDefault = true; m_usetimes = 0; m_spellId = 0; m_cooldownTime = 0; m_goInfo = NULL; - m_ritualOwner = NULL; + m_ritualOwnerGUID = 0; m_goData = NULL; m_DBTableGuid = 0; @@ -97,20 +98,12 @@ std::string GameObject::GetAIName() const return ""; } -void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/) +void GameObject::CleanupsBeforeDelete(bool finalCleanup) { - if (IsInWorld()) - RemoveFromWorld(); + WorldObject::CleanupsBeforeDelete(finalCleanup); if (m_uint32Values) // field array can be not exist if GameOBject not loaded RemoveFromOwner(); - - if (GetTransport() && !ToTransport()) - { - GetTransport()->RemovePassenger(this); - SetTransport(NULL); - m_movementInfo.transport.Reset(); - } } void GameObject::RemoveFromOwner() @@ -148,7 +141,7 @@ void GameObject::AddToWorld() sObjectAccessor->AddObject(this); // The state can be changed after GameObject::Create but before GameObject::AddToWorld - bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : GetGoState() == GO_STATE_READY; + bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport()); if (m_model) GetMap()->InsertGameObjectModel(*m_model); @@ -308,16 +301,15 @@ void GameObject::Update(uint32 diff) GameObjectTemplate const* goInfo = GetGOInfo(); // Bombs if (goInfo->trap.type == 2) - m_cooldownTime = time(NULL) + 10; // Hardcoded tooltip value + // Hardcoded tooltip value + m_cooldownTime = time(NULL) + 10; else if (Unit* owner = GetOwner()) - { if (owner->IsInCombat()) m_cooldownTime = time(NULL) + goInfo->trap.startDelay; - } - m_lootState = GO_READY; + + SetLootState(GO_READY); break; } - /* TODO: Fix movement in unloaded grid - currently GO will just disappear case GAMEOBJECT_TYPE_TRANSPORT: { if (!m_goValue.Transport.AnimationInfo) @@ -326,6 +318,7 @@ void GameObject::Update(uint32 diff) if (GetGoState() == GO_STATE_READY) { m_goValue.Transport.PathProgress += diff; + /* TODO: Fix movement in unloaded grid - currently GO will just disappear uint32 timer = m_goValue.Transport.PathProgress % m_goValue.Transport.AnimationInfo->TotalTime; TransportAnimationEntry const* node = m_goValue.Transport.AnimationInfo->GetAnimNode(timer); if (node && m_goValue.Transport.CurrentSeg != node->TimeSeg) @@ -341,14 +334,14 @@ void GameObject::Update(uint32 diff) G3D::Vector3 src(GetPositionX(), GetPositionY(), GetPositionZ()); - TC_LOG_INFO("misc", "Src: %s Dest: %s", src.toString().c_str(), pos.toString().c_str()); + TC_LOG_DEBUG("misc", "Src: %s Dest: %s", src.toString().c_str(), pos.toString().c_str()); GetMap()->GameObjectRelocation(this, pos.x, pos.y, pos.z, GetOrientation()); } + */ } break; } - */ case GAMEOBJECT_TYPE_FISHINGNODE: { // fishing code (bobber ready) @@ -395,7 +388,7 @@ void GameObject::Update(uint32 diff) if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day) SetRespawnTime(DAY); else - m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime)+urand(5, MINUTE); // else copy time from master and add a little + m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little SaveRespawnTime(); // also save to DB immediately return; } @@ -422,7 +415,7 @@ void GameObject::Update(uint32 diff) } case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_BUTTON: - //we need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds) + // We need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds) if (GetGoState() != GO_STATE_READY) ResetDoorOrButton(); break; @@ -434,13 +427,15 @@ void GameObject::Update(uint32 diff) break; } - if (!m_spawnedByDefault) // despawn timer + // Despawn timer + if (!m_spawnedByDefault) { - // can be despawned or destroyed + // Can be despawned or destroyed SetLootState(GO_JUST_DEACTIVATED); return; } - // respawn timer + + // Respawn timer uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<GameObject>(GetDBTableGUIDLow()) : 0; if (poolid) sPoolMgr->UpdatePool<GameObject>(poolid, GetDBTableGUIDLow()); @@ -451,85 +446,59 @@ void GameObject::Update(uint32 diff) if (isSpawned()) { - // traps can have time and can not have GameObjectTemplate const* goInfo = GetGOInfo(); if (goInfo->type == GAMEOBJECT_TYPE_TRAP) { if (m_cooldownTime >= time(NULL)) - return; + break; - // Type 2 - Bomb (will go away after casting it's spell) + // Type 2 (bomb) does not need to be triggered by a unit and despawns after casting its spell. if (goInfo->trap.type == 2) { - if (goInfo->trap.spellId) - CastSpell(NULL, goInfo->trap.spellId); // FIXME: null target won't work for target type 1 - SetLootState(GO_JUST_DEACTIVATED); + SetLootState(GO_ACTIVATED); break; } - // Type 0 and 1 - trap (type 0 will not get removed after casting a spell) - Unit* owner = GetOwner(); - Unit* ok = NULL; // pointer to appropriate target if found any - - bool IsBattlegroundTrap = false; - //FIXME: this is activation radius (in different casting radius that must be selected from spell data) - /// @todo move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state - float radius = (float)(goInfo->trap.radius)/3*2; /// @todo rename radius to diameter (goInfo->trap.radius) should be (goInfo->trap.diameter) - if (!radius) - { - if (goInfo->trap.cooldown != 3) // cast in other case (at some triggering/linked go/etc explicit call) - return; - else - { - if (m_respawnTime > 0) - break; - radius = (float)goInfo->trap.cooldown; // battlegrounds gameobjects has data2 == 0 && data5 == 3 - IsBattlegroundTrap = true; + // Type 0 despawns after being triggered, type 1 does not. + /// @todo This is activation radius. Casting radius must be selected from spell data. + float radius; + if (!goInfo->trap.diameter) + { + // Battleground traps: data2 == 0 && data5 == 3 + if (goInfo->trap.cooldown != 3) + break; - if (!radius) - return; - } + radius = 3.f; } + else + radius = goInfo->trap.diameter / 2.f; + + // Pointer to appropriate target if found any + Unit* target = NULL; - // Note: this hack with search required until GO casting not implemented - // search unfriendly creature - if (owner) // hunter trap + /// @todo this hack with search required until GO casting not implemented + if (Unit* owner = GetOwner()) { + // Hunter trap: Search units which are unfriendly to the trap's owner Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); - Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, ok, checker); + Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker); VisitNearbyGridObject(radius, searcher); - if (!ok) VisitNearbyWorldObject(radius, searcher); + if (!target) + VisitNearbyWorldObject(radius, searcher); } - else // environmental trap + else { - // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support - // affect only players + // Environmental trap: Any player Player* player = NULL; Trinity::AnyPlayerInObjectRangeCheck checker(this, radius); Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, player, checker); VisitNearbyWorldObject(radius, searcher); - ok = player; + target = player; } - if (ok) - { - // some traps do not have spell but should be triggered - if (goInfo->trap.spellId) - CastSpell(ok, goInfo->trap.spellId); - - m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)); // template or 4 seconds + if (target) + SetLootState(GO_ACTIVATED, target); - if (goInfo->trap.type == 1) - SetLootState(GO_JUST_DEACTIVATED); - - if (IsBattlegroundTrap && ok->GetTypeId() == TYPEID_PLAYER) - { - //Battleground gameobjects case - if (ok->ToPlayer()->InBattleground()) - if (Battleground* bg = ok->ToPlayer()->GetBattleground()) - bg->HandleTriggerBuff(GetGUID()); - } - } } else if (uint32 max_charges = goInfo->GetCharges()) { @@ -549,7 +518,7 @@ void GameObject::Update(uint32 diff) { case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_BUTTON: - if (GetGOInfo()->GetAutoCloseTime() && (m_cooldownTime < time(NULL))) + if (m_cooldownTime && (m_cooldownTime < time(NULL))) ResetDoorOrButton(); break; case GAMEOBJECT_TYPE_GOOBER: @@ -574,6 +543,38 @@ void GameObject::Update(uint32 diff) } else m_groupLootTimer -= diff; } + break; + case GAMEOBJECT_TYPE_TRAP: + { + GameObjectTemplate const* goInfo = GetGOInfo(); + if (goInfo->trap.type == 2 && goInfo->trap.spellId) + { + /// @todo NULL target won't work for target type 1 + CastSpell(NULL, goInfo->trap.spellId); + SetLootState(GO_JUST_DEACTIVATED); + } + else if (Unit* target = ObjectAccessor::GetUnit(*this, m_lootStateUnitGUID)) + { + // Some traps do not have a spell but should be triggered + if (goInfo->trap.spellId) + CastSpell(target, goInfo->trap.spellId); + + // Template value or 4 seconds + m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)); + + if (goInfo->trap.type == 1) + SetLootState(GO_JUST_DEACTIVATED); + else if (!goInfo->trap.type) + SetLootState(GO_READY); + + // Battleground gameobjects have data2 == 0 && data5 == 3 + if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3) + if (Player* player = target->ToPlayer()) + if (Battleground* bg = player->GetBattleground()) + bg->HandleTriggerBuff(GetGUID()); + } + break; + } default: break; } @@ -687,12 +688,39 @@ void GameObject::getFishLoot(Loot* fishloot, Player* loot_owner) fishloot->clear(); uint32 zone, subzone; + uint32 defaultzone = 1; + GetZoneAndAreaId(zone, subzone); + + // if subzone loot exist use it + fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true); + if (fishloot->empty()) //use this becase if zone or subzone has set LOOT_MODE_JUNK_FISH,Even if no normal drop, fishloot->FillLoot return true. it wrong. + { + //subzone no result,use zone loot + fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true); + //use zone 1 as default, somewhere fishing got nothing,becase subzone and zone not set, like Off the coast of Storm Peaks. + if (fishloot->empty()) + fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true); + } +} + +void GameObject::getFishLootJunk(Loot* fishloot, Player* loot_owner) +{ + fishloot->clear(); + + uint32 zone, subzone; + uint32 defaultzone = 1; GetZoneAndAreaId(zone, subzone); // if subzone loot exist use it - if (!fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true)) - // else use zone loot (must exist in like case) - fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true); + fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH); + if (fishloot->empty()) //use this becase if zone or subzone has normal mask drop, then fishloot->FillLoot return true. + { + //use zone loot + fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH); + if (fishloot->empty()) + //use zone 1 as default + fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH); + } } void GameObject::SaveToDB() @@ -930,6 +958,17 @@ void GameObject::SaveRespawnTime() GetMap()->SaveGORespawnTime(m_DBTableGuid, m_respawnTime); } +bool GameObject::IsNeverVisible() const +{ + if (WorldObject::IsNeverVisible()) + return true; + + if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1) + return true; + + return false; +} + bool GameObject::IsAlwaysVisibleFor(WorldObject const* seer) const { if (WorldObject::IsAlwaysVisibleFor(seer)) @@ -986,9 +1025,17 @@ bool GameObject::ActivateToQuest(Player* target) const switch (GetGoType()) { - // scan GO chest with loot including quest items + case GAMEOBJECT_TYPE_QUESTGIVER: + { + GameObject* go = const_cast<GameObject*>(this); + QuestGiverStatus questStatus = target->GetQuestDialogStatus(go); + if (questStatus > DIALOG_STATUS_UNAVAILABLE) + return true; + break; + } case GAMEOBJECT_TYPE_CHEST: { + // scan GO chest with loot including quest items if (LootTemplates_Gameobject.HaveQuestLootForPlayer(GetGOInfo()->GetLootId(), target)) { if (Battleground const* bg = target->GetBattleground()) @@ -1083,7 +1130,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f SwitchDoorOrButton(true, alternative); SetLootState(GO_ACTIVATED, user); - m_cooldownTime = time(NULL) + time_to_restore; + m_cooldownTime = time_to_restore ? (time(NULL) + time_to_restore) : 0; } void GameObject::SetGoArtKit(uint8 kit) @@ -1266,10 +1313,8 @@ void GameObject::Use(Unit* user) { GameObjectTemplate const* info = GetGOInfo(); - if (user->GetTypeId() == TYPEID_PLAYER) + if (Player* player = user->ToPlayer()) { - Player* player = user->ToPlayer(); - if (info->goober.pageId) // show page... { WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8); @@ -1286,7 +1331,7 @@ void GameObject::Use(Unit* user) { TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow()); GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this); - EventInform(info->goober.eventId); + EventInform(info->goober.eventId, user); } // possible quest objective for active quests @@ -1297,9 +1342,6 @@ void GameObject::Use(Unit* user) break; } - if (Battleground* bg = player->GetBattleground()) - bg->EventPlayerUsedGO(player, this); - player->KillCreditGO(info->entry, GetGUID()); } @@ -1392,6 +1434,7 @@ void GameObject::Use(Unit* user) // prevent removing GO at spell cancel RemoveFromOwner(); SetOwnerGUID(player->GetGUID()); + SetSpellId(0); // prevent removing unintended auras at Unit::RemoveGameObject /// @todo find reasonable value for fishing hole search GameObject* ok = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE); @@ -1403,10 +1446,8 @@ void GameObject::Use(Unit* user) else player->SendLoot(GetGUID(), LOOT_FISHING); } - /// @todo else: junk - else - m_respawnTime = time(NULL); - + else // else: junk + player->SendLoot(GetGUID(), LOOT_FISHING_JUNK); break; } case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update @@ -1436,9 +1477,16 @@ void GameObject::Use(Unit* user) GameObjectTemplate const* info = GetGOInfo(); + Player* m_ritualOwner = NULL; + if (m_ritualOwnerGUID) + m_ritualOwner = ObjectAccessor::FindPlayer(m_ritualOwnerGUID); + // ritual owner is set for GO's without owner (not summoned) if (!m_ritualOwner && !owner) + { + m_ritualOwnerGUID = player->GetGUID(); m_ritualOwner = player; + } if (owner) { @@ -1509,7 +1557,7 @@ void GameObject::Use(Unit* user) else { // reset ritual for this GO - m_ritualOwner = NULL; + m_ritualOwnerGUID = 0; m_unique_users.clear(); m_usetimes = 0; } @@ -1710,7 +1758,7 @@ void GameObject::Use(Unit* user) CastSpell(user, spellId); } -void GameObject::CastSpell(Unit* target, uint32 spellId) +void GameObject::CastSpell(Unit* target, uint32 spellId, bool triggered /*= true*/) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) @@ -1729,7 +1777,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) if (self) { if (target) - target->CastSpell(target, spellInfo, true); + target->CastSpell(target, spellInfo, triggered); return; } @@ -1743,14 +1791,14 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) trigger->setFaction(owner->getFaction()); // needed for GO casts for proper target validation checks trigger->SetOwnerGUID(owner->GetGUID()); - trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID()); + trigger->CastSpell(target ? target : trigger, spellInfo, triggered, 0, 0, owner->GetGUID()); } else { trigger->setFaction(14); // Set owner guid for target if no owner available - needed by trigger auras // - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell()) - trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : 0); + trigger->CastSpell(target ? target : trigger, spellInfo, triggered, 0, 0, target ? target->GetGUID() : 0); } } @@ -1788,7 +1836,7 @@ bool GameObject::IsInRange(float x, float y, float z, float radius) const && dz < info->maxZ + radius && dz > info->minZ - radius; } -void GameObject::EventInform(uint32 eventId) +void GameObject::EventInform(uint32 eventId, WorldObject* invoker /*= NULL*/) { if (!eventId) return; @@ -1796,8 +1844,12 @@ void GameObject::EventInform(uint32 eventId) if (AI()) AI()->EventInform(eventId); - if (m_zoneScript) - m_zoneScript->ProcessEvent(this, eventId); + if (GetZoneScript()) + GetZoneScript()->ProcessEvent(this, eventId); + + if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap()) + if (bgMap->GetBG()) + bgMap->GetBG()->ProcessEvent(this, eventId, invoker); } // overwrite WorldObject function for proper name localization @@ -1863,7 +1915,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u // Set the health bar, value = 255 * healthPct; SetGoAnimProgress(m_goValue.Building.Health * 255 / m_goValue.Building.MaxHealth); - Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself(); + Player* player = attackerOrHealer ? attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself() : NULL; // dealing damage, send packet if (player) @@ -1890,6 +1942,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u if (newState == GetDestructibleState()) return; + /// @todo: pass attackerOrHealer instead of player SetDestructibleState(newState, player, false); } @@ -1912,11 +1965,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* break; case GO_DESTRUCTIBLE_DAMAGED: { - EventInform(m_goInfo->building.damagedEvent); + EventInform(m_goInfo->building.damagedEvent, eventInvoker); sScriptMgr->OnGameObjectDamaged(this, eventInvoker); - if (eventInvoker) - if (Battleground* bg = eventInvoker->GetBattleground()) - bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); @@ -1941,15 +1991,10 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* case GO_DESTRUCTIBLE_DESTROYED: { sScriptMgr->OnGameObjectDestroyed(this, eventInvoker); - EventInform(m_goInfo->building.destroyedEvent); + EventInform(m_goInfo->building.destroyedEvent, eventInvoker); if (eventInvoker) - { if (Battleground* bg = eventInvoker->GetBattleground()) - { - bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent); bg->DestroyGate(eventInvoker, this); - } - } RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); @@ -1970,7 +2015,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* } case GO_DESTRUCTIBLE_REBUILDING: { - EventInform(m_goInfo->building.rebuildingEvent); + EventInform(m_goInfo->building.rebuildingEvent, eventInvoker); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED); uint32 modelId = m_goInfo->displayId; @@ -1994,8 +2039,13 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* void GameObject::SetLootState(LootState state, Unit* unit) { m_lootState = state; + m_lootStateUnitGUID = unit ? unit->GetGUID() : 0; AI()->OnStateChanged(state, unit); sScriptMgr->OnGameObjectLootStateChanged(this, state, unit); + + if (GetGoType() == GAMEOBJECT_TYPE_DOOR) // only set collision for doors on SetGoState + return; + if (m_model) { bool collision = false; @@ -2011,7 +2061,7 @@ void GameObject::SetGoState(GOState state) { SetByteValue(GAMEOBJECT_BYTES_1, 0, state); sScriptMgr->OnGameObjectStateChanged(this, state); - if (m_model) + if (m_model && !IsTransport()) { if (!IsInWorld()) return; @@ -2148,6 +2198,10 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t int16 pathProgress = -1; switch (GetGoType()) { + case GAMEOBJECT_TYPE_QUESTGIVER: + if (ActivateToQuest(target)) + dynFlags |= GO_DYNFLAG_LO_ACTIVATE; + break; case GAMEOBJECT_TYPE_CHEST: case GAMEOBJECT_TYPE_GOOBER: if (ActivateToQuest(target)) @@ -2226,3 +2280,16 @@ float GameObject::GetInteractionDistance() return INTERACTION_DISTANCE; } } + +void GameObject::UpdateModelPosition() +{ + if (!m_model) + return; + + if (GetMap()->ContainsGameObjectModel(*m_model)) + { + GetMap()->RemoveGameObjectModel(*m_model); + m_model->Relocate(*this); + GetMap()->InsertGameObjectModel(*m_model); + } +} diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 84abc391bc6..549de28bb12 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -123,7 +123,7 @@ struct GameObjectTemplate { uint32 lockId; //0 -> Lock.dbc uint32 level; //1 - uint32 radius; //2 radius for trap activation + uint32 diameter; //2 diameter for trap activation uint32 spellId; //3 uint32 type; //4 0 trap with no despawn after cast. 1 trap despawns after cast. 2 bomb casts on spawn. uint32 cooldown; //5 time in secs @@ -538,7 +538,7 @@ struct GameObjectTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, GameObjectTemplate> GameObjectTemplateContainer; +typedef std::unordered_map<uint32, GameObjectTemplate> GameObjectTemplateContainer; class OPvPCapturePoint; struct TransportAnimation; @@ -713,6 +713,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map void Refresh(); void Delete(); void getFishLoot(Loot* loot, Player* loot_owner); + void getFishLootJunk(Loot* loot, Player* loot_owner); GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); } void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); } GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); } @@ -777,6 +778,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target); + bool IsNeverVisible() const override; + bool IsAlwaysVisibleFor(WorldObject const* seer) const; bool IsInvisibleDueToDespawn() const; @@ -790,7 +793,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map GameObject* LookupFishingHoleAround(float range); - void CastSpell(Unit* target, uint32 spell); + void CastSpell(Unit* target, uint32 spell, bool triggered = true); void SendCustomAnim(uint32 anim); bool IsInRange(float x, float y, float z, float radius) const; @@ -806,7 +809,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map return GO_DESTRUCTIBLE_INTACT; } - void EventInform(uint32 eventId); + void EventInform(uint32 eventId, WorldObject* invoker = NULL); uint64 GetRotation() const { return m_rotation; } virtual uint32 GetScriptId() const { return GetGOInfo()->ScriptId; } @@ -832,6 +835,8 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map float GetInteractionDistance(); + void UpdateModelPosition(); + protected: bool AIM_Initialize(); void UpdateModel(); // updates model in case displayId were changed @@ -839,12 +844,13 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer LootState m_lootState; + uint64 m_lootStateUnitGUID; // GUID of the unit passed with SetLootState(LootState, Unit*) bool m_spawnedByDefault; time_t m_cooldownTime; // used as internal reaction delay time store (not state change reaction). // For traps this: spell casting cooldown, for doors/buttons: reset time. std::list<uint32> m_SkillupList; - Player* m_ritualOwner; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner) + uint64 m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner) std::set<uint64> m_unique_users; uint32 m_usetimes; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index ee389ed7311..4573b85c7f3 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -27,7 +27,7 @@ #include "ScriptMgr.h" #include "ConditionMgr.h" #include "Player.h" -#include "Opcodes.h" +#include "WorldSession.h" void AddItemsSetItem(Player* player, Item* item) { diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 3e31347a496..f5813ae0781 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -40,7 +40,7 @@ struct EnchStoreItem }; typedef std::vector<EnchStoreItem> EnchStoreList; -typedef UNORDERED_MAP<uint32, EnchStoreList> EnchantmentStore; +typedef std::unordered_map<uint32, EnchStoreList> EnchantmentStore; static EnchantmentStore RandomItemEnch; diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h index d411af218b1..bdf956f8921 100644 --- a/src/server/game/Entities/Item/ItemPrototype.h +++ b/src/server/game/Entities/Item/ItemPrototype.h @@ -734,7 +734,7 @@ struct ItemTemplate default: break; } - return itemLevel; + return std::max<float>(0.f, itemLevel); } bool IsPotion() const { return Class == ITEM_CLASS_CONSUMABLE && SubClass == ITEM_SUBCLASS_POTION; } @@ -744,7 +744,7 @@ struct ItemTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, ItemTemplate> ItemTemplateContainer; +typedef std::unordered_map<uint32, ItemTemplate> ItemTemplateContainer; struct ItemLocale { diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 8af48f277bd..08d984e0790 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -350,6 +350,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const // 0x20 if (flags & UPDATEFLAG_LIVING) { + ASSERT(unit); unit->BuildMovementPacket(data); *data << unit->GetSpeed(MOVE_WALK) @@ -370,6 +371,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const { if (flags & UPDATEFLAG_POSITION) { + ASSERT(object); Transport* transport = object->GetTransport(); if (transport) @@ -412,6 +414,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const // 0x40 if (flags & UPDATEFLAG_STATIONARY_POSITION) { + ASSERT(object); *data << object->GetStationaryX(); *data << object->GetStationaryY(); *data << object->GetStationaryZ(); @@ -459,6 +462,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const // 0x4 if (flags & UPDATEFLAG_HAS_TARGET) { + ASSERT(unit); if (Unit* victim = unit->GetVictim()) data->append(victim->GetPackGUID()); else @@ -469,7 +473,12 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (flags & UPDATEFLAG_TRANSPORT) { GameObject const* go = ToGameObject(); - if (go && go->IsTransport()) + /** @TODO Use IsTransport() to also handle type 11 (TRANSPORT) + Currently grid objects are not updated if there are no nearby players, + this causes clients to receive different PathProgress + resulting in players seeing the object in a different position + */ + if (go && go->ToTransport()) *data << uint32(go->GetGOValue()->Transport.PathProgress); else *data << uint32(getMSTime()); @@ -479,6 +488,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (flags & UPDATEFLAG_VEHICLE) { /// @todo Allow players to aquire this updateflag. + ASSERT(unit); + ASSERT(unit->GetVehicleKit()); + ASSERT(unit->GetVehicleKit()->GetVehicleInfo()); *data << uint32(unit->GetVehicleKit()->GetVehicleInfo()->m_ID); if (unit->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) *data << float(unit->GetTransOffsetO()); @@ -739,7 +751,7 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (offset > 4) + if (offset > 3) { TC_LOG_ERROR("misc", "Object::SetByteValue: wrong offset %u", offset); return; @@ -763,7 +775,7 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (offset > 2) + if (offset > 1) { TC_LOG_ERROR("misc", "Object::SetUInt16Value: wrong offset %u", offset); return; @@ -903,7 +915,7 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (offset > 4) + if (offset > 3) { TC_LOG_ERROR("misc", "Object::SetByteFlag: wrong offset %u", offset); return; @@ -926,7 +938,7 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) { ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - if (offset > 4) + if (offset > 3) { TC_LOG_ERROR("misc", "Object::RemoveByteFlag: wrong offset %u", offset); return; @@ -1151,6 +1163,9 @@ void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/) { if (IsInWorld()) RemoveFromWorld(); + + if (Transport* transport = GetTransport()) + transport->RemovePassenger(this); } void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask) @@ -1203,7 +1218,7 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool float sizefactor = GetObjectSize() + obj->GetObjectSize(); float maxdist = dist2compare + sizefactor; - if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == m_transport->GetGUIDLow()) + if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == GetTransport()->GetGUIDLow()) { float dtx = m_movementInfo.transport.pos.m_positionX - obj->m_movementInfo.transport.pos.m_positionX; float dty = m_movementInfo.transport.pos.m_positionY - obj->m_movementInfo.transport.pos.m_positionY; @@ -1543,18 +1558,18 @@ void WorldObject::GetRandomPoint(const Position &pos, float distance, float &ran UpdateGroundPositionZ(rand_x, rand_y, rand_z); // update to LOS height if available } -void WorldObject::GetRandomPoint(const Position &srcPos, float distance, Position &pos) const +Position WorldObject::GetRandomPoint(const Position &srcPos, float distance) const { float x, y, z; GetRandomPoint(srcPos, distance, x, y, z); - pos.Relocate(x, y, z, GetOrientation()); + return Position(x, y, z, GetOrientation()); } void WorldObject::UpdateGroundPositionZ(float x, float y, float &z) const { - float new_z = GetBaseMap()->GetHeight(GetPhaseMask(), x, y, z, true); + float new_z = GetMap()->GetHeight(GetPhaseMask(), x, y, z + 2.0f, true); if (new_z > INVALID_HEIGHT) - z = new_z+ 0.05f; // just to be sure that we are not a few pixel under the surface + z = new_z + 0.05f; // just to be sure that we are not a few pixel under the surface } void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const @@ -1574,8 +1589,8 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const bool canSwim = ToCreature()->CanSwim(); float ground_z = z; float max_z = canSwim - ? GetBaseMap()->GetWaterOrGroundLevel(x, y, z, &ground_z, !ToUnit()->HasAuraType(SPELL_AURA_WATER_WALK)) - : ((ground_z = GetBaseMap()->GetHeight(GetPhaseMask(), x, y, z, true))); + ? GetMap()->GetWaterOrGroundLevel(x, y, z, &ground_z, !ToUnit()->HasAuraType(SPELL_AURA_WATER_WALK)) + : ((ground_z = GetMap()->GetHeight(GetPhaseMask(), x, y, z, true))); if (max_z > INVALID_HEIGHT) { if (z > max_z) @@ -1586,7 +1601,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const } else { - float ground_z = GetBaseMap()->GetHeight(GetPhaseMask(), x, y, z, true); + float ground_z = GetMap()->GetHeight(GetPhaseMask(), x, y, z, true); if (z < ground_z) z = ground_z; } @@ -1598,7 +1613,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const if (!ToPlayer()->CanFly()) { float ground_z = z; - float max_z = GetBaseMap()->GetWaterOrGroundLevel(x, y, z, &ground_z, !ToUnit()->HasAuraType(SPELL_AURA_WATER_WALK)); + float max_z = GetMap()->GetWaterOrGroundLevel(x, y, z, &ground_z, !ToUnit()->HasAuraType(SPELL_AURA_WATER_WALK)); if (max_z > INVALID_HEIGHT) { if (z > max_z) @@ -1609,7 +1624,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const } else { - float ground_z = GetBaseMap()->GetHeight(GetPhaseMask(), x, y, z, true); + float ground_z = GetMap()->GetHeight(GetPhaseMask(), x, y, z, true); if (z < ground_z) z = ground_z; } @@ -1617,7 +1632,7 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const } default: { - float ground_z = GetBaseMap()->GetHeight(GetPhaseMask(), x, y, z, true); + float ground_z = GetMap()->GetHeight(GetPhaseMask(), x, y, z, true); if (ground_z > INVALID_HEIGHT) z = ground_z; break; @@ -2159,13 +2174,8 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert } uint32 phase = PHASEMASK_NORMAL; - uint32 team = 0; if (summoner) - { phase = summoner->GetPhaseMask(); - if (summoner->GetTypeId() == TYPEID_PLAYER) - team = summoner->ToPlayer()->GetTeam(); - } TempSummon* summon = NULL; switch (mask) @@ -2187,7 +2197,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert break; } - if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, vehId, team, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation())) + if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) { delete summon; return NULL; @@ -2477,125 +2487,36 @@ void WorldObject::GetNearPoint(WorldObject const* /*searcher*/, float &x, float { GetNearPoint2D(x, y, distance2d+searcher_size, absAngle); z = GetPositionZ(); + // Should "searcher" be used instead of "this" when updating z coordinate ? UpdateAllowedPositionZ(x, y, z); - /* // if detection disabled, return first point - if (!sWorld->getIntConfig(CONFIG_DETECT_POS_COLLISION)) - { - UpdateGroundPositionZ(x, y, z); // update to LOS height if available + if (!sWorld->getBoolConfig(CONFIG_DETECT_POS_COLLISION)) return; - } - - // or remember first point - float first_x = x; - float first_y = y; - bool first_los_conflict = false; // first point LOS problems - - // prepare selector for work - ObjectPosSelector selector(GetPositionX(), GetPositionY(), GetObjectSize(), distance2d+searcher_size); - - // adding used positions around object - { - CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY())); - Cell cell(p); - cell.SetNoCreate(); - - Trinity::NearUsedPosDo u_do(*this, searcher, absAngle, selector); - Trinity::WorldObjectWorker<Trinity::NearUsedPosDo> worker(this, u_do); - - TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::NearUsedPosDo>, GridTypeMapContainer > grid_obj_worker(worker); - TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::NearUsedPosDo>, WorldTypeMapContainer > world_obj_worker(worker); - - CellLock<GridReadGuard> cell_lock(cell, p); - cell_lock->Visit(cell_lock, grid_obj_worker, *GetMap(), *this, distance2d); - cell_lock->Visit(cell_lock, world_obj_worker, *GetMap(), *this, distance2d); - } - - // maybe can just place in primary position - if (selector.CheckOriginal()) - { - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - - first_los_conflict = true; // first point have LOS problems - } - - float angle; // candidate of angle for free pos - - // special case when one from list empty and then empty side preferred - if (selector.FirstAngle(angle)) - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - } - - // set first used pos in lists - selector.InitializeAngle(); - - // select in positions after current nodes (selection one by one) - while (selector.NextAngle(angle)) // angle for free pos - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - } - - // BAD NEWS: not free pos (or used or have LOS problems) - // Attempt find _used_ pos without LOS problem - - if (!first_los_conflict) - { - x = first_x; - y = first_y; - UpdateGroundPositionZ(x, y, z); // update to LOS height if available + // return if the point is already in LoS + if (IsWithinLOS(x, y, z)) return; - } - - // special case when one from list empty and then empty side preferred - if (selector.IsNonBalanced()) - { - if (!selector.FirstAngle(angle)) // _used_ pos - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - if (IsWithinLOS(x, y, z)) - return; - } - } - - // set first used pos in lists - selector.InitializeAngle(); + // remember first point + float first_x = x; + float first_y = y; + float first_z = z; - // select in positions after current nodes (selection one by one) - while (selector.NextUsedAngle(angle)) // angle for used pos but maybe without LOS problem + // loop in a circle to look for a point in LoS using small steps + for (float angle = M_PI / 8; angle < M_PI * 2; angle += M_PI / 8) { - GetNearPoint2D(x, y, distance2d, absAngle+angle); + GetNearPoint2D(x, y, distance2d + searcher_size, absAngle + angle); z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - + UpdateAllowedPositionZ(x, y, z); if (IsWithinLOS(x, y, z)) return; } - // BAD BAD NEWS: all found pos (free and used) have LOS problem :( + // still not in LoS, give up and return first position found x = first_x; y = first_y; - - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - */ + z = first_z; } void WorldObject::GetClosePoint(float &x, float &y, float &z, float size, float distance2d /*= 0*/, float angle /*= 0*/) const @@ -2604,22 +2525,25 @@ void WorldObject::GetClosePoint(float &x, float &y, float &z, float size, float GetNearPoint(NULL, x, y, z, size, distance2d, GetOrientation() + angle); } -void WorldObject::GetNearPosition(Position &pos, float dist, float angle) +Position WorldObject::GetNearPosition(float dist, float angle) { - GetPosition(&pos); + Position pos = GetPosition(); MovePosition(pos, dist, angle); + return pos; } -void WorldObject::GetFirstCollisionPosition(Position &pos, float dist, float angle) +Position WorldObject::GetFirstCollisionPosition(float dist, float angle) { - GetPosition(&pos); + Position pos = GetPosition(); MovePositionToFirstCollision(pos, dist, angle); + return pos; } -void WorldObject::GetRandomNearPosition(Position &pos, float radius) +Position WorldObject::GetRandomNearPosition(float radius) { - GetPosition(&pos); + Position pos = GetPosition(); MovePosition(pos, radius * (float)rand_norm(), (float)rand_norm() * static_cast<float>(2 * M_PI)); + return pos; } void WorldObject::GetContactPoint(const WorldObject* obj, float &x, float &y, float &z, float distance2d /*= CONTACT_DISTANCE*/) const @@ -2679,13 +2603,39 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle) pos.SetOrientation(GetOrientation()); } +// @todo: replace with WorldObject::UpdateAllowedPositionZ +float NormalizeZforCollision(WorldObject* obj, float x, float y, float z) +{ + float ground = obj->GetMap()->GetHeight(obj->GetPhaseMask(), x, y, MAX_HEIGHT, true); + float floor = obj->GetMap()->GetHeight(obj->GetPhaseMask(), x, y, z + 2.0f, true); + float helper = fabs(ground - z) <= fabs(floor - z) ? ground : floor; + if (z > helper) // must be above ground + { + if (Unit* unit = obj->ToUnit()) + { + if (unit->CanFly()) + return z; + } + LiquidData liquid_status; + ZLiquidStatus res = obj->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquid_status); + if (res && liquid_status.level > helper) // water must be above ground + { + if (liquid_status.level > z) // z is underwater + return z; + else + return fabs(liquid_status.level - z) <= fabs(helper - z) ? liquid_status.level : helper; + } + } + return helper; +} + void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float angle) { angle += GetOrientation(); - float destx, desty, destz, ground, floor; - pos.m_positionZ += 2.0f; + float destx, desty, destz; destx = pos.m_positionX + dist * std::cos(angle); desty = pos.m_positionY + dist * std::sin(angle); + destz = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ()); // Prevent invalid coordinates here, position is unchanged if (!Trinity::IsValidMapCoord(destx, desty)) @@ -2694,11 +2644,7 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float return; } - ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true); - floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true); - destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor; - - bool col = VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), pos.m_positionX, pos.m_positionY, pos.m_positionZ+0.5f, destx, desty, destz+0.5f, destx, desty, destz, -0.5f); + bool col = VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), pos.m_positionX, pos.m_positionY, pos.m_positionZ + 0.5f, destx, desty, destz + 0.5f, destx, desty, destz, -0.5f); // collision occured if (col) @@ -2710,7 +2656,7 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float } // check dynamic collision - col = GetMap()->getObjectHitPos(GetPhaseMask(), pos.m_positionX, pos.m_positionY, pos.m_positionZ+0.5f, destx, desty, destz+0.5f, destx, desty, destz, -0.5f); + col = GetMap()->getObjectHitPos(GetPhaseMask(), pos.m_positionX, pos.m_positionY, pos.m_positionZ + 0.5f, destx, desty, destz + 0.5f, destx, desty, destz, -0.5f); // Collided with a gameobject if (col) @@ -2720,18 +2666,16 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float dist = sqrt((pos.m_positionX - destx)*(pos.m_positionX - destx) + (pos.m_positionY - desty)*(pos.m_positionY - desty)); } - float step = dist/10.0f; + float step = dist / 10.0f; for (uint8 j = 0; j < 10; ++j) { // do not allow too big z changes - if (fabs(pos.m_positionZ - destz) > 6) + if (fabs(pos.m_positionZ - destz) > 6.0f) { destx -= step * std::cos(angle); desty -= step * std::sin(angle); - ground = GetMap()->GetHeight(GetPhaseMask(), destx, desty, MAX_HEIGHT, true); - floor = GetMap()->GetHeight(GetPhaseMask(), destx, desty, pos.m_positionZ, true); - destz = fabs(ground - pos.m_positionZ) <= fabs(floor - pos.m_positionZ) ? ground : floor; + destz = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ()); } // we have correct destz now else @@ -2743,7 +2687,7 @@ void WorldObject::MovePositionToFirstCollision(Position &pos, float dist, float Trinity::NormalizeMapCoord(pos.m_positionX); Trinity::NormalizeMapCoord(pos.m_positionY); - UpdateAllowedPositionZ(pos.m_positionX, pos.m_positionY, pos.m_positionZ); + pos.m_positionZ = NormalizeZforCollision(this, destx, desty, pos.GetPositionZ()); pos.SetOrientation(GetOrientation()); } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 8d3b1ff9554..be35c91fbf4 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -32,6 +32,8 @@ #define CONTACT_DISTANCE 0.5f #define INTERACTION_DISTANCE 5.0f #define ATTACK_DISTANCE 5.0f +#define INSPECT_DISTANCE 28.0f +#define TRADE_DISTANCE 11.11f #define MAX_VISIBILITY_DISTANCE SIZE_OF_GRIDS // max distance for visible objects #define SIGHT_RANGE_UNIT 50.0f #define DEFAULT_VISIBILITY_DISTANCE 90.0f // default visible distance, 90 yards on continents @@ -114,7 +116,7 @@ class WorldObject; class WorldPacket; class ZoneScript; -typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType; +typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType; class Object { @@ -267,12 +269,17 @@ class Object // for output helpfull error messages from asserts bool PrintIndexError(uint32 index, bool set) const; - Object(const Object&); // prevent generation copy constructor - Object& operator=(Object const&); // prevent generation assigment operator + Object(Object const& right) = delete; + Object& operator=(Object const& right) = delete; }; struct Position { + Position(float x = 0, float y = 0, float z = 0, float o = 0) + : m_positionX(x), m_positionY(y), m_positionZ(z), m_orientation(NormalizeOrientation(o)) { } + + Position(const Position &loc) { Relocate(loc); } + struct PositionXYZStreamer { explicit PositionXYZStreamer(Position& pos) : m_pos(&pos) { } @@ -325,10 +332,10 @@ struct Position { x = m_positionX; y = m_positionY; z = m_positionZ; } void GetPosition(float &x, float &y, float &z, float &o) const { x = m_positionX; y = m_positionY; z = m_positionZ; o = m_orientation; } - void GetPosition(Position* pos) const + + Position GetPosition() const { - if (pos) - pos->Relocate(m_positionX, m_positionY, m_positionZ, m_orientation); + return *this; } Position::PositionXYZStreamer PositionXYZStream() @@ -479,10 +486,16 @@ class WorldLocation : public Position public: explicit WorldLocation(uint32 _mapid = MAPID_INVALID, float _x = 0, float _y = 0, float _z = 0, float _o = 0) : m_mapId(_mapid) { Relocate(_x, _y, _z, _o); } - WorldLocation(const WorldLocation &loc) { WorldRelocate(loc); } + WorldLocation(const WorldLocation &loc) : Position(loc) { WorldRelocate(loc); } void WorldRelocate(const WorldLocation &loc) { m_mapId = loc.GetMapId(); Relocate(loc); } + + WorldLocation GetWorldLocation() const + { + return *this; + } + uint32 GetMapId() const { return m_mapId; } uint32 m_mapId; @@ -492,6 +505,8 @@ template<class T> class GridObject { public: + virtual ~GridObject() { } + bool IsInGrid() const { return _gridRef.isValid(); } void AddToGrid(GridRefManager<T>& m) { ASSERT(!IsInGrid()); _gridRef.link(&m, (T*)this); } void RemoveFromGrid() { ASSERT(IsInGrid()); _gridRef.unlink(); } @@ -571,10 +586,10 @@ class WorldObject : public Object, public WorldLocation void GetNearPoint(WorldObject const* searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle) const; void GetClosePoint(float &x, float &y, float &z, float size, float distance2d = 0, float angle = 0) const; void MovePosition(Position &pos, float dist, float angle); - void GetNearPosition(Position &pos, float dist, float angle); + Position GetNearPosition(float dist, float angle); void MovePositionToFirstCollision(Position &pos, float dist, float angle); - void GetFirstCollisionPosition(Position &pos, float dist, float angle); - void GetRandomNearPosition(Position &pos, float radius); + Position GetFirstCollisionPosition(float dist, float angle); + Position GetRandomNearPosition(float radius); void GetContactPoint(WorldObject const* obj, float &x, float &y, float &z, float distance2d = CONTACT_DISTANCE) const; float GetObjectSize() const; @@ -582,7 +597,7 @@ class WorldObject : public Object, public WorldLocation void UpdateAllowedPositionZ(float x, float y, float &z) const; void GetRandomPoint(Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const; - void GetRandomPoint(Position const &srcPos, float distance, Position &pos) const; + Position GetRandomPoint(Position const &srcPos, float distance) const; uint32 GetInstanceId() const { return m_InstanceId; } diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index c218c3c645f..cc199969174 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -30,7 +30,7 @@ #include "Unit.h" #include "Util.h" #include "Group.h" -#include "Opcodes.h" +#include "WorldSession.h" #define PET_XP_FACTOR 0.05f @@ -39,7 +39,7 @@ Pet::Pet(Player* owner, PetType type) : m_happinessTimer(7500), m_petType(type), m_duration(0), m_auraRaidUpdateMask(0), m_loading(false), m_declinedname(NULL) { - ASSERT(GetOwner()->GetTypeId() == TYPEID_PLAYER); + ASSERT(GetOwner()); m_unitTypeMask |= UNIT_MASK_PET; if (type == HUNTER_PET) @@ -279,7 +279,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c { SQLTransaction trans = CharacterDatabase.BeginTransaction(); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID); stmt->setUInt8(0, uint8(PET_SAVE_NOT_IN_SLOT)); stmt->setUInt32(1, ownerid); stmt->setUInt8(2, uint8(PET_SAVE_AS_CURRENT)); @@ -384,8 +384,6 @@ void Pet::SavePetToDB(PetSaveMode mode) return; Player* owner = GetOwner(); - if (!owner) - return; // not save pet as current if another pet temporary unsummoned if (mode == PET_SAVE_AS_CURRENT && owner->GetTemporaryUnsummonedPetNumber() && @@ -430,7 +428,7 @@ void Pet::SavePetToDB(PetSaveMode mode) // prevent duplicate using slot (except PET_SAVE_NOT_IN_SLOT) if (mode <= PET_SAVE_LAST_STABLE_SLOT) { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_PET_SLOT_BY_SLOT); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_PET_SLOT_BY_SLOT); stmt->setUInt8(0, uint8(PET_SAVE_NOT_IN_SLOT)); stmt->setUInt32(1, ownerLowGUID); stmt->setUInt8(2, uint8(mode)); @@ -563,7 +561,7 @@ void Pet::Update(uint32 diff) { // unsummon pet that lost owner Player* owner = GetOwner(); - if (!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityRange()) && !isPossessed()) || (isControlled() && !owner->GetPetGUID())) + if ((!IsWithinDistInMap(owner, GetMap()->GetVisibilityRange()) && !isPossessed()) || (isControlled() && !owner->GetPetGUID())) //if (!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityDistance()) && (owner->GetCharmGUID() && (owner->GetCharmGUID() != GetGUID()))) || (isControlled() && !owner->GetPetGUID())) { Remove(PET_SAVE_NOT_IN_SLOT, true); @@ -846,8 +844,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) if (IsPet() && GetOwner()->GetTypeId() == TYPEID_PLAYER) { if (GetOwner()->getClass() == CLASS_WARLOCK - || GetOwner()->getClass() == CLASS_SHAMAN // Fire Elemental - || GetOwner()->getClass() == CLASS_DEATH_KNIGHT) // Risen Ghoul + || GetOwner()->getClass() == CLASS_SHAMAN // Fire Elemental + || GetOwner()->getClass() == CLASS_DEATH_KNIGHT) // Risen Ghoul { petType = SUMMON_PET; } @@ -1122,9 +1120,8 @@ void Pet::_LoadSpellCooldowns() { time_t curTime = time(NULL); - WorldPacket data(SMSG_SPELL_COOLDOWN, size_t(8+1+result->GetRowCount()*8)); - data << GetGUID(); - data << uint8(0x0); // flags (0x1, 0x2) + PacketCooldowns cooldowns; + WorldPacket data; do { @@ -1143,8 +1140,7 @@ void Pet::_LoadSpellCooldowns() if (db_time <= curTime) continue; - data << uint32(spell_id); - data << uint32(uint32(db_time-curTime)*IN_MILLISECONDS); + cooldowns[spell_id] = uint32(db_time - curTime)*IN_MILLISECONDS; _AddCreatureSpellCooldown(spell_id, db_time); @@ -1152,8 +1148,11 @@ void Pet::_LoadSpellCooldowns() } while (result->NextRow()); - if (!m_CreatureSpellCooldowns.empty() && GetOwner()) + if (!cooldowns.empty()) + { + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); GetOwner()->GetSession()->SendPacket(&data); + } } } @@ -1628,12 +1627,7 @@ bool Pet::removeSpell(uint32 spell_id, bool learn_prev, bool clear_ab) if (clear_ab && !learn_prev && m_charmInfo->RemoveSpellFromActionBar(spell_id)) { if (!m_loading) - { - // need update action bar for last removed rank - if (Unit* owner = GetOwner()) - if (owner->GetTypeId() == TYPEID_PLAYER) - owner->ToPlayer()->PetSpellInitialize(); - } + GetOwner()->PetSpellInitialize(); // need update action bar for last removed rank } return true; @@ -1668,13 +1662,11 @@ void Pet::InitPetCreateSpells() bool Pet::resetTalents() { - Unit* owner = GetOwner(); - if (!owner || owner->GetTypeId() != TYPEID_PLAYER) - return false; + Player* player = GetOwner(); // not need after this call - if (owner->ToPlayer()->HasAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS)) - owner->ToPlayer()->RemoveAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS, true); + if (player->HasAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS)) + player->RemoveAtLoginFlag(AT_LOGIN_RESET_PET_TALENTS, true); CreatureTemplate const* ci = GetCreatureTemplate(); if (!ci) @@ -1684,8 +1676,6 @@ bool Pet::resetTalents() if (!pet_family || pet_family->petTalentType < 0) return false; - Player* player = owner->ToPlayer(); - uint8 level = getLevel(); uint32 talentPointsForLevel = GetMaxTalentPointsForLevel(level); @@ -1830,20 +1820,15 @@ void Pet::InitTalentForLevel() SetFreeTalentPoints(talentPointsForLevel - m_usedTalentCount); - Unit* owner = GetOwner(); - if (!owner || owner->GetTypeId() != TYPEID_PLAYER) - return; - if (!m_loading) - owner->ToPlayer()->SendTalentsInfoData(true); + GetOwner()->SendTalentsInfoData(true); } uint8 Pet::GetMaxTalentPointsForLevel(uint8 level) { uint8 points = (level >= 20) ? ((level - 16) / 4) : 0; // Mod points from owner SPELL_AURA_MOD_PET_TALENT_POINTS - if (Unit* owner = GetOwner()) - points+=owner->GetTotalAuraModifier(SPELL_AURA_MOD_PET_TALENT_POINTS); + points += GetOwner()->GetTotalAuraModifier(SPELL_AURA_MOD_PET_TALENT_POINTS); return points; } @@ -1931,6 +1916,8 @@ bool Pet::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint3 if (!InitEntry(Entry)) return false; + // Force regen flag for player pets, just like we do for players themselves + SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER); SetSheath(SHEATH_STATE_MELEE); return true; @@ -1966,11 +1953,9 @@ void Pet::LearnPetPassives() void Pet::CastPetAuras(bool current) { - Unit* owner = GetOwner(); - if (!owner || owner->GetTypeId() != TYPEID_PLAYER) - return; + Player* owner = GetOwner(); - if (!IsPermanentPetFor(owner->ToPlayer())) + if (!IsPermanentPetFor(owner)) return; for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end();) @@ -2002,10 +1987,7 @@ void Pet::CastPetAura(PetAura const* aura) bool Pet::IsPetAura(Aura const* aura) { - Unit* owner = GetOwner(); - - if (!owner || owner->GetTypeId() != TYPEID_PLAYER) - return false; + Player* owner = GetOwner(); // if the owner has that pet aura, return true for (PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end(); ++itr) @@ -2026,9 +2008,7 @@ void Pet::learnSpellHighRank(uint32 spellid) void Pet::SynchronizeLevelWithOwner() { - Unit* owner = GetOwner(); - if (!owner || owner->GetTypeId() != TYPEID_PLAYER) - return; + Player* owner = GetOwner(); switch (getPetType()) { @@ -2050,21 +2030,16 @@ void Pet::SynchronizeLevelWithOwner() void Pet::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) { - WorldPacket data(SMSG_SPELL_COOLDOWN, 8+1+m_spells.size()*8); - data << uint64(GetGUID()); - data << uint8(0x0); // flags (0x1, 0x2) + PacketCooldowns cooldowns; + WorldPacket data; time_t curTime = time(NULL); for (PetSpellMap::const_iterator itr = m_spells.begin(); itr != m_spells.end(); ++itr) { if (itr->second.state == PETSPELL_REMOVED) continue; + uint32 unSpellId = itr->first; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(unSpellId); - if (!spellInfo) - { - ASSERT(spellInfo); - continue; - } + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(unSpellId); // Not send cooldown for this spells if (spellInfo->IsCooldownStartedOnEvent()) @@ -2075,14 +2050,16 @@ void Pet::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) if ((idSchoolMask & spellInfo->GetSchoolMask()) && GetCreatureSpellCooldownDelay(unSpellId) < unTimeMs) { - data << uint32(unSpellId); - data << uint32(unTimeMs); // in m.secs + cooldowns[unSpellId] = unTimeMs; _AddCreatureSpellCooldown(unSpellId, curTime + unTimeMs/IN_MILLISECONDS); } } - if (Player* owner = GetOwner()) - owner->GetSession()->SendPacket(&data); + if (!cooldowns.empty()) + { + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); + GetOwner()->GetSession()->SendPacket(&data); + } } Player* Pet::GetOwner() const @@ -2097,8 +2074,6 @@ void Pet::SetDisplayId(uint32 modelId) if (!isControlled()) return; - if (Unit* owner = GetOwner()) - if (Player* player = owner->ToPlayer()) - if (player->GetGroup()) - player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID); + if (GetOwner()->GetGroup()) + GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID); } diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index ef5e792e939..68465f6b8e7 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -32,7 +32,7 @@ struct PetSpell PetSpellType type; }; -typedef UNORDERED_MAP<uint32, PetSpell> PetSpellMap; +typedef std::unordered_map<uint32, PetSpell> PetSpellMap; typedef std::vector<uint32> AutoSpellList; class Player; @@ -95,7 +95,7 @@ class Pet : public Guardian void UpdateMaxHealth(); void UpdateMaxPower(Powers power); void UpdateAttackPowerAndDamage(bool ranged = false); - void UpdateDamagePhysical(WeaponAttackType attType) OVERRIDE; + void UpdateDamagePhysical(WeaponAttackType attType) override; */ void ToggleAutocast(SpellInfo const* spellInfo, bool apply); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9ee7bc4b05a..5c96e607355 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26,6 +26,7 @@ #include "BattlefieldWG.h" #include "Battleground.h" #include "BattlegroundMgr.h" +#include "BattlegroundScore.h" #include "CellImpl.h" #include "Channel.h" #include "ChannelMgr.h" @@ -144,6 +145,8 @@ enum CharacterCustomizeFlags static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 }; +uint32 const MAX_MONEY_AMOUNT = static_cast<uint32>(std::numeric_limits<int32>::max()); + // == PlayerTaxi ================================================ PlayerTaxi::PlayerTaxi() @@ -364,6 +367,12 @@ void TradeData::SetMoney(uint32 money) if (m_money == money) return; + if (!m_player->HasEnoughMoney(money)) + { + m_player->GetSession()->SendTradeStatus(TRADE_STATUS_BUSY); + return; + } + m_money = money; SetAccepted(false); @@ -640,19 +649,8 @@ void KillRewarder::Reward() instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim); } -// == Player ==================================================== - -// we can disable this warning for this since it only -// causes undefined behavior when passed to the base class constructor -#ifdef _MSC_VER -#pragma warning(disable:4355) -#endif Player::Player(WorldSession* session): Unit(true) { -#ifdef _MSC_VER -#pragma warning(default:4355) -#endif - m_speakTime = 0; m_speakCount = 0; @@ -687,12 +685,14 @@ Player::Player(WorldSession* session): Unit(true) m_regenTimerCount = 0; m_weaponChangeTimer = 0; - m_zoneUpdateId = 0; + m_zoneUpdateId = uint32(-1); m_zoneUpdateTimer = 0; m_areaUpdateId = 0; m_team = 0; + m_needsZoneUpdate = false; + m_nextSave = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE); clearResurrectRequestData(); @@ -1134,7 +1134,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) } // original spells - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); // original action bar for (PlayerCreateInfoActions::const_iterator action_itr = info->action.begin(); action_itr != info->action.end(); ++action_itr) @@ -1776,7 +1777,6 @@ void Player::Update(uint32 p_time) if (p_time >= m_nextSave) { // m_nextSave reset in SaveToDB call - sScriptMgr->OnPlayerSave(this); SaveToDB(); TC_LOG_DEBUG("entities.player", "Player '%s' (GUID: %u) saved", GetName().c_str(), GetGUIDLow()); } @@ -2133,11 +2133,9 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati { TC_LOG_DEBUG("maps", "Player %s using client without required expansion tried teleport to non accessible map %u", GetName().c_str(), mapid); - if (GetTransport()) + if (Transport* transport = GetTransport()) { - m_transport->RemovePassenger(this); - m_transport = NULL; - m_movementInfo.transport.Reset(); + transport->RemovePassenger(this); RepopAtGraveyard(); // teleport to near graveyard if on transport, looks blizz like :) } @@ -2155,16 +2153,12 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati SetUnitMovementFlags(GetUnitMovementFlags() & MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE); DisableSpline(); - if (m_transport) + if (Transport* transport = GetTransport()) { if (options & TELE_TO_NOT_LEAVE_TRANSPORT) AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); else - { - m_transport->RemovePassenger(this); - m_transport = NULL; - m_movementInfo.transport.Reset(); - } + transport->RemovePassenger(this); } // The player was ported to another map and loses the duel immediately. @@ -2210,8 +2204,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // near teleport, triggering send MSG_MOVE_TELEPORT_ACK from client at landing if (!GetSession()->PlayerLogout()) { - Position oldPos; - GetPosition(&oldPos); + Position oldPos = GetPosition(); if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); Relocate(x, y, z, orientation); @@ -2300,8 +2293,8 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // send transfer packets WorldPacket data(SMSG_TRANSFER_PENDING, 4 + 4 + 4); data << uint32(mapid); - if (m_transport) - data << m_transport->GetEntry() << GetMapId(); + if (Transport* transport = GetTransport()) + data << transport->GetEntry() << GetMapId(); GetSession()->SendPacket(&data); } @@ -2319,7 +2312,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati { WorldPacket data(SMSG_NEW_WORLD, 4 + 4 + 4 + 4 + 4); data << uint32(mapid); - if (m_transport) + if (GetTransport()) data << m_movementInfo.transport.pos.PositionXYZOStream(); else data << m_teleport_dest.PositionXYZOStream(); @@ -2929,11 +2922,10 @@ void Player::UninviteFromGroup() void Player::RemoveFromGroup(Group* group, uint64 guid, RemoveMethod method /* = GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /* = 0 */, const char* reason /* = NULL */) { - if (group) - { - group->RemoveMember(guid, method, kicker, reason); - group = NULL; - } + if (!group) + return; + + group->RemoveMember(guid, method, kicker, reason); } void Player::SendLogXPGain(uint32 GivenXP, Unit* victim, uint32 BonusXP, bool recruitAFriend, float /*group_rate*/) @@ -3836,34 +3828,14 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent if (!pSkill) continue; - if (!Has310Flyer(false) && pSkill->id == SKILL_MOUNTS) + if (_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) + LearnDefaultSkill(pSkill->id, 0); + + if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false)) for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && spellInfo->Effects[i].CalcValue() == 310) SetHas310Flyer(true); - - if (HasSkill(pSkill->id)) - continue; - - if (_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || - // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL - ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) - { - switch (GetSkillRangeType(pSkill, _spell_idx->second->racemask != 0)) - { - case SKILL_RANGE_LANGUAGE: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 300, 300); - break; - case SKILL_RANGE_LEVEL: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, GetMaxSkillValueForLevel()); - break; - case SKILL_RANGE_MONO: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, 1); - break; - default: - break; - } - } } } @@ -4088,33 +4060,27 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) // not ranked skills SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id); - for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) + // most likely will never be used, haven't heard of cases where players unlearn a mount + if (Has310Flyer(false) && spellInfo) { - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); - if (!pSkill) - continue; - - if ((_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL && - pSkill->categoryId != SKILL_CATEGORY_CLASS) ||// not unlearn class skills (spellbook/talent pages) - // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL - ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) + for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { - // not reset skills for professions and racial abilities - if ((pSkill->categoryId == SKILL_CATEGORY_SECONDARY || pSkill->categoryId == SKILL_CATEGORY_PROFESSION) && - (IsProfessionSkill(pSkill->id) || _spell_idx->second->racemask != 0)) + SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); + if (!pSkill) continue; - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 0, 0); - } - - // most likely will never be used, haven't heard of cases where players unlearn a mount - if (Has310Flyer(false) && _spell_idx->second->skillId == SKILL_MOUNTS) - { - if (spellInfo) + if (_spell_idx->second->skillId == SKILL_MOUNTS) + { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && spellInfo->Effects[i].CalcValue() == 310) + { Has310Flyer(true, spell_id); // with true as first argument its also used to set/remove the flag + break; + } + } + } } } } @@ -4205,7 +4171,7 @@ bool Player::Has310Flyer(bool checkAllSpells, uint32 excludeSpellId) if (_spell_idx->second->skillId != SKILL_MOUNTS) break; // We can break because mount spells belong only to one skillline (at least 310 flyers do) - spellInfo = sSpellMgr->GetSpellInfo(itr->first); + spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && spellInfo->Effects[i].CalcValue() == 310) @@ -4971,7 +4937,19 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC stmt->setUInt32(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_DAILY); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY); + stmt->setUInt32(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY); + stmt->setUInt32(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY); + stmt->setUInt32(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL); stmt->setUInt32(0, guid); trans->Append(stmt); @@ -5138,8 +5116,9 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) // remove death flag + set aura SetByteValue(UNIT_FIELD_BYTES_1, 3, 0x00); - if (getRace() == RACE_NIGHTELF) - RemoveAurasDueToSpell(20584); // speed bonuses + + // This must be called always even on Players with race != RACE_NIGHTELF in case of faction change + RemoveAurasDueToSpell(20584); // RACE_NIGHTELF speed bonuses RemoveAurasDueToSpell(8326); // SPELL_AURA_GHOST if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0)) @@ -5930,32 +5909,33 @@ float Player::OCTRegenMPPerSpirit() void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply) { + float oldRating = m_baseRatingValue[cr]; m_baseRatingValue[cr]+=(apply ? value : -value); - // explicit affected values - switch (cr) - { - case CR_HASTE_MELEE: - { - float RatingChange = value * GetRatingMultiplier(cr); - ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply); - ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply); - break; - } - case CR_HASTE_RANGED: - { - float RatingChange = value * GetRatingMultiplier(cr); - ApplyAttackTimePercentMod(RANGED_ATTACK, RatingChange, apply); - break; - } - case CR_HASTE_SPELL: - { - float RatingChange = value * GetRatingMultiplier(cr); - ApplyCastTimePercentMod(RatingChange, apply); - break; + if (cr == CR_HASTE_MELEE || cr == CR_HASTE_RANGED || cr == CR_HASTE_SPELL) + { + float const mult = GetRatingMultiplier(cr); + float const oldVal = oldRating * mult; + float const newVal = m_baseRatingValue[cr] * mult; + switch (cr) + { + case CR_HASTE_MELEE: + ApplyAttackTimePercentMod(BASE_ATTACK, oldVal, false); + ApplyAttackTimePercentMod(OFF_ATTACK, oldVal, false); + ApplyAttackTimePercentMod(BASE_ATTACK, newVal, true); + ApplyAttackTimePercentMod(OFF_ATTACK, newVal, true); + break; + case CR_HASTE_RANGED: + ApplyAttackTimePercentMod(RANGED_ATTACK, oldVal, false); + ApplyAttackTimePercentMod(RANGED_ATTACK, newVal, true); + break; + case CR_HASTE_SPELL: + ApplyCastTimePercentMod(oldVal, false); + ApplyCastTimePercentMod(newVal, true); + break; + default: // shut up compiler warnings + break; } - default: - break; } UpdateRating(cr); @@ -6075,9 +6055,6 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step) if (!skill_id) return false; - if (skill_id == SKILL_FIST_WEAPONS) - skill_id = SKILL_UNARMED; - SkillStatusMap::iterator itr = mSkillStatus.find(skill_id); if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) return false; @@ -6092,13 +6069,14 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step) if (value < max) { - uint32 new_value = value+step; + uint32 new_value = value + step; if (new_value > max) new_value = max; SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, max)); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; + UpdateSkillEnchantments(skill_id, value, new_value); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, skill_id); return true; @@ -6272,9 +6250,25 @@ void Player::UpdateWeaponSkill(WeaponAttackType attType) Item* tmpitem = GetWeaponForAttack(attType, true); if (!tmpitem && attType == BASE_ATTACK) + { + // Keep unarmed & fist weapon skills in sync UpdateSkill(SKILL_UNARMED, weapon_skill_gain); + UpdateSkill(SKILL_FIST_WEAPONS, weapon_skill_gain); + } else if (tmpitem && tmpitem->GetTemplate()->SubClass != ITEM_SUBCLASS_WEAPON_FISHING_POLE) - UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain); + { + switch (tmpitem->GetTemplate()->SubClass) + { + case ITEM_SUBCLASS_WEAPON_FISHING_POLE: + break; + case ITEM_SUBCLASS_WEAPON_FIST: + UpdateSkill(SKILL_UNARMED, weapon_skill_gain); + // no break intended + default: + UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain); + break; + } + } UpdateAllCritPercentages(); } @@ -6347,11 +6341,11 @@ void Player::UpdateSkillsForLevel() continue; uint32 pskill = itr->first; - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(pskill); - if (!pSkill) + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(pskill, getRace(), getClass()); + if (!rcEntry) continue; - if (GetSkillRangeType(pSkill, false) != SKILL_RANGE_LEVEL) + if (GetSkillRangeType(rcEntry) != SKILL_RANGE_LEVEL) continue; uint32 valueIndex = PLAYER_SKILL_VALUE_INDEX(itr->second.pos); @@ -6424,7 +6418,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) if (newVal < currVal) UpdateSkillEnchantments(id, currVal, newVal); // update step - SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(itr->second.pos), MAKE_PAIR32(id, step)); + SetUInt32Value(PLAYER_SKILL_INDEX(itr->second.pos), MAKE_PAIR32(id, step)); // update value SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(itr->second.pos), MAKE_SKILL_VALUE(newVal, maxVal)); if (itr->second.uState != SKILL_NEW) @@ -6749,13 +6743,19 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation, bool t // mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); //AURA_INTERRUPT_FLAG_JUMP not sure + // Update player zone if needed + if (m_needsZoneUpdate) + { + uint32 newZone, newArea; + GetZoneAndAreaId(newZone, newArea); + UpdateZone(newZone, newArea); + m_needsZoneUpdate = false; + } + // group update if (GetGroup()) SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION); - if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE)) - GetSession()->SendCancelTrade(); - CheckAreaExploreAndOutdoor(); return true; @@ -7317,7 +7317,7 @@ void Player::ModifyHonorPoints(int32 value, SQLTransaction* trans /*=NULL*/) if (trans && !trans->null()) { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_HONOR_POINTS); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_HONOR_POINTS); stmt->setUInt32(0, newValue); stmt->setUInt32(1, GetGUIDLow()); (*trans)->Append(stmt); @@ -7333,7 +7333,7 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction* trans /*=NULL*/) if (trans && !trans->null()) { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_ARENA_POINTS); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS); stmt->setUInt32(0, newValue); stmt->setUInt32(1, GetGUIDLow()); (*trans)->Append(stmt); @@ -7471,10 +7471,24 @@ void Player::UpdateArea(uint32 newArea) { SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); pvpInfo.IsInNoPvPArea = true; - CombatStopWithPets(); + if (!duel) + CombatStopWithPets(); } else RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); + + uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE; + if (area && area->flags & areaRestFlag) + { + SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); + SetRestType(REST_TYPE_IN_FACTION_AREA); + InnEnter(time(0), GetMapId(), 0, 0, 0); + } + else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && GetRestType() == REST_TYPE_IN_FACTION_AREA) + { + RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); + SetRestType(REST_TYPE_NO); + } } void Player::UpdateZone(uint32 newZone, uint32 newArea) @@ -7560,8 +7574,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) SetRestType(REST_TYPE_NO); } } - else // Recently left a capital city + else if (GetRestType() != REST_TYPE_IN_FACTION_AREA) // handled in UpdateArea { + // Recently left a capital city RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); SetRestType(REST_TYPE_NO); } @@ -8196,7 +8211,12 @@ void Player::_ApplyWeaponDependentAuraDamageMod(Item* item, WeaponAttackType att { HandleStatModifier(unitMod, unitModType, float(aura->GetAmount()), apply); if (unitModType == TOTAL_VALUE) - ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply); + { + if (aura->GetAmount() > 0) + ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS, aura->GetAmount(), apply); + else + ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG, aura->GetAmount(), apply); + } } } @@ -8753,7 +8773,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) // not check distance for GO in case owned GO (fishing bobber case, for example) // And permit out of range GO with no owner in case fishing hole - if (!go || (loot_type != LOOT_FISHINGHOLE && (loot_type != LOOT_FISHING || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault())) + if (!go || (loot_type != LOOT_FISHINGHOLE && ((loot_type != LOOT_FISHING && loot_type != LOOT_FISHING_JUNK) || go->GetOwnerGUID() != GetGUID()) && !go->IsWithinDistInMap(this, INTERACTION_DISTANCE)) || (loot_type == LOOT_CORPSE && go->GetRespawnTime() && go->isSpawnedByDefault())) { SendLootRelease(guid); return; @@ -8785,12 +8805,14 @@ void Player::SendLoot(uint64 guid, LootType loot_type) loot->FillLoot(lootid, LootTemplates_Gameobject, this, !groupRules, false, go->GetLootMode()); // get next RR player (for next loot) - if (groupRules) + if (groupRules && !go->loot.empty()) group->UpdateLooterGuid(go); } if (loot_type == LOOT_FISHING) go->getFishLoot(loot, this); + else if (loot_type == LOOT_FISHING_JUNK) + go->getFishLootJunk(loot, this); if (go->GetGOInfo()->type == GAMEOBJECT_TYPE_CHEST && go->GetGOInfo()->chest.groupLootRules) { @@ -8824,7 +8846,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) switch (group->GetLootMethod()) { case MASTER_LOOT: - permission = MASTER_PERMISSION; + permission = group->GetMasterLooterGuid() == GetGUID() ? MASTER_PERMISSION : RESTRICTED_PERMISSION; break; case FREE_FOR_ALL: permission = ALL_PERMISSION; @@ -8937,9 +8959,9 @@ void Player::SendLoot(uint64 guid, LootType loot_type) if (loot_type == LOOT_PICKPOCKETING) { - if (!creature->lootForPickPocketed) + if (loot->loot_type != LOOT_PICKPOCKETING) { - creature->lootForPickPocketed = true; + creature->StartPickPocketRefillTimer(); loot->clear(); if (uint32 lootid = creature->GetCreatureTemplate()->pickpocketLootId) @@ -8959,12 +8981,9 @@ void Player::SendLoot(uint64 guid, LootType loot_type) if (!recipient) return; - if (!creature->lootForBody) + if (loot->loot_type == LOOT_NONE) { - creature->lootForBody = true; - // for creature, loot is filled when creature is killed. - if (Group* group = recipient->GetGroup()) { switch (group->GetLootMethod()) @@ -8985,11 +9004,17 @@ void Player::SendLoot(uint64 guid, LootType loot_type) } } - // possible only if creature->lootForBody && loot->empty() at spell cast check - if (loot_type == LOOT_SKINNING) + // if loot is already skinning loot then don't do anything else + if (loot->loot_type == LOOT_SKINNING) + { + loot_type = LOOT_SKINNING; + permission = creature->GetSkinner() == GetGUID() ? OWNER_PERMISSION : NONE_PERMISSION; + } + else if (loot_type == LOOT_SKINNING) { loot->clear(); loot->FillLoot(creature->GetCreatureTemplate()->SkinLootId, LootTemplates_Skinning, this, true); + creature->SetSkinner(GetGUID()); permission = OWNER_PERMISSION; } // set group rights only for loot_type != LOOT_SKINNING @@ -9002,7 +9027,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) switch (group->GetLootMethod()) { case MASTER_LOOT: - permission = MASTER_PERMISSION; + permission = group->GetMasterLooterGuid() == GetGUID() ? MASTER_PERMISSION : RESTRICTED_PERMISSION; break; case FREE_FOR_ALL: permission = ALL_PERMISSION; @@ -9033,6 +9058,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) { case LOOT_INSIGNIA: loot_type = LOOT_SKINNING; break; case LOOT_FISHINGHOLE: loot_type = LOOT_FISHING; break; + case LOOT_FISHING_JUNK: loot_type = LOOT_FISHING; break; default: break; } @@ -12350,11 +12376,8 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update) GetGlobalCooldownMgr().AddGlobalCooldown(spellProto, m_weaponChangeTimer); - WorldPacket data(SMSG_SPELL_COOLDOWN, 8+1+4); - data << uint64(GetGUID()); - data << uint8(1); - data << uint32(cooldownSpell); - data << uint32(0); + WorldPacket data; + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, cooldownSpell, 0); GetSession()->SendPacket(&data); } } @@ -12645,6 +12668,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) RemoveAurasDueToSpell(proto->Spells[i].SpellId); ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount()); + sScriptMgr->OnItemRemove(this, pItem); if (bag == INVENTORY_SLOT_BAG_0) { @@ -14432,17 +14456,35 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool if (canTalk) { - std::string strOptionText = itr->second.OptionText; - std::string strBoxText = itr->second.BoxText; + std::string strOptionText, strBoxText; + BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId); + BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId); + LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex(); + + if (optionBroadcastText) + strOptionText = optionBroadcastText->GetText(locale, getGender()); + else + strOptionText = itr->second.OptionText; + + if (boxBroadcastText) + strBoxText = boxBroadcastText->GetText(locale, getGender()); + else + strBoxText = itr->second.BoxText; - int32 locale = GetSession()->GetSessionDbLocaleIndex(); - if (locale >= 0) + if (locale != DEFAULT_LOCALE) { - uint32 idxEntry = MAKE_PAIR32(menuId, itr->second.OptionIndex); - if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(idxEntry)) + if (!optionBroadcastText) { - ObjectMgr::GetLocaleString(no->OptionText, locale, strOptionText); - ObjectMgr::GetLocaleString(no->BoxText, locale, strBoxText); + /// Find localizations from database. + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId))) + ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText); + } + + if (!boxBroadcastText) + { + /// Find localizations from database. + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId))) + ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText); } } @@ -15037,7 +15079,7 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver) switch (questGiver->GetTypeId()) { case TYPEID_UNIT: - sScriptMgr->OnQuestAccept(this, (questGiver->ToCreature()), quest); + sScriptMgr->OnQuestAccept(this, questGiver->ToCreature(), quest); questGiver->ToCreature()->AI()->sQuestAccept(this, quest); break; case TYPEID_ITEM: @@ -15180,7 +15222,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id); - UpdateForQuestWorldObjects(); + SendQuestUpdate(quest_id); } void Player::CompleteQuest(uint32 quest_id) @@ -15346,7 +15388,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, else if (quest->IsSeasonal()) SetSeasonalQuestStatus(quest_id); - RemoveActiveQuest(quest_id); + RemoveActiveQuest(quest_id, false); m_RewardedQuests.insert(quest_id); m_RewardedQuestsSave[quest_id] = true; @@ -15394,6 +15436,8 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, UpdatePvPState(); } + SendQuestUpdate(quest_id); + //lets remove flag for delayed teleports SetCanDelayTeleport(false); } @@ -15732,6 +15776,7 @@ bool Player::SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg) // not allow have daily quest if daily quest from exclusive group already recently completed Quest const* Nquest = sObjectMgr->GetQuestTemplate(exclude_Id); + ASSERT(Nquest); if (!SatisfyQuestDay(Nquest, false) || !SatisfyQuestWeek(Nquest, false) || !SatisfyQuestSeasonal(Nquest, false)) { if (msg) @@ -15933,6 +15978,7 @@ bool Player::TakeQuestSourceItem(uint32 questId, bool msg) return false; } + ASSERT(item); bool destroyItem = true; for (uint8 n = 0; n < QUEST_ITEM_OBJECTIVES_COUNT; ++n) if (item->StartQuest == questId && srcItemId == quest->RequiredItemId[n]) @@ -15987,17 +16033,49 @@ bool Player::CanShareQuest(uint32 quest_id) const return false; } -void Player::SetQuestStatus(uint32 quest_id, QuestStatus status) +void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*= true*/) +{ + if (sObjectMgr->GetQuestTemplate(questId)) + { + m_QuestStatus[questId].Status = status; + m_QuestStatusSave[questId] = true; + } + + if (update) + SendQuestUpdate(questId); +} + +void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/) +{ + QuestStatusMap::iterator itr = m_QuestStatus.find(questId); + if (itr != m_QuestStatus.end()) + { + m_QuestStatus.erase(itr); + m_QuestStatusSave[questId] = false; + } + + if (update) + SendQuestUpdate(questId); +} + +void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) { - if (sObjectMgr->GetQuestTemplate(quest_id)) + RewardedQuestSet::iterator rewItr = m_RewardedQuests.find(questId); + if (rewItr != m_RewardedQuests.end()) { - m_QuestStatus[quest_id].Status = status; - m_QuestStatusSave[quest_id] = true; + m_RewardedQuests.erase(rewItr); + m_RewardedQuestsSave[questId] = false; } + if (update) + SendQuestUpdate(questId); +} + +void Player::SendQuestUpdate(uint32 questId) +{ uint32 zone = 0, area = 0; - SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(quest_id); + SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(questId); if (saBounds.first != saBounds.second) { GetZoneAndAreaId(zone, area); @@ -16008,7 +16086,7 @@ void Player::SetQuestStatus(uint32 quest_id, QuestStatus status) CastSpell(this, itr->second->spellId, true); } - saBounds = sSpellMgr->GetSpellAreaForQuestEndMapBounds(quest_id); + saBounds = sSpellMgr->GetSpellAreaForQuestEndMapBounds(questId); if (saBounds.first != saBounds.second) { if (!zone || !area) @@ -16022,25 +16100,108 @@ void Player::SetQuestStatus(uint32 quest_id, QuestStatus status) UpdateForQuestWorldObjects(); } -void Player::RemoveActiveQuest(uint32 quest_id) +QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) { - QuestStatusMap::iterator itr = m_QuestStatus.find(quest_id); - if (itr != m_QuestStatus.end()) + QuestRelationBounds qr; + QuestRelationBounds qir; + + switch (questgiver->GetTypeId()) { - m_QuestStatus.erase(itr); - m_QuestStatusSave[quest_id] = false; - return; + case TYPEID_GAMEOBJECT: + { + QuestGiverStatus questStatus = QuestGiverStatus(sScriptMgr->GetDialogStatus(this, questgiver->ToGameObject())); + if (questStatus != DIALOG_STATUS_SCRIPTED_NO_STATUS) + return questStatus; + qr = sObjectMgr->GetGOQuestRelationBounds(questgiver->GetEntry()); + qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(questgiver->GetEntry()); + break; + } + case TYPEID_UNIT: + { + QuestGiverStatus questStatus = QuestGiverStatus(sScriptMgr->GetDialogStatus(this, questgiver->ToCreature())); + if (questStatus != DIALOG_STATUS_SCRIPTED_NO_STATUS) + return questStatus; + qr = sObjectMgr->GetCreatureQuestRelationBounds(questgiver->GetEntry()); + qir = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(questgiver->GetEntry()); + break; + } + default: + // it's impossible, but check + TC_LOG_ERROR("entities.player.quest", "GetQuestDialogStatus called for unexpected type %u", questgiver->GetTypeId()); + return DIALOG_STATUS_NONE; } -} -void Player::RemoveRewardedQuest(uint32 quest_id) -{ - RewardedQuestSet::iterator rewItr = m_RewardedQuests.find(quest_id); - if (rewItr != m_RewardedQuests.end()) + QuestGiverStatus result = DIALOG_STATUS_NONE; + + for (QuestRelations::const_iterator i = qir.first; i != qir.second; ++i) { - m_RewardedQuests.erase(rewItr); - m_RewardedQuestsSave[quest_id] = false; + QuestGiverStatus result2 = DIALOG_STATUS_NONE; + uint32 questId = i->second; + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + if (!quest) + continue; + + ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); + if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + continue; + + QuestStatus status = GetQuestStatus(questId); + if ((status == QUEST_STATUS_COMPLETE && !GetQuestRewardStatus(questId)) || + (quest->IsAutoComplete() && CanTakeQuest(quest, false))) + { + if (quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) + result2 = DIALOG_STATUS_REWARD_REP; + else + result2 = DIALOG_STATUS_REWARD; + } + else if (status == QUEST_STATUS_INCOMPLETE) + result2 = DIALOG_STATUS_INCOMPLETE; + + if (result2 > result) + result = result2; } + + for (QuestRelations::const_iterator i = qr.first; i != qr.second; ++i) + { + QuestGiverStatus result2 = DIALOG_STATUS_NONE; + uint32 questId = i->second; + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + if (!quest) + continue; + + ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); + if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + continue; + + QuestStatus status = GetQuestStatus(questId); + if (status == QUEST_STATUS_NONE) + { + if (CanSeeStartQuest(quest)) + { + if (SatisfyQuestLevel(quest, false)) + { + if (quest->IsAutoComplete()) + result2 = DIALOG_STATUS_REWARD_REP; + else if (getLevel() <= (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) + { + if (quest->IsDaily()) + result2 = DIALOG_STATUS_AVAILABLE_REP; + else + result2 = DIALOG_STATUS_AVAILABLE; + } + else + result2 = DIALOG_STATUS_LOW_LEVEL_AVAILABLE; + } + else + result2 = DIALOG_STATUS_UNAVAILABLE; + } + } + + if (result2 > result) + result = result2; + } + + return result; } // not used in Trinity, but used in scripting code @@ -16212,12 +16373,8 @@ void Player::ItemAddedQuestCheck(uint32 entry, uint32 count) uint16 curitemcount = q_status.ItemCount[j]; if (curitemcount < reqitemcount) { - uint16 additemcount = curitemcount + count <= reqitemcount ? count : reqitemcount - curitemcount; - q_status.ItemCount[j] += additemcount; - + q_status.ItemCount[j] = std::min<uint16>(q_status.ItemCount[j] + count, reqitemcount); m_QuestStatusSave[questid] = true; - - SendQuestUpdateAddItem(qInfo, j, additemcount); } if (CanCompleteQuest(questid)) CompleteQuest(questid); @@ -16235,9 +16392,11 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count) uint32 questid = GetQuestSlotQuestId(i); if (!questid) continue; + Quest const* qInfo = sObjectMgr->GetQuestTemplate(questid); if (!qInfo) continue; + if (!qInfo->HasSpecialFlag(QUEST_SPECIAL_FLAGS_DELIVER)) continue; @@ -16249,18 +16408,17 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count) QuestStatusData& q_status = m_QuestStatus[questid]; uint32 reqitemcount = qInfo->RequiredItemCount[j]; - uint16 curitemcount; - if (q_status.Status != QUEST_STATUS_COMPLETE) - curitemcount = q_status.ItemCount[j]; - else - curitemcount = GetItemCount(entry, true); - if (curitemcount < reqitemcount + count) - { - uint16 remitemcount = curitemcount <= reqitemcount ? count : count + reqitemcount - curitemcount; - q_status.ItemCount[j] = (curitemcount <= remitemcount) ? 0 : curitemcount - remitemcount; + uint16 curitemcount = q_status.ItemCount[j]; - m_QuestStatusSave[questid] = true; + if (q_status.ItemCount[j] >= reqitemcount) // we may have more than what the status shows + curitemcount = GetItemCount(entry, false); + uint16 newItemCount = (count > curitemcount) ? 0 : curitemcount - count; + newItemCount = std::min<uint16>(newItemCount, reqitemcount); + if (newItemCount != q_status.ItemCount[j]) + { + q_status.ItemCount[j] = newItemCount; + m_QuestStatusSave[questid] = true; IncompleteQuest(questid); } return; @@ -17054,6 +17212,14 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) bytes0 |= gender << 16; // gender SetUInt32Value(UNIT_FIELD_BYTES_0, bytes0); + // check if race/class combination is valid + PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); + if (!info) + { + TC_LOG_ERROR("entities.player", "Player (GUID: %u) has wrong race/class (%u/%u), can't be loaded.", guid, getRace(), getClass()); + return false; + } + SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8()); SetUInt32Value(PLAYER_XP, fields[7].GetUInt32()); @@ -17221,15 +17387,15 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) { uint64 transGUID = MAKE_NEW_GUID(transLowGUID, 0, HIGHGUID_MO_TRANSPORT); + Transport* transport = NULL; if (GameObject* go = HashMapHolder<GameObject>::Find(transGUID)) - m_transport = go->ToTransport(); + transport = go->ToTransport(); - if (m_transport) + if (transport) { - m_movementInfo.transport.guid = transGUID; float x = fields[26].GetFloat(), y = fields[27].GetFloat(), z = fields[28].GetFloat(), o = fields[29].GetFloat(); m_movementInfo.transport.pos.Relocate(x, y, z, o); - m_transport->CalculatePassengerPosition(x, y, z, &o); + transport->CalculatePassengerPosition(x, y, z, &o); if (!Trinity::IsValidMapCoord(x, y, z, o) || // transport size limited @@ -17240,7 +17406,6 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) TC_LOG_ERROR("entities.player", "Player (guidlow %d) have invalid transport coordinates (X: %f Y: %f Z: %f O: %f). Teleport to bind location.", guid, x, y, z, o); - m_transport = NULL; m_movementInfo.transport.Reset(); RelocateToHomebind(); @@ -17248,10 +17413,9 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) else { Relocate(x, y, z, o); - mapId = m_transport->GetMapId(); + mapId = transport->GetMapId(); - m_transport->AddPassenger(this); - AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + transport->AddPassenger(this); } } else @@ -17529,7 +17693,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) // after spell and quest load InitTalentForLevel(); - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); // must be before inventory (some items required reputation check) m_reputationMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_REPUTATION)); @@ -17659,6 +17824,9 @@ bool Player::isAllowedToLoot(const Creature* creature) if (loot->isLooted()) // nothing to loot or everything looted. return false; + if (loot->loot_type == LOOT_SKINNING) + return creature->GetSkinner() == GetGUID(); + Group* thisGroup = GetGroup(); if (!thisGroup) return this == creature->GetLootRecipient(); @@ -17670,13 +17838,13 @@ bool Player::isAllowedToLoot(const Creature* creature) case FREE_FOR_ALL: return true; case ROUND_ROBIN: - case MASTER_LOOT: // may only loot if the player is the loot roundrobin player // or if there are free/quest/conditional item for the player if (loot->roundRobinPlayer == 0 || loot->roundRobinPlayer == GetGUID()) return true; return loot->hasItemFor(this); + case MASTER_LOOT: case GROUP_LOOT: case NEED_BEFORE_GREED: // may only loot if the player is the loot roundrobin player @@ -18494,6 +18662,9 @@ void Player::_LoadGroup(PreparedQueryResult result) { if (Group* group = sGroupMgr->GetGroupByDbStoreId((*result)[0].GetUInt32())) { + if (group->IsLeader(GetGUID())) + SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + uint8 subgroup = group->GetMemberGroup(GetGUID()); SetGroup(group, subgroup); if (getLevel() >= LEVELREQUIREMENT_HEROIC) @@ -18504,6 +18675,9 @@ void Player::_LoadGroup(PreparedQueryResult result) } } } + + if (!GetGroup() || !GetGroup()->IsLeader(GetGUID())) + RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); } void Player::_LoadBoundInstances(PreparedQueryResult result) @@ -18999,6 +19173,9 @@ void Player::SaveToDB(bool create /*=false*/) TC_LOG_DEBUG("entities.unit", "The value of player %s at save: ", m_name.c_str()); outDebugValues(); + if (!create) + sScriptMgr->OnPlayerSave(this); + PreparedStatement* stmt = NULL; uint8 index = 0; @@ -19283,7 +19460,7 @@ void Player::SaveInventoryAndGoldToDB(SQLTransaction& trans) void Player::SaveGoldToDB(SQLTransaction& trans) { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_MONEY); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_MONEY); stmt->setUInt32(0, GetMoney()); stmt->setUInt32(1, GetGUIDLow()); trans->Append(stmt); @@ -19670,14 +19847,15 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) // save last daily quest time for all quests: we need only mostly reset time for reset check anyway // we don't need transactions here. - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY_CHAR); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt32(0, GetGUIDLow()); trans->Append(stmt); + for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx) { if (GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx)) { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_DAILYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt32(0, GetGUIDLow()); stmt->setUInt32(1, GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx)); stmt->setUInt64(2, uint64(m_lastDailyQuestTime)); @@ -19689,7 +19867,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) { for (DFQuestsDoneList::iterator itr = m_DFQuests.begin(); itr != m_DFQuests.end(); ++itr) { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_DAILYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt32(0, GetGUIDLow()); stmt->setUInt32(1, (*itr)); stmt->setUInt64(2, uint64(m_lastDailyQuestTime)); @@ -19704,17 +19882,17 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans) return; // we don't need transactions here. - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY); stmt->setUInt32(0, GetGUIDLow()); trans->Append(stmt); for (QuestSet::const_iterator iter = m_weeklyquests.begin(); iter != m_weeklyquests.end(); ++iter) { - uint32 quest_id = *iter; + uint32 questId = *iter; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_WEEKLY); stmt->setUInt32(0, GetGUIDLow()); - stmt->setUInt32(1, quest_id); + stmt->setUInt32(1, questId); trans->Append(stmt); } @@ -19727,21 +19905,22 @@ void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans) return; // we don't need transactions here. - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL); stmt->setUInt32(0, GetGUIDLow()); trans->Append(stmt); for (SeasonalEventQuestMap::const_iterator iter = m_seasonalquests.begin(); iter != m_seasonalquests.end(); ++iter) { - uint16 event_id = iter->first; + uint16 eventId = iter->first; + for (SeasonalQuestSet::const_iterator itr = iter->second.begin(); itr != iter->second.end(); ++itr) { - uint32 quest_id = (*itr); + uint32 questId = *itr; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_SEASONALQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_SEASONAL); stmt->setUInt32(0, GetGUIDLow()); - stmt->setUInt32(1, quest_id); - stmt->setUInt32(2, event_id); + stmt->setUInt32(1, questId); + stmt->setUInt32(2, eventId); trans->Append(stmt); } } @@ -19755,16 +19934,17 @@ void Player::_SaveMonthlyQuestStatus(SQLTransaction& trans) return; // we don't need transactions here. - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_MONTHLY_CHAR); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY); stmt->setUInt32(0, GetGUIDLow()); trans->Append(stmt); for (QuestSet::const_iterator iter = m_monthlyquests.begin(); iter != m_monthlyquests.end(); ++iter) { - uint32 quest_id = *iter; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_MONTHLYQUESTSTATUS); + uint32 questId = *iter; + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_MONTHLY); stmt->setUInt32(0, GetGUIDLow()); - stmt->setUInt32(1, quest_id); + stmt->setUInt32(1, questId); trans->Append(stmt); } @@ -19810,7 +19990,7 @@ void Player::_SaveSkills(SQLTransaction& trans) break; case SKILL_CHANGED: - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_CHAR_SKILLS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_SKILLS); stmt->setUInt16(0, value); stmt->setUInt16(1, max); stmt->setUInt32(2, GetGUIDLow()); @@ -20357,7 +20537,7 @@ void Player::Say(const std::string& text, const uint32 language) sScriptMgr->OnPlayerChat(this, CHAT_MSG_SAY, language, _text); WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_SAY, Language(language), this, this, text); + ChatHandler::BuildChatPacket(data, CHAT_MSG_SAY, Language(language), this, this, _text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true); } @@ -20367,7 +20547,7 @@ void Player::Yell(const std::string& text, const uint32 language) sScriptMgr->OnPlayerChat(this, CHAT_MSG_YELL, language, _text); WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_YELL, Language(language), this, this, text); + ChatHandler::BuildChatPacket(data, CHAT_MSG_YELL, Language(language), this, this, _text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), true); } @@ -20377,7 +20557,7 @@ void Player::TextEmote(const std::string& text) sScriptMgr->OnPlayerChat(this, CHAT_MSG_EMOTE, LANG_UNIVERSAL, _text); WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, text); + ChatHandler::BuildChatPacket(data, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text); SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT)); } @@ -20394,14 +20574,14 @@ void Player::Whisper(const std::string& text, uint32 language, uint64 receiver) sScriptMgr->OnPlayerChat(this, CHAT_MSG_WHISPER, language, _text, rPlayer); WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, Language(language), this, this, text); + ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, Language(language), this, this, _text); rPlayer->GetSession()->SendPacket(&data); // rest stuff shouldn't happen in case of addon message if (isAddonMessage) return; - ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER_INFORM, Language(language), rPlayer, rPlayer, text); + ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER_INFORM, Language(language), rPlayer, rPlayer, _text); GetSession()->SendPacket(&data); if (!isAcceptWhispers() && !IsGameMaster() && !rPlayer->IsGameMaster()) @@ -21192,6 +21372,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc if (sWorld->getBoolConfig(CONFIG_INSTANT_TAXI)) { TaxiNodesEntry const* lastPathNode = sTaxiNodesStore.LookupEntry(nodes[nodes.size()-1]); + ASSERT(lastPathNode); m_taxi.ClearTaxiDestinations(); TeleportTo(lastPathNode->map_id, lastPathNode->x, lastPathNode->y, lastPathNode->z, GetOrientation()); return false; @@ -21285,10 +21466,8 @@ void Player::ContinueTaxiFlight() void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) { - // last check 2.0.10 - WorldPacket data(SMSG_SPELL_COOLDOWN, 8+1+m_spells.size()*8); - data << uint64(GetGUID()); - data << uint8(0x0); // flags (0x1, 0x2) + PacketCooldowns cooldowns; + WorldPacket data; time_t curTime = time(NULL); for (PlayerSpellMap::const_iterator itr = m_spells.begin(); itr != m_spells.end(); ++itr) { @@ -21311,12 +21490,16 @@ void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) if ((idSchoolMask & spellInfo->GetSchoolMask()) && GetSpellCooldownDelay(unSpellId) < unTimeMs) { - data << uint32(unSpellId); - data << uint32(unTimeMs); // in m.secs + cooldowns[unSpellId] = unTimeMs; AddSpellCooldown(unSpellId, 0, curTime + unTimeMs/IN_MILLISECONDS); } } - GetSession()->SendPacket(&data); + + if (!cooldowns.empty()) + { + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); + GetSession()->SendPacket(&data); + } } void Player::InitDataForForm(bool reapplyMods) @@ -21410,6 +21593,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c if (crItem->ExtendedCost) // case for new honor system { ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(crItem->ExtendedCost); + ASSERT(iece); if (iece->reqhonorpoints) ModifyHonorPoints(- int32(iece->reqhonorpoints * count)); @@ -21474,6 +21658,15 @@ bool Player::BuyItemFromVendorSlot(uint64 vendorguid, uint32 vendorslot, uint32 return false; } + if (!(pProto->AllowableClass & getClassMask()) && pProto->Bonding == BIND_WHEN_PICKED_UP && !IsGameMaster()) + { + SendBuyError(BUY_ERR_CANT_FIND_ITEM, NULL, item, 0); + return false; + } + + if (!IsGameMaster() && ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && GetTeam() == ALLIANCE) || (pProto->Flags2 == ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && GetTeam() == HORDE))) + return false; + Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR); if (!creature) { @@ -21482,6 +21675,14 @@ bool Player::BuyItemFromVendorSlot(uint64 vendorguid, uint32 vendorslot, uint32 return false; } + ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item); + if (!sConditionMgr->IsObjectMeetToConditions(this, creature, conditions)) + { + TC_LOG_DEBUG("condition", "BuyItemFromVendor: conditions not met for creature entry %u item %u", creature->GetEntry(), item); + SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, item, 0); + return false; + } + VendorItemData const* vItems = creature->GetVendorItems(); if (!vItems || vItems->Empty()) { @@ -21776,6 +21977,8 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite time_t catrecTime; time_t recTime; + bool needsCooldownPacket = false; + // overwrite time for selected category if (infinityCooldown) { @@ -21798,6 +22001,16 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite if (catrec > 0 && !(spellInfo->AttributesEx6 & SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, catrec, spell); + if (int32 cooldownMod = GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN)) + { + // Apply SPELL_AURA_MOD_COOLDOWN only to own spells + if (HasSpell(spellInfo->Id)) + { + needsCooldownPacket = true; + rec += cooldownMod * IN_MILLISECONDS; // SPELL_AURA_MOD_COOLDOWN does not affect category cooldows, verified with shaman shocks + } + } + // replace negative cooldowns by 0 if (rec < 0) rec = 0; if (catrec < 0) catrec = 0; @@ -21812,8 +22025,17 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // self spell cooldown if (recTime > 0) + { AddSpellCooldown(spellInfo->Id, itemId, recTime); + if (needsCooldownPacket) + { + WorldPacket data; + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, rec); + SendDirectMessage(&data); + } + } + // category spells if (cat && catrec > 0) { @@ -21839,6 +22061,27 @@ void Player::AddSpellCooldown(uint32 spellid, uint32 itemid, time_t end_time) m_spellCooldowns[spellid] = sc; } +void Player::ModifySpellCooldown(uint32 spellId, int32 cooldown) +{ + SpellCooldowns::iterator itr = m_spellCooldowns.find(spellId); + if (itr == m_spellCooldowns.end()) + return; + + time_t now = time(NULL); + if (itr->second.end + (cooldown / IN_MILLISECONDS) > now) + itr->second.end += (cooldown / IN_MILLISECONDS); + else + m_spellCooldowns.erase(itr); + + WorldPacket data(SMSG_MODIFY_COOLDOWN, 4 + 8 + 4); + data << uint32(spellId); // Spell ID + data << uint64(GetGUID()); // Player GUID + data << int32(cooldown); // Cooldown mod in milliseconds + GetSession()->SendPacket(&data); + + TC_LOG_DEBUG("misc", "ModifySpellCooldown:: Player: %s (GUID: %u) Spell: %u cooldown: %u", GetName().c_str(), GetGUIDLow(), spellId, GetSpellCooldownDelay(spellId)); +} + void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= NULL*/, bool setCooldown /*= true*/) { // start cooldowns at server side, if any @@ -22445,7 +22688,7 @@ bool Player::ModifyMoney(int32 amount, bool sendError /*= true*/) SetMoney (GetMoney() > uint32(-amount) ? GetMoney() + amount : 0); else { - if (GetMoney() < uint32(MAX_MONEY_AMOUNT - amount)) + if (GetMoney() < MAX_MONEY_AMOUNT - static_cast<uint32>(amount)) SetMoney(GetMoney() + amount); else { @@ -22616,7 +22859,7 @@ void Player::SendInitialPacketsBeforeAddToMap() // SMSG_INSTANCE_DIFFICULTY data.Initialize(SMSG_INSTANCE_DIFFICULTY, 4+4); data << uint32(GetMap()->GetDifficulty()); - data << uint32(0); + data << uint32(GetMap()->GetEntry()->IsDynamicDifficultyMap() && GetMap()->IsHeroic()); // Raid dynamic difficulty GetSession()->SendPacket(&data); SendInitialSpells(); @@ -22846,15 +23089,19 @@ void Player::resetSpells(bool myClassOnly) for (PlayerSpellMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter) removeSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); learnQuestRewardedSpells(); } -void Player::learnDefaultSpells() +void Player::LearnCustomSpells() { + if (!sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS)) + return; + // learn default race/class spells PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); - for (PlayerCreateInfoSpells::const_iterator itr = info->spell.begin(); itr != info->spell.end(); ++itr) + for (PlayerCreateInfoSpells::const_iterator itr = info->customSpells.begin(); itr != info->customSpells.end(); ++itr) { uint32 tspell = *itr; TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial spell, id = %u", uint32(getClass()), uint32(getRace()), tspell); @@ -22865,6 +23112,68 @@ void Player::learnDefaultSpells() } } +void Player::LearnDefaultSkills() +{ + // learn default race/class skills + PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); + for (PlayerCreateInfoSkills::const_iterator itr = info->skills.begin(); itr != info->skills.end(); ++itr) + { + uint32 skillId = itr->SkillId; + if (HasSkill(skillId)) + continue; + + LearnDefaultSkill(skillId, itr->Rank); + } +} + +void Player::LearnDefaultSkill(uint32 skillId, uint16 rank) +{ + SkillRaceClassInfoEntry const* rcInfo = GetSkillRaceClassInfo(skillId, getRace(), getClass()); + if (!rcInfo) + return; + + TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial skill, id = %u", uint32(getClass()), uint32(getRace()), skillId); + switch (GetSkillRangeType(rcInfo)) + { + case SKILL_RANGE_LANGUAGE: + SetSkill(skillId, 0, 300, 300); + break; + case SKILL_RANGE_LEVEL: + { + uint16 skillValue = 1; + uint16 maxValue = GetMaxSkillValueForLevel(); + if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) + skillValue = maxValue; + else if (getClass() == CLASS_DEATH_KNIGHT) + skillValue = std::min(std::max<uint16>({ 1, uint16((getLevel() - 1) * 5) }), maxValue); + + SetSkill(skillId, 0, skillValue, maxValue); + break; + } + case SKILL_RANGE_MONO: + SetSkill(skillId, 0, 1, 1); + break; + case SKILL_RANGE_RANK: + { + if (!rank) + break; + + SkillTiersEntry const* tier = sSkillTiersStore.LookupEntry(rcInfo->SkillTier); + uint16 maxValue = tier->MaxSkill[std::max<int32>(rank - 1, 0)]; + uint16 skillValue = 1; + if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) + skillValue = maxValue; + else if (getClass() == CLASS_DEATH_KNIGHT) + skillValue = std::min(std::max<uint16>({ uint16(1), uint16((getLevel() - 1) * 5) }), maxValue); + + SetSkill(skillId, rank, skillValue, maxValue); + break; + } + default: + break; + } +} + void Player::learnQuestRewardedSpells(Quest const* quest) { int32 spell_id = quest->GetRewSpellCast(); @@ -22962,29 +23271,35 @@ void Player::learnSkillRewardedSpells(uint32 skill_id, uint32 skill_value) { uint32 raceMask = getRaceMask(); uint32 classMask = getClassMask(); - for (uint32 j=0; j<sSkillLineAbilityStore.GetNumRows(); ++j) + for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) { SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j); - if (!pAbility || pAbility->skillId != skill_id || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL) + if (!pAbility || pAbility->skillId != skill_id) + continue; + + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pAbility->spellId); + if (!spellInfo) + continue; + + if (pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE && pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; + // Check race if set if (pAbility->racemask && !(pAbility->racemask & raceMask)) continue; + // Check class if set if (pAbility->classmask && !(pAbility->classmask & classMask)) continue; - if (sSpellMgr->GetSpellInfo(pAbility->spellId)) - { - // need unlearn spell - if (skill_value < pAbility->req_skill_value) - removeSpell(pAbility->spellId); - // need learn - else if (!IsInWorld()) - addSpell(pAbility->spellId, true, true, true, false); - else - learnSpell(pAbility->spellId, true); - } + // need unlearn spell + if (skill_value < pAbility->req_skill_value && pAbility->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) + removeSpell(pAbility->spellId); + // need learn + else if (!IsInWorld()) + addSpell(pAbility->spellId, true, true, true, false); + else + learnSpell(pAbility->spellId, true); } } @@ -23313,7 +23628,7 @@ void Player::UpdateForQuestWorldObjects() UpdateData udata; WorldPacket packet; - for (ClientGUIDs::iterator itr=m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) + for (ClientGUIDs::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) { if (IS_GAMEOBJECT_GUID(*itr)) { @@ -23592,7 +23907,7 @@ uint32 Player::GetResurrectionSpellId() } // Used in triggers for check "Only to targets that grant experience or honor" req -bool Player::isHonorOrXPTarget(Unit* victim) +bool Player::isHonorOrXPTarget(Unit* victim) const { uint8 v_level = victim->getLevel(); uint8 k_grey = Trinity::XP::GetGrayLevel(getLevel()); @@ -23712,7 +24027,7 @@ bool Player::IsAtRecruitAFriendDistance(WorldObject const* pOther) const return pOther->GetDistance(player) <= sWorld->getFloatConfig(CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE); } -uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const +uint32 Player::GetBaseWeaponSkillValue(WeaponAttackType attType) const { Item* item = GetWeaponForAttack(attType, true); @@ -23720,12 +24035,12 @@ uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const if (attType != BASE_ATTACK && !item) return 0; - // weapon skill or (unarmed for base attack and for fist weapons) - uint32 skill = (item && item->GetSkill() != SKILL_FIST_WEAPONS) ? item->GetSkill() : uint32(SKILL_UNARMED); + // weapon skill or (unarmed for base attack) + uint32 skill = item ? item->GetSkill() : uint32(SKILL_UNARMED); return GetBaseSkillValue(skill); } -void Player::ResurectUsingRequestData() +void Player::ResurrectUsingRequestData() { /// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation()); @@ -24297,7 +24612,7 @@ bool Player::isTotalImmune() return false; } -bool Player::HasTitle(uint32 bitIndex) +bool Player::HasTitle(uint32 bitIndex) const { if (bitIndex > MAX_TITLE_INDEX) return false; @@ -24563,6 +24878,12 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot) return; } + if (!item->AllowedForPlayer(this)) + { + SendLootRelease(GetLootGUID()); + return; + } + // questitems use the blocked field for other purposes if (!qitem && item->is_blocked) { @@ -24669,15 +24990,15 @@ void Player::_LoadSkills(PreparedQueryResult result) uint16 value = fields[1].GetUInt16(); uint16 max = fields[2].GetUInt16(); - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill); - if (!pSkill) + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skill, getRace(), getClass()); + if (!rcEntry) { TC_LOG_ERROR("entities.player", "Character %u has skill %u that does not exist.", GetGUIDLow(), skill); continue; } // set fixed skill ranges - switch (GetSkillRangeType(pSkill, false)) + switch (GetSkillRangeType(rcEntry)) { case SKILL_RANGE_LANGUAGE: // 300..300 value = max = 300; @@ -24685,9 +25006,12 @@ void Player::_LoadSkills(PreparedQueryResult result) case SKILL_RANGE_MONO: // 1..1, grey monolite bar value = max = 1; break; + case SKILL_RANGE_LEVEL: + max = GetMaxSkillValueForLevel(); default: break; } + if (value == 0) { TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill); @@ -24702,11 +25026,20 @@ void Player::_LoadSkills(PreparedQueryResult result) continue; } - // enable unlearn button for primary professions only - if (pSkill->categoryId == SKILL_CATEGORY_PROFESSION) - SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 1)); - else - SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 0)); + uint16 skillStep = 0; + if (SkillTiersEntry const* skillTier = sSkillTiersStore.LookupEntry(rcEntry->SkillTier)) + { + for (uint32 i = 0; i < MAX_SKILL_STEP; ++i) + { + if (skillTier->MaxSkill[skillStep] == max) + { + skillStep = i + 1; + break; + } + } + } + + SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, skillStep)); SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(count), MAKE_SKILL_VALUE(value, max)); SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0); @@ -24732,34 +25065,6 @@ void Player::_LoadSkills(PreparedQueryResult result) SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(count), 0); SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0); } - - // special settings - if (getClass() == CLASS_DEATH_KNIGHT) - { - uint8 base_level = std::min(getLevel(), uint8(sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL))); - if (base_level < 1) - base_level = 1; - uint16 base_skill = (base_level-1)*5; // 270 at starting level 55 - if (base_skill < 1) - base_skill = 1; // skill mast be known and then > 0 in any case - - if (GetPureSkillValue(SKILL_FIRST_AID) < base_skill) - SetSkill(SKILL_FIRST_AID, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_AXES) < base_skill) - SetSkill(SKILL_AXES, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_DEFENSE) < base_skill) - SetSkill(SKILL_DEFENSE, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_POLEARMS) < base_skill) - SetSkill(SKILL_POLEARMS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_SWORDS) < base_skill) - SetSkill(SKILL_SWORDS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_2H_AXES) < base_skill) - SetSkill(SKILL_2H_AXES, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_2H_SWORDS) < base_skill) - SetSkill(SKILL_2H_SWORDS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_UNARMED) < base_skill) - SetSkill(SKILL_UNARMED, 0, base_skill, base_skill); - } } uint32 Player::GetPhaseMaskForSpawn() const @@ -24871,6 +25176,9 @@ void Player::HandleFall(MovementInfo const& movementInfo) { uint32 damage = (uint32)(damageperc * GetMaxHealth()*sWorld->getRate(RATE_DAMAGE_FALL)); + if (GetCommandStatus(CHEAT_GOD)) + damage = 0; + float height = movementInfo.pos.m_positionZ; UpdateGroundPositionZ(movementInfo.pos.m_positionX, movementInfo.pos.m_positionY, height); @@ -26517,3 +26825,8 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy return pet; } + +bool Player::IsLoading() const +{ + return GetSession()->PlayerLoading(); +} diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1f5f9fee7d4..a146b5d672a 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -29,6 +29,7 @@ #include "SpellMgr.h" #include "Unit.h" +#include <limits> #include <string> #include <vector> @@ -121,8 +122,8 @@ struct SpellModifier Aura* const ownerAura; }; -typedef UNORDERED_MAP<uint32, PlayerTalent*> PlayerTalentMap; -typedef UNORDERED_MAP<uint32, PlayerSpell*> PlayerSpellMap; +typedef std::unordered_map<uint32, PlayerTalent*> PlayerTalentMap; +typedef std::unordered_map<uint32, PlayerSpell*> PlayerSpellMap; typedef std::list<SpellModifier*> SpellModList; typedef std::list<uint64> WhisperListContainer; @@ -134,7 +135,7 @@ struct SpellCooldown }; typedef std::map<uint32, SpellCooldown> SpellCooldowns; -typedef UNORDERED_MAP<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap; +typedef std::unordered_map<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap; enum TrainerSpellState { @@ -248,6 +249,14 @@ struct PlayerCreateInfoAction typedef std::list<PlayerCreateInfoAction> PlayerCreateInfoActions; +struct PlayerCreateInfoSkill +{ + uint16 SkillId; + uint16 Rank; +}; + +typedef std::list<PlayerCreateInfoSkill> PlayerCreateInfoSkills; + struct PlayerInfo { // existence checked by displayId != 0 @@ -262,8 +271,9 @@ struct PlayerInfo uint16 displayId_m; uint16 displayId_f; PlayerCreateInfoItems item; - PlayerCreateInfoSpells spell; + PlayerCreateInfoSpells customSpells; PlayerCreateInfoActions action; + PlayerCreateInfoSkills skills; PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1 }; @@ -551,7 +561,7 @@ struct SkillStatusData SkillUpdateState uState; }; -typedef UNORDERED_MAP<uint32, SkillStatusData> SkillStatusMap; +typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap; class Quest; class Spell; @@ -728,9 +738,10 @@ class InstanceSave; enum RestType { - REST_TYPE_NO = 0, - REST_TYPE_IN_TAVERN = 1, - REST_TYPE_IN_CITY = 2 + REST_TYPE_NO = 0, + REST_TYPE_IN_TAVERN = 1, + REST_TYPE_IN_CITY = 2, + REST_TYPE_IN_FACTION_AREA = 3 // used with AREA_FLAG_REST_ZONE_* }; enum TeleportToOptions @@ -824,7 +835,8 @@ enum PlayerDelayedOperations // Player summoning auto-decline time (in secs) #define MAX_PLAYER_SUMMON_DELAY (2*MINUTE) -#define MAX_MONEY_AMOUNT (0x7FFFFFFF-1) +// Maximum money amount : 2^31 - 1 +extern uint32 const MAX_MONEY_AMOUNT; struct InstancePlayerBind { @@ -840,6 +852,7 @@ struct AccessRequirement { uint8 levelMin; uint8 levelMax; + uint16 item_level; uint32 item; uint32 item2; uint32 quest_A; @@ -914,7 +927,7 @@ class PlayerTaxi bool SetTaximaskNode(uint32 nodeidx) { uint8 field = uint8((nodeidx - 1) / 32); - uint32 submask = 1 << ((nodeidx-1) % 32); + uint32 submask = 1 << ((nodeidx - 1) % 32); if ((m_taximask[field] & submask) != submask) { m_taximask[field] |= submask; @@ -947,7 +960,7 @@ class PlayerTaxi std::deque<uint32> m_TaxiDestinations; }; -std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); +std::ostringstream& operator << (std::ostringstream& ss, PlayerTaxi const& taxi); class Player; @@ -1382,9 +1395,11 @@ class Player : public Unit, public GridObject<Player> bool TakeQuestSourceItem(uint32 questId, bool msg); bool GetQuestRewardStatus(uint32 quest_id) const; QuestStatus GetQuestStatus(uint32 quest_id) const; - void SetQuestStatus(uint32 quest_id, QuestStatus status); - void RemoveActiveQuest(uint32 quest_id); - void RemoveRewardedQuest(uint32 quest_id); + void SetQuestStatus(uint32 questId, QuestStatus status, bool update = true); + void RemoveActiveQuest(uint32 questId, bool update = true); + void RemoveRewardedQuest(uint32 questId, bool update = true); + void SendQuestUpdate(uint32 questId); + QuestGiverStatus GetQuestDialogStatus(Object* questGiver); void SetDailyQuestStatus(uint32 quest_id); void SetWeeklyQuestStatus(uint32 quest_id); @@ -1508,7 +1523,7 @@ class Player : public Unit, public GridObject<Player> Unit* GetSelectedUnit() const; Player* GetSelectedPlayer() const; - void SetTarget(uint64 /*guid*/) OVERRIDE { } /// Used for serverside target changes, does not apply to players + void SetTarget(uint64 /*guid*/) override { } /// Used for serverside target changes, does not apply to players void SetSelection(uint64 guid) { SetUInt64Value(UNIT_FIELD_TARGET, guid); } uint8 GetComboPoints() const { return m_comboPoints; } @@ -1541,7 +1556,7 @@ class Player : public Unit, public GridObject<Player> uint8 unReadMails; time_t m_nextMailDelivereTime; - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; ItemMap mMitems; //template defined in objectmgr.cpp @@ -1567,7 +1582,9 @@ class Player : public Unit, public GridObject<Player> void learnSpell(uint32 spell_id, bool dependent); void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); void resetSpells(bool myClassOnly = false); - void learnDefaultSpells(); + void LearnCustomSpells(); + void LearnDefaultSkills(); + void LearnDefaultSkill(uint32 skillId, uint16 rank); void learnQuestRewardedSpells(); void learnQuestRewardedSpells(Quest const* quest); void learnSpellHighRank(uint32 spellid); @@ -1630,6 +1647,7 @@ class Player : public Unit, public GridObject<Player> uint32 GetSpellCooldownDelay(uint32 spell_id) const; void AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 itemId, Spell* spell = NULL, bool infinityCooldown = false); void AddSpellCooldown(uint32 spell_id, uint32 itemid, time_t end_time); + void ModifySpellCooldown(uint32 spellId, int32 cooldown); void SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId = 0, Spell* spell = NULL, bool setCooldown = true); void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs); void RemoveSpellCooldown(uint32 spell_id, bool update = false); @@ -1649,9 +1667,9 @@ class Player : public Unit, public GridObject<Player> void setResurrectRequestData(uint64 guid, uint32 mapId, float X, float Y, float Z, uint32 health, uint32 mana); void clearResurrectRequestData() { setResurrectRequestData(0, 0, 0.0f, 0.0f, 0.0f, 0, 0); } - bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; } - bool isRessurectRequested() const { return m_resurrectGUID != 0; } - void ResurectUsingRequestData(); + bool isResurrectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; } + bool isResurrectRequested() const { return m_resurrectGUID != 0; } + void ResurrectUsingRequestData(); uint8 getCinematic() { return m_cinematic; } void setCinematic(uint8 cine) { m_cinematic = cine; } @@ -1669,6 +1687,7 @@ class Player : public Unit, public GridObject<Player> void UpdatePvP(bool state, bool override=false); void UpdateZone(uint32 newZone, uint32 newArea); void UpdateArea(uint32 newArea); + void SetNeedsZoneUpdate(bool needsUpdate) { m_needsZoneUpdate = needsUpdate; } void UpdateZoneDependentAuras(uint32 zone_id); // zones void UpdateAreaDependentAuras(uint32 area_id); // subzones @@ -1754,7 +1773,7 @@ class Player : public Unit, public GridObject<Player> void UpdateRating(CombatRating cr); void UpdateAllRatings(); - void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) OVERRIDE; + void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) override; void UpdateDefenseBonusesMod(); inline void RecalculateRating(CombatRating cr) { ApplyRatingMod(cr, 0, true);} @@ -1894,7 +1913,7 @@ class Player : public Unit, public GridObject<Player> bool IsAtRecruitAFriendDistance(WorldObject const* pOther) const; void RewardPlayerAndGroupAtKill(Unit* victim, bool isBattleGround); void RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewardSource); - bool isHonorOrXPTarget(Unit* victim); + bool isHonorOrXPTarget(Unit* victim) const; bool GetsRecruitAFriendBonus(bool forXP); uint8 GetGrantableLevels() { return m_grantableLevels; } @@ -2166,7 +2185,7 @@ class Player : public Unit, public GridObject<Player> /*** INSTANCE SYSTEM ***/ /*********************************************************/ - typedef UNORDERED_MAP< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap; + typedef std::unordered_map< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap; void UpdateHomebindTime(uint32 time); @@ -2263,8 +2282,8 @@ class Player : public Unit, public GridObject<Player> void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry); void CompletedAchievement(AchievementEntry const* entry); - bool HasTitle(uint32 bitIndex); - bool HasTitle(CharTitlesEntry const* title) { return HasTitle(title->bit_index); } + bool HasTitle(uint32 bitIndex) const; + bool HasTitle(CharTitlesEntry const* title) const { return HasTitle(title->bit_index); } void SetTitle(CharTitlesEntry const* title, bool lost = false); //bool isActiveObject() const { return true; } @@ -2296,6 +2315,8 @@ class Player : public Unit, public GridObject<Player> std::string GetMapAreaAndZoneString(); std::string GetCoordsMapAreaAndZoneString(); + bool IsLoading() const; + protected: // Gamemaster whisper whitelist WhisperListContainer WhisperList; @@ -2328,7 +2349,7 @@ class Player : public Unit, public GridObject<Player> //We allow only one timed quest active at the same time. Below can then be simple value instead of set. typedef std::set<uint32> QuestSet; typedef std::set<uint32> SeasonalQuestSet; - typedef UNORDERED_MAP<uint32, SeasonalQuestSet> SeasonalEventQuestMap; + typedef std::unordered_map<uint32, SeasonalQuestSet> SeasonalEventQuestMap; QuestSet m_timedquests; QuestSet m_weeklyquests; QuestSet m_monthlyquests; @@ -2556,6 +2577,8 @@ class Player : public Unit, public GridObject<Player> uint8 m_grantableLevels; + bool m_needsZoneUpdate; + private: // internal common parts for CanStore/StoreItem functions InventoryResult CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const; @@ -2624,8 +2647,8 @@ class Player : public Unit, public GridObject<Player> uint32 _activeCheats; }; -void AddItemsSetItem(Player*player, Item* item); -void RemoveItemsSetItem(Player*player, ItemTemplate const* proto); +void AddItemsSetItem(Player* player, Item* item); +void RemoveItemsSetItem(Player* player, ItemTemplate const* proto); // "the bodies of template functions must be made available in a header file" template <class T> T Player::ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell* spell) diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index 8c8e470f80b..25315a30da1 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -19,7 +19,7 @@ #include "SocialMgr.h" #include "DatabaseEnv.h" -#include "Opcodes.h" +#include "WorldSession.h" #include "WorldPacket.h" #include "Player.h" #include "ObjectMgr.h" diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h index 6364157982e..da0398f3a96 100644 --- a/src/server/game/Entities/Totem/Totem.h +++ b/src/server/game/Entities/Totem/Totem.h @@ -53,7 +53,7 @@ class Totem : public Minion void UpdateMaxHealth() { } void UpdateMaxPower(Powers /*power*/) { } void UpdateAttackPowerAndDamage(bool /*ranged*/) { } - void UpdateDamagePhysical(WeaponAttackType /*attType*/) OVERRIDE { } + void UpdateDamagePhysical(WeaponAttackType /*attType*/) override { } bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index f8c38d32390..d907274f8d1 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -31,10 +31,11 @@ #include "Player.h" #include "Cell.h" #include "CellImpl.h" +#include "Totem.h" Transport::Transport() : GameObject(), _transportInfo(NULL), _isMoving(true), _pendingStop(false), - _triggeredArrivalEvent(false), _triggeredDepartureEvent(false) + _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengerTeleportItr(_passengers.begin()) { m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION; } @@ -84,8 +85,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa _triggeredDepartureEvent = false; m_goValue.Transport.PathProgress = 0; - SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); - SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); + SetObjectScale(goinfo->size); + SetFaction(goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); SetPeriod(tInfo->pathTime); SetEntry(goinfo->entry); @@ -95,9 +96,23 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa SetGoAnimProgress(animprogress); SetName(goinfo->name); UpdateRotationFields(0.0f, 1.0f); + + m_model = GameObjectModel::Create(*this); return true; } +void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/) +{ + UnloadStaticPassengers(); + while (!_passengers.empty()) + { + WorldObject* obj = *_passengers.begin(); + RemovePassenger(obj); + } + + GameObject::CleanupsBeforeDelete(finalCleanup); +} + void Transport::Update(uint32 diff) { uint32 const positionUpdateDelay = 200; @@ -192,8 +207,14 @@ void Transport::Update(uint32 diff) 3. transport moves from active to inactive grid 4. the grid that transport is currently in unloads */ - if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2. + bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY()); + + if (_staticPassengers.empty() && gridActive) // 2. LoadStaticPassengers(); + else if (!_staticPassengers.empty() && !gridActive) + // 4. - if transports stopped on grid edge, some passengers can remain in active grids + // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active + UnloadStaticPassengers(); } } @@ -202,8 +223,14 @@ void Transport::Update(uint32 diff) void Transport::AddPassenger(WorldObject* passenger) { + if (!IsInWorld()) + return; + if (_passengers.insert(passenger).second) { + passenger->SetTransport(this); + passenger->m_movementInfo.AddMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + passenger->m_movementInfo.transport.guid = GetGUID(); TC_LOG_DEBUG("entities.transport", "Object %s boarded transport %s.", passenger->GetName().c_str(), GetName().c_str()); if (Player* plr = passenger->ToPlayer()) @@ -213,8 +240,27 @@ void Transport::AddPassenger(WorldObject* passenger) void Transport::RemovePassenger(WorldObject* passenger) { - if (_passengers.erase(passenger) || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload + bool erased = false; + if (_passengerTeleportItr != _passengers.end()) { + PassengerSet::iterator itr = _passengers.find(passenger); + if (itr != _passengers.end()) + { + if (itr == _passengerTeleportItr) + ++_passengerTeleportItr; + + _passengers.erase(itr); + erased = true; + } + } + else + erased = _passengers.erase(passenger) > 0; + + if (erased || _staticPassengers.erase(passenger)) // static passenger can remove itself in case of grid unload + { + passenger->SetTransport(NULL); + passenger->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + passenger->m_movementInfo.transport.Reset(); TC_LOG_DEBUG("entities.transport", "Object %s removed from transport %s.", passenger->GetName().c_str(), GetName().c_str()); if (Player* plr = passenger->ToPlayer()) @@ -308,11 +354,131 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data return go; } +TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSummonType summonType, SummonPropertiesEntry const* properties /*= NULL*/, uint32 duration /*= 0*/, Unit* summoner /*= NULL*/, uint32 spellId /*= 0*/, uint32 vehId /*= 0*/) +{ + Map* map = FindMap(); + if (!map) + return NULL; + + uint32 mask = UNIT_MASK_SUMMON; + if (properties) + { + switch (properties->Category) + { + case SUMMON_CATEGORY_PET: + mask = UNIT_MASK_GUARDIAN; + break; + case SUMMON_CATEGORY_PUPPET: + mask = UNIT_MASK_PUPPET; + break; + case SUMMON_CATEGORY_VEHICLE: + mask = UNIT_MASK_MINION; + break; + case SUMMON_CATEGORY_WILD: + case SUMMON_CATEGORY_ALLY: + case SUMMON_CATEGORY_UNK: + { + switch (properties->Type) + { + case SUMMON_TYPE_MINION: + case SUMMON_TYPE_GUARDIAN: + case SUMMON_TYPE_GUARDIAN2: + mask = UNIT_MASK_GUARDIAN; + break; + case SUMMON_TYPE_TOTEM: + case SUMMON_TYPE_LIGHTWELL: + mask = UNIT_MASK_TOTEM; + break; + case SUMMON_TYPE_VEHICLE: + case SUMMON_TYPE_VEHICLE2: + mask = UNIT_MASK_SUMMON; + break; + case SUMMON_TYPE_MINIPET: + mask = UNIT_MASK_MINION; + break; + default: + if (properties->Flags & 512) // Mirror Image, Summon Gargoyle + mask = UNIT_MASK_GUARDIAN; + break; + } + break; + } + default: + return NULL; + } + } + + uint32 phase = PHASEMASK_NORMAL; + if (summoner) + phase = summoner->GetPhaseMask(); + + TempSummon* summon = NULL; + switch (mask) + { + case UNIT_MASK_SUMMON: + summon = new TempSummon(properties, summoner, false); + break; + case UNIT_MASK_GUARDIAN: + summon = new Guardian(properties, summoner, false); + break; + case UNIT_MASK_PUPPET: + summon = new Puppet(properties, summoner); + break; + case UNIT_MASK_TOTEM: + summon = new Totem(properties, summoner); + break; + case UNIT_MASK_MINION: + summon = new Minion(properties, summoner, false); + break; + } + + float x, y, z, o; + pos.GetPosition(x, y, z, o); + CalculatePassengerPosition(x, y, z, &o); + + if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId)) + { + delete summon; + return NULL; + } + + summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); + + summon->SetTransport(this); + summon->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + summon->m_movementInfo.transport.guid = GetGUID(); + summon->m_movementInfo.transport.pos.Relocate(pos); + summon->Relocate(x, y, z, o); + summon->SetHomePosition(x, y, z, o); + summon->SetTransportHomePosition(pos); + + /// @HACK - transport models are not added to map's dynamic LoS calculations + /// because the current GameObjectModel cannot be moved without recreating + summon->AddUnitState(UNIT_STATE_IGNORE_PATHFINDING); + + summon->InitStats(duration); + + if (!map->AddToMap<Creature>(summon)) + { + delete summon; + return NULL; + } + + _staticPassengers.insert(summon); + + summon->InitSummon(); + summon->SetTempSummonType(summonType); + + return summon; +} + void Transport::UpdatePosition(float x, float y, float z, float o) { bool newActive = GetMap()->IsGridLoaded(x, y); + Cell oldCell(GetPositionX(), GetPositionY()); Relocate(x, y, z, o); + UpdateModelPosition(); UpdatePassengerPositions(_passengers); @@ -324,7 +490,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o) */ if (_staticPassengers.empty() && newActive) // 1. LoadStaticPassengers(); - else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. + else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. UnloadStaticPassengers(); else UpdatePassengerPositions(_staticPassengers); @@ -423,9 +589,9 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl GetMap()->RemoveFromMap<Transport>(this, false); SetMap(newMap); - for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end();) + for (_passengerTeleportItr = _passengers.begin(); _passengerTeleportItr != _passengers.end();) { - WorldObject* obj = (*itr++); + WorldObject* obj = (*_passengerTeleportItr++); float destX, destY, destZ, destO; obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO); @@ -448,7 +614,10 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl } case TYPEID_PLAYER: if (!obj->ToPlayer()->TeleportTo(newMapid, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT)) - _passengers.erase(obj); + RemovePassenger(obj); + break; + case TYPEID_DYNAMICOBJECT: + obj->AddObjectToRemoveList(); break; default: break; @@ -456,13 +625,14 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl } Relocate(x, y, z, o); + UpdateModelPosition(); GetMap()->AddToMap<Transport>(this); return true; } else { // Teleport players, they need to know it - for (std::set<WorldObject*>::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr) + for (PassengerSet::iterator itr = _passengers.begin(); itr != _passengers.end(); ++itr) { if ((*itr)->GetTypeId() == TYPEID_PLAYER) { @@ -479,9 +649,9 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl } } -void Transport::UpdatePassengerPositions(std::set<WorldObject*>& passengers) +void Transport::UpdatePassengerPositions(PassengerSet& passengers) { - for (std::set<WorldObject*>::iterator itr = passengers.begin(); itr != passengers.end(); ++itr) + for (PassengerSet::iterator itr = passengers.begin(); itr != passengers.end(); ++itr) { WorldObject* passenger = *itr; // transport teleported but passenger not yet (can happen for players) @@ -518,6 +688,9 @@ void Transport::UpdatePassengerPositions(std::set<WorldObject*>& passengers) case TYPEID_GAMEOBJECT: GetMap()->GameObjectRelocation(passenger->ToGameObject(), x, y, z, o, false); break; + case TYPEID_DYNAMICOBJECT: + GetMap()->DynamicObjectRelocation(passenger->ToDynObject(), x, y, z, o); + break; default: break; } diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 55f4daddecc..e644417f1ac 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -31,28 +31,50 @@ class Transport : public GameObject, public TransportBase Transport(); public: + typedef std::set<WorldObject*> PassengerSet; + ~Transport(); bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress); - void Update(uint32 diff); + void CleanupsBeforeDelete(bool finalCleanup = true) override; + + void Update(uint32 diff) override; - void BuildUpdate(UpdateDataMapType& data_map); + void BuildUpdate(UpdateDataMapType& data_map) override; void AddPassenger(WorldObject* passenger); void RemovePassenger(WorldObject* passenger); - std::set<WorldObject*> const& GetPassengers() const { return _passengers; } + PassengerSet const& GetPassengers() const { return _passengers; } Creature* CreateNPCPassenger(uint32 guid, CreatureData const* data); GameObject* CreateGOPassenger(uint32 guid, GameObjectData const* data); + /** + * @fn bool Transport::SummonPassenger(uint64, Position const&, TempSummonType, SummonPropertiesEntry const*, uint32, Unit*, uint32, uint32) + * + * @brief Temporarily summons a creature as passenger on this transport. + * + * @param entry Id of the creature from creature_template table + * @param pos Initial position of the creature (transport offsets) + * @param summonType + * @param properties + * @param duration Determines how long the creauture will exist in world depending on @summonType (in milliseconds) + * @param summoner Summoner of the creature (for AI purposes) + * @param spellId + * @param vehId If set, this value overrides vehicle id from creature_template that the creature will use + * + * @return Summoned creature. + */ + TempSummon* SummonPassenger(uint32 entry, Position const& pos, TempSummonType summonType, SummonPropertiesEntry const* properties = NULL, uint32 duration = 0, Unit* summoner = NULL, uint32 spellId = 0, uint32 vehId = 0); + /// This method transforms supplied transport offsets into global coordinates - void CalculatePassengerPosition(float& x, float& y, float& z, float* o /*= NULL*/) const + void CalculatePassengerPosition(float& x, float& y, float& z, float* o = NULL) const override { TransportBase::CalculatePassengerPosition(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); } /// This method transforms supplied global coordinates into local offsets - void CalculatePassengerOffset(float& x, float& y, float& z, float* o /*= NULL*/) const + void CalculatePassengerOffset(float& x, float& y, float& z, float* o = NULL) const override { TransportBase::CalculatePassengerOffset(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); } @@ -79,7 +101,7 @@ class Transport : public GameObject, public TransportBase void MoveToNextWaypoint(); float CalculateSegmentPos(float perc); bool TeleportTransport(uint32 newMapid, float x, float y, float z, float o); - void UpdatePassengerPositions(std::set<WorldObject*>& passengers); + void UpdatePassengerPositions(PassengerSet& passengers); void DoEventIfAny(KeyFrame const& node, bool departure); //! Helpers to know if stop frame was reached @@ -98,8 +120,9 @@ class Transport : public GameObject, public TransportBase bool _triggeredArrivalEvent; bool _triggeredDepartureEvent; - std::set<WorldObject*> _passengers; - std::set<WorldObject*> _staticPassengers; + PassengerSet _passengers; + PassengerSet::iterator _passengerTeleportItr; + PassengerSet _staticPassengers; }; #endif diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 3afa6b016d2..04136221d0d 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -1149,7 +1149,7 @@ bool Guardian::UpdateStats(Stats stat) if (itr != ToPet()->m_spells.end()) // If pet has Wild Hunt { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value AddPct(mod, spellInfo->Effects[EFFECT_0].CalcValue()); } } @@ -1318,7 +1318,7 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) if (itr != ToPet()->m_spells.end()) // If pet has Wild Hunt { - SpellInfo const* sProto = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value + SpellInfo const* sProto = sSpellMgr->EnsureSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value mod += CalculatePct(1.0f, sProto->Effects[1].CalcValue()); } } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e0bf7019acb..902d99d888b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -21,6 +21,7 @@ #include "Battlefield.h" #include "BattlefieldMgr.h" #include "Battleground.h" +#include "BattlegroundScore.h" #include "CellImpl.h" #include "ConditionMgr.h" #include "CreatureAI.h" @@ -155,11 +156,6 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget, _damageInfo(damageInfo), _healInfo(healInfo) { } -// we can disable this warning for this since it only -// causes undefined behavior when passed to the base class constructor -#ifdef _MSC_VER -#pragma warning(disable:4355) -#endif Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0), IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(0), @@ -169,9 +165,6 @@ Unit::Unit(bool isWorldObject) : m_vehicle(NULL), m_vehicleKit(NULL), m_unitTypeMask(UNIT_MASK_NONE), m_HostileRefManager(this), _lastDamagedTime(0) { -#ifdef _MSC_VER -#pragma warning(default:4355) -#endif m_objectType |= TYPEMASK_UNIT; m_objectTypeId = TYPEID_UNIT; @@ -782,7 +775,8 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (damagetype != NODAMAGE && damage) { - if (victim != this && victim->GetTypeId() == TYPEID_PLAYER) // does not support creature push_back + if (victim != this && victim->GetTypeId() == TYPEID_PLAYER && // does not support creature push_back + (!spellProto || !(spellProto->AttributesEx7 & SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE))) { if (damagetype != DOT) if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL]) @@ -985,86 +979,90 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama SpellSchoolMask damageSchoolMask = SpellSchoolMask(damageInfo->schoolMask); uint32 crTypeMask = victim->GetCreatureTypeMask(); - if (IsDamageReducedByArmor(damageSchoolMask, spellInfo)) - damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType); - - bool blocked = false; - // Per-school calc - switch (spellInfo->DmgClass) + // Spells with SPELL_ATTR4_FIXED_DAMAGE ignore resilience because their damage is based off another spell's damage. + if (!(spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) { - // Melee and Ranged Spells - case SPELL_DAMAGE_CLASS_RANGED: - case SPELL_DAMAGE_CLASS_MELEE: + if (IsDamageReducedByArmor(damageSchoolMask, spellInfo)) + damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType); + + bool blocked = false; + // Per-school calc + switch (spellInfo->DmgClass) { - // Physical Damage - if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL) + // Melee and Ranged Spells + case SPELL_DAMAGE_CLASS_RANGED: + case SPELL_DAMAGE_CLASS_MELEE: { - // Get blocked status - blocked = isSpellBlocked(victim, spellInfo, attackType); - } + // Physical Damage + if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL) + { + // Get blocked status + blocked = isSpellBlocked(victim, spellInfo, attackType); + } - if (crit) - { - damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT; - - // Calculate crit bonus - uint32 crit_bonus = damage; - // Apply crit_damage bonus for melee spells - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus); - damage += crit_bonus; - - // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE - float critPctDamageMod = 0.0f; - if (attackType == RANGED_ATTACK) - critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE); - else - critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE); + if (crit) + { + damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT; + + // Calculate crit bonus + uint32 crit_bonus = damage; + // Apply crit_damage bonus for melee spells + if (Player* modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus); + damage += crit_bonus; + + // Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE + float critPctDamageMod = 0.0f; + if (attackType == RANGED_ATTACK) + critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE); + else + critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE); - // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS - critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask()) - 1.0f) * 100; + // Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS + critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, spellInfo->GetSchoolMask()) - 1.0f) * 100; - // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS - critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask); + // Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS + critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask); - if (critPctDamageMod != 0) - AddPct(damage, critPctDamageMod); - } + if (critPctDamageMod != 0) + AddPct(damage, critPctDamageMod); + } - // Spell weapon based damage CAN BE crit & blocked at same time - if (blocked) - { - damageInfo->blocked = victim->GetShieldBlockValue(); - // double blocked amount if block is critical - if (victim->isBlockCritical()) - damageInfo->blocked += damageInfo->blocked; - if (damage < int32(damageInfo->blocked)) - damageInfo->blocked = uint32(damage); - damage -= damageInfo->blocked; - } + // Spell weapon based damage CAN BE crit & blocked at same time + if (blocked) + { + damageInfo->blocked = victim->GetShieldBlockValue(); + // double blocked amount if block is critical + if (victim->isBlockCritical()) + damageInfo->blocked += damageInfo->blocked; + if (damage < int32(damageInfo->blocked)) + damageInfo->blocked = uint32(damage); + damage -= damageInfo->blocked; + } - if (attackType != RANGED_ATTACK) - ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_MELEE); - else - ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_RANGED); - break; - } - // Magical Attacks - case SPELL_DAMAGE_CLASS_NONE: - case SPELL_DAMAGE_CLASS_MAGIC: - { - // If crit add critical bonus - if (crit) - { - damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT; - damage = SpellCriticalDamageBonus(spellInfo, damage, victim); + if (attackType != RANGED_ATTACK) + ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_MELEE); + else + ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_RANGED); + break; } + // Magical Attacks + case SPELL_DAMAGE_CLASS_NONE: + case SPELL_DAMAGE_CLASS_MAGIC: + { + // If crit add critical bonus + if (crit) + { + damageInfo->HitInfo |= SPELL_HIT_TYPE_CRIT; + damage = SpellCriticalDamageBonus(spellInfo, damage, victim); + } - ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_SPELL); - break; + ApplyResilience(victim, NULL, &damage, crit, CR_CRIT_TAKEN_SPELL); + break; + } + default: + break; } - default: - break; } // Script Hook For CalculateSpellDamageTaken -- Allow scripts to change the Damage post class mitigation calculations @@ -1286,10 +1284,8 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam damageInfo->HitInfo |= HITINFO_AFFECTS_VICTIM; int32 resilienceReduction = damageInfo->damage; - if (attackType != RANGED_ATTACK) - ApplyResilience(victim, NULL, &resilienceReduction, (damageInfo->hitOutCome == MELEE_HIT_CRIT), CR_CRIT_TAKEN_MELEE); - else - ApplyResilience(victim, NULL, &resilienceReduction, (damageInfo->hitOutCome == MELEE_HIT_CRIT), CR_CRIT_TAKEN_RANGED); + // attackType is checked already for BASE_ATTACK or OFF_ATTACK so it can't be RANGED_ATTACK here + ApplyResilience(victim, NULL, &resilienceReduction, (damageInfo->hitOutCome == MELEE_HIT_CRIT), CR_CRIT_TAKEN_MELEE); resilienceReduction = damageInfo->damage - resilienceReduction; damageInfo->damage -= resilienceReduction; damageInfo->cleanDamage += resilienceReduction; @@ -1844,14 +1840,15 @@ void Unit::CalcAbsorbResist(Unit* victim, SpellSchoolMask schoolMask, DamageEffe splitDamage = RoundToInterval(splitDamage, uint32(0), uint32(dmgInfo.GetDamage())); dmgInfo.AbsorbDamage(splitDamage); - uint32 splitted = splitDamage; uint32 split_absorb = 0; - DealDamageMods(caster, splitted, &split_absorb); + DealDamageMods(caster, splitDamage, &split_absorb); - SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitted, schoolMask, split_absorb, 0, false, 0, false); + SendSpellNonMeleeDamageLog(caster, (*itr)->GetSpellInfo()->Id, splitDamage, schoolMask, split_absorb, 0, false, 0, false); - CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL); - DealDamage(caster, splitted, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false); + CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL); + DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, schoolMask, (*itr)->GetSpellInfo(), false); + // break 'Fear' and similar auras + caster->ProcDamageAndSpellFor(true, this, PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG, PROC_EX_NORMAL_HIT, BASE_ATTACK, (*itr)->GetSpellInfo(), splitDamage); } } @@ -2517,7 +2514,7 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo // Chance hit from victim SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE auras modHitChance += victim->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE, schoolMask); // Reduce spell hit chance for Area of effect spells from victim SPELL_AURA_MOD_AOE_AVOIDANCE aura - if (spellInfo->IsTargetingArea()) + if (spellInfo->IsAffectingArea()) modHitChance -= victim->GetTotalAuraModifier(SPELL_AURA_MOD_AOE_AVOIDANCE); // Decrease hit chance from victim rating bonus @@ -2837,12 +2834,10 @@ uint32 Unit::GetWeaponSkillValue (WeaponAttackType attType, Unit const* target) if (IsInFeralForm()) return GetMaxSkillValueForLevel(); // always maximized SKILL_FERAL_COMBAT in fact - // weapon skill or (unarmed for base attack and fist weapons) - uint32 skill; - if (item && item->GetSkill() != SKILL_FIST_WEAPONS) + // weapon skill or (unarmed for base attack) + uint32 skill = SKILL_UNARMED; + if (item) skill = item->GetSkill(); - else - skill = SKILL_UNARMED; // in PvP use full skill instead current skill value value = (target && target->IsControlledByPlayer()) @@ -3356,7 +3351,7 @@ void Unit::_ApplyAuraEffect(Aura* aura, uint8 effIndex) AuraApplication * aurApp = aura->GetApplicationOfTarget(GetGUID()); ASSERT(aurApp); if (!aurApp->GetEffectMask()) - _ApplyAura(aurApp, 1<<effIndex); + _ApplyAura(aurApp, 1 << effIndex); else aurApp->_HandleEffect(effIndex, true); } @@ -3389,11 +3384,12 @@ void Unit::_ApplyAura(AuraApplication * aurApp, uint8 effMask) return; aura->HandleAuraSpecificMods(aurApp, caster, true, false); + aura->HandleAuraSpecificPeriodics(aurApp, caster); // apply effects of the aura for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - if (effMask & 1<<i && (!aurApp->GetRemoveMode())) + if (effMask & 1 << i && (!aurApp->GetRemoveMode())) aurApp->_HandleEffect(i, true); } } @@ -3506,6 +3502,19 @@ void Unit::_RemoveNoStackAurasDueToAura(Aura* aura) if (spellProto->IsPassiveStackableWithRanks()) return; + if (!IsHighestExclusiveAura(aura)) + { + if (!aura->GetSpellInfo()->IsAffectingArea()) + { + Unit* caster = aura->GetCaster(); + if (caster && caster->GetTypeId() == TYPEID_PLAYER) + Spell::SendCastResult(caster->ToPlayer(), aura->GetSpellInfo(), 1, SPELL_FAILED_AURA_BOUNCED); + } + + RemoveAura(aura); + return; + } + bool remove = false; for (AuraApplicationMap::iterator i = m_appliedAuras.begin(); i != m_appliedAuras.end(); ++i) { @@ -3835,6 +3844,7 @@ void Unit::RemoveAurasByType(AuraType auraType, uint64 casterGUID, Aura* except, { Aura* aura = (*iter)->GetBase(); AuraApplication * aurApp = aura->GetApplicationOfTarget(GetGUID()); + ASSERT(aurApp); ++iter; if (aura != except && (!casterGUID || aura->GetCasterGUID() == casterGUID) @@ -4484,10 +4494,13 @@ uint32 Unit::GetDoTsByCaster(uint64 casterGUID) const int32 Unit::GetTotalAuraModifier(AuraType auratype) const { + AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); + if (mTotalAuraList.empty()) + return 0; + std::map<SpellGroup, int32> SameEffectSpellGroup; int32 modifier = 0; - AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype); for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i) if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup)) modifier += (*i)->GetAmount(); @@ -6036,11 +6049,11 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 34299; if (triggeredByAura->GetCasterGUID() != GetGUID()) break; - int32 basepoints1 = triggerAmount * 2; + int32 basepoints1 = CalculatePct(GetMaxPower(Powers(POWER_MANA)), triggerAmount * 2); // Improved Leader of the Pack // Check cooldown of heal spell cooldown if (GetTypeId() == TYPEID_PLAYER && !ToPlayer()->HasSpellCooldown(34299)) - CastCustomSpell(this, 60889, &basepoints1, 0, 0, true, 0, triggeredByAura); + CastCustomSpell(this, 68285, &basepoints1, 0, 0, true, 0, triggeredByAura); break; } // Healing Touch (Dreamwalker Raiment set) @@ -6362,15 +6375,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere CastSpell(this, 57669, true, castItem, triggeredByAura); break; } - // Sanctified Wrath - if (dummySpell->SpellIconID == 3029) - { - triggered_spell_id = 57318; - target = this; - basepoints0 = triggerAmount; - CastCustomSpell(target, triggered_spell_id, &basepoints0, &basepoints0, NULL, true, castItem, triggeredByAura); - return true; - } // Righteous Vengeance if (dummySpell->SpellIconID == 3025) { @@ -6885,31 +6889,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } break; } - // Item - Shaman T10 Elemental 2P Bonus - case 70811: - { - // Lightning Bolt & Chain Lightning - if (procSpell->SpellFamilyFlags[0] & 0x3) - { - if (ToPlayer()->HasSpellCooldown(16166)) - { - uint32 newCooldownDelay = ToPlayer()->GetSpellCooldownDelay(16166); - if (newCooldownDelay < 3) - newCooldownDelay = 0; - else - newCooldownDelay -= 2; - ToPlayer()->AddSpellCooldown(16166, 0, uint32(time(NULL) + newCooldownDelay)); - - WorldPacket data(SMSG_MODIFY_COOLDOWN, 4+8+4); - data << uint32(16166); // Spell ID - data << uint64(GetGUID()); // Player GUID - data << int32(-2000); // Cooldown mod in milliseconds - ToPlayer()->GetSession()->SendPacket(&data); - return true; - } - } - return false; - } // Item - Shaman T10 Elemental 4P Bonus case 70817: { @@ -7708,7 +7687,8 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg ? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL; // Try handle unknown trigger spells - if (sSpellMgr->GetSpellInfo(trigger_spell_id) == NULL) + // triggered spells exists only in serverside spell_dbc + /// @todo: reverify and move these spells to spellscripts { switch (auraSpellInfo->SpellFamilyName) { @@ -8169,23 +8149,14 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg if (GetTypeId() != TYPEID_PLAYER) return false; + float averageDmg = 0; // now compute approximate weapon damage by formula from wowwiki.com - Item* item = NULL; if (procFlags & PROC_FLAG_DONE_OFFHAND_ATTACK) - item = ToPlayer()->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + averageDmg = (GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE) + GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE)) / 2; else - item = ToPlayer()->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); - - // dunno if it's really needed but will prevent any possible crashes - if (!item) - return false; + averageDmg = (GetFloatValue(UNIT_FIELD_MINDAMAGE) + GetFloatValue(UNIT_FIELD_MAXDAMAGE)) / 2; - ItemTemplate const* weapon = item->GetTemplate(); - - float weaponDPS = weapon->getDPS(); - float attackPower = GetTotalAttackPowerValue(BASE_ATTACK) / 14.0f; - float weaponSpeed = float(weapon->Delay) / 1000.0f; - basepoints0 = int32((weaponDPS + attackPower) * weaponSpeed); + basepoints0 = int32(averageDmg); break; } // Persistent Shield (Scarab Brooch trinket) @@ -8643,6 +8614,9 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit* victim, uint32 /*damage*/, Au void Unit::setPowerType(Powers new_powertype) { + if (getPowerType() == new_powertype) + return; + SetByteValue(UNIT_FIELD_BYTES_0, 3, new_powertype); if (GetTypeId() == TYPEID_PLAYER) @@ -8660,25 +8634,30 @@ void Unit::setPowerType(Powers new_powertype) } } + float powerMultiplier = 1.0f; + if (!IsPet()) + if (Creature* creature = ToCreature()) + powerMultiplier = creature->GetCreatureTemplate()->ModMana; + switch (new_powertype) { default: case POWER_MANA: break; case POWER_RAGE: - SetMaxPower(POWER_RAGE, GetCreatePowers(POWER_RAGE)); + SetMaxPower(POWER_RAGE, uint32(std::ceil(GetCreatePowers(POWER_RAGE) * powerMultiplier))); SetPower(POWER_RAGE, 0); break; case POWER_FOCUS: - SetMaxPower(POWER_FOCUS, GetCreatePowers(POWER_FOCUS)); - SetPower(POWER_FOCUS, GetCreatePowers(POWER_FOCUS)); + SetMaxPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier))); + SetPower(POWER_FOCUS, uint32(std::ceil(GetCreatePowers(POWER_FOCUS) * powerMultiplier))); break; case POWER_ENERGY: - SetMaxPower(POWER_ENERGY, GetCreatePowers(POWER_ENERGY)); + SetMaxPower(POWER_ENERGY, uint32(std::ceil(GetCreatePowers(POWER_ENERGY) * powerMultiplier))); break; case POWER_HAPPINESS: - SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS)); - SetPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS)); + SetMaxPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier))); + SetPower(POWER_HAPPINESS, uint32(std::ceil(GetCreatePowers(POWER_HAPPINESS) * powerMultiplier))); break; } } @@ -8716,13 +8695,28 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const if (GetCharmerOrOwnerOrSelf() == target->GetCharmerOrOwnerOrSelf()) return REP_FRIENDLY; + Player const* selfPlayerOwner = GetAffectingPlayer(); + Player const* targetPlayerOwner = target->GetAffectingPlayer(); + + // check forced reputation to support SPELL_AURA_FORCE_REACTION + if (selfPlayerOwner) + { + if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry()) + if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(targetFactionTemplateEntry)) + return *repRank; + } + else if (targetPlayerOwner) + { + if (FactionTemplateEntry const* selfFactionTemplateEntry = GetFactionTemplateEntry()) + if (ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(selfFactionTemplateEntry)) + return *repRank; + } + + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) { if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) { - Player const* selfPlayerOwner = GetAffectingPlayer(); - Player const* targetPlayerOwner = target->GetAffectingPlayer(); - if (selfPlayerOwner && targetPlayerOwner) { // always friendly to other unit controlled by player, or to the player himself @@ -9840,49 +9834,167 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin if (spellProto->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS) return pdamage; - // small exception for Deep Wounds, can't find any general rule - // should ignore ALL damage mods, they already calculated in trigger spell - if (spellProto->Id == 12721) // Deep Wounds - return pdamage; - // For totems get damage bonus from owner if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem()) if (Unit* owner = GetOwner()) return owner->SpellDamageBonusDone(victim, spellProto, pdamage, damagetype); - // Done total percent damage auras - float DoneTotalMod = 1.0f; float ApCoeffMod = 1.0f; int32 DoneTotal = 0; + // done scripted mod (take it from owner) + Unit const* owner = GetOwner() ? GetOwner() : this; + AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + { + if (!(*i)->IsAffectedOnSpell(spellProto)) + continue; + + switch ((*i)->GetMiscValue()) + { + case 4418: // Increased Shock Damage + case 4554: // Increased Lightning Damage + case 4555: // Improved Moonfire + case 5142: // Increased Lightning Damage + case 5147: // Improved Consecration / Libram of Resurgence + case 5148: // Idol of the Shooting Star + case 6008: // Increased Lightning Damage + case 8627: // Totem of Hex + { + DoneTotal += (*i)->GetAmount(); + break; + } + } + } + + // Custom scripted damage + switch (spellProto->SpellFamilyName) + { + case SPELLFAMILY_DEATHKNIGHT: + // Impurity (dummy effect) + if (GetTypeId() == TYPEID_PLAYER) + { + PlayerSpellMap playerSpells = ToPlayer()->GetSpellMap(); + for (PlayerSpellMap::const_iterator itr = playerSpells.begin(); itr != playerSpells.end(); ++itr) + { + if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->disabled) + continue; + switch (itr->first) + { + case 49220: + case 49633: + case 49635: + case 49636: + case 49638: + if (SpellInfo const* proto = sSpellMgr->GetSpellInfo(itr->first)) + AddPct(ApCoeffMod, proto->Effects[0].CalcValue()); + break; + } + } + } + break; + } + + // Done fixed damage bonus auras + int32 DoneAdvertisedBenefit = SpellBaseDamageBonusDone(spellProto->GetSchoolMask()); + // Pets just add their bonus damage to their spell damage + // note that their spell damage is just gain of their own auras + if (HasUnitTypeMask(UNIT_MASK_GUARDIAN)) + DoneAdvertisedBenefit += ((Guardian*)this)->GetBonusDamage(); + + // Check for table values + float coeff = 0; + SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id); + if (bonus) + { + if (damagetype == DOT) + { + coeff = bonus->dot_damage; + if (bonus->ap_dot_bonus > 0) + { + WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK; + float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS)); + APbonus += GetTotalAttackPowerValue(attType); + DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus); + } + } + else + { + coeff = bonus->direct_damage; + if (bonus->ap_bonus > 0) + { + WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK; + float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS)); + APbonus += GetTotalAttackPowerValue(attType); + DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus); + } + } + } + // Default calculation + if (DoneAdvertisedBenefit) + { + if (!bonus || coeff < 0) + coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack); + + float factorMod = CalculateLevelPenalty(spellProto) * stack; + + if (Player* modOwner = GetSpellModOwner()) + { + coeff *= 100.0f; + modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff); + coeff /= 100.0f; + } + DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod); + } + + // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods. + float tmpDamage = (int32(pdamage) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellDamagePctDone(victim, spellProto, damagetype)); + // apply spellmod to Done damage (flat and pct) + if (Player* modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage); + + return uint32(std::max(tmpDamage, 0.0f)); +} + +float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, DamageEffectType damagetype) const +{ + if (!spellProto || !victim || damagetype == DIRECT_DAMAGE) + return 1.0f; + + // Some spells don't benefit from pct done mods + if (spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) + return 1.0f; + + // For totems pct done mods are calculated when its calculation is run on the player in SpellDamageBonusDone. + if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem()) + return 1.0f; + + // Done total percent damage auras + float DoneTotalMod = 1.0f; + // Pet damage? if (GetTypeId() == TYPEID_UNIT && !ToCreature()->IsPet()) DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->rank); - // Some spells don't benefit from pct done mods - if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && !spellProto->IsRankOf(sSpellMgr->GetSpellInfo(12162))) + AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); + for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) { - AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); - for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) - { - if (spellProto->EquippedItemClass == -1 && (*i)->GetSpellInfo()->EquippedItemClass != -1) //prevent apply mods from weapon specific case to non weapon specific spells (Example: thunder clap and two-handed weapon specialization) - continue; + if (spellProto->EquippedItemClass == -1 && (*i)->GetSpellInfo()->EquippedItemClass != -1) //prevent apply mods from weapon specific case to non weapon specific spells (Example: thunder clap and two-handed weapon specialization) + continue; - if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) - { - if ((*i)->GetSpellInfo()->EquippedItemClass == -1) - AddPct(DoneTotalMod, (*i)->GetAmount()); - else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) - AddPct(DoneTotalMod, (*i)->GetAmount()); - else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo())) - AddPct(DoneTotalMod, (*i)->GetAmount()); - } + if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) + { + if ((*i)->GetSpellInfo()->EquippedItemClass == -1) + AddPct(DoneTotalMod, (*i)->GetAmount()); + else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) + AddPct(DoneTotalMod, (*i)->GetAmount()); + else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo())) + AddPct(DoneTotalMod, (*i)->GetAmount()); } } uint32 creatureTypeMask = victim->GetCreatureTypeMask(); - // Add flat bonus from spell damage versus - DoneTotal += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS, creatureTypeMask); + AuraEffectList const& mDamageDoneVersus = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS); for (AuraEffectList::const_iterator i = mDamageDoneVersus.begin(); i != mDamageDoneVersus.end(); ++i) if (creatureTypeMask & uint32((*i)->GetMiscValue())) @@ -9896,7 +10008,7 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin // done scripted mod (take it from owner) Unit const* owner = GetOwner() ? GetOwner() : this; - AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + AuraEffectList const& mOverrideClassScript = owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) { if (!(*i)->IsAffectedOnSpell(spellProto)) @@ -9953,18 +10065,6 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin AddPct(DoneTotalMod, (*i)->GetAmount()); break; } - case 4418: // Increased Shock Damage - case 4554: // Increased Lightning Damage - case 4555: // Improved Moonfire - case 5142: // Increased Lightning Damage - case 5147: // Improved Consecration / Libram of Resurgence - case 5148: // Idol of the Shooting Star - case 6008: // Increased Lightning Damage - case 8627: // Totem of Hex - { - DoneTotal += (*i)->GetAmount(); - break; - } // Tundra Stalker // Merciless Combat case 7277: @@ -10130,14 +10230,14 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin break; } } - // Drain Soul - increased damage for targets under 25 % HP - if (spellProto->SpellFamilyFlags[0] & 0x00004000) - if (HasAura(100001)) - DoneTotalMod *= 4; // Shadow Bite (15% increase from each dot) if (spellProto->SpellFamilyFlags[1] & 0x00400000 && IsPet()) if (uint8 count = victim->GetDoTsByCaster(GetOwnerGUID())) AddPct(DoneTotalMod, 15 * count); + + // Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage + if (spellProto->SpellFamilyFlags[0] & 0x00004000 && !victim->HealthAbovePct(25)) + DoneTotalMod *= 4; break; case SPELLFAMILY_HUNTER: // Steady Shot @@ -10152,101 +10252,15 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin if (AuraEffect* aurEff = GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, 2721, 0)) AddPct(DoneTotalMod, aurEff->GetAmount()); - // Sigil of the Vengeful Heart - if (spellProto->SpellFamilyFlags[0] & 0x2000) - if (AuraEffect* aurEff = GetAuraEffect(64962, EFFECT_1)) - AddPct(DoneTotal, aurEff->GetAmount()); - // Glacier Rot if (spellProto->SpellFamilyFlags[0] & 0x2 || spellProto->SpellFamilyFlags[1] & 0x6) if (AuraEffect* aurEff = GetDummyAuraEffect(SPELLFAMILY_DEATHKNIGHT, 196, 0)) if (victim->GetDiseasesByCaster(owner->GetGUID()) > 0) AddPct(DoneTotalMod, aurEff->GetAmount()); - - // Impurity (dummy effect) - if (GetTypeId() == TYPEID_PLAYER) - { - PlayerSpellMap playerSpells = ToPlayer()->GetSpellMap(); - for (PlayerSpellMap::const_iterator itr = playerSpells.begin(); itr != playerSpells.end(); ++itr) - { - if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->disabled) - continue; - switch (itr->first) - { - case 49220: - case 49633: - case 49635: - case 49636: - case 49638: - { - if (SpellInfo const* proto = sSpellMgr->GetSpellInfo(itr->first)) - AddPct(ApCoeffMod, proto->Effects[0].CalcValue()); - } - break; - } - } - } break; } - // Done fixed damage bonus auras - int32 DoneAdvertisedBenefit = SpellBaseDamageBonusDone(spellProto->GetSchoolMask()); - // Pets just add their bonus damage to their spell damage - // note that their spell damage is just gain of their own auras - if (HasUnitTypeMask(UNIT_MASK_GUARDIAN)) - DoneAdvertisedBenefit += ((Guardian*)this)->GetBonusDamage(); - - // Check for table values - float coeff = 0; - SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id); - if (bonus) - { - if (damagetype == DOT) - { - coeff = bonus->dot_damage; - if (bonus->ap_dot_bonus > 0) - { - WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK; - float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS)); - APbonus += GetTotalAttackPowerValue(attType); - DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus); - } - } - else - { - coeff = bonus->direct_damage; - if (bonus->ap_bonus > 0) - { - WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK; - float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS)); - APbonus += GetTotalAttackPowerValue(attType); - DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus); - } - } - } - // Default calculation - if (DoneAdvertisedBenefit) - { - if (!bonus || coeff < 0) - coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack); - - float factorMod = CalculateLevelPenalty(spellProto) * stack; - - if (Player* modOwner = GetSpellModOwner()) - { - coeff *= 100.0f; - modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff); - coeff /= 100.0f; - } - DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod); - } - - float tmpDamage = (int32(pdamage) + DoneTotal) * DoneTotalMod; - // apply spellmod to Done damage (flat and pct) - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage); - - return uint32(std::max(tmpDamage, 0.0f)); + return DoneTotalMod; } uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack) const @@ -10258,18 +10272,15 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui float TakenTotalMod = 1.0f; float TakenTotalCasterMod = 0.0f; - // get all auras from caster that allow the spell to ignore resistance (sanctified wrath) - AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST); - for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i) + // Mod damage from spell mechanic + if (uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask()) { - if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) - TakenTotalCasterMod += (float((*i)->GetAmount())); + AuraEffectList const& mDamageDoneMechanic = GetAuraEffectsByType(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT); + for (AuraEffectList::const_iterator i = mDamageDoneMechanic.begin(); i != mDamageDoneMechanic.end(); ++i) + if (mechanicMask & uint32(1 << ((*i)->GetMiscValue()))) + AddPct(TakenTotalMod, (*i)->GetAmount()); } - // from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN - // multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085) - TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, spellProto->GetSchoolMask()); - //.. taken pct: dummy auras AuraEffectList const& mDummyAuras = GetAuraEffectsByType(SPELL_AURA_DUMMY); for (AuraEffectList::const_iterator i = mDummyAuras.begin(); i != mDummyAuras.end(); ++i) @@ -10280,53 +10291,60 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui case 2109: if ((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) { - if (GetTypeId() != TYPEID_PLAYER) - continue; - float mod = ToPlayer()->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f); + // Patch 2.4.3: The resilience required to reach the 90% damage reduction cap + // is 22.5% critical strike damage reduction, or 444 resilience. + // To calculate for 90%, we multiply the 100% by 4 (22.5% * 4 = 90%) + float mod = -1.0f * GetMeleeCritDamageReduction(400); AddPct(TakenTotalMod, std::max(mod, float((*i)->GetAmount()))); } break; } } + // Spells with SPELL_ATTR4_FIXED_DAMAGE should only benefit from mechanic damage mod auras. + if (!(spellProto->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + { + // get all auras from caster that allow the spell to ignore resistance (sanctified wrath) + AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST); + for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i) + { + if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) + TakenTotalCasterMod += (float((*i)->GetAmount())); + } - // From caster spells - AuraEffectList const& mOwnerTaken = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_FROM_CASTER); - for (AuraEffectList::const_iterator i = mOwnerTaken.begin(); i != mOwnerTaken.end(); ++i) - if ((*i)->GetCasterGUID() == caster->GetGUID() && (*i)->IsAffectedOnSpell(spellProto)) - AddPct(TakenTotalMod, (*i)->GetAmount()); + // from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN + // multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085) + TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, spellProto->GetSchoolMask()); - // Mod damage from spell mechanic - if (uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask()) - { - AuraEffectList const& mDamageDoneMechanic = GetAuraEffectsByType(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT); - for (AuraEffectList::const_iterator i = mDamageDoneMechanic.begin(); i != mDamageDoneMechanic.end(); ++i) - if (mechanicMask & uint32(1<<((*i)->GetMiscValue()))) + // From caster spells + AuraEffectList const& mOwnerTaken = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_FROM_CASTER); + for (AuraEffectList::const_iterator i = mOwnerTaken.begin(); i != mOwnerTaken.end(); ++i) + if ((*i)->GetCasterGUID() == caster->GetGUID() && (*i)->IsAffectedOnSpell(spellProto)) AddPct(TakenTotalMod, (*i)->GetAmount()); - } - int32 TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto->GetSchoolMask()); - - // Check for table values - float coeff = 0; - SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id); - if (bonus) - coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage; + int32 TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto->GetSchoolMask()); - // Default calculation - if (TakenAdvertisedBenefit) - { - if (!bonus || coeff < 0) - coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack); + // Check for table values + float coeff = 0; + SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id); + if (bonus) + coeff = (damagetype == DOT) ? bonus->dot_damage : bonus->direct_damage; - float factorMod = CalculateLevelPenalty(spellProto) * stack; - // level penalty still applied on Taken bonus - is it blizzlike? - if (Player* modOwner = GetSpellModOwner()) + // Default calculation + if (TakenAdvertisedBenefit) { - coeff *= 100.0f; - modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff); - coeff /= 100.0f; + if (!bonus || coeff < 0) + coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack); + + float factorMod = CalculateLevelPenalty(spellProto) * stack; + // level penalty still applied on Taken bonus - is it blizzlike? + if (Player* modOwner = GetSpellModOwner()) + { + coeff *= 100.0f; + modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_BONUS_MULTIPLIER, coeff); + coeff /= 100.0f; + } + TakenTotal += int32(TakenAdvertisedBenefit * coeff * factorMod); } - TakenTotal+= int32(TakenAdvertisedBenefit * coeff * factorMod); } float tmpDamage = 0.0f; @@ -10400,16 +10418,21 @@ int32 Unit::SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const return TakenAdvertisedBenefit; } -bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const +bool Unit::IsSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const +{ + return roll_chance_f(GetUnitSpellCriticalChance(victim, spellProto, schoolMask, attackType)); +} + +float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType) const { //! Mobs can't crit with spells. Player Totems can //! Fire Elemental (from totem) can too - but this part is a hack and needs more research - if (IS_CREATURE_GUID(GetGUID()) && !(IsTotem() && IS_PLAYER_GUID(GetOwnerGUID())) && GetEntry() != 15438) - return false; + if (IS_CRE_OR_VEH_GUID(GetGUID()) && !(IsTotem() && IS_PLAYER_GUID(GetOwnerGUID())) && GetEntry() != 15438) + return 0.0f; // not critting spell if ((spellProto->AttributesEx2 & SPELL_ATTR2_CANT_CRIT)) - return false; + return 0.0f; float crit_chance = 0.0f; switch (spellProto->DmgClass) @@ -10425,9 +10448,9 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas case 71646: // Item - Bauble of True Blood 25m break; default: - return false; + return 0.0f; } - break; + // Do not add a break here, case fallthrough is intentional! Adding a break will make above spells unable to crit. case SPELL_DAMAGE_CLASS_MAGIC: { if (schoolMask & SPELL_SCHOOL_MASK_NORMAL) @@ -10457,17 +10480,21 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas { if (!((*i)->IsAffectedOnSpell(spellProto))) continue; - int32 modChance = 0; + switch ((*i)->GetMiscValue()) { - // Shatter - case 911: modChance+= 16; - case 910: modChance+= 17; - case 849: modChance+= 17; - if (!victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) - break; - crit_chance+=modChance; + case 911: // Shatter (Rank 1) + if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) + crit_chance += 17; break; + case 910: // Shatter (Rank 2) + if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) + crit_chance += 34; + break; + case 849: // Shatter (Rank 3) + if (victim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) + crit_chance += 50; + break; case 7917: // Glyph of Shadowburn if (victim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this)) crit_chance+=(*i)->GetAmount(); @@ -10487,7 +10514,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas case SPELLFAMILY_MAGE: // Glyph of Fire Blast if (spellProto->SpellFamilyFlags[0] == 0x2 && spellProto->SpellIconID == 12) - if (victim->HasAuraWithMechanic((1<<MECHANIC_STUN) | (1<<MECHANIC_KNOCKOUT))) + if (victim->HasAuraWithMechanic((1 << MECHANIC_STUN) | (1 << MECHANIC_KNOCKOUT))) if (AuraEffect const* aurEff = GetAuraEffect(56369, EFFECT_0)) crit_chance += aurEff->GetAmount(); break; @@ -10508,7 +10535,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas crit_chance += aurEff->GetAmount(); break; } - break; + break; case SPELLFAMILY_ROGUE: // Shiv-applied poisons can't crit if (FindCurrentSpellBySpellId(5938)) @@ -10527,20 +10554,20 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas else if (spellProto->GetCategory() == 19) { if (victim->GetCreatureTypeMask() & CREATURE_TYPEMASK_DEMON_OR_UNDEAD) - return true; + return 100.0f; break; } - break; + break; case SPELLFAMILY_SHAMAN: // Lava Burst if (spellProto->SpellFamilyFlags[1] & 0x00001000) { if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0, 0, GetGUID())) if (victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE) > -100) - return true; + return 100.0f; break; } - break; + break; } } break; @@ -10561,17 +10588,17 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas crit_chance += rendAndTear->GetAmount(); break; } - break; + break; case SPELLFAMILY_WARRIOR: - // Victory Rush - if (spellProto->SpellFamilyFlags[1] & 0x100) - { - // Glyph of Victory Rush - if (AuraEffect const* aurEff = GetAuraEffect(58382, 0)) - crit_chance += aurEff->GetAmount(); - break; - } - break; + // Victory Rush + if (spellProto->SpellFamilyFlags[1] & 0x100) + { + // Glyph of Victory Rush + if (AuraEffect const* aurEff = GetAuraEffect(58382, 0)) + crit_chance += aurEff->GetAmount(); + break; + } + break; } } /// Intentional fallback. Calculate critical strike chance for both Ranged and Melee spells @@ -10585,17 +10612,14 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas break; } default: - return false; + return 0.0f; } // percent done // only players use intelligence for critical chance computations if (Player* modOwner = GetSpellModOwner()) modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CRITICAL_CHANCE, crit_chance); - crit_chance = crit_chance > 0.0f ? crit_chance : 0.0f; - if (roll_chance_f(crit_chance)) - return true; - return false; + return crit_chance > 0.0f ? crit_chance : 0.0f; } uint32 Unit::SpellCriticalDamageBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim) @@ -10679,14 +10703,8 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui if (spellProto->SpellFamilyName == SPELLFAMILY_POTION) return healamount; - float DoneTotalMod = 1.0f; int32 DoneTotal = 0; - // Healing done percent - AuraEffectList const& mHealingDonePct = GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT); - for (AuraEffectList::const_iterator i = mHealingDonePct.begin(); i != mHealingDonePct.end(); ++i) - AddPct(DoneTotalMod, (*i)->GetAmount()); - // done scripted mod (take it from owner) Unit const* owner = GetOwner() ? GetOwner() : this; AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); @@ -10701,43 +10719,6 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui case 3736: // Hateful Totem of the Third Wind / Increased Lesser Healing Wave / LK Arena (4/5/6) Totem of the Third Wind / Savage Totem of the Third Wind DoneTotal += (*i)->GetAmount(); break; - case 21: // Test of Faith - case 6935: - case 6918: - if (victim->HealthBelowPct(50)) - AddPct(DoneTotalMod, (*i)->GetAmount()); - break; - case 7798: // Glyph of Regrowth - { - if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, 0x40, 0, 0)) - AddPct(DoneTotalMod, (*i)->GetAmount()); - break; - } - case 8477: // Nourish Heal Boost - { - int32 stepPercent = (*i)->GetAmount(); - int32 modPercent = 0; - AuraApplicationMap const& victimAuras = victim->GetAppliedAuras(); - for (AuraApplicationMap::const_iterator itr = victimAuras.begin(); itr != victimAuras.end(); ++itr) - { - Aura const* aura = itr->second->GetBase(); - if (aura->GetCasterGUID() != GetGUID()) - continue; - SpellInfo const* m_spell = aura->GetSpellInfo(); - if (m_spell->SpellFamilyName != SPELLFAMILY_DRUID || - !(m_spell->SpellFamilyFlags[1] & 0x00000010 || m_spell->SpellFamilyFlags[0] & 0x50)) - continue; - modPercent += stepPercent * aura->GetStackAmount(); - } - AddPct(DoneTotalMod, modPercent); - break; - } - case 7871: // Glyph of Lesser Healing Wave - { - if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0, GetGUID())) - AddPct(DoneTotalMod, (*i)->GetAmount()); - break; - } default: break; } @@ -10810,8 +10791,8 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui DoneTotal = 0; } - // use float as more appropriate for negative values and percent applying - float heal = float(int32(healamount) + DoneTotal) * DoneTotalMod; + // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods. + float heal = float(int32(healamount) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellHealingPctDone(victim, spellProto)); // apply spellmod to Done amount if (Player* modOwner = GetSpellModOwner()) modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, heal); @@ -10819,6 +10800,77 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui return uint32(std::max(heal, 0.0f)); } +float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const +{ + // For totems pct done mods are calculated when its calculation is run on the player in SpellHealingBonusDone. + if (GetTypeId() == TYPEID_UNIT && IsTotem()) + return 1.0f; + + // No bonus healing for potion spells + if (spellProto->SpellFamilyName == SPELLFAMILY_POTION) + return 1.0f; + + float DoneTotalMod = 1.0f; + + // Healing done percent + AuraEffectList const& mHealingDonePct = GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT); + for (AuraEffectList::const_iterator i = mHealingDonePct.begin(); i != mHealingDonePct.end(); ++i) + AddPct(DoneTotalMod, (*i)->GetAmount()); + + // done scripted mod (take it from owner) + Unit const* owner = GetOwner() ? GetOwner() : this; + AuraEffectList const& mOverrideClassScript= owner->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + { + if (!(*i)->IsAffectedOnSpell(spellProto)) + continue; + switch ((*i)->GetMiscValue()) + { + case 21: // Test of Faith + case 6935: + case 6918: + if (victim->HealthBelowPct(50)) + AddPct(DoneTotalMod, (*i)->GetAmount()); + break; + case 7798: // Glyph of Regrowth + { + if (victim->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, 0x40, 0, 0)) + AddPct(DoneTotalMod, (*i)->GetAmount()); + break; + } + case 8477: // Nourish Heal Boost + { + int32 stepPercent = (*i)->GetAmount(); + int32 modPercent = 0; + AuraApplicationMap const& victimAuras = victim->GetAppliedAuras(); + for (AuraApplicationMap::const_iterator itr = victimAuras.begin(); itr != victimAuras.end(); ++itr) + { + Aura const* aura = itr->second->GetBase(); + if (aura->GetCasterGUID() != GetGUID()) + continue; + SpellInfo const* m_spell = aura->GetSpellInfo(); + if (m_spell->SpellFamilyName != SPELLFAMILY_DRUID || + !(m_spell->SpellFamilyFlags[1] & 0x00000010 || m_spell->SpellFamilyFlags[0] & 0x50)) + continue; + modPercent += stepPercent * aura->GetStackAmount(); + } + AddPct(DoneTotalMod, modPercent); + break; + } + case 7871: // Glyph of Lesser Healing Wave + { + if (victim->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0, 0x00000400, 0, GetGUID())) + AddPct(DoneTotalMod, (*i)->GetAmount()); + break; + } + default: + break; + } + } + + return DoneTotalMod; +} + uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack) const { float TakenTotalMod = 1.0f; @@ -11105,8 +11157,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons // Check for immune to application of harmful magical effects AuraEffectList const& immuneAuraApply = GetAuraEffectsByType(SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL); for (AuraEffectList::const_iterator iter = immuneAuraApply.begin(); iter != immuneAuraApply.end(); ++iter) - if (spellInfo->Dispel == DISPEL_MAGIC && // Magic debuff - ((*iter)->GetMiscValue() & spellInfo->GetSchoolMask()) && // Check school + if (((*iter)->GetMiscValue() & spellInfo->GetSchoolMask()) && // Check school !spellInfo->IsPositiveEffect(index)) // Harmful return true; } @@ -11175,7 +11226,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType // Some spells don't benefit from pct done mods if (spellProto) - if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && !spellProto->IsRankOf(sSpellMgr->GetSpellInfo(12162))) + if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)) { AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) @@ -11358,9 +11409,10 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT case 2109: if ((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) { - if (GetTypeId() != TYPEID_PLAYER) - continue; - float mod = ToPlayer()->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE) * (-8.0f); + // Patch 2.4.3: The resilience required to reach the 90% damage reduction cap + // is 22.5% critical strike damage reduction, or 444 resilience. + // To calculate for 90%, we multiply the 100% by 4 (22.5% * 4 = 90%) + float mod = -1.0f * GetMeleeCritDamageReduction(400); AddPct(TakenTotalMod, std::max(mod, float((*i)->GetAmount()))); } break; @@ -12829,19 +12881,24 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in return std::max(duration, 0); } -void Unit::ModSpellCastTime(SpellInfo const* spellProto, int32 & castTime, Spell* spell) +void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* spell) { - if (!spellProto || castTime < 0) + if (!spellInfo || castTime < 0) return; + + if (spellInfo->IsChanneled() && !(spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)) + return; + // called from caster if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_CASTING_TIME, castTime, spell); + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell); - if (!(spellProto->Attributes & (SPELL_ATTR0_ABILITY|SPELL_ATTR0_TRADESPELL)) && ((GetTypeId() == TYPEID_PLAYER && spellProto->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) + if (!((spellInfo->Attributes & (SPELL_ATTR0_ABILITY | SPELL_ATTR0_TRADESPELL)) || (spellInfo->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)) && + ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED)); - else if (spellProto->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellProto->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG)) + else if (spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG)) castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]); - else if (spellProto->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat. + else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat. castTime = 500; } @@ -12972,6 +13029,8 @@ float Unit::GetSpellMaxRangeForTarget(Unit const* target, SpellInfo const* spell return 0; if (spellInfo->RangeEntry->maxRangeFriend == spellInfo->RangeEntry->maxRangeHostile) return spellInfo->GetMaxRange(); + if (target == NULL) + return spellInfo->GetMaxRange(true); return spellInfo->GetMaxRange(!IsHostileTo(target)); } @@ -12984,21 +13043,6 @@ float Unit::GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spell return spellInfo->GetMinRange(!IsHostileTo(target)); } -Unit* Unit::GetUnit(WorldObject& object, uint64 guid) -{ - return ObjectAccessor::GetUnit(object, guid); -} - -Player* Unit::GetPlayer(WorldObject& object, uint64 guid) -{ - return ObjectAccessor::GetPlayer(object, guid); -} - -Creature* Unit::GetCreature(WorldObject& object, uint64 guid) -{ - return object.GetMap()->GetCreature(guid); -} - uint32 Unit::GetCreatureType() const { if (GetTypeId() == TYPEID_PLAYER) @@ -13033,9 +13077,35 @@ bool Unit::IsInFeralForm() const bool Unit::IsInDisallowedMountForm() const { - ShapeshiftForm form = GetShapeshiftForm(); - return form != FORM_NONE && form != FORM_BATTLESTANCE && form != FORM_BERSERKERSTANCE && form != FORM_DEFENSIVESTANCE && - form != FORM_SHADOW && form != FORM_STEALTH && form != FORM_UNDEAD; + if (ShapeshiftForm form = GetShapeshiftForm()) + { + SpellShapeshiftEntry const* shapeshift = sSpellShapeshiftStore.LookupEntry(form); + if (!shapeshift) + return true; + + if (!(shapeshift->flags1 & 0x1)) + return true; + } + + if (GetDisplayId() == GetNativeDisplayId()) + return false; + + CreatureDisplayInfoEntry const* display = sCreatureDisplayInfoStore.LookupEntry(GetDisplayId()); + if (!display) + return true; + + CreatureDisplayInfoExtraEntry const* displayExtra = sCreatureDisplayInfoExtraStore.LookupEntry(display->ExtraId); + if (!displayExtra) + return true; + + CreatureModelDataEntry const* model = sCreatureModelDataStore.LookupEntry(display->ModelId); + ChrRacesEntry const* race = sChrRacesStore.LookupEntry(displayExtra->Race); + + if (model && !(model->Flags & 0x80)) + if (race && !(race->Flags & 0x4)) + return true; + + return false; } /*####################################### @@ -13483,12 +13553,7 @@ void Unit::CleanupsBeforeDelete(bool finalCleanup) { CleanupBeforeRemoveFromMap(finalCleanup); - if (GetTransport()) - { - GetTransport()->RemovePassenger(this); - SetTransport(NULL); - m_movementInfo.transport.Reset(); - } + WorldObject::CleanupsBeforeDelete(finalCleanup); } void Unit::UpdateCharmAI() @@ -14942,7 +15007,7 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const } // Check spellProcEvent data requirements - if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) + if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProto, spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) return false; // In most cases req get honor or XP from kill if (EventProcFlag & PROC_FLAG_KILL && GetTypeId() == TYPEID_PLAYER) @@ -15141,8 +15206,10 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) data << uint64(victim->GetGUID()); // victim Player* looter = player; + Group* group = player->GetGroup(); + bool hasLooterGuid = false; - if (Group* group = player->GetGroup()) + if (group) { group->BroadcastPacket(&data, group->GetMemberGroup(player->GetGUID())); @@ -15154,16 +15221,10 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) looter = ObjectAccessor::FindPlayer(group->GetLooterGuid()); if (looter) { + hasLooterGuid = true; creature->SetLootRecipient(looter); // update creature loot recipient to the allowed looter. - group->SendLooter(creature, looter); } - else - group->SendLooter(creature, NULL); } - else - group->SendLooter(creature, NULL); - - group->UpdateLooterGuid(creature); } } else @@ -15180,17 +15241,30 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) } } + // Generate loot before updating looter if (creature) { Loot* loot = &creature->loot; - if (creature->lootForPickPocketed) - creature->lootForPickPocketed = false; + if (creature->loot.loot_type == LOOT_PICKPOCKETING) + creature->ResetPickPocketRefillTimer(); loot->clear(); if (uint32 lootid = creature->GetCreatureTemplate()->lootid) loot->FillLoot(lootid, LootTemplates_Creature, looter, false, false, creature->GetLootMode()); loot->generateMoneyLoot(creature->GetCreatureTemplate()->mingold, creature->GetCreatureTemplate()->maxgold); + + if (group) + { + if (hasLooterGuid) + group->SendLooter(creature, looter); + else + group->SendLooter(creature, NULL); + + // Update round robin looter only if the creature had loot + if (!loot->empty()) + group->UpdateLooterGuid(creature); + } } player->RewardPlayerAndGroupAtKill(victim, false); @@ -15209,8 +15283,8 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) // update get killing blow achievements, must be done before setDeathState to be able to require auras on target // and before Spirit of Redemption as it also removes auras - if (player) - player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim); + if (Player* killerPlayer = GetCharmerOrOwnerPlayerOrPlayerItself()) + killerPlayer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS, 1, 0, victim); // if talent known but not triggered (check priest class for speedup check) bool spiritOfRedemption = false; @@ -15291,9 +15365,12 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) if (!creature->IsPet()) { creature->DeleteThreatList(); - CreatureTemplate const* cInfo = creature->GetCreatureTemplate(); - if (cInfo && (cInfo->lootid || cInfo->maxgold > 0)) + + // must be after setDeathState which resets dynamic flags + if (!creature->loot.isLooted()) creature->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + else + creature->AllLootRemovedFromCorpse(); } // Call KilledUnit for creatures, this needs to be called after the lootable flag is set @@ -15515,7 +15592,7 @@ void Unit::SetStunned(bool apply) else { if (IsAlive() && GetVictim()) - SetTarget(GetVictim()->GetGUID()); + SetTarget(EnsureVictim()->GetGUID()); // don't remove UNIT_FLAG_STUNNED for pet when owner is mounted (disabled pet's interface) Unit* owner = GetOwner(); @@ -15606,7 +15683,7 @@ void Unit::SetFeared(bool apply) if (GetMotionMaster()->GetCurrentMovementGeneratorType() == FLEEING_MOTION_TYPE) GetMotionMaster()->MovementExpired(); if (GetVictim()) - SetTarget(GetVictim()->GetGUID()); + SetTarget(EnsureVictim()->GetGUID()); } } @@ -15628,7 +15705,7 @@ void Unit::SetConfused(bool apply) if (GetMotionMaster()->GetCurrentMovementGeneratorType() == CONFUSED_MOTION_TYPE) GetMotionMaster()->MovementExpired(); if (GetVictim()) - SetTarget(GetVictim()->GetGUID()); + SetTarget(EnsureVictim()->GetGUID()); } } @@ -15905,10 +15982,7 @@ void Unit::RestoreFaction() } if (CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate()) // normal creature - { - FactionTemplateEntry const* faction = GetFactionTemplateEntry(); - setFaction((faction && faction->friendlyMask & 0x004) ? cinfo->faction_H : cinfo->faction_A); - } + setFaction(cinfo->faction); } } @@ -16281,19 +16355,25 @@ void Unit::SetPhaseMask(uint32 newPhaseMask, bool update) } } - WorldObject::SetPhaseMask(newPhaseMask, update); + // Phase player, dont update + WorldObject::SetPhaseMask(newPhaseMask, false); - if (!IsInWorld()) - return; + // Phase pets and summons + if (IsInWorld()) + { + for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) + if ((*itr)->GetTypeId() == TYPEID_UNIT) + (*itr)->SetPhaseMask(newPhaseMask, true); - for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) - if ((*itr)->GetTypeId() == TYPEID_UNIT) - (*itr)->SetPhaseMask(newPhaseMask, true); + for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i) + if (m_SummonSlot[i]) + if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i])) + summon->SetPhaseMask(newPhaseMask, true); + } - for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i) - if (m_SummonSlot[i]) - if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i])) - summon->SetPhaseMask(newPhaseMask, true); + // Update visibility after phasing pets and summons so they wont despawn + if (update) + UpdateObjectVisibility(); } void Unit::UpdateObjectVisibility(bool forced) @@ -16860,7 +16940,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) Position pos; if (!exitPosition) // Exit position not specified - vehicle->GetBase()->GetPosition(&pos); // This should use passenger's current position, leaving it as it is now + pos = vehicle->GetBase()->GetPosition(); // This should use passenger's current position, leaving it as it is now // because we calculate positions incorrect (sometimes under map) else pos = *exitPosition; @@ -17006,12 +17086,14 @@ bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool tel bool turn = (GetOrientation() != orientation); bool relocated = (teleport || GetPositionX() != x || GetPositionY() != y || GetPositionZ() != z); + // TODO: Check if orientation transport offset changed instead of only global orientation if (turn) RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); if (relocated) { - RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOVE); + if (!GetVehicle()) + RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOVE); // move and update visible state if need if (GetTypeId() == TYPEID_PLAYER) @@ -17270,7 +17352,12 @@ bool CharmInfo::IsCommandFollow() void CharmInfo::SaveStayPosition() { //! At this point a new spline destination is enabled because of Unit::StopMoving() - G3D::Vector3 const stayPos = _unit->movespline->FinalDestination(); + G3D::Vector3 stayPos = _unit->movespline->FinalDestination(); + + if (_unit->movespline->onTransport) + if (TransportBase* transport = _unit->GetDirectTransport()) + transport->CalculatePassengerPosition(stayPos.x, stayPos.y, stayPos.z); + _stayX = stayPos.x; _stayY = stayPos.y; _stayZ = stayPos.z; @@ -17641,3 +17728,94 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) updateMask.AppendToPacket(data); data->append(fieldBuffer); } + +void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) +{ + data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + 4 + 4); + data << uint64(GetGUID()); + data << uint8(flags); + data << uint32(spellId); + data << uint32(cooldown); +} + +void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) +{ + data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size()); + data << uint64(GetGUID()); + data << uint8(flags); + for (std::unordered_map<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr) + { + data << uint32(itr->first); + data << uint32(itr->second); + } +} + +int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const +{ + int32 val = 0; + SpellSpellGroupMapBounds spellGroup = sSpellMgr->GetSpellSpellGroupMapBounds(aurEff->GetSpellInfo()->GetFirstRankSpell()->Id); + for (SpellSpellGroupMap::const_iterator itr = spellGroup.first; itr != spellGroup.second ; ++itr) + { + if (sSpellMgr->GetSpellGroupStackRule(itr->second) == SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT) + { + AuraEffectList const& auraEffList = GetAuraEffectsByType(auraType); + for (AuraEffectList::const_iterator auraItr = auraEffList.begin(); auraItr != auraEffList.end(); ++auraItr) + { + if (aurEff != (*auraItr) && (!checkMiscValue || (*auraItr)->GetMiscValue() == miscValue) && + sSpellMgr->IsSpellMemberOfSpellGroup((*auraItr)->GetSpellInfo()->Id, itr->second)) + { + // absolute value only + if (abs(val) < abs((*auraItr)->GetAmount())) + val = (*auraItr)->GetAmount(); + } + } + } + } + return val; +} + +bool Unit::IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications /*= false*/) +{ + for (uint32 i = 0 ; i < MAX_SPELL_EFFECTS; ++i) + { + if (AuraEffect const* aurEff = aura->GetEffect(i)) + { + AuraType const auraType = AuraType(aura->GetSpellInfo()->Effects[i].ApplyAuraName); + AuraEffectList const& auras = GetAuraEffectsByType(auraType); + for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end();) + { + AuraEffect const* existingAurEff = (*itr); + ++itr; + + if (sSpellMgr->CheckSpellGroupStackRules(aura->GetSpellInfo(), existingAurEff->GetSpellInfo()) + == SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST) + { + int32 diff = abs(aurEff->GetAmount()) - abs(existingAurEff->GetAmount()); + if (!diff) + diff = int32(aura->GetEffectMask()) - int32(existingAurEff->GetBase()->GetEffectMask()); + + if (diff > 0) + { + Aura const* base = existingAurEff->GetBase(); + // no removing of area auras from the original owner, as that completely cancels them + if (removeOtherAuraApplications && (!base->IsArea() || base->GetOwner() != this)) + { + if (AuraApplication* aurApp = existingAurEff->GetBase()->GetApplicationOfTarget(GetGUID())) + { + bool hasMoreThanOneEffect = base->HasMoreThanOneEffectForType(auraType); + uint32 removedAuras = m_removedAurasCount; + RemoveAura(aurApp); + if (hasMoreThanOneEffect || m_removedAurasCount > removedAuras + 1) + itr = auras.begin(); + } + } + } + else if (diff < 0) + return false; + } + } + } + } + + return true; +} diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 41b181e54f8..535d75af204 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -513,6 +513,12 @@ enum UnitState UNIT_STATE_CHASE_MOVE = 0x04000000, UNIT_STATE_FOLLOW_MOVE = 0x08000000, UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator + UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE + | UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED + | UNIT_STATE_DISTRACTED | UNIT_STATE_ISOLATED | UNIT_STATE_ATTACK_PLAYER | UNIT_STATE_CASTING + | UNIT_STATE_POSSESSED | UNIT_STATE_CHARGING | UNIT_STATE_JUMPING | UNIT_STATE_MOVE | UNIT_STATE_ROTATING + | UNIT_STATE_EVADE | UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE + | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_IGNORE_PATHFINDING, UNIT_STATE_UNATTACKABLE = UNIT_STATE_IN_FLIGHT, // for real move using movegen check and stop (except unstoppable flight) UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE, @@ -1034,7 +1040,7 @@ struct GlobalCooldown uint32 cast_time; }; -typedef UNORDERED_MAP<uint32 /*category*/, GlobalCooldown> GlobalCooldownList; +typedef std::unordered_map<uint32 /*category*/, GlobalCooldown> GlobalCooldownList; class GlobalCooldownMgr // Shared by Player and CharmInfo { @@ -1233,6 +1239,16 @@ enum PlayerTotemType SUMMON_TYPE_TOTEM_AIR = 83 }; +/// Spell cooldown flags sent in SMSG_SPELL_COOLDOWN +enum SpellCooldownFlags +{ + SPELL_COOLDOWN_FLAG_NONE = 0x0, + SPELL_COOLDOWN_FLAG_INCLUDE_GCD = 0x1, ///< Starts GCD in addition to normal cooldown specified in the packet + SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS = 0x2 ///< Starts GCD for spells that should start their cooldown on events, requires SPELL_COOLDOWN_FLAG_INCLUDE_GCD set +}; + +typedef std::unordered_map<uint32, uint32> PacketCooldowns; + // delay time next attack to prevent client attack animation problems #define ATTACK_DISPLAY_DELAY 200 #define MAX_PLAYER_STEALTH_DETECT_RANGE 30.0f // max distance for detection targets by player @@ -1273,7 +1289,7 @@ class Unit : public WorldObject void RemoveFromWorld(); void CleanupBeforeRemoveFromMap(bool finalCleanup); - void CleanupsBeforeDelete(bool finalCleanup = true); // used in ~Creature/~Player (or before mass creature delete to remove cross-references to already deleted units) + void CleanupsBeforeDelete(bool finalCleanup = true) override; // used in ~Creature/~Player (or before mass creature delete to remove cross-references to already deleted units) DiminishingLevels GetDiminishing(DiminishingGroup group); void IncrDiminishing(DiminishingGroup group); @@ -1312,6 +1328,12 @@ class Unit : public WorldObject AttackerSet const& getAttackers() const { return m_attackers; } bool isAttackingPlayer() const; Unit* GetVictim() const { return m_attacking; } + // Use this only when 100% sure there is a victim + Unit* EnsureVictim() const + { + ASSERT(m_attacking); + return m_attacking; + } void CombatStop(bool includingCast = false); void CombatStopWithPets(bool includingCast = false); @@ -1565,6 +1587,8 @@ class Unit : public WorldObject void SetAuraStack(uint32 spellId, Unit* target, uint32 stack); void SendPlaySpellVisual(uint32 id); void SendPlaySpellImpact(uint64 guid, uint32 id); + void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown); + void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns); void DeMorph(); @@ -1948,13 +1972,15 @@ class Unit : public WorldObject Unit* GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo); Unit* GetMeleeHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo = NULL); - int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const; - int32 SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const; + int32 SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const; + int32 SpellBaseDamageBonusTaken(SpellSchoolMask schoolMask) const; uint32 SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack = 1) const; + float SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, DamageEffectType damagetype) const; uint32 SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack = 1) const; - int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const; - int32 SpellBaseHealingBonusTaken(SpellSchoolMask schoolMask) const; + int32 SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const; + int32 SpellBaseHealingBonusTaken(SpellSchoolMask schoolMask) const; uint32 SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack = 1) const; + float SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const; uint32 SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 healamount, DamageEffectType damagetype, uint32 stack = 1) const; uint32 MeleeDamageBonusDone(Unit* pVictim, uint32 damage, WeaponAttackType attType, SpellInfo const* spellProto = NULL); @@ -1962,7 +1988,8 @@ class Unit : public WorldObject bool isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType = BASE_ATTACK); bool isBlockCritical(); - bool isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const; + bool IsSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const; + float GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK) const; uint32 SpellCriticalDamageBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim); uint32 SpellCriticalHealingBonus(SpellInfo const* spellProto, uint32 damage, Unit* victim); @@ -2004,9 +2031,6 @@ class Unit : public WorldObject void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); } void removeFollower(FollowerReference* /*pRef*/) { /* nothing to do yet */ } - static Unit* GetUnit(WorldObject& object, uint64 guid); - static Player* GetPlayer(WorldObject& object, uint64 guid); - static Creature* GetCreature(WorldObject& object, uint64 guid); MotionMaster* GetMotionMaster() { return i_motionMaster; } const MotionMaster* GetMotionMaster() const { return i_motionMaster; } @@ -2131,6 +2155,9 @@ class Unit : public WorldObject time_t GetLastDamagedTime() const { return _lastDamagedTime; } void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; } + int32 GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue = false, int32 miscValue = 0) const; + bool IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications = false); + protected: explicit Unit (bool isWorldObject); diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index fae4f0c6b6a..915e6016e22 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -76,41 +76,12 @@ Vehicle::~Vehicle() void Vehicle::Install() { - if (Creature* creature = _me->ToCreature()) + if (_me->GetTypeId() == TYPEID_UNIT) { - switch (_vehicleInfo->m_powerType) - { - case POWER_STEAM: - case POWER_HEAT: - case POWER_BLOOD: - case POWER_OOZE: - case POWER_WRATH: - _me->setPowerType(POWER_ENERGY); - _me->SetMaxPower(POWER_ENERGY, 100); - break; - case POWER_PYRITE: - _me->setPowerType(POWER_ENERGY); - _me->SetMaxPower(POWER_ENERGY, 50); - break; - default: - for (uint32 i = 0; i < MAX_SPELL_VEHICLE; ++i) - { - if (!creature->m_spells[i]) - continue; - - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(creature->m_spells[i]); - if (!spellInfo) - continue; - - if (spellInfo->PowerType == POWER_ENERGY && spellInfo->CalcPowerCost(_me, spellInfo->GetSchoolMask()) > 0) - { - _me->setPowerType(POWER_ENERGY); - _me->SetMaxPower(POWER_ENERGY, 100); - break; - } - } - break; - } + if (PowerDisplayEntry const* powerDisplay = sPowerDisplayStore.LookupEntry(_vehicleInfo->m_powerDisplayId)) + _me->setPowerType(Powers(powerDisplay->PowerType)); + else if (_me->getClass() == CLASS_ROGUE) + _me->setPowerType(POWER_ENERGY); } _status = STATUS_INSTALLED; @@ -808,6 +779,8 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Passenger->InterruptNonMeleeSpells(false); Passenger->RemoveAurasByType(SPELL_AURA_MOUNTED); + VehicleSeatEntry const* veSeat = Seat->second.SeatInfo; + Player* player = Passenger->ToPlayer(); if (player) { @@ -818,14 +791,14 @@ bool VehicleJoinEvent::Execute(uint64, uint32) player->StopCastingCharm(); player->StopCastingBindSight(); player->SendOnCancelExpectedVehicleRideAura(); - player->UnsummonPetTemporaryIfAny(); + if (!(veSeat->m_flagsB & VEHICLE_SEAT_FLAG_B_KEEP_PET)) + player->UnsummonPetTemporaryIfAny(); } if (Seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE) Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Passenger->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - VehicleSeatEntry const* veSeat = Seat->second.SeatInfo; Passenger->m_movementInfo.transport.pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); Passenger->m_movementInfo.transport.time = 0; Passenger->m_movementInfo.transport.seat = Seat->first; diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 95d4c7e2503..e4522536a81 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1620,7 +1620,7 @@ uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const if (!quest) return 0; - UNORDERED_MAP<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId()); + std::unordered_map<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId()); if (itr == _questToEventLinks.end()) return 0; diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index ea6f9359ea3..df062c6f660 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -173,7 +173,7 @@ class GameEventMgr QuestIdToEventConditionMap mQuestToEventConditions; GameEventNPCFlagMap mGameEventNPCFlags; ActiveEvents m_ActiveEvents; - UNORDERED_MAP<uint32, uint16> _questToEventLinks; + std::unordered_map<uint32, uint16> _questToEventLinks; bool isSystemInit; public: GameEventGuidMap mGameEventCreatureGuids; diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index ca173865570..8bf353d3eaa 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -431,7 +431,7 @@ void ObjectAccessor::UnloadAll() /// Define the static members of HashMapHolder -template <class T> UNORDERED_MAP< uint64, T* > HashMapHolder<T>::m_objectMap; +template <class T> std::unordered_map< uint64, T* > HashMapHolder<T>::m_objectMap; template <class T> typename HashMapHolder<T>::LockType HashMapHolder<T>::i_lock; /// Global definitions for the hashmap storage diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 4943c648b93..b52699c85ac 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -22,7 +22,7 @@ #include "Define.h" #include <ace/Singleton.h> #include <ace/Thread_Mutex.h> -#include "UnorderedMap.h" +#include <unordered_map> #include "UpdateData.h" @@ -47,7 +47,7 @@ class HashMapHolder { public: - typedef UNORDERED_MAP<uint64, T*> MapType; + typedef std::unordered_map<uint64, T*> MapType; typedef ACE_RW_Thread_Mutex LockType; static void Insert(T* o) @@ -222,8 +222,8 @@ class ObjectAccessor static void _buildPacket(Player*, Object*, UpdateDataMapType&); void _update(); - typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType; - typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType; + typedef std::unordered_map<uint64, Corpse*> Player2CorpsesMapType; + typedef std::unordered_map<Player*, UpdateData>::value_type UpdateDataValueType; std::set<Object*> i_objects; Player2CorpsesMapType i_player2corpse; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 04f3395653d..278460e73dd 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -20,6 +20,7 @@ #include "AchievementMgr.h" #include "ArenaTeam.h" #include "ArenaTeamMgr.h" +#include "BattlegroundMgr.h" #include "Chat.h" #include "Common.h" #include "DatabaseEnv.h" @@ -356,7 +357,8 @@ void ObjectMgr::LoadGossipMenuItemsLocales() AddLocaleString(fields[2 + 2 * (i - 1)].GetString(), locale, data.OptionText); AddLocaleString(fields[2 + 2 * (i - 1) + 1].GetString(), locale, data.BoxText); } - } while (result->NextRow()); + } + while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %lu gossip_menu_option locale strings in %u ms", (unsigned long)_gossipMenuItemsLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime)); } @@ -394,7 +396,7 @@ void ObjectMgr::LoadCreatureTemplates() // 0 1 2 3 4 5 6 7 8 QueryResult result = WorldDatabase.Query("SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, " // 9 10 11 12 13 14 15 16 17 18 19 20 21 - "modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction_A, faction_H, npcflag, speed_walk, speed_run, " + "modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, " // 22 23 24 25 26 27 28 29 30 31 32 33 "scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, " // 34 35 36 37 38 39 40 41 42 43 @@ -445,65 +447,64 @@ void ObjectMgr::LoadCreatureTemplates() creatureTemplate.minlevel = fields[14].GetUInt8(); creatureTemplate.maxlevel = fields[15].GetUInt8(); creatureTemplate.expansion = uint32(fields[16].GetInt16()); - creatureTemplate.faction_A = uint32(fields[17].GetUInt16()); - creatureTemplate.faction_H = uint32(fields[18].GetUInt16()); - creatureTemplate.npcflag = fields[19].GetUInt32(); - creatureTemplate.speed_walk = fields[20].GetFloat(); - creatureTemplate.speed_run = fields[21].GetFloat(); - creatureTemplate.scale = fields[22].GetFloat(); - creatureTemplate.rank = uint32(fields[23].GetUInt8()); - creatureTemplate.mindmg = fields[24].GetFloat(); - creatureTemplate.maxdmg = fields[25].GetFloat(); - creatureTemplate.dmgschool = uint32(fields[26].GetInt8()); - creatureTemplate.attackpower = fields[27].GetUInt32(); - creatureTemplate.dmg_multiplier = fields[28].GetFloat(); - creatureTemplate.baseattacktime = fields[29].GetUInt32(); - creatureTemplate.rangeattacktime = fields[30].GetUInt32(); - creatureTemplate.unit_class = uint32(fields[31].GetUInt8()); - creatureTemplate.unit_flags = fields[32].GetUInt32(); - creatureTemplate.unit_flags2 = fields[33].GetUInt32(); - creatureTemplate.dynamicflags = fields[34].GetUInt32(); - creatureTemplate.family = uint32(fields[35].GetUInt8()); - creatureTemplate.trainer_type = uint32(fields[36].GetUInt8()); - creatureTemplate.trainer_spell = fields[37].GetUInt32(); - creatureTemplate.trainer_class = uint32(fields[38].GetUInt8()); - creatureTemplate.trainer_race = uint32(fields[39].GetUInt8()); - creatureTemplate.minrangedmg = fields[40].GetFloat(); - creatureTemplate.maxrangedmg = fields[41].GetFloat(); - creatureTemplate.rangedattackpower = uint32(fields[42].GetUInt16()); - creatureTemplate.type = uint32(fields[43].GetUInt8()); - creatureTemplate.type_flags = fields[44].GetUInt32(); - creatureTemplate.lootid = fields[45].GetUInt32(); - creatureTemplate.pickpocketLootId = fields[46].GetUInt32(); - creatureTemplate.SkinLootId = fields[47].GetUInt32(); + creatureTemplate.faction = uint32(fields[17].GetUInt16()); + creatureTemplate.npcflag = fields[18].GetUInt32(); + creatureTemplate.speed_walk = fields[19].GetFloat(); + creatureTemplate.speed_run = fields[20].GetFloat(); + creatureTemplate.scale = fields[21].GetFloat(); + creatureTemplate.rank = uint32(fields[22].GetUInt8()); + creatureTemplate.mindmg = fields[23].GetFloat(); + creatureTemplate.maxdmg = fields[24].GetFloat(); + creatureTemplate.dmgschool = uint32(fields[25].GetInt8()); + creatureTemplate.attackpower = fields[26].GetUInt32(); + creatureTemplate.dmg_multiplier = fields[27].GetFloat(); + creatureTemplate.baseattacktime = fields[28].GetUInt32(); + creatureTemplate.rangeattacktime = fields[29].GetUInt32(); + creatureTemplate.unit_class = uint32(fields[30].GetUInt8()); + creatureTemplate.unit_flags = fields[31].GetUInt32(); + creatureTemplate.unit_flags2 = fields[32].GetUInt32(); + creatureTemplate.dynamicflags = fields[33].GetUInt32(); + creatureTemplate.family = uint32(fields[34].GetUInt8()); + creatureTemplate.trainer_type = uint32(fields[35].GetUInt8()); + creatureTemplate.trainer_spell = fields[36].GetUInt32(); + creatureTemplate.trainer_class = uint32(fields[37].GetUInt8()); + creatureTemplate.trainer_race = uint32(fields[38].GetUInt8()); + creatureTemplate.minrangedmg = fields[39].GetFloat(); + creatureTemplate.maxrangedmg = fields[40].GetFloat(); + creatureTemplate.rangedattackpower = uint32(fields[41].GetUInt16()); + creatureTemplate.type = uint32(fields[42].GetUInt8()); + creatureTemplate.type_flags = fields[43].GetUInt32(); + creatureTemplate.lootid = fields[44].GetUInt32(); + creatureTemplate.pickpocketLootId = fields[45].GetUInt32(); + creatureTemplate.SkinLootId = fields[46].GetUInt32(); for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - creatureTemplate.resistance[i] = fields[48 + i -1].GetInt16(); + creatureTemplate.resistance[i] = fields[47 + i -1].GetInt16(); for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) - creatureTemplate.spells[i] = fields[54 + i].GetUInt32(); - - creatureTemplate.PetSpellDataId = fields[62].GetUInt32(); - creatureTemplate.VehicleId = fields[63].GetUInt32(); - creatureTemplate.mingold = fields[64].GetUInt32(); - creatureTemplate.maxgold = fields[65].GetUInt32(); - creatureTemplate.AIName = fields[66].GetString(); - creatureTemplate.MovementType = uint32(fields[67].GetUInt8()); - creatureTemplate.InhabitType = uint32(fields[68].GetUInt8()); - creatureTemplate.HoverHeight = fields[69].GetFloat(); - creatureTemplate.ModHealth = fields[70].GetFloat(); - creatureTemplate.ModMana = fields[71].GetFloat(); - creatureTemplate.ModArmor = fields[72].GetFloat(); - creatureTemplate.RacialLeader = fields[73].GetBool(); + creatureTemplate.spells[i] = fields[53 + i].GetUInt32(); + + creatureTemplate.PetSpellDataId = fields[61].GetUInt32(); + creatureTemplate.VehicleId = fields[62].GetUInt32(); + creatureTemplate.mingold = fields[63].GetUInt32(); + creatureTemplate.maxgold = fields[64].GetUInt32(); + creatureTemplate.AIName = fields[65].GetString(); + creatureTemplate.MovementType = uint32(fields[66].GetUInt8()); + creatureTemplate.InhabitType = uint32(fields[67].GetUInt8()); + creatureTemplate.HoverHeight = fields[68].GetFloat(); + creatureTemplate.ModHealth = fields[69].GetFloat(); + creatureTemplate.ModMana = fields[70].GetFloat(); + creatureTemplate.ModArmor = fields[71].GetFloat(); + creatureTemplate.RacialLeader = fields[72].GetBool(); for (uint8 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) - creatureTemplate.questItems[i] = fields[74 + i].GetUInt32(); + creatureTemplate.questItems[i] = fields[73 + i].GetUInt32(); - creatureTemplate.movementId = fields[80].GetUInt32(); - creatureTemplate.RegenHealth = fields[81].GetBool(); - creatureTemplate.MechanicImmuneMask = fields[82].GetUInt32(); - creatureTemplate.flags_extra = fields[83].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[84].GetCString()); + creatureTemplate.movementId = fields[79].GetUInt32(); + creatureTemplate.RegenHealth = fields[80].GetBool(); + creatureTemplate.MechanicImmuneMask = fields[81].GetUInt32(); + creatureTemplate.flags_extra = fields[82].GetUInt32(); + creatureTemplate.ScriptID = GetScriptId(fields[83].GetCString()); ++count; } @@ -635,37 +636,51 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) } ok2 = true; } + if (!ok2) continue; if (cInfo->expansion > difficultyInfo->expansion) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, expansion %u) has different `expansion` in difficulty %u mode (Entry: %u, expansion %u).", + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, exp %u) has different `exp` in difficulty %u mode (Entry: %u, exp %u).", cInfo->Entry, cInfo->expansion, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->expansion); } - if (cInfo->faction_A != difficultyInfo->faction_A) + if (cInfo->minlevel > difficultyInfo->minlevel) + { + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, minlevel %u) has different `minlevel` in difficulty %u mode (Entry: %u, minlevel %u).", + cInfo->Entry, cInfo->minlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->minlevel); + } + + if (cInfo->maxlevel > difficultyInfo->maxlevel) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction_A %u) has different `faction_A` in difficulty %u mode (Entry: %u, faction_A %u).", - cInfo->Entry, cInfo->faction_A, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction_A); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, maxlevel %u) has different `maxlevel` in difficulty %u mode (Entry: %u, maxlevel %u).", + cInfo->Entry, cInfo->maxlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->maxlevel); } - if (cInfo->faction_H != difficultyInfo->faction_H) + if (cInfo->faction != difficultyInfo->faction) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction_H %u) has different `faction_H` in difficulty %u mode (Entry: %u, faction_H %u).", - cInfo->Entry, cInfo->faction_H, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction_H); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, faction %u) has different `faction` in difficulty %u mode (Entry: %u, faction %u).", + cInfo->Entry, cInfo->faction, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->faction); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `faction`=%u WHERE `entry`=%u;", + cInfo->faction, cInfo->DifficultyEntry[diff]); } if (cInfo->unit_class != difficultyInfo->unit_class) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, class %u) has different `unit_class` in difficulty %u mode (Entry: %u, class %u).", cInfo->Entry, cInfo->unit_class, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->unit_class); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `unit_class`=%u WHERE `entry`=%u;", + cInfo->unit_class, cInfo->DifficultyEntry[diff]); continue; } if (cInfo->npcflag != difficultyInfo->npcflag) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `npcflag` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, `npcflag`: %u) has different `npcflag` in difficulty %u mode (Entry: %u, `npcflag`: %u).", + cInfo->Entry, cInfo->npcflag, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->npcflag); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `npcflag`=%u WHERE `entry`=%u;", + cInfo->npcflag, cInfo->DifficultyEntry[diff]); continue; } @@ -673,23 +688,34 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, family %u) has different `family` in difficulty %u mode (Entry: %u, family %u).", cInfo->Entry, cInfo->family, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->family); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `family`=%u WHERE `entry`=%u;", + cInfo->family, cInfo->DifficultyEntry[diff]); } if (cInfo->trainer_class != difficultyInfo->trainer_class) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_class` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_class: %u) has different `trainer_class` in difficulty %u mode (Entry: %u, trainer_class: %u).", + cInfo->Entry, cInfo->trainer_class, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_class); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_class`=%u WHERE `entry`=%u;", + cInfo->trainer_class, cInfo->DifficultyEntry[diff]); continue; } if (cInfo->trainer_race != difficultyInfo->trainer_race) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_race` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_race: %u) has different `trainer_race` in difficulty %u mode (Entry: %u, trainer_race: %u).", + cInfo->Entry, cInfo->trainer_race, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_race); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_race`=%u WHERE `entry`=%u;", + cInfo->trainer_race, cInfo->DifficultyEntry[diff]); continue; } if (cInfo->trainer_type != difficultyInfo->trainer_type) { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has different `trainer_type` in difficulty %u mode (Entry: %u).", cInfo->Entry, diff + 1, cInfo->DifficultyEntry[diff]); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, trainer_type: %u) has different `trainer_type` in difficulty %u mode (Entry: %u, trainer_type: %u).", + cInfo->Entry, cInfo->trainer_type, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->trainer_type); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `trainer_type`=%u WHERE `entry`=%u;", + cInfo->trainer_type, cInfo->DifficultyEntry[diff]); continue; } @@ -703,12 +729,8 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, type %u) has different `type` in difficulty %u mode (Entry: %u, type %u).", cInfo->Entry, cInfo->type, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->type); - } - - if (cInfo->type_flags != difficultyInfo->type_flags) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, type_flags %u) has different `type_flags` in difficulty %u mode (Entry: %u, type_flags %u).", - cInfo->Entry, cInfo->type_flags, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->type_flags); + TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `type`=%u WHERE `entry`=%u;", + cInfo->type, cInfo->DifficultyEntry[diff]); } if (!cInfo->VehicleId && difficultyInfo->VehicleId) @@ -736,13 +758,9 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) ok = true; } - FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_A); + FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction); if (!factionTemplate) - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction_A template (%u).", cInfo->Entry, cInfo->faction_A); - - factionTemplate = sFactionTemplateStore.LookupEntry(cInfo->faction_H); - if (!factionTemplate) - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction_H template (%u).", cInfo->Entry, cInfo->faction_H); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has non-existing faction template (%u).", cInfo->Entry, cInfo->faction); // used later for scale CreatureDisplayInfoEntry const* displayScaleEntry = NULL; @@ -1092,6 +1110,11 @@ void ObjectMgr::LoadEquipmentTemplates() } uint8 id = fields[1].GetUInt8(); + if (!id) + { + TC_LOG_ERROR("sql.sql", "Creature equipment template with id 0 found for creature %u, skipped.", entry); + continue; + } EquipmentInfo& equipmentInfo = _equipmentInfoStore[entry][id]; @@ -1442,6 +1465,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow) return false; const CreatureData* master = GetCreatureData(guidLow); + ASSERT(master); uint64 guid = MAKE_NEW_GUID(guidLow, master->id, HIGHGUID_UNIT); if (!linkedGuidLow) // we're removing the linking @@ -1644,7 +1668,7 @@ void ObjectMgr::LoadCreatures() } // Skip spawnMask check for transport maps - if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) + if (!IsTransportMap(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) TC_LOG_ERROR("sql.sql", "Table `creature` have creature (GUID: %u) that have wrong spawn mask %u including not supported difficulty modes for map (Id: %u).", guid, data.spawnMask, data.mapid); bool ok = true; @@ -1826,7 +1850,7 @@ bool ObjectMgr::MoveCreData(uint32 guid, uint32 mapId, const Position& pos) return true; } -uint32 ObjectMgr::AddCreData(uint32 entry, uint32 /*team*/, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay) +uint32 ObjectMgr::AddCreData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/) { CreatureTemplate const* cInfo = GetCreatureTemplate(entry); if (!cInfo) @@ -1979,7 +2003,7 @@ void ObjectMgr::LoadGameobjects() data.spawnMask = fields[14].GetUInt8(); - if (!_transportMaps.count(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) + if (!IsTransportMap(data.mapid) && data.spawnMask & ~spawnMasks[data.mapid]) TC_LOG_ERROR("sql.sql", "Table `gameobject` has gameobject (GUID: %u Entry: %u) that has wrong spawn mask %u including not supported difficulty modes for map (Id: %u), skip", guid, data.id, data.spawnMask, data.mapid); data.phaseMask = fields[15].GetUInt32(); @@ -2927,32 +2951,32 @@ void ObjectMgr::LoadVehicleTemplateAccessories() { Field* fields = result->Fetch(); - uint32 uiEntry = fields[0].GetUInt32(); - uint32 uiAccessory = fields[1].GetUInt32(); - int8 uiSeat = int8(fields[2].GetInt8()); - bool bMinion = fields[3].GetBool(); - uint8 uiSummonType = fields[4].GetUInt8(); - uint32 uiSummonTimer= fields[5].GetUInt32(); + uint32 entry = fields[0].GetUInt32(); + uint32 accessory = fields[1].GetUInt32(); + int8 seatId = fields[2].GetInt8(); + bool isMinion = fields[3].GetBool(); + uint8 summonType = fields[4].GetUInt8(); + uint32 summonTimer = fields[5].GetUInt32(); - if (!sObjectMgr->GetCreatureTemplate(uiEntry)) + if (!sObjectMgr->GetCreatureTemplate(entry)) { - TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u does not exist.", uiEntry); + TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u does not exist.", entry); continue; } - if (!sObjectMgr->GetCreatureTemplate(uiAccessory)) + if (!sObjectMgr->GetCreatureTemplate(accessory)) { - TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: Accessory %u does not exist.", uiAccessory); + TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: Accessory %u does not exist.", accessory); continue; } - if (_spellClickInfoStore.find(uiEntry) == _spellClickInfoStore.end()) + if (_spellClickInfoStore.find(entry) == _spellClickInfoStore.end()) { - TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u has no data in npc_spellclick_spells", uiEntry); + TC_LOG_ERROR("sql.sql", "Table `vehicle_template_accessory`: creature template entry %u has no data in npc_spellclick_spells", entry); continue; } - _vehicleTemplateAccessoryStore[uiEntry].push_back(VehicleAccessory(uiAccessory, uiSeat, bMinion, uiSummonType, uiSummonTimer)); + _vehicleTemplateAccessoryStore[entry].push_back(VehicleAccessory(accessory, seatId, isMinion, summonType, summonTimer)); ++count; } @@ -3298,17 +3322,91 @@ void ObjectMgr::LoadPlayerInfo() } } + + // Load playercreate skills + TC_LOG_INFO("server.loading", "Loading Player Create Skill Data..."); + { + uint32 oldMSTime = getMSTime(); + + QueryResult result = WorldDatabase.PQuery("SELECT raceMask, classMask, skill, rank FROM playercreateinfo_skills"); + + if (!result) + { + TC_LOG_ERROR("server.loading", ">> Loaded 0 player create skills. DB table `playercreateinfo_skills` is empty."); + } + else + { + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + uint32 raceMask = fields[0].GetUInt32(); + uint32 classMask = fields[1].GetUInt32(); + PlayerCreateInfoSkill skill; + skill.SkillId = fields[2].GetUInt16(); + skill.Rank = fields[3].GetUInt16(); + + if (skill.Rank >= MAX_SKILL_STEP) + { + TC_LOG_ERROR("sql.sql", "Skill rank value %hu set for skill %hu raceMask %u classMask %u is too high, max allowed value is %d", skill.Rank, skill.SkillId, raceMask, classMask, MAX_SKILL_STEP); + continue; + } + + if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) + { + TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_skills` table, ignoring.", raceMask); + continue; + } + + if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE)) + { + TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_skills` table, ignoring.", classMask); + continue; + } + + if (!sSkillLineStore.LookupEntry(skill.SkillId)) + { + TC_LOG_ERROR("sql.sql", "Wrong skill id %u in `playercreateinfo_skills` table, ignoring.", skill.SkillId); + continue; + } + + for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex) + { + if (raceMask == 0 || ((1 << (raceIndex - 1)) & raceMask)) + { + for (uint32 classIndex = CLASS_WARRIOR; classIndex < MAX_CLASSES; ++classIndex) + { + if (classMask == 0 || ((1 << (classIndex - 1)) & classMask)) + { + if (!GetSkillRaceClassInfo(skill.SkillId, raceIndex, classIndex)) + continue; + + if (PlayerInfo* info = _playerInfo[raceIndex][classIndex]) + { + info->skills.push_back(skill); + ++count; + } + } + } + } + } + } while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u player create skills in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + } + } + // Load playercreate spells TC_LOG_INFO("server.loading", "Loading Player Create Spell Data..."); { uint32 oldMSTime = getMSTime(); - std::string tableName = sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS) ? "playercreateinfo_spell_custom" : "playercreateinfo_spell"; - QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM %s", tableName.c_str()); + QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM playercreateinfo_spell_custom"); if (!result) { - TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `%s` is empty.", tableName.c_str()); + TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `playercreateinfo_spell_custom` is empty."); } else { @@ -3323,13 +3421,13 @@ void ObjectMgr::LoadPlayerInfo() if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `%s` table, ignoring.", raceMask, tableName.c_str()); + TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_spell_custom` table, ignoring.", raceMask); continue; } if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `%s` table, ignoring.", classMask, tableName.c_str()); + TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_spell_custom` table, ignoring.", classMask); continue; } @@ -3343,7 +3441,7 @@ void ObjectMgr::LoadPlayerInfo() { if (PlayerInfo* info = _playerInfo[raceIndex][classIndex]) { - info->spell.push_back(spellId); + info->customSpells.push_back(spellId); ++count; } // We need something better here, the check is not accounting for spells used by multiple races/classes but not all of them. @@ -3357,7 +3455,7 @@ void ObjectMgr::LoadPlayerInfo() } while (result->NextRow()); - TC_LOG_INFO("server.loading", ">> Loaded %u player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded %u custom player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } } @@ -3798,8 +3896,8 @@ void ObjectMgr::LoadQuests() "RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, " // 117 118 119 120 121 122 123 124 125 126 127 128 129 "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, " - // 130 131 132 133 134 135 136 137 138 139 140 - "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, WDBVerified" + // 130 131 132 133 134 135 136 137 138 139 + "EmoteOnIncomplete, EmoteOnComplete, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4" " FROM quest_template"); if (!result) { @@ -5202,17 +5300,28 @@ void ObjectMgr::LoadGossipText() { uint32 oldMSTime = getMSTime(); - QueryResult result = WorldDatabase.Query("SELECT * FROM npc_text"); + QueryResult result = WorldDatabase.Query("SELECT ID, " + "text0_0, text0_1, BroadcastTextID0, lang0, prob0, em0_0, em0_1, em0_2, em0_3, em0_4, em0_5, " + "text1_0, text1_1, BroadcastTextID1, lang1, prob1, em1_0, em1_1, em1_2, em1_3, em1_4, em1_5, " + "text2_0, text2_1, BroadcastTextID2, lang2, prob2, em2_0, em2_1, em2_2, em2_3, em2_4, em2_5, " + "text3_0, text3_1, BroadcastTextID3, lang3, prob3, em3_0, em3_1, em3_2, em3_3, em3_4, em3_5, " + "text4_0, text4_1, BroadcastTextID4, lang4, prob4, em4_0, em4_1, em4_2, em4_3, em4_4, em4_5, " + "text5_0, text5_1, BroadcastTextID5, lang5, prob5, em5_0, em5_1, em5_2, em5_3, em5_4, em5_5, " + "text6_0, text6_1, BroadcastTextID6, lang6, prob6, em6_0, em6_1, em6_2, em6_3, em6_4, em6_5, " + "text7_0, text7_1, BroadcastTextID7, lang7, prob7, em7_0, em7_1, em7_2, em7_3, em7_4, em7_5 " + "FROM npc_text"); + - int count = 0; if (!result) { - TC_LOG_INFO("server.loading", ">> Loaded %u npc texts", count); + TC_LOG_INFO("server.loading", ">> Loaded 0 npc texts, table is empty!"); return; } + _gossipTextStore.rehash(result->GetRowCount()); - int cic; + uint32 count = 0; + uint8 cic; do { @@ -5221,30 +5330,44 @@ void ObjectMgr::LoadGossipText() Field* fields = result->Fetch(); - uint32 Text_ID = fields[cic++].GetUInt32(); - if (!Text_ID) + uint32 id = fields[cic++].GetUInt32(); + if (!id) { - TC_LOG_ERROR("sql.sql", "Table `npc_text` has record wit reserved id 0, ignore."); + TC_LOG_ERROR("sql.sql", "Table `npc_text` has record with reserved id 0, ignore."); continue; } - GossipText& gText = _gossipTextStore[Text_ID]; + GossipText& gText = _gossipTextStore[id]; - for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; i++) + for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) { gText.Options[i].Text_0 = fields[cic++].GetString(); gText.Options[i].Text_1 = fields[cic++].GetString(); - + gText.Options[i].BroadcastTextID = fields[cic++].GetUInt32(); gText.Options[i].Language = fields[cic++].GetUInt8(); gText.Options[i].Probability = fields[cic++].GetFloat(); - for (uint8 j=0; j < MAX_GOSSIP_TEXT_EMOTES; ++j) + for (uint8 j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j) { - gText.Options[i].Emotes[j]._Delay = fields[cic++].GetUInt16(); - gText.Options[i].Emotes[j]._Emote = fields[cic++].GetUInt16(); + gText.Options[i].Emotes[j]._Delay = fields[cic++].GetUInt16(); + gText.Options[i].Emotes[j]._Emote = fields[cic++].GetUInt16(); } } - } while (result->NextRow()); + + for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; i++) + { + if (gText.Options[i].BroadcastTextID) + { + if (!sObjectMgr->GetBroadcastText(gText.Options[i].BroadcastTextID)) + { + TC_LOG_ERROR("sql.sql", "GossipText (Id: %u) in table `npc_text` has non-existing or incompatible BroadcastTextID%u %u.", id, i, gText.Options[i].BroadcastTextID); + gText.Options[i].BroadcastTextID = 0; + } + } + } + + } + while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %u npc texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } @@ -6012,8 +6135,9 @@ void ObjectMgr::LoadAccessRequirements() _accessRequirementStore.clear(); // need for reload case } - // 0 1 2 3 4 5 6 7 8 9 - QueryResult result = WorldDatabase.Query("SELECT mapid, difficulty, level_min, level_max, item, item2, quest_done_A, quest_done_H, completed_achievement, quest_failed_text FROM access_requirement"); + // 0 1 2 3 4 5 6 7 8 9 10 + QueryResult result = WorldDatabase.Query("SELECT mapid, difficulty, level_min, level_max, item_level, item, item2, quest_done_A, quest_done_H, completed_achievement, quest_failed_text FROM access_requirement"); + if (!result) { TC_LOG_INFO("server.loading", ">> Loaded 0 access requirement definitions. DB table `access_requirement` is empty."); @@ -6036,12 +6160,13 @@ void ObjectMgr::LoadAccessRequirements() ar->levelMin = fields[2].GetUInt8(); ar->levelMax = fields[3].GetUInt8(); - ar->item = fields[4].GetUInt32(); - ar->item2 = fields[5].GetUInt32(); - ar->quest_A = fields[6].GetUInt32(); - ar->quest_H = fields[7].GetUInt32(); - ar->achievement = fields[8].GetUInt32(); - ar->questFailedText = fields[9].GetString(); + ar->item_level = fields[4].GetUInt16(); + ar->item = fields[5].GetUInt32(); + ar->item2 = fields[6].GetUInt32(); + ar->quest_A = fields[7].GetUInt32(); + ar->quest_H = fields[8].GetUInt32(); + ar->achievement = fields[9].GetUInt32(); + ar->questFailedText = fields[10].GetString(); if (ar->item) { @@ -7510,6 +7635,10 @@ void ObjectMgr::LoadGameObjectForQuests() { switch (itr->second.type) { + case GAMEOBJECT_TYPE_QUESTGIVER: + _gameObjectForQuestStore.insert(itr->second.entry); + ++count; + break; case GAMEOBJECT_TYPE_CHEST: { // scan GO chest with loot including quest items @@ -7753,36 +7882,27 @@ int32 ObjectMgr::GetBaseReputationOf(FactionEntry const* factionEntry, uint8 rac return 0; } -SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial) +SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry) { - switch (pSkill->categoryId) + SkillLineEntry const* skill = sSkillLineStore.LookupEntry(rcEntry->SkillId); + if (!skill) + return SKILL_RANGE_NONE; + + if (sSkillTiersStore.LookupEntry(rcEntry->SkillTier)) + return SKILL_RANGE_RANK; + + if (rcEntry->SkillId == SKILL_RUNEFORGING) + return SKILL_RANGE_MONO; + + switch (skill->categoryId) { - case SKILL_CATEGORY_LANGUAGES: return SKILL_RANGE_LANGUAGE; - case SKILL_CATEGORY_WEAPON: - if (pSkill->id != SKILL_FIST_WEAPONS) - return SKILL_RANGE_LEVEL; - else - return SKILL_RANGE_MONO; case SKILL_CATEGORY_ARMOR: - case SKILL_CATEGORY_CLASS: - if (pSkill->id != SKILL_LOCKPICKING) - return SKILL_RANGE_MONO; - else - return SKILL_RANGE_LEVEL; - case SKILL_CATEGORY_SECONDARY: - case SKILL_CATEGORY_PROFESSION: - // not set skills for professions and racial abilities - if (IsProfessionSkill(pSkill->id)) - return SKILL_RANGE_RANK; - else if (racial) - return SKILL_RANGE_NONE; - else - return SKILL_RANGE_MONO; - default: - case SKILL_CATEGORY_ATTRIBUTES: //not found in dbc - case SKILL_CATEGORY_GENERIC: //only GENERIC(DND) - return SKILL_RANGE_NONE; + return SKILL_RANGE_MONO; + case SKILL_CATEGORY_LANGUAGES: + return SKILL_RANGE_LANGUAGE; } + + return SKILL_RANGE_LEVEL; } void ObjectMgr::LoadGameTele() @@ -8257,8 +8377,8 @@ void ObjectMgr::LoadGossipMenuItems() _gossipMenuItemsStore.clear(); QueryResult result = WorldDatabase.Query( - // 0 1 2 3 4 5 6 7 8 9 10 - "SELECT menu_id, id, option_icon, option_text, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text " + // 0 1 2 3 4 5 6 7 8 9 10 11 12 + "SELECT menu_id, id, option_icon, option_text, OptionBroadcastTextID, option_id, npc_option_npcflag, action_menu_id, action_poi_id, box_coded, box_money, box_text, BoxBroadcastTextID " "FROM gossip_menu_option ORDER BY menu_id, id"); if (!result) @@ -8279,29 +8399,49 @@ void ObjectMgr::LoadGossipMenuItems() gMenuItem.OptionIndex = fields[1].GetUInt16(); gMenuItem.OptionIcon = fields[2].GetUInt32(); gMenuItem.OptionText = fields[3].GetString(); - gMenuItem.OptionType = fields[4].GetUInt8(); - gMenuItem.OptionNpcflag = fields[5].GetUInt32(); - gMenuItem.ActionMenuId = fields[6].GetUInt32(); - gMenuItem.ActionPoiId = fields[7].GetUInt32(); - gMenuItem.BoxCoded = fields[8].GetBool(); - gMenuItem.BoxMoney = fields[9].GetUInt32(); - gMenuItem.BoxText = fields[10].GetString(); + gMenuItem.OptionBroadcastTextId = fields[4].GetUInt32(); + gMenuItem.OptionType = fields[5].GetUInt8(); + gMenuItem.OptionNpcflag = fields[6].GetUInt32(); + gMenuItem.ActionMenuId = fields[7].GetUInt32(); + gMenuItem.ActionPoiId = fields[8].GetUInt32(); + gMenuItem.BoxCoded = fields[9].GetBool(); + gMenuItem.BoxMoney = fields[10].GetUInt32(); + gMenuItem.BoxText = fields[11].GetString(); + gMenuItem.BoxBroadcastTextId = fields[12].GetUInt32(); if (gMenuItem.OptionIcon >= GOSSIP_ICON_MAX) { - TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u has unknown icon id %u. Replacing with GOSSIP_ICON_CHAT", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionIcon); + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown icon id %u. Replacing with GOSSIP_ICON_CHAT", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionIcon); gMenuItem.OptionIcon = GOSSIP_ICON_CHAT; } + if (gMenuItem.OptionBroadcastTextId) + { + if (!GetBroadcastText(gMenuItem.OptionBroadcastTextId)) + { + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible OptionBroadcastTextId %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionBroadcastTextId); + gMenuItem.OptionBroadcastTextId = 0; + } + } + if (gMenuItem.OptionType >= GOSSIP_OPTION_MAX) - TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionType); + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.OptionType); if (gMenuItem.ActionPoiId && !GetPointOfInterest(gMenuItem.ActionPoiId)) { - TC_LOG_ERROR("sql.sql", "Table gossip_menu_option for menu %u, id %u use non-existing action_poi_id %u, ignoring", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.ActionPoiId); + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u use non-existing action_poi_id %u, ignoring", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.ActionPoiId); gMenuItem.ActionPoiId = 0; } + if (gMenuItem.BoxBroadcastTextId) + { + if (!GetBroadcastText(gMenuItem.BoxBroadcastTextId)) + { + TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option` for menu %u, id %u has non-existing or incompatible BoxBroadcastTextId %u, ignoring.", gMenuItem.MenuId, gMenuItem.OptionIndex, gMenuItem.BoxBroadcastTextId); + gMenuItem.BoxBroadcastTextId = 0; + } + } + _gossipMenuItemsStore.insert(GossipMenuItemsContainer::value_type(gMenuItem.MenuId, gMenuItem)); ++count; } @@ -8519,6 +8659,141 @@ void ObjectMgr::CheckScripts(ScriptsType type, std::set<int32>& ids) } } +void ObjectMgr::LoadBroadcastTexts() +{ + uint32 oldMSTime = getMSTime(); + + _broadcastTextStore.clear(); // for reload case + + // 0 1 2 3 4 5 6 7 8 9 10 11 12 + QueryResult result = WorldDatabase.Query("SELECT ID, Language, MaleText, FemaleText, EmoteID0, EmoteID1, EmoteID2, EmoteDelay0, EmoteDelay1, EmoteDelay2, SoundId, Unk1, Unk2 FROM broadcast_text"); + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 broadcast texts. DB table `broadcast_text` is empty."); + return; + } + + _broadcastTextStore.rehash(result->GetRowCount()); + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + + BroadcastText bct; + + bct.Id = fields[0].GetUInt32(); + bct.Language = fields[1].GetUInt32(); + bct.MaleText[DEFAULT_LOCALE] = fields[2].GetString(); + bct.FemaleText[DEFAULT_LOCALE] = fields[3].GetString(); + bct.EmoteId0 = fields[4].GetUInt32(); + bct.EmoteId1 = fields[5].GetUInt32(); + bct.EmoteId2 = fields[6].GetUInt32(); + bct.EmoteDelay0 = fields[7].GetUInt32(); + bct.EmoteDelay1 = fields[8].GetUInt32(); + bct.EmoteDelay2 = fields[9].GetUInt32(); + bct.SoundId = fields[10].GetUInt32(); + bct.Unk1 = fields[11].GetUInt32(); + bct.Unk2 = fields[12].GetUInt32(); + + if (bct.SoundId) + { + if (!sSoundEntriesStore.LookupEntry(bct.SoundId)) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist. Skipped.", bct.Id, bct.SoundId); + // don't load bct of higher expansions + continue; + } + } + + if (!GetLanguageDescByID(bct.Language)) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist. Skipped.", bct.Id, bct.Language); + // don't load bct of higher expansions + continue; + } + + if (bct.EmoteId0) + { + if (!sEmotesStore.LookupEntry(bct.EmoteId0)) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId0); + // don't load bct of higher expansions + continue; + } + } + + if (bct.EmoteId1) + { + if (!sEmotesStore.LookupEntry(bct.EmoteId1)) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId1); + // don't load bct of higher expansions + continue; + } + } + + if (bct.EmoteId2) + { + if (!sEmotesStore.LookupEntry(bct.EmoteId2)) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId2); + // don't load bct of higher expansions + continue; + } + } + + _broadcastTextStore[bct.Id] = bct; + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u broadcast texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + +void ObjectMgr::LoadBroadcastTextLocales() +{ + uint32 oldMSTime = getMSTime(); + + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + QueryResult result = WorldDatabase.Query("SELECT Id, MaleText_loc1, MaleText_loc2, MaleText_loc3, MaleText_loc4, MaleText_loc5, MaleText_loc6, MaleText_loc7, MaleText_loc8, FemaleText_loc1, FemaleText_loc2, FemaleText_loc3, FemaleText_loc4, FemaleText_loc5, FemaleText_loc6, FemaleText_loc7, FemaleText_loc8 FROM locales_broadcast_text"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 broadcast text locales. DB table `locales_broadcast_text` is empty."); + return; + } + + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + + uint32 id = fields[0].GetUInt32(); + BroadcastTextContainer::iterator bct = _broadcastTextStore.find(id); + if (bct == _broadcastTextStore.end()) + { + TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist or is incompatible. Skipped!", id); + // don't load bct of higher expansions + continue; + } + + for (uint8 i = 1; i < TOTAL_LOCALES; ++i) + { + LocaleConstant locale = LocaleConstant(i); + ObjectMgr::AddLocaleString(fields[1 + (i - 1)].GetString(), locale, bct->second.MaleText); + ObjectMgr::AddLocaleString(fields[9 + (i - 1)].GetString(), locale, bct->second.FemaleText); + } + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u broadcast text locales in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + void ObjectMgr::LoadDbScriptStrings() { LoadTrinityStrings("db_script_string", MIN_DB_SCRIPT_STRING_ID, MAX_DB_SCRIPT_STRING_ID); @@ -8536,19 +8811,6 @@ void ObjectMgr::LoadDbScriptStrings() TC_LOG_ERROR("sql.sql", "Table `db_script_string` has unused string id %u", *itr); } -bool LoadTrinityStrings(const char* table, int32 start_value, int32 end_value) -{ - // MAX_DB_SCRIPT_STRING_ID is max allowed negative value for scripts (scrpts can use only more deep negative values - // start/end reversed for negative values - if (start_value > MAX_DB_SCRIPT_STRING_ID || end_value >= start_value) - { - TC_LOG_ERROR("sql.sql", "Table '%s' load attempted with range (%d - %d) reserved by Trinity, strings not loaded.", table, start_value, end_value+1); - return false; - } - - return sObjectMgr->LoadTrinityStrings(table, start_value, end_value); -} - CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint8 level, uint8 unitClass) { CreatureBaseStatsContainer::const_iterator it = _creatureBaseStatsStore.find(MAKE_PAIR16(level, unitClass)); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index b1f80af0567..3f8013bbd78 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -125,11 +125,11 @@ enum ScriptCommands SCRIPT_COMMAND_PLAYMOVIE = 34 // source = Player, datalong = movie id }; -// Benchmarked: Faster than UNORDERED_MAP (insert/find) +// Benchmarked: Faster than std::unordered_map (insert/find) typedef std::map<uint32, PageText> PageTextContainer; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint16, InstanceTemplate> InstanceTemplateContainer; +typedef std::unordered_map<uint16, InstanceTemplate> InstanceTemplateContainer; struct GameTele { @@ -142,7 +142,7 @@ struct GameTele std::wstring wnameLow; }; -typedef UNORDERED_MAP<uint32, GameTele > GameTeleContainer; +typedef std::unordered_map<uint32, GameTele > GameTeleContainer; enum ScriptsType { @@ -410,6 +410,49 @@ struct AreaTrigger float target_Orientation; }; +struct BroadcastText +{ + BroadcastText() : Id(0), Language(0), EmoteId0(0), EmoteId1(0), EmoteId2(0), + EmoteDelay0(0), EmoteDelay1(0), EmoteDelay2(0), SoundId(0), Unk1(0), Unk2(0) + { + MaleText.resize(DEFAULT_LOCALE + 1); + FemaleText.resize(DEFAULT_LOCALE + 1); + } + + uint32 Id; + uint32 Language; + StringVector MaleText; + StringVector FemaleText; + uint32 EmoteId0; + uint32 EmoteId1; + uint32 EmoteId2; + uint32 EmoteDelay0; + uint32 EmoteDelay1; + uint32 EmoteDelay2; + uint32 SoundId; + uint32 Unk1; + uint32 Unk2; + // uint32 VerifiedBuild; + + std::string const& GetText(LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false) const + { + if (gender == GENDER_FEMALE && (forceGender || !FemaleText[DEFAULT_LOCALE].empty())) + { + if (FemaleText.size() > size_t(locale) && !FemaleText[locale].empty()) + return FemaleText[locale]; + return FemaleText[DEFAULT_LOCALE]; + } + // else if (gender == GENDER_MALE) + { + if (MaleText.size() > size_t(locale) && !MaleText[locale].empty()) + return MaleText[locale]; + return MaleText[DEFAULT_LOCALE]; + } + } +}; + +typedef std::unordered_map<uint32, BroadcastText> BroadcastTextContainer; + typedef std::set<uint32> CellGuidSet; typedef std::map<uint32/*player guid*/, uint32/*instance*/> CellCorpseSet; struct CellObjectGuids @@ -418,16 +461,14 @@ struct CellObjectGuids CellGuidSet gameobjects; CellCorpseSet corpses; }; -typedef UNORDERED_MAP<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap; -typedef UNORDERED_MAP<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids; +typedef std::unordered_map<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap; +typedef std::unordered_map<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids; // Trinity string ranges #define MIN_TRINITY_STRING_ID 1 // 'trinity_string' #define MAX_TRINITY_STRING_ID 2000000000 #define MIN_DB_SCRIPT_STRING_ID MAX_TRINITY_STRING_ID // 'db_script_string' #define MAX_DB_SCRIPT_STRING_ID 2000010000 -#define MIN_CREATURE_AI_TEXT_STRING_ID (-1) // 'creature_ai_texts' -#define MAX_CREATURE_AI_TEXT_STRING_ID (-1000000) // Trinity Trainer Reference start range #define TRINITY_TRAINER_START_REF 200000 @@ -438,19 +479,19 @@ struct TrinityStringLocale }; typedef std::map<uint64, uint64> LinkedRespawnContainer; -typedef UNORDERED_MAP<uint32, CreatureData> CreatureDataContainer; -typedef UNORDERED_MAP<uint32, GameObjectData> GameObjectDataContainer; +typedef std::unordered_map<uint32, CreatureData> CreatureDataContainer; +typedef std::unordered_map<uint32, GameObjectData> GameObjectDataContainer; typedef std::map<TempSummonGroupKey, std::vector<TempSummonData> > TempSummonDataContainer; -typedef UNORDERED_MAP<uint32, CreatureLocale> CreatureLocaleContainer; -typedef UNORDERED_MAP<uint32, GameObjectLocale> GameObjectLocaleContainer; -typedef UNORDERED_MAP<uint32, ItemLocale> ItemLocaleContainer; -typedef UNORDERED_MAP<uint32, ItemSetNameLocale> ItemSetNameLocaleContainer; -typedef UNORDERED_MAP<uint32, QuestLocale> QuestLocaleContainer; -typedef UNORDERED_MAP<uint32, NpcTextLocale> NpcTextLocaleContainer; -typedef UNORDERED_MAP<uint32, PageTextLocale> PageTextLocaleContainer; -typedef UNORDERED_MAP<int32, TrinityStringLocale> TrinityStringLocaleContainer; -typedef UNORDERED_MAP<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; -typedef UNORDERED_MAP<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer; +typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer; +typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer; +typedef std::unordered_map<uint32, ItemLocale> ItemLocaleContainer; +typedef std::unordered_map<uint32, ItemSetNameLocale> ItemSetNameLocaleContainer; +typedef std::unordered_map<uint32, QuestLocale> QuestLocaleContainer; +typedef std::unordered_map<uint32, NpcTextLocale> NpcTextLocaleContainer; +typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer; +typedef std::unordered_map<int32, TrinityStringLocale> TrinityStringLocaleContainer; +typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; +typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer; typedef std::multimap<uint32, uint32> QuestRelations; typedef std::pair<QuestRelations::const_iterator, QuestRelations::const_iterator> QuestRelationBounds; @@ -476,7 +517,7 @@ struct MailLevelReward }; typedef std::list<MailLevelReward> MailLevelRewardList; -typedef UNORDERED_MAP<uint8, MailLevelRewardList> MailLevelRewardContainer; +typedef std::unordered_map<uint8, MailLevelRewardList> MailLevelRewardContainer; // We assume the rate is in general the same for all three types below, but chose to keep three for scalability and customization struct RepRewardRate @@ -527,6 +568,7 @@ struct GossipMenuItems uint32 OptionIndex; uint8 OptionIcon; std::string OptionText; + uint32 OptionBroadcastTextId; uint32 OptionType; uint32 OptionNpcflag; uint32 ActionMenuId; @@ -534,6 +576,7 @@ struct GossipMenuItems bool BoxCoded; uint32 BoxMoney; std::string BoxText; + uint32 BoxBroadcastTextId; ConditionList Conditions; }; @@ -576,7 +619,7 @@ struct QuestPOI }; typedef std::vector<QuestPOI> QuestPOIVector; -typedef UNORDERED_MAP<uint32, QuestPOIVector> QuestPOIContainer; +typedef std::unordered_map<uint32, QuestPOIVector> QuestPOIContainer; struct GraveYardData { @@ -588,8 +631,8 @@ typedef std::multimap<uint32, GraveYardData> GraveYardContainer; typedef std::pair<GraveYardContainer::const_iterator, GraveYardContainer::const_iterator> GraveYardMapBounds; typedef std::pair<GraveYardContainer::iterator, GraveYardContainer::iterator> GraveYardMapBoundsNonConst; -typedef UNORDERED_MAP<uint32, VendorItemData> CacheVendorItemContainer; -typedef UNORDERED_MAP<uint32, TrainerSpellData> CacheTrainerSpellContainer; +typedef std::unordered_map<uint32, VendorItemData> CacheVendorItemContainer; +typedef std::unordered_map<uint32, TrainerSpellData> CacheTrainerSpellContainer; enum SkillRangeType { @@ -600,7 +643,7 @@ enum SkillRangeType SKILL_RANGE_NONE // 0..0 always }; -SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial); +SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry); #define MAX_PLAYER_NAME 12 // max allowed by client name length #define MAX_INTERNAL_PLAYER_NAME 15 // max server internal player name length (> MAX_PLAYER_NAME for support declined names) @@ -637,7 +680,7 @@ struct DungeonEncounter }; typedef std::list<DungeonEncounter const*> DungeonEncounterList; -typedef UNORDERED_MAP<uint32, DungeonEncounterList> DungeonEncounterContainer; +typedef std::unordered_map<uint32, DungeonEncounterList> DungeonEncounterContainer; class PlayerDumpReader; @@ -651,21 +694,21 @@ class ObjectMgr ~ObjectMgr(); public: - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; - typedef UNORDERED_MAP<uint32, Quest*> QuestMap; + typedef std::unordered_map<uint32, Quest*> QuestMap; - typedef UNORDERED_MAP<uint32, AreaTrigger> AreaTriggerContainer; + typedef std::unordered_map<uint32, AreaTrigger> AreaTriggerContainer; - typedef UNORDERED_MAP<uint32, uint32> AreaTriggerScriptContainer; + typedef std::unordered_map<uint32, uint32> AreaTriggerScriptContainer; - typedef UNORDERED_MAP<uint32, AccessRequirement*> AccessRequirementContainer; + typedef std::unordered_map<uint32, AccessRequirement*> AccessRequirementContainer; - typedef UNORDERED_MAP<uint32, RepRewardRate > RepRewardRateContainer; - typedef UNORDERED_MAP<uint32, ReputationOnKillEntry> RepOnKillContainer; - typedef UNORDERED_MAP<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer; + typedef std::unordered_map<uint32, RepRewardRate > RepRewardRateContainer; + typedef std::unordered_map<uint32, ReputationOnKillEntry> RepOnKillContainer; + typedef std::unordered_map<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer; - typedef UNORDERED_MAP<uint32, PointOfInterest> PointOfInterestContainer; + typedef std::unordered_map<uint32, PointOfInterest> PointOfInterestContainer; typedef std::vector<std::string> ScriptNameContainer; @@ -845,7 +888,7 @@ class ObjectMgr DungeonEncounterList const* GetDungeonEncounterList(uint32 mapId, Difficulty difficulty) { - UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty)); + std::unordered_map<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty)); if (itr != _dungeonEncounterStore.end()) return &itr->second; return NULL; @@ -905,6 +948,8 @@ class ObjectMgr void LoadSpellScriptNames(); void ValidateSpellScripts(); + void LoadBroadcastTexts(); + void LoadBroadcastTextLocales(); bool LoadTrinityStrings(char const* table, int32 min_value, int32 max_value); bool LoadTrinityStrings() { return LoadTrinityStrings("trinity_string", MIN_TRINITY_STRING_ID, MAX_TRINITY_STRING_ID); } void LoadDbScriptStrings(); @@ -1042,6 +1087,14 @@ class ObjectMgr return NULL; } + BroadcastText const* GetBroadcastText(uint32 id) const + { + BroadcastTextContainer::const_iterator itr = _broadcastTextStore.find(id); + if (itr != _broadcastTextStore.end()) + return &itr->second; + return NULL; + } + CreatureData const* GetCreatureData(uint32 guid) const { CreatureDataContainer::const_iterator itr = _creatureDataStore.find(guid); @@ -1140,7 +1193,7 @@ class ObjectMgr void AddGameobjectToGrid(uint32 guid, GameObjectData const* data); void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data); uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); - uint32 AddCreData(uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); + uint32 AddCreData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); bool MoveCreData(uint32 guid, uint32 map, const Position& pos); // reserved names @@ -1240,6 +1293,8 @@ class ObjectMgr void LoadFactionChangeSpells(); void LoadFactionChangeTitles(); + bool IsTransportMap(uint32 mapId) const { return _transportMaps.count(mapId); } + private: // first free id for selected id type uint32 _auctionId; @@ -1261,8 +1316,8 @@ class ObjectMgr QuestMap _questTemplates; - typedef UNORDERED_MAP<uint32, GossipText> GossipTextContainer; - typedef UNORDERED_MAP<uint32, uint32> QuestAreaTriggerContainer; + typedef std::unordered_map<uint32, GossipText> GossipTextContainer; + typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer; typedef std::set<uint32> TavernAreaTriggerContainer; typedef std::set<uint32> GameObjectForQuestContainer; @@ -1343,7 +1398,7 @@ class ObjectMgr HalfNameContainer _petHalfName0; HalfNameContainer _petHalfName1; - typedef UNORDERED_MAP<uint32, ItemSetNameEntry> ItemSetNameContainer; + typedef std::unordered_map<uint32, ItemSetNameEntry> ItemSetNameContainer; ItemSetNameContainer _itemSetNameStore; MapObjectGuids _mapObjectGuidsStore; @@ -1361,6 +1416,7 @@ class ObjectMgr /// Stores temp summon data grouped by summoner's entry, summoner's type and group id TempSummonDataContainer _tempSummonDataStore; + BroadcastTextContainer _broadcastTextStore; ItemTemplateContainer _itemTemplateStore; ItemLocaleContainer _itemLocaleStore; ItemSetNameLocaleContainer _itemSetNameLocaleStore; @@ -1390,7 +1446,4 @@ class ObjectMgr #define sObjectMgr ACE_Singleton<ObjectMgr, ACE_Null_Mutex>::instance() -// scripting access functions -bool LoadTrinityStrings(char const* table, int32 start_value = MAX_CREATURE_AI_TEXT_STRING_ID, int32 end_value = std::numeric_limits<int32>::min()); - #endif diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp index 8b57c382cd7..3e085f1f381 100644 --- a/src/server/game/Grids/GridStates.cpp +++ b/src/server/game/Grids/GridStates.cpp @@ -20,18 +20,6 @@ #include "GridNotifiers.h" #include "Log.h" -#ifdef TRINITY_DEBUG -bool GridState::checkMagic() -{ - if (i_Magic != MAGIC_TESTVAL) - { - TC_LOG_ERROR("misc", "!!! GridState: Magic value gone !!!"); - return false; - } - return true; -} -#endif - void InvalidState::Update(Map&, NGridType&, GridInfo&, uint32) const { } diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h index 016df4dc3d4..af11ab08d5e 100644 --- a/src/server/game/Grids/GridStates.h +++ b/src/server/game/Grids/GridStates.h @@ -27,13 +27,6 @@ class Map; class GridState { public: -#ifdef TRINITY_DEBUG -#define MAGIC_TESTVAL 0xFBE823BA - GridState() { i_Magic = MAGIC_TESTVAL; } - bool checkMagic(); - void setMagic() { i_Magic = MAGIC_TESTVAL; } - unsigned int i_Magic; -#endif virtual ~GridState() { }; virtual void Update(Map &, NGridType&, GridInfo &, uint32 t_diff) const = 0; }; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 472497ea5f2..270d598d53a 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -35,7 +35,8 @@ void VisibleNotifier::SendToSelf() // at this moment i_clientGUIDs have guids that not iterate at grid level checks // but exist one case when this possible and object not out of range: transports if (Transport* transport = i_player.GetTransport()) - for (std::set<WorldObject*>::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end();++itr) + { + for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) { if (vis_guids.find((*itr)->GetGUID()) != vis_guids.end()) { @@ -54,11 +55,15 @@ void VisibleNotifier::SendToSelf() case TYPEID_UNIT: i_player.UpdateVisibilityOf((*itr)->ToCreature(), i_data, i_visibleNow); break; + case TYPEID_DYNAMICOBJECT: + i_player.UpdateVisibilityOf((*itr)->ToDynObject(), i_data, i_visibleNow); + break; default: break; } } } + } for (Player::ClientGUIDs::const_iterator it = vis_guids.begin();it != vis_guids.end(); ++it) { diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 354f00a9e91..45ecbf0c3df 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -56,7 +56,7 @@ Loot* Roll::getLoot() Group::Group() : m_leaderGuid(0), m_leaderName(""), m_groupType(GROUPTYPE_NORMAL), m_dungeonDifficulty(DUNGEON_DIFFICULTY_NORMAL), m_raidDifficulty(RAID_DIFFICULTY_10MAN_NORMAL), m_bgGroup(NULL), m_bfGroup(NULL), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(0), -m_subGroupsCounts(NULL), m_guid(0), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0) +m_masterLooterGuid(0), m_subGroupsCounts(NULL), m_guid(0), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0) { for (uint8 i = 0; i < TARGETICONCOUNT; ++i) m_targetIcons[i] = 0; @@ -99,6 +99,7 @@ bool Group::Create(Player* leader) m_guid = MAKE_NEW_GUID(lowguid, 0, HIGHGUID_GROUP); m_leaderGuid = leaderGuid; m_leaderName = leader->GetName(); + leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); if (isBGGroup() || isBFGroup()) m_groupType = GROUPTYPE_BGRAID; @@ -111,6 +112,7 @@ bool Group::Create(Player* leader) m_lootThreshold = ITEM_QUALITY_UNCOMMON; m_looterGuid = leaderGuid; + m_masterLooterGuid = 0; m_dungeonDifficulty = DUNGEON_DIFFICULTY_NORMAL; m_raidDifficulty = RAID_DIFFICULTY_10MAN_NORMAL; @@ -145,6 +147,7 @@ bool Group::Create(Player* leader) stmt->setUInt8(index++, uint8(m_groupType)); stmt->setUInt32(index++, uint8(m_dungeonDifficulty)); stmt->setUInt32(index++, uint8(m_raidDifficulty)); + stmt->setUInt32(index++, GUID_LOPART(m_masterLooterGuid)); CharacterDatabase.Execute(stmt); @@ -161,7 +164,7 @@ bool Group::Create(Player* leader) void Group::LoadGroupFromDB(Field* fields) { - m_dbStoreId = fields[15].GetUInt32(); + m_dbStoreId = fields[16].GetUInt32(); m_guid = MAKE_NEW_GUID(sGroupMgr->GenerateGroupId(), 0, HIGHGUID_GROUP); m_leaderGuid = MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER); @@ -192,6 +195,8 @@ void Group::LoadGroupFromDB(Field* fields) else m_raidDifficulty = Difficulty(r_diff); + m_masterLooterGuid = MAKE_NEW_GUID(fields[15].GetUInt32(), 0, HIGHGUID_PLAYER); + if (m_groupType & GROUPTYPE_LFG) sLFGMgr->_LoadFromDB(fields, GetGUID()); } @@ -666,6 +671,10 @@ void Group::ChangeLeader(uint64 newLeaderGuid) CharacterDatabase.CommitTransaction(trans); } + if (Player* oldLeader = ObjectAccessor::FindPlayer(m_leaderGuid)) + oldLeader->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + + newLeader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); m_leaderGuid = newLeader->GetGUID(); m_leaderName = newLeader->GetName(); ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false); @@ -885,7 +894,11 @@ void Group::SendLooter(Creature* creature, Player* groupLooter) WorldPacket data(SMSG_LOOT_LIST, (8+8)); data << uint64(creature->GetGUID()); - data << uint8(0); // unk1 + + if (GetLootMethod() == MASTER_LOOT && creature->loot.hasOverThresholdItem()) + data.appendPackGUID(GetMasterLooterGuid()); + else + data << uint8(0); if (groupLooter) data.append(groupLooter->GetPackGUID()); @@ -1191,10 +1204,26 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject) } } -void Group::MasterLoot(Loot* /*loot*/, WorldObject* pLootedObject) +void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) { TC_LOG_DEBUG("network", "Group::MasterLoot (SMSG_LOOT_MASTER_LIST)"); + for (std::vector<LootItem>::iterator i = loot->items.begin(); i != loot->items.end(); ++i) + { + if (i->freeforall) + continue; + + i->is_blocked = !i->is_underthreshold; + } + + for (std::vector<LootItem>::iterator i = loot->quest_items.begin(); i != loot->quest_items.end(); ++i) + { + if (!i->follow_loot_rules) + continue; + + i->is_blocked = !i->is_underthreshold; + } + uint32 real_count = 0; WorldPacket data(SMSG_LOOT_MASTER_LIST, 1 + GetMembersCount() * 8); @@ -1500,7 +1529,7 @@ void Group::SendUpdateToPlayer(uint64 playerGUID, MemberSlot* slot) Player* member = ObjectAccessor::FindPlayer(citr->guid); - uint8 onlineState = member ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE; + uint8 onlineState = (member && !member->GetSession()->PlayerLogout()) ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE; onlineState = onlineState | ((isBGGroup() || isBFGroup()) ? MEMBER_STATUS_PVP : 0); data << citr->name; @@ -1516,11 +1545,16 @@ void Group::SendUpdateToPlayer(uint64 playerGUID, MemberSlot* slot) if (GetMembersCount() - 1) { data << uint8(m_lootMethod); // loot method - data << uint64(m_looterGuid); // looter guid + + if (m_lootMethod == MASTER_LOOT) + data << uint64(m_masterLooterGuid); // master looter guid + else + data << uint64(0); + data << uint8(m_lootThreshold); // loot threshold data << uint8(m_dungeonDifficulty); // Dungeon Difficulty data << uint8(m_raidDifficulty); // Raid Difficulty - data << uint8(0); // 3.3 + data << uint8(m_raidDifficulty >= RAID_DIFFICULTY_10MAN_HEROIC); // 3.3 Dynamic Raid Difficulty - 0 normal/1 heroic } player->GetSession()->SendPacket(&data); @@ -1538,7 +1572,7 @@ void Group::UpdatePlayerOutOfRange(Player* player) for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) { member = itr->GetSource(); - if (member && !member->IsWithinDist(player, member->GetSightRange(), false)) + if (member && member != player && (!member->IsInMap(player) || !member->IsWithinDist(player, member->GetSightRange(), false))) member->GetSession()->SendPacket(&data); } } @@ -1672,7 +1706,7 @@ void Group::ChangeMembersGroup(uint64 guid, uint8 group) // Retrieve the next Round-Roubin player for the group // -// No update done if loot method is Master or FFA. +// No update done if loot method is FFA. // // If the RR player is not yet set for the group, the first group member becomes the round-robin player. // If the RR player is set, the next player in group becomes the round-robin player. @@ -1683,16 +1717,10 @@ void Group::ChangeMembersGroup(uint64 guid, uint8 group) // if not, he loses his turn. void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed) { - switch (GetLootMethod()) - { - case MASTER_LOOT: - case FREE_FOR_ALL: - return; - default: - // round robin style looting applies for all low - // quality items in each loot method except free for all and master loot - break; - } + // round robin style looting applies for all low + // quality items in each loot method except free for all + if (GetLootMethod() == FREE_FOR_ALL) + return; uint64 oldLooterGUID = GetLooterGuid(); member_citerator guid_itr = _getMemberCSlot(oldLooterGUID); @@ -2116,6 +2144,11 @@ void Group::SetLooterGuid(uint64 guid) m_looterGuid = guid; } +void Group::SetMasterLooterGuid(uint64 guid) +{ + m_masterLooterGuid = guid; +} + void Group::SetLootThreshold(ItemQualities threshold) { m_lootThreshold = threshold; @@ -2191,6 +2224,11 @@ uint64 Group::GetLooterGuid() const return m_looterGuid; } +uint64 Group::GetMasterLooterGuid() const +{ + return m_masterLooterGuid; +} + ItemQualities Group::GetLootThreshold() const { return m_lootThreshold; diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 6336a1bb30c..f0061a70621 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -171,7 +171,7 @@ class Group typedef std::list<MemberSlot> MemberSlotList; typedef MemberSlotList::const_iterator member_citerator; - typedef UNORDERED_MAP< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap; + typedef std::unordered_map< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap; protected: typedef MemberSlotList::iterator member_witerator; typedef std::set<Player*> InvitesList; @@ -195,6 +195,7 @@ class Group void ChangeLeader(uint64 guid); void SetLootMethod(LootMethod method); void SetLooterGuid(uint64 guid); + void SetMasterLooterGuid(uint64 guid); void UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed = false); void SetLootThreshold(ItemQualities threshold); void Disband(bool hideDestroy=false); @@ -213,6 +214,7 @@ class Group const char * GetLeaderName() const; LootMethod GetLootMethod() const; uint64 GetLooterGuid() const; + uint64 GetMasterLooterGuid() const; ItemQualities GetLootThreshold() const; uint32 GetDbStoreId() const { return m_dbStoreId; }; @@ -332,6 +334,7 @@ class Group LootMethod m_lootMethod; ItemQualities m_lootThreshold; uint64 m_looterGuid; + uint64 m_masterLooterGuid; Rolls RollId; BoundInstancesMap m_boundInstances[MAX_DIFFICULTY]; uint8* m_subGroupsCounts; diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index 20e6a0671a5..39735f5dce3 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -123,8 +123,8 @@ void GroupMgr::LoadGroups() // 0 1 2 3 4 5 6 7 8 9 QueryResult result = CharacterDatabase.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" - // 10 11 12 13 14 15 16 17 - ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.guid, lfg.dungeon, lfg.state FROM groups g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); + // 10 11 12 13 14 15 16 17 18 + ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM groups g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); if (!result) { TC_LOG_INFO("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!"); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index f448fbb9f19..db0a196dec6 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -754,7 +754,7 @@ int32 Guild::Member::GetBankWithdrawValue(uint8 tabId) const { // Guild master has unlimited amount. if (IsRank(GR_GUILDMASTER)) - return tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED; + return static_cast<int32>(tabId == GUILD_BANK_MAX_TABS ? GUILD_WITHDRAW_MONEY_UNLIMITED : GUILD_WITHDRAW_SLOT_UNLIMITED); return m_bankWithdraw[tabId]; } @@ -1760,7 +1760,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint32 amount) bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool repair) { //clamp amount to MAX_MONEY_AMOUNT, Players can't hold more than that anyway - amount = std::min(amount, uint32(MAX_MONEY_AMOUNT)); + amount = std::min(amount, MAX_MONEY_AMOUNT); if (m_bankMoney < amount) // Not enough money in bank return false; @@ -2581,7 +2581,7 @@ inline int32 Guild::_GetMemberRemainingSlots(Member const* member, uint8 tabId) { uint8 rankId = member->GetRankId(); if (rankId == GR_GUILDMASTER) - return GUILD_WITHDRAW_SLOT_UNLIMITED; + return static_cast<int32>(GUILD_WITHDRAW_SLOT_UNLIMITED); if ((_GetRankBankTabRights(rankId, tabId) & GUILD_BANK_RIGHT_VIEW_TAB) != 0) { int32 remaining = _GetRankBankTabSlotsPerDay(rankId, tabId) - member->GetBankWithdrawValue(tabId); @@ -2598,7 +2598,7 @@ inline int32 Guild::_GetMemberRemainingMoney(Member const* member) const { uint8 rankId = member->GetRankId(); if (rankId == GR_GUILDMASTER) - return GUILD_WITHDRAW_MONEY_UNLIMITED; + return static_cast<int32>(GUILD_WITHDRAW_MONEY_UNLIMITED); if ((_GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0) { diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index fca483e92c3..ea0b2e44c53 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -637,7 +637,7 @@ private: void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count); }; - typedef UNORDERED_MAP<uint32, Member*> Members; + typedef std::unordered_map<uint32, Member*> Members; typedef std::vector<RankInfo> Ranks; typedef std::vector<BankTab*> BankTabs; diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index 3d07059000b..e8e6acb1bf0 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -43,7 +43,7 @@ public: void ResetTimes(); protected: - typedef UNORDERED_MAP<uint32, Guild*> GuildContainer; + typedef std::unordered_map<uint32, Guild*> GuildContainer; uint32 NextGuildId; GuildContainer GuildStore; }; diff --git a/src/server/game/Handlers/AddonHandler.cpp b/src/server/game/Handlers/AddonHandler.cpp index 3c9a66bedb5..806cbd1c7fc 100644 --- a/src/server/game/Handlers/AddonHandler.cpp +++ b/src/server/game/Handlers/AddonHandler.cpp @@ -49,7 +49,7 @@ bool AddonHandler::BuildAddonPacket(WorldPacket* source, WorldPacket* target) AddOnPacked.resize(AddonRealSize); // resize target for zlib action - if (!uncompress(AddOnPacked.contents(), &AddonRealSize, source->contents() + CurrentPosition, source->size() - CurrentPosition)!= Z_OK) + if (uncompress(AddOnPacked.contents(), &AddonRealSize, source->contents() + CurrentPosition, source->size() - CurrentPosition) == Z_OK) { target->Initialize(SMSG_ADDON_INFO); diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index f3aedeeeb48..3bb3edac500 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -37,15 +37,23 @@ void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket& recvData) recvData >> guid; TC_LOG_DEBUG("network", "Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid))); - if (Player* player = ObjectAccessor::FindPlayer(guid)) + Player* player = ObjectAccessor::FindPlayer(guid); + + if (!player) + return; + + if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false)) + return; + + if (GetPlayer()->IsValidAttackTarget(player)) + return; + + for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i) { - for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i) + if (uint32 a_id = player->GetArenaTeamId(i)) { - if (uint32 a_id = player->GetArenaTeamId(i)) - { - if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id)) - arenaTeam->Inspect(this, player->GetGUID()); - } + if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id)) + arenaTeam->Inspect(this, player->GetGUID()); } } } @@ -113,6 +121,12 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData) return; } + if (GetPlayer()->GetArenaTeamId(arenaTeam->GetSlot()) != arenaTeamId) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS); + return; + } + // OK result but don't send invite if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) return; diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index d9e4feb7f85..86fa0429cce 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -119,7 +119,9 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) recvData >> itemsCount; uint64 itemGUIDs[MAX_AUCTION_ITEMS]; // 160 slot = 4x 36 slot bag + backpack 16 slot + memset(itemGUIDs, 0, sizeof(itemGUIDs)); uint32 count[MAX_AUCTION_ITEMS]; + memset(count, 0, sizeof(count)); if (itemsCount > MAX_AUCTION_ITEMS) { @@ -187,6 +189,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) Item* items[MAX_AUCTION_ITEMS]; uint32 finalCount = 0; + uint32 itemEntry = 0; for (uint32 i = 0; i < itemsCount; ++i) { @@ -198,9 +201,12 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) return; } + if (itemEntry == 0) + itemEntry = item->GetTemplate()->ItemId; + if (sAuctionMgr->GetAItem(item->GetGUIDLow()) || !item->CanBeTraded() || item->IsNotEmptyBag() || item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION) || - item->GetCount() < count[i]) + item->GetCount() < count[i] || itemEntry != item->GetTemplate()->ItemId) { SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); return; @@ -216,6 +222,19 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) return; } + // check if there are 2 identical guids, in this case user is most likely cheating + for (uint32 i = 0; i < itemsCount - 1; ++i) + { + for (uint32 j = i + 1; j < itemsCount; ++j) + { + if (itemGUIDs[i] == itemGUIDs[j]) + { + SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); + return; + } + } + } + for (uint32 i = 0; i < itemsCount; ++i) { Item* item = items[i]; diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 0dfe396b65a..7def6b0f467 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -309,7 +309,7 @@ void WorldSession::HandlePVPLogDataOpcode(WorldPacket & /*recvData*/) return; WorldPacket data; - sBattlegroundMgr->BuildPvpLogDataPacket(&data, bg); + bg->BuildPvPLogDataPacket(data); SendPacket(&data); TC_LOG_DEBUG("network", "WORLD: Sent MSG_PVP_LOG_DATA Message"); diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 45d4d221d06..dd654fb3ad0 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -235,41 +235,76 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData) recvData.ReadPackedTime(unkPackedTime); recvData >> flags; - CalendarEvent calendarEvent(sCalendarMgr->GetFreeEventId(), guid, 0, CalendarEventType(type), dungeonId, + // prevent events in the past + // To Do: properly handle timezones and remove the "- time_t(86400L)" hack + if (time_t(eventPackedTime) < (time(NULL) - time_t(86400L))) + { + recvData.rfinish(); + return; + } + + CalendarEvent* calendarEvent = new CalendarEvent(sCalendarMgr->GetFreeEventId(), guid, 0, CalendarEventType(type), dungeonId, time_t(eventPackedTime), flags, time_t(unkPackedTime), title, description); - if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement()) + if (calendarEvent->IsGuildEvent() || calendarEvent->IsGuildAnnouncement()) if (Player* creator = ObjectAccessor::FindPlayer(guid)) - calendarEvent.SetGuildId(creator->GetGuildId()); + calendarEvent->SetGuildId(creator->GetGuildId()); - if (calendarEvent.IsGuildAnnouncement()) + if (calendarEvent->IsGuildAnnouncement()) { // 946684800 is 01/01/2000 00:00:00 - default response time - CalendarInvite invite(0, calendarEvent.GetEventId(), 0, guid, 946684800, CALENDAR_STATUS_NOT_SIGNED_UP, CALENDAR_RANK_PLAYER, ""); + CalendarInvite invite(0, calendarEvent->GetEventId(), 0, guid, 946684800, CALENDAR_STATUS_NOT_SIGNED_UP, CALENDAR_RANK_PLAYER, ""); // WARNING: By passing pointer to a local variable, the underlying method(s) must NOT perform any kind // of storage of the pointer as it will lead to memory corruption - sCalendarMgr->AddInvite(&calendarEvent, &invite); + sCalendarMgr->AddInvite(calendarEvent, &invite); } else { + // client limits the amount of players to be invited to 100 + const uint32 MaxPlayerInvites = 100; + uint32 inviteCount; - recvData >> inviteCount; + uint64 invitee[MaxPlayerInvites]; + uint8 status[MaxPlayerInvites]; + uint8 rank[MaxPlayerInvites]; + + memset(invitee, 0, sizeof(invitee)); + memset(status, 0, sizeof(status)); + memset(rank, 0, sizeof(rank)); - for (uint32 i = 0; i < inviteCount; ++i) + try { - uint64 invitee = 0; - uint8 status = 0; - uint8 rank = 0; - recvData.readPackGUID(invitee); - recvData >> status >> rank; + recvData >> inviteCount; + + for (uint32 i = 0; i < inviteCount && i < MaxPlayerInvites; ++i) + { + recvData.readPackGUID(invitee[i]); + recvData >> status[i] >> rank[i]; + } + } + catch (ByteBufferException const&) + { + delete calendarEvent; + calendarEvent = NULL; + throw; + } + SQLTransaction trans; + if (inviteCount > 1) + trans = CharacterDatabase.BeginTransaction(); + + for (uint32 i = 0; i < inviteCount && i < MaxPlayerInvites; ++i) + { // 946684800 is 01/01/2000 00:00:00 - default response time - CalendarInvite* invite = new CalendarInvite(sCalendarMgr->GetFreeInviteId(), calendarEvent.GetEventId(), invitee, guid, 946684800, CalendarInviteStatus(status), CalendarModerationRank(rank), ""); - sCalendarMgr->AddInvite(&calendarEvent, invite); + CalendarInvite* invite = new CalendarInvite(sCalendarMgr->GetFreeInviteId(), calendarEvent->GetEventId(), invitee[i], guid, 946684800, CalendarInviteStatus(status[i]), CalendarModerationRank(rank[i]), ""); + sCalendarMgr->AddInvite(calendarEvent, invite, trans); } + + if (inviteCount > 1) + CharacterDatabase.CommitTransaction(trans); } - sCalendarMgr->AddEvent(new CalendarEvent(calendarEvent, calendarEvent.GetEventId()), CALENDAR_SENDTYPE_ADD); + sCalendarMgr->AddEvent(calendarEvent, CALENDAR_SENDTYPE_ADD); } void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData) @@ -294,6 +329,14 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData) recvData.ReadPackedTime(timeZoneTime); recvData >> flags; + // prevent events in the past + // To Do: properly handle timezones and remove the "- time_t(86400L)" hack + if (time_t(eventPackedTime) < (time(NULL) - time_t(86400L))) + { + recvData.rfinish(); + return; + } + TC_LOG_DEBUG("network", "CMSG_CALENDAR_UPDATE_EVENT [" UI64FMTD "] EventId [" UI64FMTD "], InviteId [" UI64FMTD "] Title %s, Description %s, type %u " "Repeatable %u, MaxInvites %u, Dungeon ID %d, Time %u " @@ -336,24 +379,37 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData) uint64 guid = _player->GetGUID(); uint64 eventId; uint64 inviteId; - uint32 time; + uint32 eventTime; recvData >> eventId >> inviteId; - recvData.ReadPackedTime(time); + recvData.ReadPackedTime(eventTime); TC_LOG_DEBUG("network", "CMSG_CALENDAR_COPY_EVENT [" UI64FMTD "], EventId [" UI64FMTD - "] inviteId [" UI64FMTD "] Time: %u", guid, eventId, inviteId, time); + "] inviteId [" UI64FMTD "] Time: %u", guid, eventId, inviteId, eventTime); + + // prevent events in the past + // To Do: properly handle timezones and remove the "- time_t(86400L)" hack + if (time_t(eventTime) < (time(NULL) - time_t(86400L))) + { + recvData.rfinish(); + return; + } if (CalendarEvent* oldEvent = sCalendarMgr->GetEvent(eventId)) { CalendarEvent* newEvent = new CalendarEvent(*oldEvent, sCalendarMgr->GetFreeEventId()); - newEvent->SetEventTime(time_t(time)); + newEvent->SetEventTime(time_t(eventTime)); sCalendarMgr->AddEvent(newEvent, CALENDAR_SENDTYPE_COPY); CalendarInviteStore invites = sCalendarMgr->GetEventInvites(eventId); + SQLTransaction trans; + if (invites.size() > 1) + trans = CharacterDatabase.BeginTransaction(); for (CalendarInviteStore::const_iterator itr = invites.begin(); itr != invites.end(); ++itr) - sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId())); + sCalendarMgr->AddInvite(newEvent, new CalendarInvite(**itr, sCalendarMgr->GetFreeInviteId(), newEvent->GetEventId()), trans); + if (invites.size() > 1) + CharacterDatabase.CommitTransaction(trans); // should we change owner when somebody makes a copy of event owned by another person? } else diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 4c7d1669233..9ad382b4686 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -92,19 +92,19 @@ bool LoginQueryHolder::Initialize() stmt->setUInt32(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_DAILYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt32(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_DAILY_QUEST_STATUS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_WEEKLY); stmt->setUInt32(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_WEEKLY_QUEST_STATUS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_MONTHLYQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_MONTHLY); stmt->setUInt32(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_SEASONAL); stmt->setUInt32(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS, stmt); @@ -243,8 +243,6 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recvData*/) { - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, false); - // remove expired bans PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXPIRED_BANS); CharacterDatabase.Execute(stmt); @@ -681,7 +679,6 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_SUCCESS); SendPacket(&data); - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); std::string IP_str = GetRemoteAddress(); TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); sScriptMgr->OnPlayerCreate(&newChar); @@ -699,10 +696,15 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) { uint64 guid; recvData >> guid; + // Initiating + uint32 initAccountId = GetAccountId(); // can't delete loaded character if (ObjectAccessor::FindPlayer(guid)) + { + sScriptMgr->OnPlayerFailedDelete(guid, initAccountId); return; + } uint32 accountId = 0; uint8 level = 0; @@ -711,6 +713,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) // is guild leader if (sGuildMgr->GetGuildByLeader(guid)) { + sScriptMgr->OnPlayerFailedDelete(guid, initAccountId); WorldPacket data(SMSG_CHAR_DELETE, 1); data << uint8(CHAR_DELETE_FAILED_GUILD_LEADER); SendPacket(&data); @@ -720,6 +723,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) // is arena team captain if (sArenaTeamMgr->GetArenaTeamByCaptain(guid)) { + sScriptMgr->OnPlayerFailedDelete(guid, initAccountId); WorldPacket data(SMSG_CHAR_DELETE, 1); data << uint8(CHAR_DELETE_FAILED_ARENA_CAPTAIN); SendPacket(&data); @@ -738,12 +742,18 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) } // prevent deleting other players' characters using cheating tools - if (accountId != GetAccountId()) + if (accountId != initAccountId) + { + sScriptMgr->OnPlayerFailedDelete(guid, initAccountId); return; + } std::string IP_str = GetRemoteAddress(); TC_LOG_INFO("entities.player.character", "Account: %d, IP: %s deleted character: %s, GUID: %u, Level: %u", accountId, IP_str.c_str(), name.c_str(), GUID_LOPART(guid), level); - sScriptMgr->OnPlayerDelete(guid); + + // To prevent hook failure, place hook before removing reference from DB + sScriptMgr->OnPlayerDelete(guid, initAccountId); // To prevent race conditioning, but as it also makes sense, we hand the accountId over for successful delete. + // Shouldn't interfere with character deletion though if (sLog->ShouldLog("entities.player.dump", LOG_LEVEL_INFO)) // optimize GetPlayerDump call { @@ -758,15 +768,14 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) WorldPacket data(SMSG_CHAR_DELETE, 1); data << uint8(CHAR_DELETE_SUCCESS); SendPacket(&data); - - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); } void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) { if (PlayerLoading() || GetPlayer() != NULL) { - TC_LOG_ERROR("network", "Player tryes to login again, AccountId = %d", GetAccountId()); + TC_LOG_ERROR("network", "Player tries to login again, AccountId = %d", GetAccountId()); + KickPlayer(); return; } @@ -1005,7 +1014,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) SendNotification(LANG_RESET_TALENTS); } - if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST)) + bool firstLogin = pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST); + if (firstLogin) pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST); // show time before shutdown if shutdown planned. @@ -1027,7 +1037,11 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) m_playerLoading = false; - sScriptMgr->OnPlayerLogin(pCurrChar); + // Handle Login-Achievements (should be handled after loading) + _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ON_LOGIN, 1); + + sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin); + delete holder; } @@ -1165,7 +1179,6 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData) void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string const& newName) { - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); if (!result) { WorldPacket data(SMSG_CHAR_RENAME, 1); @@ -1423,8 +1436,6 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) stmt->setUInt32(0, GUID_LOPART(guid)); // TODO: Make async with callback - // TODO 2: Allow opcode at end of callback - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) @@ -1679,8 +1690,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) uint8 playerClass = nameData->m_class; uint8 level = nameData->m_level; - // TO Do: Make async and allow opcode on callback - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); + // TO Do: Make async PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_AT_LOGIN_TITLES); stmt->setUInt32(0, lowGuid); PreparedQueryResult result = CharacterDatabase.Query(stmt); @@ -1765,6 +1775,9 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) } } + // resurrect the character in case he's dead + sObjectAccessor->ConvertCorpseForPlayer(guid); + CharacterDatabase.EscapeString(newname); Player::Customize(guid, gender, skin, face, hairStyle, hairColor, facialHair); SQLTransaction trans = CharacterDatabase.BeginTransaction(); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 17b5974d1ca..eccf7a6fd38 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -55,6 +55,14 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) return; } + if (lang == LANG_UNIVERSAL && type != CHAT_MSG_AFK && type != CHAT_MSG_DND) + { + TC_LOG_ERROR("network", "CMSG_MESSAGECHAT: Possible hacking-attempt: %s tried to send a message in universal language", GetPlayerInfo().c_str()); + SendNotification(LANG_UNKNOWN_LANGUAGE); + recvData.rfinish(); + return; + } + Player* sender = GetPlayer(); //TC_LOG_DEBUG("CHAT: packet received. type %u, lang %u", type, lang); @@ -99,20 +107,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) case CHAT_MSG_GUILD: case CHAT_MSG_BATTLEGROUND: case CHAT_MSG_WHISPER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - { - std::string msg = ""; - recvData >> msg; - - if (msg.empty()) - return; - - sScriptMgr->OnPlayerChat(sender, uint32(CHAT_MSG_ADDON), lang, msg); - } - - // Disabled addon channel? + // check if addon messages are disabled if (!sWorld->getBoolConfig(CONFIG_ADDON_CHANNEL)) + { + recvData.rfinish(); return; + } break; default: TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination", @@ -269,7 +269,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } Player* receiver = sObjectAccessor->FindPlayerByName(to); - if (!receiver || (!receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID()))) + if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID()))) { SendPlayerNotFoundNotice(to); return; diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 6404d3c8e41..97867e2f352 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -425,11 +425,20 @@ void WorldSession::HandleLootMethodOpcode(WorldPacket& recvData) /** error handling **/ if (!group->IsLeader(GetPlayer()->GetGUID())) return; + + if (lootMethod > NEED_BEFORE_GREED) + return; + + if (lootThreshold < ITEM_QUALITY_UNCOMMON || lootThreshold > ITEM_QUALITY_ARTIFACT) + return; + + if (lootMethod == MASTER_LOOT && !group->IsMember(lootMaster)) + return; /********************/ // everything's fine, do it group->SetLootMethod((LootMethod)lootMethod); - group->SetLooterGuid(lootMaster); + group->SetMasterLooterGuid(lootMaster); group->SetLootThreshold((ItemQualities)lootThreshold); group->SendUpdate(); } @@ -534,11 +543,20 @@ void WorldSession::HandleRaidTargetUpdateOpcode(WorldPacket& recvData) } else // target icon update { - if (!group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) + if (group->isRaidGroup() && !group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) return; uint64 guid; recvData >> guid; + + if (IS_PLAYER_GUID(guid)) + { + Player* target = ObjectAccessor::FindPlayer(guid); + + if (!target || target->IsHostileTo(GetPlayer())) + return; + } + group->SetTargetIcon(x, _player->GetGUID(), guid); } } @@ -620,8 +638,6 @@ void WorldSession::HandleGroupAssistantLeaderOpcode(WorldPacket& recvData) recvData >> apply; group->SetGroupMemberFlag(guid, apply, MEMBER_FLAG_ASSISTANT); - - group->SendUpdate(); } void WorldSession::HandlePartyAssignmentOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 3571410fd5c..60966ace011 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -85,6 +85,18 @@ void WorldSession::HandleSwapInvItemOpcode(WorldPacket& recvData) return; } + if (_player->IsBankPos(INVENTORY_SLOT_BAG_0, srcslot) && !CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleSwapInvItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + + if (_player->IsBankPos(INVENTORY_SLOT_BAG_0, dstslot) && !CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleSwapInvItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + uint16 src = ((INVENTORY_SLOT_BAG_0 << 8) | srcslot); uint16 dst = ((INVENTORY_SLOT_BAG_0 << 8) | dstslot); @@ -137,6 +149,18 @@ void WorldSession::HandleSwapItem(WorldPacket& recvData) return; } + if (_player->IsBankPos(srcbag, srcslot) && !CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleSwapItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + + if (_player->IsBankPos(dstbag, dstslot) && !CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleSwapItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + _player->SwapItem(src, dst); } @@ -470,19 +494,6 @@ void WorldSession::HandleReadItem(WorldPacket& recvData) _player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL); } -void WorldSession::HandlePageQuerySkippedOpcode(WorldPacket& recvData) -{ - TC_LOG_DEBUG("network", "WORLD: Received CMSG_PAGE_TEXT_QUERY"); - - uint32 itemid; - uint64 guid; - - recvData >> itemid >> guid; - - TC_LOG_INFO("network", "Packet Info: itemid: %u guidlow: %u guidentry: %u guidhigh: %u", - itemid, GUID_LOPART(guid), GUID_ENPART(guid), GUID_HIPART(guid)); -} - void WorldSession::HandleSellItemOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_SELL_ITEM"); @@ -871,15 +882,11 @@ void WorldSession::HandleBuyBankSlotOpcode(WorldPacket& recvPacket) uint64 guid; recvPacket >> guid; - // cheating protection - /* not critical if "cheated", and check skip allow by slots in bank windows open by .bank command. - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_BANKER); - if (!creature) + if (!CanUseBank(guid)) { - TC_LOG_DEBUG("WORLD: HandleBuyBankSlotOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid))); + TC_LOG_DEBUG("network", "WORLD: HandleBuyBankSlotOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid))); return; } - */ uint32 slot = _player->GetBankBagSlotCount(); @@ -925,6 +932,12 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPacket& recvPacket) recvPacket >> srcbag >> srcslot; TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot); + if (!CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleAutoBankItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + Item* pItem = _player->GetItemByPos(srcbag, srcslot); if (!pItem) return; @@ -956,6 +969,12 @@ void WorldSession::HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket) recvPacket >> srcbag >> srcslot; TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u", srcbag, srcslot); + if (!CanUseBank()) + { + TC_LOG_DEBUG("network", "WORLD: HandleAutoStoreBankItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(m_currentBankerGUID))); + return; + } + Item* pItem = _player->GetItemByPos(srcbag, srcslot); if (!pItem) return; @@ -1210,6 +1229,11 @@ void WorldSession::HandleSocketOpcode(WorldPacket& recvData) for (int i = 0; i < MAX_GEM_SOCKETS; ++i) //get geminfo from dbc storage GemProps[i] = (Gems[i]) ? sGemPropertiesStore.LookupEntry(Gems[i]->GetTemplate()->GemProperties) : NULL; + // Find first prismatic socket + int32 firstPrismatic = 0; + while (firstPrismatic < MAX_GEM_SOCKETS && itemProto->Socket[firstPrismatic].Color) + ++firstPrismatic; + for (int i = 0; i < MAX_GEM_SOCKETS; ++i) //check for hack maybe { if (!GemProps[i]) @@ -1222,11 +1246,8 @@ void WorldSession::HandleSocketOpcode(WorldPacket& recvData) if (!itemTarget->GetEnchantmentId(PRISMATIC_ENCHANTMENT_SLOT)) return; - // not first not-colored (not normaly used) socket - if (i != 0 && !itemProto->Socket[i-1].Color && (i+1 >= MAX_GEM_SOCKETS || itemProto->Socket[i+1].Color)) + if (i != firstPrismatic) return; - - // ok, this is first not colored socket for item with prismatic socket } // tried to put normal gem in meta socket @@ -1422,6 +1443,10 @@ void WorldSession::HandleItemRefund(WorldPacket &recvData) return; } + // Don't try to refund item currently being disenchanted + if (_player->GetLootGUID() == guid) + return; + GetPlayer()->RefundItem(item); } @@ -1452,3 +1477,21 @@ void WorldSession::HandleItemTextQuery(WorldPacket& recvData ) SendPacket(&data); } + +bool WorldSession::CanUseBank(uint64 bankerGUID) const +{ + // bankerGUID parameter is optional, set to 0 by default. + if (!bankerGUID) + bankerGUID = m_currentBankerGUID; + + bool isUsingBankCommand = (bankerGUID == GetPlayer()->GetGUID() && bankerGUID == m_currentBankerGUID); + + if (!isUsingBankCommand) + { + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER); + if (!creature) + return false; + } + + return true; +}
\ No newline at end of file diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index f3a1803dfca..b9c6f349ac3 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -81,7 +81,7 @@ void WorldSession::HandleAutostoreLootItemOpcode(WorldPacket& recvData) { Creature* creature = GetPlayer()->GetMap()->GetCreature(lguid); - bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed); + bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING); if (!lootAllowed || !creature->IsWithinDistInMap(_player, INTERACTION_DISTANCE)) { @@ -148,7 +148,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) case HIGHGUID_VEHICLE: { Creature* creature = player->GetMap()->GetCreature(guid); - bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed); + bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING); if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE)) { loot = &creature->loot; @@ -297,17 +297,7 @@ void WorldSession::DoLootRelease(uint64 lguid) // if the round robin player release, reset it. if (player->GetGUID() == loot->roundRobinPlayer) - { - if (Group* group = player->GetGroup()) - { - if (group->GetLootMethod() != MASTER_LOOT) - { - loot->roundRobinPlayer = 0; - } - } - else - loot->roundRobinPlayer = 0; - } + loot->roundRobinPlayer = 0; } } else if (IS_CORPSE_GUID(lguid)) // ONLY remove insignia at BG @@ -348,7 +338,8 @@ void WorldSession::DoLootRelease(uint64 lguid) } else { - if (pItem->loot.isLooted()) // Only delete item if no loot or money (unlooted loot is saved to db) + // Only delete item if no loot or money (unlooted loot is saved to db) or if it isn't an openable item + if (pItem->loot.isLooted() || !(proto->Flags & ITEM_PROTO_FLAG_OPENABLE)) player->DestroyItem(pItem->GetBagSlot(), pItem->GetSlot(), true); } return; // item can be looted only single player @@ -357,18 +348,19 @@ void WorldSession::DoLootRelease(uint64 lguid) { Creature* creature = GetPlayer()->GetMap()->GetCreature(lguid); - bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed); + bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING); if (!lootAllowed || !creature->IsWithinDistInMap(_player, INTERACTION_DISTANCE)) return; loot = &creature->loot; if (loot->isLooted()) { + creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + // skip pickpocketing loot for speed, skinning timer reduction is no-op in fact if (!creature->IsAlive()) creature->AllLootRemovedFromCorpse(); - creature->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); loot->clear(); } else @@ -376,19 +368,15 @@ void WorldSession::DoLootRelease(uint64 lguid) // if the round robin player release, reset it. if (player->GetGUID() == loot->roundRobinPlayer) { + loot->roundRobinPlayer = 0; + if (Group* group = player->GetGroup()) { - if (group->GetLootMethod() != MASTER_LOOT) - { - loot->roundRobinPlayer = 0; - group->SendLooter(creature, NULL); - - // force update of dynamic flags, otherwise other group's players still not able to loot. - creature->ForceValuesUpdateAtIndex(UNIT_DYNAMIC_FLAGS); - } + group->SendLooter(creature, NULL); + + // force update of dynamic flags, otherwise other group's players still not able to loot. + creature->ForceValuesUpdateAtIndex(UNIT_DYNAMIC_FLAGS); } - else - loot->roundRobinPlayer = 0; } } } @@ -404,7 +392,7 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData) recvData >> lootguid >> slotid >> target_playerguid; - if (!_player->GetGroup() || _player->GetGroup()->GetLooterGuid() != _player->GetGUID()) + if (!_player->GetGroup() || _player->GetGroup()->GetMasterLooterGuid() != _player->GetGUID() || _player->GetGroup()->GetLootMethod() != MASTER_LOOT) { _player->SendLootRelease(GetPlayer()->GetLootGUID()); return; @@ -425,7 +413,6 @@ void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData) return; } - Loot* loot = NULL; if (IS_CRE_OR_VEH_GUID(GetPlayer()->GetLootGUID())) diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 10ef7810d1d..1270f4e6419 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -131,6 +131,13 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) uint32 reqmoney = cost + money; + // Check for overflow + if (reqmoney < money) + { + player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY); + return; + } + if (!player->HasEnoughMoney(reqmoney) && !player->IsGameMaster()) { player->SendMailResult(0, MAIL_SEND, MAIL_ERR_NOT_ENOUGH_MONEY); @@ -315,6 +322,10 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) // If theres is an item, there is a one hour delivery delay if sent to another account's character. uint32 deliver_delay = needItemDelay ? sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0; + // don't ask for COD if there are no items + if (items_count == 0) + COD = 0; + // will delete item or place to receiver mail list draft .AddMoney(money) @@ -338,7 +349,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData) Player* player = _player; Mail* m = player->GetMail(mailId); - if (m) + if (m && m->state != MAIL_STATE_DELETED) { if (player->unReadMails) --player->unReadMails; @@ -462,6 +473,13 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) return; } + // verify that the mail has the item to avoid cheaters taking COD items without paying + if (std::find_if(m->items.begin(), m->items.end(), [itemId](MailItemInfo info){ return info.item_guid == itemId; }) == m->items.end()) + { + player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR); + return; + } + // prevent cheating with skip client money check if (!player->HasEnoughMoney(m->COD)) { @@ -710,7 +728,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) Player* player = _player; Mail* m = player->GetMail(mailId); - if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL)) + if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL) || (m->checked & MAIL_CHECK_MASK_COPIED)) { player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR); return; diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index fcec4f38852..c4ff2581e75 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -97,9 +97,19 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) recvData >> guid >> menuId >> gossipListId; + if (!_player->PlayerTalkClass->GetGossipMenu().GetItem(gossipListId)) + { + recvData.rfinish(); + return; + } + if (_player->PlayerTalkClass->IsGossipOptionCoded(gossipListId)) recvData >> code; + // Prevent cheating on C++ scripted menus + if (_player->PlayerTalkClass->GetGossipMenu().GetSenderGUID() != guid) + return; + Creature* unit = NULL; GameObject* go = NULL; if (IS_CRE_OR_VEH_GUID(guid)) @@ -151,7 +161,8 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) else { go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str()); - sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str()); + if (!sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) + _player->OnGossipSelect(go, gossipListId, menuId); } } else @@ -175,11 +186,6 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_WHO Message"); - time_t now = time(NULL); - if (now - timeLastWhoCommand < 5) - return; - else timeLastWhoCommand = now; - uint32 matchcount = 0; uint32 level_min, level_max, racemask, classmask, zones_count, str_count; @@ -494,10 +500,9 @@ void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Recvd ZONE_UPDATE: %u", newZone); - // use server size data - uint32 newzone, newarea; - GetPlayer()->GetZoneAndAreaId(newzone, newarea); - GetPlayer()->UpdateZone(newzone, newarea); + // use server side data, but only after update the player position. See Player::UpdatePosition(). + GetPlayer()->SetNeedsZoneUpdate(true); + //GetPlayer()->SendInitWorldStates(true, newZone); } @@ -782,10 +787,10 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket& recvData) return; } - if (!GetPlayer()->isRessurectRequestedBy(guid)) + if (!GetPlayer()->isResurrectRequestedBy(guid)) return; - GetPlayer()->ResurectUsingRequestData(); + GetPlayer()->ResurrectUsingRequestData(); } void WorldSession::SendAreaTriggerMessage(const char* Text, ...) @@ -1135,7 +1140,6 @@ void WorldSession::HandleMoveRootAck(WorldPacket& recvData) void WorldSession::HandleSetActionBarToggles(WorldPacket& recvData) { uint8 actionBar; - recvData >> actionBar; if (!GetPlayer()) // ignore until not logged (check needed because STATUS_AUTHED) @@ -1174,6 +1178,12 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recvData) return; } + if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false)) + return; + + if (GetPlayer()->IsValidAttackTarget(player)) + return; + uint32 talent_points = 0x47; uint32 guid_size = player->GetPackGUID().wpos(); WorldPacket data(SMSG_INSPECT_TALENT, guid_size+4+talent_points); @@ -1205,6 +1215,12 @@ void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recvData) return; } + if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false)) + return; + + if (GetPlayer()->IsValidAttackTarget(player)) + return; + WorldPacket data(MSG_INSPECT_HONOR_STATS, 8+1+4*4); data << uint64(player->GetGUID()); data << uint8(player->GetHonorPoints()); @@ -1631,6 +1647,12 @@ void WorldSession::HandleQueryInspectAchievements(WorldPacket& recvData) if (!player) return; + if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false)) + return; + + if (GetPlayer()->IsValidAttackTarget(player)) + return; + player->SendRespondInspectAchievements(_player); } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 0c2eae849b8..6fedc481a14 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -30,6 +30,7 @@ #include "WaypointMovementGenerator.h" #include "InstanceSaveMgr.h" #include "ObjectMgr.h" +#include "Vehicle.h" #define MOVEMENT_PACKET_TIME_DELAY 0 @@ -284,7 +285,7 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) } /* handle special cases */ - if (movementInfo.flags & MOVEMENTFLAG_ONTRANSPORT) + if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) { // transports size limited // (also received at zeppelin leave by some reason with t_* as absolute in continent coordinates, can be safely skipped) @@ -307,27 +308,15 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) if (!plrMover->GetTransport()) { if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid)) - { - plrMover->m_transport = transport; transport->AddPassenger(plrMover); - } } else if (plrMover->GetTransport()->GetGUID() != movementInfo.transport.guid) { - bool foundNewTransport = false; - plrMover->m_transport->RemovePassenger(plrMover); + plrMover->GetTransport()->RemovePassenger(plrMover); if (Transport* transport = plrMover->GetMap()->GetTransport(movementInfo.transport.guid)) - { - foundNewTransport = true; - plrMover->m_transport = transport; transport->AddPassenger(plrMover); - } - - if (!foundNewTransport) - { - plrMover->m_transport = NULL; + else movementInfo.transport.Reset(); - } } } @@ -335,13 +324,12 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) { GameObject* go = mover->GetMap()->GetGameObject(movementInfo.transport.guid); if (!go || go->GetGoType() != GAMEOBJECT_TYPE_TRANSPORT) - movementInfo.flags &= ~MOVEMENTFLAG_ONTRANSPORT; + movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ONTRANSPORT); } } else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave { - plrMover->m_transport->RemovePassenger(plrMover); - plrMover->m_transport = NULL; + plrMover->GetTransport()->RemovePassenger(plrMover); movementInfo.transport.Reset(); } @@ -370,10 +358,20 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) mover->m_movementInfo = movementInfo; - // this is almost never true (not sure why it is sometimes, but it is), normally use mover->IsVehicle() - if (mover->GetVehicle()) + // Some vehicles allow the passenger to turn by himself + if (Vehicle* vehicle = mover->GetVehicle()) { - mover->SetOrientation(movementInfo.pos.GetOrientation()); + if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover)) + { + if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING) + { + if (movementInfo.pos.GetOrientation() != mover->GetOrientation()) + { + mover->SetOrientation(movementInfo.pos.GetOrientation()); + mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); + } + } + } return; } @@ -496,7 +494,7 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recvData) if (GetPlayer()->IsInWorld()) { if (_player->m_mover->GetGUID() != guid) - TC_LOG_ERROR("network", "HandleSetActiveMoverOpcode: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, guid, GetLogNameForGuid(guid), GUID_ENPART(guid), _player->m_mover->GetGUID()); + TC_LOG_DEBUG("network", "HandleSetActiveMoverOpcode: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, guid, GetLogNameForGuid(guid), GUID_ENPART(guid), _player->m_mover->GetGUID()); } } diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 4d78064423c..d8a518a24db 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -100,6 +100,7 @@ void WorldSession::SendShowBank(uint64 guid) { WorldPacket data(SMSG_SHOW_BANK, 8); data << guid; + m_currentBankerGUID = guid; SendPacket(&data); } @@ -390,7 +391,6 @@ void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: CMSG_SPIRIT_HEALER_ACTIVATE"); uint64 guid; - recvData >> guid; Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_SPIRITHEALER); @@ -410,7 +410,6 @@ void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData) void WorldSession::SendSpiritResurrect() { _player->ResurrectPlayer(0.5f, true); - _player->DurabilityLossAll(0.25f, true); // get corpse nearest graveyard diff --git a/src/server/game/Handlers/NPCHandler.h b/src/server/game/Handlers/NPCHandler.h index 8aa34eaafa7..7210d9a53b5 100644 --- a/src/server/game/Handlers/NPCHandler.h +++ b/src/server/game/Handlers/NPCHandler.h @@ -31,6 +31,7 @@ struct GossipTextOption { std::string Text_0; std::string Text_1; + uint32 BroadcastTextID; uint32 Language; float Probability; QEmote Emotes[MAX_GOSSIP_TEXT_EMOTES]; diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 550cb74cffa..3cc445ff81b 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -74,13 +74,13 @@ void WorldSession::HandlePetAction(WorldPacket& recvData) if (!pet) { - TC_LOG_ERROR("network", "HandlePetAction: Pet (GUID: %u) doesn't exist for player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID())); + TC_LOG_DEBUG("network", "HandlePetAction: Pet (GUID: %u) doesn't exist for player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID())); return; } if (pet != GetPlayer()->GetFirstControlled()) { - TC_LOG_ERROR("network", "HandlePetAction: Pet (GUID: %u) does not belong to player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID())); + TC_LOG_DEBUG("network", "HandlePetAction: Pet (GUID: %u) does not belong to player %s (GUID: %u)", uint32(GUID_LOPART(guid1)), GetPlayer()->GetName().c_str(), GUID_LOPART(GetPlayer()->GetGUID())); return; } @@ -144,7 +144,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint32 spellid CharmInfo* charmInfo = pet->GetCharmInfo(); if (!charmInfo) { - TC_LOG_ERROR("network", "WorldSession::HandlePetAction(petGuid: " UI64FMTD ", tagGuid: " UI64FMTD ", spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", + TC_LOG_DEBUG("network", "WorldSession::HandlePetAction(petGuid: " UI64FMTD ", tagGuid: " UI64FMTD ", spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", guid1, guid2, spellid, flag, pet->GetGUIDLow(), pet->GetEntry(), pet->GetTypeId()); return; } @@ -616,9 +616,8 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) pet->SetName(name); - Player* owner = pet->GetOwner(); - if (owner && owner->GetGroup()) - owner->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME); + if (pet->GetOwner()->GetGroup()) + pet->GetOwner()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME); pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED); @@ -647,7 +646,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) stmt->setUInt32(0, pet->GetCharmInfo()->GetPetNumber()); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CHAR_PET_DECLINEDNAME); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_PET_DECLINEDNAME); stmt->setUInt32(0, _player->GetGUIDLow()); for (uint8 i = 0; i < 5; i++) @@ -869,7 +868,10 @@ void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recvData) uint32 talentId, talentRank; - for (uint32 i = 0; i < talentsCount; ++i) + // Client has max 24 talents, rounded up : 30 + uint32 const MaxTalentsCount = 30; + + for (uint32 i = 0; i < talentsCount && i < MaxTalentsCount; ++i) { recvData >> talentId >> talentRank; @@ -877,4 +879,6 @@ void WorldSession::HandleLearnPreviewTalentsPet(WorldPacket& recvData) } _player->SendTalentsInfoData(true); + + recvData.rfinish(); } diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index e30260d34e2..dbcfb1c4970 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -264,18 +264,18 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData) uint64 guid; recvData >> textID; - TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID); + TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY TextId: %u", textID); recvData >> guid; - GossipText const* pGossip = sObjectMgr->GetGossipText(textID); + GossipText const* gossip = sObjectMgr->GetGossipText(textID); WorldPacket data(SMSG_NPC_TEXT_UPDATE, 100); // guess size data << textID; - if (!pGossip) + if (!gossip) { - for (uint32 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) + for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) { data << float(0); data << "Greetings $N"; @@ -291,46 +291,50 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData) } else { - std::string Text_0[MAX_LOCALES], Text_1[MAX_LOCALES]; - for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) - { - Text_0[i]=pGossip->Options[i].Text_0; - Text_1[i]=pGossip->Options[i].Text_1; - } + std::string text0[MAX_GOSSIP_TEXT_OPTIONS], text1[MAX_GOSSIP_TEXT_OPTIONS]; + LocaleConstant locale = GetSessionDbLocaleIndex(); - int loc_idx = GetSessionDbLocaleIndex(); - if (loc_idx >= 0) + for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) { - if (NpcTextLocale const* nl = sObjectMgr->GetNpcTextLocale(textID)) + BroadcastText const* bct = sObjectMgr->GetBroadcastText(gossip->Options[i].BroadcastTextID); + if (bct) { - for (int i = 0; i < MAX_LOCALES; ++i) + text0[i] = bct->GetText(locale, GENDER_MALE, true); + text1[i] = bct->GetText(locale, GENDER_FEMALE, true); + } + else + { + text0[i] = gossip->Options[i].Text_0; + text1[i] = gossip->Options[i].Text_1; + } + + if (locale != DEFAULT_LOCALE && !bct) + { + if (NpcTextLocale const* npcTextLocale = sObjectMgr->GetNpcTextLocale(textID)) { - ObjectMgr::GetLocaleString(nl->Text_0[i], loc_idx, Text_0[i]); - ObjectMgr::GetLocaleString(nl->Text_1[i], loc_idx, Text_1[i]); + ObjectMgr::GetLocaleString(npcTextLocale->Text_0[i], locale, text0[i]); + ObjectMgr::GetLocaleString(npcTextLocale->Text_1[i], locale, text1[i]); } } - } - for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i) - { - data << pGossip->Options[i].Probability; + data << gossip->Options[i].Probability; - if (Text_0[i].empty()) - data << Text_1[i]; + if (text0[i].empty()) + data << text1[i]; else - data << Text_0[i]; + data << text0[i]; - if (Text_1[i].empty()) - data << Text_0[i]; + if (text1[i].empty()) + data << text0[i]; else - data << Text_1[i]; + data << text1[i]; - data << pGossip->Options[i].Language; + data << gossip->Options[i].Language; - for (int j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j) + for (uint8 j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j) { - data << pGossip->Options[i].Emotes[j]._Delay; - data << pGossip->Options[i].Emotes[j]._Emote; + data << gossip->Options[i].Emotes[j]._Delay; + data << gossip->Options[i].Emotes[j]._Emote; } } } @@ -401,19 +405,23 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recvData) uint32 count; recvData >> count; // quest count, max=25 - if (count >= MAX_QUEST_LOG_SIZE) + if (count > MAX_QUEST_LOG_SIZE) { recvData.rfinish(); return; } - WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count); - data << uint32(count); // count - + // Read quest ids and add the in a unordered_set so we don't send POIs for the same quest multiple times + std::unordered_set<uint32> questIds; for (uint32 i = 0; i < count; ++i) + questIds.insert(recvData.read<uint32>()); // quest id + + WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4 + (4 + 4)*questIds.size()); + data << uint32(questIds.size()); // count + + for (auto itr = questIds.begin(); itr != questIds.end(); ++itr) { - uint32 questId; - recvData >> questId; // quest id + uint32 questId = *itr; bool questOk = false; diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index e8d43b55fd8..d4dc7a9ab0d 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -38,42 +38,34 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) recvData >> guid; uint32 questStatus = DIALOG_STATUS_NONE; - Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); - if (!questgiver) + Object* questGiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); + if (!questGiver) { TC_LOG_INFO("network", "Error in CMSG_QUESTGIVER_STATUS_QUERY, called for non-existing questgiver (Typeid: %u GUID: %u)", GuidHigh2TypeId(GUID_HIPART(guid)), GUID_LOPART(guid)); return; } - switch (questgiver->GetTypeId()) + switch (questGiver->GetTypeId()) { case TYPEID_UNIT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questgiver->GetGUIDLow()); - Creature* cr_questgiver = questgiver->ToCreature(); - if (!cr_questgiver->IsHostileTo(_player)) // do not show quest status to enemies - { - questStatus = sScriptMgr->GetDialogStatus(_player, cr_questgiver); - if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) - questStatus = getDialogStatus(_player, cr_questgiver); - } + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questGiver->GetGUIDLow()); + if (!questGiver->ToCreature()->IsHostileTo(_player)) // do not show quest status to enemies + questStatus = _player->GetQuestDialogStatus(questGiver); break; } case TYPEID_GAMEOBJECT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questgiver->GetGUIDLow()); - GameObject* go_questgiver = questgiver->ToGameObject(); - questStatus = sScriptMgr->GetDialogStatus(_player, go_questgiver); - if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) - questStatus = getDialogStatus(_player, go_questgiver); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questGiver->GetGUIDLow()); + questStatus = _player->GetQuestDialogStatus(questGiver); break; } default: - TC_LOG_ERROR("network", "QuestGiver called for unexpected type %u", questgiver->GetTypeId()); + TC_LOG_ERROR("network", "QuestGiver called for unexpected type %u", questGiver->GetTypeId()); break; } - //inform client about status of quest + // inform client about status of quest _player->PlayerTalkClass->SendQuestGiverStatus(uint8(questStatus), guid); } @@ -174,7 +166,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) if (_player->CanAddQuest(quest, true)) { - _player->AddQuest(quest, object); + _player->AddQuestAndCheckCompletion(quest, object); if (quest->HasFlag(QUEST_FLAGS_PARTY_ACCEPT)) { @@ -191,7 +183,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) { player->SetDivider(_player->GetGUID()); - //need confirmation that any gossip window will close + // need confirmation that any gossip window will close player->PlayerTalkClass->SendCloseGossip(); _player->SendQuestConfirmAccept(quest, player); @@ -200,45 +192,6 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) } } - if (_player->CanCompleteQuest(questId)) - _player->CompleteQuest(questId); - - switch (object->GetTypeId()) - { - case TYPEID_UNIT: - sScriptMgr->OnQuestAccept(_player, (object->ToCreature()), quest); - object->ToCreature()->AI()->sQuestAccept(_player, quest); - break; - case TYPEID_ITEM: - case TYPEID_CONTAINER: - { - Item* item = (Item*)object; - sScriptMgr->OnQuestAccept(_player, item, quest); - - // destroy not required for quest finish quest starting item - bool destroyItem = true; - for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) - { - if (quest->RequiredItemId[i] == item->GetEntry() && item->GetTemplate()->MaxCount > 0) - { - destroyItem = false; - break; - } - } - - if (destroyItem) - _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); - - break; - } - case TYPEID_GAMEOBJECT: - sScriptMgr->OnQuestAccept(_player, object->ToGameObject(), quest); - object->ToGameObject()->AI()->QuestAccept(_player, quest); - break; - default: - break; - } - _player->PlayerTalkClass->SendCloseGossip(); if (quest->GetSrcSpell() > 0) @@ -314,7 +267,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_CHOOSE_REWARD npc = %u, quest = %u, reward = %u", uint32(GUID_LOPART(guid)), questId, reward); - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); if (!object || !object->hasInvolvedQuest(questId)) return; @@ -338,7 +291,9 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) switch (object->GetTypeId()) { case TYPEID_UNIT: - if (!(sScriptMgr->OnQuestReward(_player, (object->ToCreature()), quest, reward))) + { + Creature* questgiver = object->ToCreature(); + if (!sScriptMgr->OnQuestReward(_player, questgiver, quest, reward)) { // Send next quest if (Quest const* nextQuest = _player->GetNextQuest(guid, quest)) @@ -349,11 +304,14 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true); } - (object->ToCreature())->AI()->sQuestReward(_player, quest, reward); + questgiver->AI()->sQuestReward(_player, quest, reward); } break; + } case TYPEID_GAMEOBJECT: - if (!sScriptMgr->OnQuestReward(_player, ((GameObject*)object), quest, reward)) + { + GameObject* questGiver = object->ToGameObject(); + if (!sScriptMgr->OnQuestReward(_player, questGiver, quest, reward)) { // Send next quest if (Quest const* nextQuest = _player->GetNextQuest(guid, quest)) @@ -364,9 +322,10 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) _player->PlayerTalkClass->SendQuestGiverQuestDetails(nextQuest, guid, true); } - object->ToGameObject()->AI()->QuestReward(_player, quest, reward); + questGiver->AI()->QuestReward(_player, quest, reward); } break; + } default: break; } @@ -384,7 +343,7 @@ void WorldSession::HandleQuestgiverRequestRewardOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_REQUEST_REWARD npc = %u, quest = %u", uint32(GUID_LOPART(guid)), questId); - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); if (!object || !object->hasInvolvedQuest(questId)) return; @@ -468,17 +427,16 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUEST_CONFIRM_ACCEPT quest = %u", questId); - if (const Quest* quest = sObjectMgr->GetQuestTemplate(questId)) + if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId)) { if (!quest->HasFlag(QUEST_FLAGS_PARTY_ACCEPT)) return; - Player* pOriginalPlayer = ObjectAccessor::FindPlayer(_player->GetDivider()); - - if (!pOriginalPlayer) + Player* originalPlayer = ObjectAccessor::FindPlayer(_player->GetDivider()); + if (!originalPlayer) return; - if (!_player->IsInSameRaidWith(pOriginalPlayer)) + if (!_player->IsInSameRaidWith(originalPlayer)) return; if (_player->CanAddQuest(quest, true)) @@ -501,7 +459,7 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData) if (!quest) return; - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT); if (!object || !object->hasInvolvedQuest(questId)) return; @@ -638,104 +596,6 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) } } -uint32 WorldSession::getDialogStatus(Player* player, Object* questgiver) -{ - uint32 result = DIALOG_STATUS_NONE; - - QuestRelationBounds qr; - QuestRelationBounds qir; - - switch (questgiver->GetTypeId()) - { - case TYPEID_GAMEOBJECT: - { - qr = sObjectMgr->GetGOQuestRelationBounds(questgiver->GetEntry()); - qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(questgiver->GetEntry()); - break; - } - case TYPEID_UNIT: - { - qr = sObjectMgr->GetCreatureQuestRelationBounds(questgiver->GetEntry()); - qir = sObjectMgr->GetCreatureQuestInvolvedRelationBounds(questgiver->GetEntry()); - break; - } - default: - //its imposible, but check ^) - TC_LOG_ERROR("network", "Warning: GetDialogStatus called for unexpected type %u", questgiver->GetTypeId()); - return DIALOG_STATUS_NONE; - } - - for (QuestRelations::const_iterator i = qir.first; i != qir.second; ++i) - { - uint32 result2 = 0; - uint32 quest_id = i->second; - Quest const* quest = sObjectMgr->GetQuestTemplate(quest_id); - if (!quest) - continue; - - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(player, conditions)) - continue; - - QuestStatus status = player->GetQuestStatus(quest_id); - if ((status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(quest_id)) || - (quest->IsAutoComplete() && player->CanTakeQuest(quest, false))) - { - if (quest->IsAutoComplete() && quest->IsRepeatable() && !quest->IsDailyOrWeekly()) - result2 = DIALOG_STATUS_REWARD_REP; - else - result2 = DIALOG_STATUS_REWARD; - } - else if (status == QUEST_STATUS_INCOMPLETE) - result2 = DIALOG_STATUS_INCOMPLETE; - - if (result2 > result) - result = result2; - } - - for (QuestRelations::const_iterator i = qr.first; i != qr.second; ++i) - { - uint32 result2 = 0; - uint32 quest_id = i->second; - Quest const* quest = sObjectMgr->GetQuestTemplate(quest_id); - if (!quest) - continue; - - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(player, conditions)) - continue; - - QuestStatus status = player->GetQuestStatus(quest_id); - if (status == QUEST_STATUS_NONE) - { - if (player->CanSeeStartQuest(quest)) - { - if (player->SatisfyQuestLevel(quest, false)) - { - if (quest->IsAutoComplete()) - result2 = DIALOG_STATUS_REWARD_REP; - else if (player->getLevel() <= ((player->GetQuestLevel(quest) == -1) ? player->getLevel() : player->GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF))) - { - if (quest->IsDaily()) - result2 = DIALOG_STATUS_AVAILABLE_REP; - else - result2 = DIALOG_STATUS_AVAILABLE; - } - else - result2 = DIALOG_STATUS_LOW_LEVEL_AVAILABLE; - } - else - result2 = DIALOG_STATUS_UNAVAILABLE; - } - } - - if (result2 > result) - result = result2; - } - - return result; -} - void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket*/) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY"); @@ -758,9 +618,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket if (!questgiver->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) continue; - questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) - questStatus = getDialogStatus(_player, questgiver); + questStatus = _player->GetQuestDialogStatus(questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); @@ -772,9 +630,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket if (!questgiver || questgiver->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) continue; - questStatus = sScriptMgr->GetDialogStatus(_player, questgiver); - if (questStatus == DIALOG_STATUS_SCRIPTED_NO_STATUS) - questStatus = getDialogStatus(_player, questgiver); + questStatus = _player->GetQuestDialogStatus(questgiver); data << uint64(questgiver->GetGUID()); data << uint8(questStatus); diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index fe893314b87..8a94753b692 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -45,7 +45,10 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket) uint32 talentId, talentRank; - for (uint32 i = 0; i < talentsCount; ++i) + // Client has max 44 talents for tree for 3 trees, rounded up : 150 + uint32 const MaxTalentsCount = 150; + + for (uint32 i = 0; i < talentsCount && i < MaxTalentsCount; ++i) { recvPacket >> talentId >> talentRank; @@ -53,6 +56,8 @@ void WorldSession::HandleLearnPreviewTalents(WorldPacket& recvPacket) } _player->SendTalentsInfoData(false); + + recvPacket.rfinish(); } void WorldSession::HandleTalentWipeConfirmOpcode(WorldPacket& recvData) @@ -93,7 +98,8 @@ void WorldSession::HandleUnlearnSkillOpcode(WorldPacket& recvData) uint32 skillId; recvData >> skillId; - if (!IsPrimaryProfessionSkill(skillId)) + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skillId, GetPlayer()->getRace(), GetPlayer()->getClass()); + if (!rcEntry || !(rcEntry->Flags & SKILL_FLAG_UNLEARNABLE)) return; GetPlayer()->SetSkill(skillId, 0, 0, 0); diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index 688d7e58b6c..a2aa426c096 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -187,6 +187,8 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData) uint32 mainSurvey; // GMSurveyCurrentSurvey.dbc, column 1 (all 9) ref to GMSurveySurveys.dbc recvData >> mainSurvey; + std::unordered_set<uint32> surveyIds; + SQLTransaction trans = CharacterDatabase.BeginTransaction(); // sub_survey1, r1, comment1, sub_survey2, r2, comment2, sub_survey3, r3, comment3, sub_survey4, r4, comment4, sub_survey5, r5, comment5, sub_survey6, r6, comment6, sub_survey7, r7, comment7, sub_survey8, r8, comment8, sub_survey9, r9, comment9, sub_survey10, r10, comment10, for (uint8 i = 0; i < 10; i++) { @@ -200,12 +202,16 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData) std::string comment; // comment ("Usage: GMSurveyAnswerSubmit(question, rank, comment)") recvData >> comment; + // make sure the same sub survey is not added to DB twice + if (!surveyIds.insert(subSurveyId).second) + continue; + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SUBSURVEY); stmt->setUInt32(0, nextSurveyID); stmt->setUInt32(1, subSurveyId); stmt->setUInt32(2, rank); stmt->setString(3, comment); - CharacterDatabase.Execute(stmt); + trans->Append(stmt); } std::string comment; // just a guess @@ -217,7 +223,9 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData) stmt->setUInt32(2, mainSurvey); stmt->setString(3, comment); - CharacterDatabase.Execute(stmt); + trans->Append(stmt); + + CharacterDatabase.CommitTransaction(trans); } void WorldSession::HandleReportLag(WorldPacket& recvData) diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 28a511ad9d3..884c4a83b15 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -276,6 +276,13 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) // set before checks for propertly undo at problems (it already set in to client) my_trade->SetAccepted(true); + if (!_player->IsWithinDistInMap(trader, TRADE_DISTANCE, false)) + { + SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR); + my_trade->SetAccepted(false); + return; + } + // not accept case incorrect money amount if (!_player->HasEnoughMoney(my_trade->GetMoney())) { @@ -292,14 +299,14 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) return; } - if (_player->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - his_trade->GetMoney()) + if (_player->GetMoney() >= MAX_MONEY_AMOUNT - his_trade->GetMoney()) { _player->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL); my_trade->SetAccepted(false, true); return; } - if (trader->GetMoney() >= uint32(MAX_MONEY_AMOUNT) - my_trade->GetMoney()) + if (trader->GetMoney() >= MAX_MONEY_AMOUNT - my_trade->GetMoney()) { trader->SendEquipError(EQUIP_ERR_TOO_MUCH_GOLD, NULL, NULL); his_trade->SetAccepted(false, true); @@ -648,7 +655,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) return; } - if (!pOther->IsWithinDistInMap(_player, 10.0f, false)) + if (!pOther->IsWithinDistInMap(_player, TRADE_DISTANCE, false)) { SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR); return; @@ -679,7 +686,6 @@ void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket) if (!my_trade) return; - // gold can be incorrect, but this is checked at trade finished. my_trade->SetMoney(gold); } diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp index 3973b23eab4..b3fa240e2d2 100644 --- a/src/server/game/Handlers/VehicleHandler.cpp +++ b/src/server/game/Handlers/VehicleHandler.cpp @@ -96,7 +96,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData) if (!accessory) GetPlayer()->ChangeSeat(-1, seatId > 0); // prev/next - else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), accessory)) + else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), accessory)) { if (Vehicle* vehicle = vehUnit->GetVehicleKit()) if (vehicle->HasEmptySeat(seatId)) @@ -114,7 +114,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData) if (vehicle_base->GetGUID() == guid) GetPlayer()->ChangeSeat(seatId); - else if (Unit* vehUnit = Unit::GetUnit(*GetPlayer(), guid)) + else if (Unit* vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), guid)) if (Vehicle* vehicle = vehUnit->GetVehicleKit()) if (vehicle->HasEmptySeat(seatId)) vehUnit->HandleSpellClick(GetPlayer(), seatId); diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 1d753ebaa48..4f1b576cae6 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -24,7 +24,7 @@ #include <ace/Thread_Mutex.h> #include <list> #include <map> -#include "UnorderedMap.h" +#include <unordered_map> #include "DatabaseEnv.h" #include "DBCEnums.h" #include "ObjectDefines.h" @@ -140,7 +140,7 @@ class InstanceSave ACE_Thread_Mutex _lock; }; -typedef UNORDERED_MAP<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap; +typedef std::unordered_map<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap; class InstanceSaveManager { @@ -152,7 +152,7 @@ class InstanceSaveManager ~InstanceSaveManager(); public: - typedef UNORDERED_MAP<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap; + typedef std::unordered_map<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap; /* resetTime is a global propery of each (raid/heroic) map all instances of that map reset at the same time */ diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 3050443edc0..9e11c566c22 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -243,7 +243,7 @@ AI* GetInstanceAI(T* obj, char const* scriptName) return new AI(obj); return NULL; -}; +} template<class AI, class T> AI* GetInstanceAI(T* obj) @@ -253,6 +253,6 @@ AI* GetInstanceAI(T* obj) return new AI(obj); return NULL; -}; +} #endif // TRINITY_INSTANCE_DATA_H diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index bb7f679b7cd..270af559f0b 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -555,7 +555,7 @@ QuestItemList* Loot::FillQuestLoot(Player* player) { LootItem &item = quest_items[i]; - if (!item.is_looted && (item.AllowedForPlayer(player) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT )))) + if (!item.is_looted && (item.AllowedForPlayer(player) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT)))) { ql->push_back(QuestItem(i)); @@ -589,7 +589,7 @@ QuestItemList* Loot::FillNonQuestNonFFAConditionalLoot(Player* player, bool pres for (uint8 i = 0; i < items.size(); ++i) { LootItem &item = items[i]; - if (!item.is_looted && !item.freeforall && (item.AllowedForPlayer(player) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT )))) + if (!item.is_looted && !item.freeforall && (item.AllowedForPlayer(player) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT)))) { if (presentAtLooting) item.AddAllowedLooter(player); @@ -879,6 +879,8 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) switch (lv.permission) { case GROUP_PERMISSION: + case MASTER_PERMISSION: + case RESTRICTED_PERMISSION: { // if you are not the round-robin group looter, you can only see // blocked rolled items and quest items, and !ffa items @@ -888,9 +890,24 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) { uint8 slot_type; - if (l.items[i].is_blocked) - slot_type = LOOT_SLOT_TYPE_ROLL_ONGOING; - else if (l.roundRobinPlayer == 0 || !l.items[i].is_underthreshold || lv.viewer->GetGUID() == l.roundRobinPlayer) + if (l.items[i].is_blocked) // for ML & restricted is_blocked = !is_underthreshold + { + switch (lv.permission) + { + case GROUP_PERMISSION: + slot_type = LOOT_SLOT_TYPE_ROLL_ONGOING; + break; + case MASTER_PERMISSION: + slot_type = LOOT_SLOT_TYPE_MASTER; + break; + case RESTRICTED_PERMISSION: + slot_type = LOOT_SLOT_TYPE_LOCKED; + break; + default: + continue; + } + } + else if (l.roundRobinPlayer == 0 || lv.viewer->GetGUID() == l.roundRobinPlayer || !l.items[i].is_underthreshold) { // no round robin owner or he has released the loot // or it IS the round robin group owner @@ -926,22 +943,9 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) break; } case ALL_PERMISSION: - case MASTER_PERMISSION: case OWNER_PERMISSION: { - uint8 slot_type = LOOT_SLOT_TYPE_ALLOW_LOOT; - switch (lv.permission) - { - case MASTER_PERMISSION: - slot_type = LOOT_SLOT_TYPE_MASTER; - break; - case OWNER_PERMISSION: - slot_type = LOOT_SLOT_TYPE_OWNER; - break; - default: - break; - } - + uint8 slot_type = lv.permission == OWNER_PERMISSION ? LOOT_SLOT_TYPE_OWNER : LOOT_SLOT_TYPE_ALLOW_LOOT; for (uint8 i = 0; i < l.items.size(); ++i) { if (!l.items[i].is_looted && !l.items[i].freeforall && l.items[i].conditions.empty() && l.items[i].AllowedForPlayer(lv.viewer)) @@ -977,6 +981,9 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) case MASTER_PERMISSION: b << uint8(LOOT_SLOT_TYPE_MASTER); break; + case RESTRICTED_PERMISSION: + b << (item.is_blocked ? uint8(LOOT_SLOT_TYPE_LOCKED) : uint8(slotType)); + break; case GROUP_PERMISSION: case ROUND_ROBIN_PERMISSION: if (!item.is_blocked) @@ -1033,6 +1040,9 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) case MASTER_PERMISSION: b << uint8(LOOT_SLOT_TYPE_MASTER); break; + case RESTRICTED_PERMISSION: + b << (item.is_blocked ? uint8(LOOT_SLOT_TYPE_LOCKED) : uint8(slotType)); + break; case GROUP_PERMISSION: case ROUND_ROBIN_PERMISSION: if (!item.is_blocked) diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 96af1919e90..cb3b9082c20 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -68,13 +68,16 @@ enum PermissionTypes ALL_PERMISSION = 0, GROUP_PERMISSION = 1, MASTER_PERMISSION = 2, - ROUND_ROBIN_PERMISSION = 3, - OWNER_PERMISSION = 4, - NONE_PERMISSION = 5 + RESTRICTED_PERMISSION = 3, + ROUND_ROBIN_PERMISSION = 4, + OWNER_PERMISSION = 5, + NONE_PERMISSION = 6 }; enum LootType { + LOOT_NONE = 0, + LOOT_CORPSE = 1, LOOT_PICKPOCKETING = 2, LOOT_FISHING = 3, @@ -85,7 +88,8 @@ enum LootType LOOT_MILLING = 8, LOOT_FISHINGHOLE = 20, // unsupported by client, sending LOOT_FISHING instead - LOOT_INSIGNIA = 21 // unsupported by client, sending LOOT_CORPSE instead + LOOT_INSIGNIA = 21, // unsupported by client, sending LOOT_CORPSE instead + LOOT_FISHING_JUNK = 22 // unsupported by client, sending LOOT_FISHING instead }; // type of Loot Item in Loot View @@ -177,7 +181,7 @@ typedef std::vector<QuestItem> QuestItemList; typedef std::vector<LootItem> LootItemList; typedef std::map<uint32, QuestItemList*> QuestItemMap; typedef std::list<LootStoreItem*> LootStoreItemList; -typedef UNORDERED_MAP<uint32, LootTemplate*> LootTemplateMap; +typedef std::unordered_map<uint32, LootTemplate*> LootTemplateMap; typedef std::set<uint32> LootIdSet; @@ -339,6 +343,7 @@ struct Loot gold = 0; unlootedCount = 0; roundRobinPlayer = 0; + loot_type = LOOT_NONE; i_LootValidatorRefManager.clearReferences(); } diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index 8c82ef8f45b..2c65e363dd5 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -193,10 +193,12 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, expire_delay = DAY; // default case: expire time if COD 3 days, if no COD 30 days (or 90 days if sender is a game master) else + { if (m_COD) expire_delay = 3 * DAY; else expire_delay = pSender && pSender->IsGameMaster() ? 90 * DAY : 30 * DAY; + } time_t expire_time = deliver_time + expire_delay; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 21e282cfcf4..a49e69ec311 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -119,6 +119,9 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) void Map::LoadMMap(int gx, int gy) { + if (!MMAP::MMapFactory::IsPathfindingEnabled(GetId())) + return; + bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy); if (mmapLoadResult) @@ -129,6 +132,8 @@ void Map::LoadMMap(int gx, int gy) void Map::LoadVMap(int gx, int gy) { + if (!VMAP::VMapFactory::createOrGetVMapManager()->isMapLoadingEnabled()) + return; // x and y are swapped !! int vmapLoadResult = VMAP::VMapFactory::createOrGetVMapManager()->loadMap((sWorld->GetDataPath()+ "vmaps").c_str(), GetId(), gx, gy); switch (vmapLoadResult) @@ -217,13 +222,13 @@ void Map::DeleteStateMachine() } Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _parent): -_creatureToMoveLock(false), _gameObjectsToMoveLock(false), +_creatureToMoveLock(false), _gameObjectsToMoveLock(false), _dynamicObjectsToMoveLock(false), i_mapEntry(sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId), m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), m_VisibilityNotifyPeriod(DEFAULT_VISIBILITY_NOTIFY_PERIOD), m_activeNonPlayersIter(m_activeNonPlayers.end()), _transportsUpdateIter(_transports.end()), i_gridExpiry(expiry), -i_scriptLock(false) +i_scriptLock(false), _defaultLight(GetDefaultMapLight(id)) { m_parentMap = (_parent ? _parent : this); for (unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx) @@ -281,6 +286,15 @@ void Map::AddToGrid(GameObject* obj, Cell const& cell) obj->SetCurrentCell(cell); } +template<> +void Map::AddToGrid(DynamicObject* obj, Cell const& cell) +{ + NGridType* grid = getNGrid(cell.GridX(), cell.GridY()); + grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); + + obj->SetCurrentCell(cell); +} + template<class T> void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) { } @@ -468,6 +482,7 @@ bool Map::AddPlayerToMap(Player* player) SendInitSelf(player); SendInitTransports(player); + SendZoneDynamicInfo(player); player->m_clientGUIDs.clear(); player->UpdateObjectVisibility(false); @@ -944,6 +959,7 @@ void Map::GameObjectRelocation(GameObject* go, float x, float y, float z, float else { go->Relocate(x, y, z, orientation); + go->UpdateModelPosition(); go->UpdateObjectVisibility(false); RemoveGameObjectFromMoveList(go); } @@ -953,6 +969,38 @@ void Map::GameObjectRelocation(GameObject* go, float x, float y, float z, float ASSERT(integrity_check == old_cell); } +void Map::DynamicObjectRelocation(DynamicObject* dynObj, float x, float y, float z, float orientation) +{ + Cell integrity_check(dynObj->GetPositionX(), dynObj->GetPositionY()); + Cell old_cell = dynObj->GetCurrentCell(); + + ASSERT(integrity_check == old_cell); + Cell new_cell(x, y); + + if (!getNGrid(new_cell.GridX(), new_cell.GridY())) + return; + + // delay creature move for grid/cell to grid/cell moves + if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) + { +#ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "GameObject (GUID: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", dynObj->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); +#endif + AddDynamicObjectToMoveList(dynObj, x, y, z, orientation); + // in diffcell/diffgrid case notifiers called at finishing move dynObj in Map::MoveAllGameObjectsInMoveList + } + else + { + dynObj->Relocate(x, y, z, orientation); + dynObj->UpdateObjectVisibility(false); + RemoveDynamicObjectFromMoveList(dynObj); + } + + old_cell = dynObj->GetCurrentCell(); + integrity_check = Cell(dynObj->GetPositionX(), dynObj->GetPositionY()); + ASSERT(integrity_check == old_cell); +} + void Map::AddCreatureToMoveList(Creature* c, float x, float y, float z, float ang) { if (_creatureToMoveLock) //can this happen? @@ -991,6 +1039,25 @@ void Map::RemoveGameObjectFromMoveList(GameObject* go) go->_moveState = MAP_OBJECT_CELL_MOVE_INACTIVE; } +void Map::AddDynamicObjectToMoveList(DynamicObject* dynObj, float x, float y, float z, float ang) +{ + if (_dynamicObjectsToMoveLock) //can this happen? + return; + + if (dynObj->_moveState == MAP_OBJECT_CELL_MOVE_NONE) + _dynamicObjectsToMove.push_back(dynObj); + dynObj->SetNewCellPosition(x, y, z, ang); +} + +void Map::RemoveDynamicObjectFromMoveList(DynamicObject* dynObj) +{ + if (_dynamicObjectsToMoveLock) //can this happen? + return; + + if (dynObj->_moveState == MAP_OBJECT_CELL_MOVE_ACTIVE) + dynObj->_moveState = MAP_OBJECT_CELL_MOVE_INACTIVE; +} + void Map::MoveAllCreaturesInMoveList() { _creatureToMoveLock = true; @@ -1071,6 +1138,7 @@ void Map::MoveAllGameObjectsInMoveList() { // update pos go->Relocate(go->_newPosition); + go->UpdateModelPosition(); go->UpdateObjectVisibility(false); } else @@ -1091,6 +1159,44 @@ void Map::MoveAllGameObjectsInMoveList() _gameObjectsToMoveLock = false; } +void Map::MoveAllDynamicObjectsInMoveList() +{ + _dynamicObjectsToMoveLock = true; + for (std::vector<DynamicObject*>::iterator itr = _dynamicObjectsToMove.begin(); itr != _dynamicObjectsToMove.end(); ++itr) + { + DynamicObject* dynObj = *itr; + if (dynObj->FindMap() != this) //transport is teleported to another map + continue; + + if (dynObj->_moveState != MAP_OBJECT_CELL_MOVE_ACTIVE) + { + dynObj->_moveState = MAP_OBJECT_CELL_MOVE_NONE; + continue; + } + + dynObj->_moveState = MAP_OBJECT_CELL_MOVE_NONE; + if (!dynObj->IsInWorld()) + continue; + + // do move or do move to respawn or remove creature if previous all fail + if (DynamicObjectCellRelocation(dynObj, Cell(dynObj->_newPosition.m_positionX, dynObj->_newPosition.m_positionY))) + { + // update pos + dynObj->Relocate(dynObj->_newPosition); + dynObj->UpdateObjectVisibility(false); + } + else + { +#ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) cannot be moved to unloaded grid.", dynObj->GetGUIDLow()); +#endif + } + } + + _dynamicObjectsToMove.clear(); + _dynamicObjectsToMoveLock = false; +} + bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) { Cell const& old_cell = c->GetCurrentCell(); @@ -1213,6 +1319,67 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) return false; } +bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) +{ + Cell const& old_cell = go->GetCurrentCell(); + if (!old_cell.DiffGrid(new_cell)) // in same grid + { + // if in same cell then none do + if (old_cell.DiffCell(new_cell)) + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + AddToGrid(go, new_cell); + } + else + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); + #endif + } + + return true; + } + + // in diff. grids but active GameObject + if (go->isActiveObject()) + { + EnsureGridLoadedForActiveObject(new_cell, go); + + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "Active DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + AddToGrid(go, new_cell); + + return true; + } + + // in diff. loaded grid normal GameObject + if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY()))) + { + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + + go->RemoveFromGrid(); + EnsureGridCreated(GridCoord(new_cell.GridX(), new_cell.GridY())); + AddToGrid(go, new_cell); + + return true; + } + + // fail to move: normal GameObject attempt move to unloaded grid + #ifdef TRINITY_DEBUG + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + #endif + return false; +} + bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly) { float resp_x, resp_y, resp_z, resp_o; @@ -1382,11 +1549,8 @@ void Map::UnloadAll() Transport* transport = *itr; ++itr; - transport->RemoveFromWorld(); - delete transport; + RemoveFromMap<Transport>(transport, true); } - - _transports.clear(); } // ***************************** @@ -2347,15 +2511,9 @@ void Map::SendInitSelf(Player* player) // build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map if (Transport* transport = player->GetTransport()) - { - for (std::set<WorldObject*>::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) - { + for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr) if (player != (*itr) && player->HaveAtClient(*itr)) - { (*itr)->BuildCreateUpdateBlockForPlayer(&data, player); - } - } - } WorldPacket packet; data.BuildPacket(&packet); @@ -2486,21 +2644,27 @@ void Map::RemoveAllObjectsInRemoveList() RemoveFromMap(corpse, true); break; } - case TYPEID_DYNAMICOBJECT: - RemoveFromMap((DynamicObject*)obj, true); - break; - case TYPEID_GAMEOBJECT: - RemoveFromMap((GameObject*)obj, true); - break; - case TYPEID_UNIT: - // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call - // make sure that like sources auras/etc removed before destructor start - obj->ToCreature()->CleanupsBeforeDelete(); - RemoveFromMap(obj->ToCreature(), true); - break; - default: - TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId()); - break; + case TYPEID_DYNAMICOBJECT: + RemoveFromMap(obj->ToDynObject(), true); + break; + case TYPEID_GAMEOBJECT: + { + GameObject* go = obj->ToGameObject(); + if (Transport* transport = go->ToTransport()) + RemoveFromMap(transport, true); + else + RemoveFromMap(go, true); + break; + } + case TYPEID_UNIT: + // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call + // make sure that like sources auras/etc removed before destructor start + obj->ToCreature()->CleanupsBeforeDelete(); + RemoveFromMap(obj->ToCreature(), true); + break; + default: + TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId()); + break; } i_objectsToRemove.erase(itr); @@ -2689,10 +2853,9 @@ bool InstanceMap::CanEnter(Player* player) return false; } - // cannot enter while an encounter is in progress on raids - /*Group* group = player->GetGroup(); - if (!player->IsGameMaster() && group && group->InCombatToInstance(GetInstanceId()) && player->GetMapId() != GetId())*/ - if (IsRaid() && GetInstanceScript() && GetInstanceScript()->IsEncounterInProgress()) + // cannot enter while an encounter is in progress + // allow if just loading + if (!player->IsLoading() && IsRaid() && GetInstanceScript() && GetInstanceScript()->IsEncounterInProgress()) { player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); return false; @@ -3018,18 +3181,11 @@ MapDifficulty const* Map::GetMapDifficulty() const uint32 InstanceMap::GetMaxPlayers() const { - if (MapDifficulty const* mapDiff = GetMapDifficulty()) - { - if (mapDiff->maxPlayers || IsRegularDifficulty()) // Normal case (expect that regular difficulty always have correct maxplayers) - return mapDiff->maxPlayers; - else // DBC have 0 maxplayers for heroic instances with expansion < 2 - { // The heroic entry exists, so we don't have to check anything, simply return normal max players - MapDifficulty const* normalDiff = GetMapDifficultyData(GetId(), REGULAR_DIFFICULTY); - return normalDiff ? normalDiff->maxPlayers : 0; - } - } - else // I'd rather ASSERT(false); - return 0; + MapDifficulty const* mapDiff = GetMapDifficulty(); + if (mapDiff && mapDiff->maxPlayers) + return mapDiff->maxPlayers; + + return GetEntry()->maxPlayers; } uint32 InstanceMap::GetMaxResetDelay() const @@ -3274,3 +3430,115 @@ time_t Map::GetLinkedRespawnTime(uint64 guid) const return time_t(0); } +void Map::SendZoneDynamicInfo(Player* player) +{ + uint32 zoneId = GetZoneId(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); + ZoneDynamicInfoMap::const_iterator itr = _zoneDynamicInfo.find(zoneId); + if (itr == _zoneDynamicInfo.end()) + return; + + if (uint32 music = itr->second.MusicId) + { + WorldPacket data(SMSG_PLAY_MUSIC, 4); + data << uint32(music); + player->SendDirectMessage(&data); + } + + if (uint32 weather = itr->second.WeatherId) + { + WorldPacket data(SMSG_WEATHER, 4 + 4 + 1); + data << uint32(weather); + data << float(itr->second.WeatherGrade); + data << uint8(0); + player->SendDirectMessage(&data); + } + + if (uint32 overrideLight = itr->second.OverrideLightId) + { + WorldPacket data(SMSG_OVERRIDE_LIGHT, 4 + 4 + 1); + data << uint32(_defaultLight); + data << uint32(overrideLight); + data << uint32(itr->second.LightFadeInTime); + player->SendDirectMessage(&data); + } +} + +void Map::SetZoneMusic(uint32 zoneId, uint32 musicId) +{ + if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end()) + _zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo())); + + _zoneDynamicInfo[zoneId].MusicId = musicId; + + Map::PlayerList const& players = GetPlayers(); + if (!players.isEmpty()) + { + WorldPacket data(SMSG_PLAY_MUSIC, 4); + data << uint32(musicId); + + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + if (Player* player = itr->GetSource()) + if (player->GetZoneId() == zoneId) + player->SendDirectMessage(&data); + } +} + +void Map::SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade) +{ + if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end()) + _zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo())); + + ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId]; + info.WeatherId = weatherId; + info.WeatherGrade = weatherGrade; + Map::PlayerList const& players = GetPlayers(); + + if (!players.isEmpty()) + { + WorldPacket data(SMSG_WEATHER, 4 + 4 + 1); + data << uint32(weatherId); + data << float(weatherGrade); + data << uint8(0); + + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + if (Player* player = itr->GetSource()) + if (player->GetZoneId() == zoneId) + player->SendDirectMessage(&data); + } +} + +void Map::SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime) +{ + if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end()) + _zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo())); + + ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId]; + info.OverrideLightId = lightId; + info.LightFadeInTime = fadeInTime; + Map::PlayerList const& players = GetPlayers(); + + if (!players.isEmpty()) + { + WorldPacket data(SMSG_OVERRIDE_LIGHT, 4 + 4 + 1); + data << uint32(_defaultLight); + data << uint32(lightId); + data << uint32(fadeInTime); + + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + if (Player* player = itr->GetSource()) + if (player->GetZoneId() == zoneId) + player->SendDirectMessage(&data); + } +} + +void Map::UpdateAreaDependentAuras() +{ + Map::PlayerList const& players = GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + if (Player* player = itr->GetSource()) + if (player->IsInWorld()) + { + player->UpdateAreaDependentAuras(player->GetAreaId()); + player->UpdateZoneDependentAuras(player->GetZoneId()); + } +} diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 8e7886dc5d2..a2d88905f50 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -51,6 +51,7 @@ struct ScriptAction; struct Position; class Battleground; class MapInstanced; +class BattlegroundMap; class InstanceMap; class Transport; namespace Trinity { struct ObjectUpdater; } @@ -229,6 +230,18 @@ enum LevelRequirementVsMode LEVELREQUIREMENT_HEROIC = 70 }; +struct ZoneDynamicInfo +{ + ZoneDynamicInfo() : MusicId(0), WeatherId(0), WeatherGrade(0.0f), + OverrideLightId(0), LightFadeInTime(0) { } + + uint32 MusicId; + uint32 WeatherId; + float WeatherGrade; + uint32 OverrideLightId; + uint32 LightFadeInTime; +}; + #if defined(__GNUC__) #pragma pack() #else @@ -243,6 +256,8 @@ enum LevelRequirementVsMode typedef std::map<uint32/*leaderDBGUID*/, CreatureGroup*> CreatureGroupHolderType; +typedef std::unordered_map<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMap; + class Map : public GridRefManager<NGridType> { friend class MapReference; @@ -280,6 +295,7 @@ class Map : public GridRefManager<NGridType> void PlayerRelocation(Player*, float x, float y, float z, float orientation); void CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail = true); void GameObjectRelocation(GameObject* go, float x, float y, float z, float orientation, bool respawnRelocationOnFail = true); + void DynamicObjectRelocation(DynamicObject* go, float x, float y, float z, float orientation); template<class T, class CONTAINER> void Visit(const Cell& cell, TypeContainerVisitor<T, CONTAINER> &visitor); @@ -353,6 +369,7 @@ class Map : public GridRefManager<NGridType> void MoveAllCreaturesInMoveList(); void MoveAllGameObjectsInMoveList(); + void MoveAllDynamicObjectsInMoveList(); void RemoveAllObjectsInRemoveList(); virtual void RemoveAllPlayers(); @@ -441,11 +458,15 @@ class Map : public GridRefManager<NGridType> Transport* GetTransport(uint64 guid); DynamicObject* GetDynamicObject(uint64 guid); - MapInstanced* ToMapInstanced(){ if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); else return NULL; } - const MapInstanced* ToMapInstanced() const { if (Instanceable()) return (const MapInstanced*)((MapInstanced*)this); else return NULL; } + MapInstanced* ToMapInstanced() { if (Instanceable()) return reinterpret_cast<MapInstanced*>(this); return NULL; } + MapInstanced const* ToMapInstanced() const { if (Instanceable()) return reinterpret_cast<MapInstanced const*>(this); return NULL; } + + InstanceMap* ToInstanceMap() { if (IsDungeon()) return reinterpret_cast<InstanceMap*>(this); else return NULL; } + InstanceMap const* ToInstanceMap() const { if (IsDungeon()) return reinterpret_cast<InstanceMap const*>(this); return NULL; } + + BattlegroundMap* ToBattlegroundMap() { if (IsBattlegroundOrArena()) return reinterpret_cast<BattlegroundMap*>(this); else return NULL; } + BattlegroundMap const* ToBattlegroundMap() const { if (IsBattlegroundOrArena()) return reinterpret_cast<BattlegroundMap const*>(this); return NULL; } - InstanceMap* ToInstanceMap(){ if (IsDungeon()) return reinterpret_cast<InstanceMap*>(this); else return NULL; } - const InstanceMap* ToInstanceMap() const { if (IsDungeon()) return (const InstanceMap*)((InstanceMap*)this); else return NULL; } float GetWaterOrGroundLevel(float x, float y, float z, float* ground = NULL, bool swim = false) const; float GetHeight(uint32 phasemask, float x, float y, float z, bool vmap = true, float maxSearchDist = DEFAULT_HEIGHT_SEARCH) const; bool isInLineOfSight(float x1, float y1, float z1, float x2, float y2, float z2, uint32 phasemask) const; @@ -461,7 +482,7 @@ class Map : public GridRefManager<NGridType> time_t GetLinkedRespawnTime(uint64 guid) const; time_t GetCreatureRespawnTime(uint32 dbGuid) const { - UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid); + std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid); if (itr != _creatureRespawnTimes.end()) return itr->second; @@ -470,7 +491,7 @@ class Map : public GridRefManager<NGridType> time_t GetGORespawnTime(uint32 dbGuid) const { - UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid); + std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid); if (itr != _goRespawnTimes.end()) return itr->second; @@ -488,6 +509,13 @@ class Map : public GridRefManager<NGridType> void SendInitTransports(Player* player); void SendRemoveTransports(Player* player); + void SendZoneDynamicInfo(Player* player); + + void SetZoneMusic(uint32 zoneId, uint32 musicId); + void SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade); + void SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime); + + void UpdateAreaDependentAuras(); private: void LoadMapAndVMap(int gx, int gy); @@ -502,12 +530,15 @@ class Map : public GridRefManager<NGridType> bool CreatureCellRelocation(Creature* creature, Cell new_cell); bool GameObjectCellRelocation(GameObject* go, Cell new_cell); + bool DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell); template<class T> void InitializeObject(T* obj); void AddCreatureToMoveList(Creature* c, float x, float y, float z, float ang); void RemoveCreatureFromMoveList(Creature* c); void AddGameObjectToMoveList(GameObject* go, float x, float y, float z, float ang); void RemoveGameObjectFromMoveList(GameObject* go); + void AddDynamicObjectToMoveList(DynamicObject* go, float x, float y, float z, float ang); + void RemoveDynamicObjectFromMoveList(DynamicObject* go); bool _creatureToMoveLock; std::vector<Creature*> _creaturesToMove; @@ -515,6 +546,9 @@ class Map : public GridRefManager<NGridType> bool _gameObjectsToMoveLock; std::vector<GameObject*> _gameObjectsToMove; + bool _dynamicObjectsToMoveLock; + std::vector<DynamicObject*> _dynamicObjectsToMove; + bool IsGridLoaded(const GridCoord &) const; void EnsureGridCreated(const GridCoord &); void EnsureGridCreated_i(const GridCoord &); @@ -624,8 +658,11 @@ class Map : public GridRefManager<NGridType> m_activeNonPlayers.erase(obj); } - UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes; - UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _goRespawnTimes; + std::unordered_map<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes; + std::unordered_map<uint32 /*dbGUID*/, time_t> _goRespawnTimes; + + ZoneDynamicInfoMap _zoneDynamicInfo; + uint32 _defaultLight; }; enum InstanceResetMethod diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h index aa2b5f95d3f..30aec43cc21 100644 --- a/src/server/game/Maps/MapInstanced.h +++ b/src/server/game/Maps/MapInstanced.h @@ -27,7 +27,7 @@ class MapInstanced : public Map { friend class MapManager; public: - typedef UNORDERED_MAP< uint32, Map*> InstancedMaps; + typedef std::unordered_map< uint32, Map*> InstancedMaps; MapInstanced(uint32 id, time_t expiry); ~MapInstanced() { } diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 2e10fdc374b..d8c8889da67 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -122,7 +122,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) { MapEntry const* entry = sMapStore.LookupEntry(mapid); if (!entry) - return false; + return false; if (!entry->IsDungeon()) return true; @@ -220,12 +220,12 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) // players are only allowed to enter 5 instances per hour if (entry->IsDungeon() && (!player->GetGroup() || (player->GetGroup() && !player->GetGroup()->isLFGGroup()))) { - uint32 instaceIdToCheck = 0; + uint32 instanceIdToCheck = 0; if (InstanceSave* save = player->GetInstanceSave(mapid, entry->IsRaid())) - instaceIdToCheck = save->GetInstanceId(); + instanceIdToCheck = save->GetInstanceId(); // instanceId can never be 0 - will not be found - if (!player->CheckInstanceCount(instaceIdToCheck) && !player->isDead()) + if (!player->CheckInstanceCount(instanceIdToCheck) && !player->isDead()) { player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES); return false; diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index 98a5f8c7180..b7fb0617a46 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -126,7 +126,7 @@ class MapManager MapUpdater * GetMapUpdater() { return &m_updater; } private: - typedef UNORDERED_MAP<uint32, Map*> MapMapType; + typedef std::unordered_map<uint32, Map*> MapMapType; typedef std::vector<bool> InstanceIds; MapManager(); diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp index f3a5a66bf66..dd697719d54 100644 --- a/src/server/game/Maps/MapUpdater.cpp +++ b/src/server/game/Maps/MapUpdater.cpp @@ -6,34 +6,6 @@ #include <ace/Guard_T.h> #include <ace/Method_Request.h> -class WDBThreadStartReq1 : public ACE_Method_Request -{ - public: - - WDBThreadStartReq1() - { - } - - virtual int call() - { - return 0; - } -}; - -class WDBThreadEndReq1 : public ACE_Method_Request -{ - public: - - WDBThreadEndReq1() - { - } - - virtual int call() - { - return 0; - } -}; - class MapUpdateRequest : public ACE_Method_Request { private: @@ -67,7 +39,7 @@ MapUpdater::~MapUpdater() int MapUpdater::activate(size_t num_threads) { - return m_executor.start((int)num_threads, new WDBThreadStartReq1, new WDBThreadEndReq1); + return m_executor.start((int)num_threads); } int MapUpdater::deactivate() diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index a207522c4df..5da856b185c 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -31,10 +31,10 @@ class Map; typedef Movement::Spline<double> TransportSpline; typedef std::vector<KeyFrame> KeyFrameVec; -typedef UNORDERED_MAP<uint32, TransportTemplate> TransportTemplates; +typedef std::unordered_map<uint32, TransportTemplate> TransportTemplates; typedef std::set<Transport*> TransportSet; -typedef UNORDERED_MAP<uint32, TransportSet> TransportMap; -typedef UNORDERED_MAP<uint32, std::set<uint32> > TransportInstanceMap; +typedef std::unordered_map<uint32, TransportSet> TransportMap; +typedef std::unordered_map<uint32, std::set<uint32> > TransportInstanceMap; struct KeyFrame { diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 3102e2c6854..3a680e30217 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -19,6 +19,13 @@ #ifndef __TRINITY_LANGUAGE_H #define __TRINITY_LANGUAGE_H +enum BroadcastTextIds +{ + BROADCAST_TEXT_ACHIEVEMENT_EARNED = 29245, + BROADCAST_TEXT_CALL_FOR_HELP = 2541, + BROADCAST_TEXT_FLEE_FOR_ASSIST = 1150 +}; + enum TrinityStrings { // for chat commands @@ -753,7 +760,7 @@ enum TrinityStrings LANG_NEED_CHARACTER_NAME = 807, LANG_PLAYER_NOT_EXIST_OR_OFFLINE = 808, LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND = 809, - LANG_ACHIEVEMENT_EARNED = 810, + // unused = 810, LANG_GUILD_MASTER = 811, LANG_GUILD_OFFICER = 812, LANG_GUILD_VETERAN = 813, @@ -1074,12 +1081,12 @@ enum TrinityStrings LANG_GOINFO_NAME = 5027, LANG_GOINFO_LOOTID = 5028, LANG_COMMAND_LOOKUP_MAX_RESULTS = 5029, - LANG_FLEE = 5030, + // unused = 5030, LANG_NPCINFO_AIINFO = 5031, LANG_COMMAND_NO_BATTLEGROUND_FOUND = 5032, LANG_COMMAND_NO_ACHIEVEMENT_CRITERIA_FOUND = 5033, LANG_COMMAND_NO_OUTDOOR_PVP_FORUND = 5034, - LANG_CALL_FOR_HELP = 5035, + // unused = 5035, LANG_NPCINFO_EQUIPMENT = 5036, LANG_NPCINFO_MECHANIC_IMMUNE = 5037, LANG_NPCINFO_UNIT_FIELD_FLAGS = 5038, @@ -1195,21 +1202,11 @@ enum TrinityStrings LANG_BG_SA_START_TWO_MINUTES = 10056, LANG_BG_SA_START_ONE_MINUTE = 10057, LANG_BG_SA_START_HALF_MINUTE = 10058, - LANG_BG_SA_HAS_BEGUN = 10059, - LANG_BG_SA_IS_UNDER_ATTACK = 10060, //The %s is under attack! - LANG_BG_SA_WAS_DESTROYED = 10061, //The %s was destroyed! - LANG_BG_SA_ROUND_ONE_END = 10062, //Round 1 - finished! + // unused 10059-10062 LANG_BG_SA_ALLIANCE_CAPTURED_RELIC = 10063, //The Alliance captured the titan portal! LANG_BG_SA_HORDE_CAPTURED_RELIC = 10064, //The Horde captured the titan portal! LANG_BG_SA_ROUND_TWO_ONE_MINUTE = 10065, //Round 2 of the Battle for the Strand of the Ancients begins in 1 minute. LANG_BG_SA_ROUND_TWO_START_HALF_MINUTE = 10066, //Round 2 begins in 30 seconds. Prepare yourselves! - LANG_BG_SA_CHAMBER_BREACHED = 10067, //The chamber has been breached! The titan relic is vulnerable! - LANG_BG_SA_A_GY_SOUTH = 10068, //The Alliance captured the South Graveyard! - LANG_BG_SA_A_GY_WEST = 10069, //The Alliance captured the West Graveyard! - LANG_BG_SA_A_GY_EAST = 10070, //The Alliance captured the East Graveyard! - LANG_BG_SA_H_GY_SOUTH = 10071, //The Horde captured the South Graveyard! - LANG_BG_SA_H_GY_WEST = 10072, //The Horde captured the West Graveyard! - LANG_BG_SA_H_GY_EAST = 10073, //The Horde captured the East Graveyard! // Use for custom patches 11000-11999 LANG_AUTO_BROADCAST = 11000, @@ -1227,6 +1224,9 @@ enum TrinityStrings LANG_BAN_ACCOUNT_YOUBANNEDMESSAGE_WORLD = 11006, LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007, + LANG_NPCINFO_INHABIT_TYPE = 11008, + LANG_NPCINFO_FLAGS_EXTRA = 11009 + // NOT RESERVED IDS 12000-1999999999 // `db_script_string` table index 2000000000-2000009999 (MIN_DB_SCRIPT_STRING_ID-MAX_DB_SCRIPT_STRING_ID) // For other tables maybe 2000010000-2147483647 (max index) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index e5d3a5312de..77bc76c6dfd 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -41,7 +41,8 @@ enum LootModes LOOT_MODE_HARD_MODE_1 = 0x2, LOOT_MODE_HARD_MODE_2 = 0x4, LOOT_MODE_HARD_MODE_3 = 0x8, - LOOT_MODE_HARD_MODE_4 = 0x10 + LOOT_MODE_HARD_MODE_4 = 0x10, + LOOT_MODE_JUNK_FISH = 0x8000 }; enum Expansions @@ -396,7 +397,7 @@ enum SpellAttr3 SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can only be cast in battleground SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12 - SPELL_ATTR3_UNK13 = 0x00002000, // 13 + SPELL_ATTR3_DONT_DISPLAY_CHANNEL_BAR = 0x00002000, // 13 Clientside attribute - will not display channeling bar SPELL_ATTR3_IS_HONORLESS_TARGET = 0x00004000, // 14 "Honorless Target" only this spells have this flag SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 confirmed with many patchnotes @@ -427,7 +428,7 @@ enum SpellAttr4 SPELL_ATTR4_UNK5 = 0x00000020, // 5 SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered - SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 ignores taken percent damage mods? + SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 Ignores resilience and any (except mechanic related) damage or % damage taken auras on target. SPELL_ATTR4_TRIGGER_ACTIVATE = 0x00000200, // 9 initially disabled / trigger activate from event (Execute, Riposte, Deep Freeze end other) SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag SPELL_ATTR4_UNK11 = 0x00000800, // 11 @@ -533,7 +534,7 @@ enum SpellAttr7 SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell. SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. - SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). + SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE = 0x00000040, // 6 Does not cause spell pushback on damage SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells. @@ -543,7 +544,7 @@ enum SpellAttr7 SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? - SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285). + SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER = 0x00010000, // 16 These spells can replenish a powertype, which is not the current powertype. SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. @@ -1129,7 +1130,7 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_95 = 95, // "" SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_RECRUITS = 96, // You already have the max number of recruits. SPELL_CUSTOM_ERROR_MAX_NUMBER_OF_VOLUNTEERS = 97, // You already have the max number of volunteers. - SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESSURECT = 98, // Frostmourne has rendered you unable to ressurect. + SPELL_CUSTOM_ERROR_FROSTMOURNE_RENDERED_RESURRECT = 98, // Frostmourne has rendered you unable to resurrect. SPELL_CUSTOM_ERROR_CANT_MOUNT_WITH_SHAPESHIFT = 99 // You can't mount while affected by that shapeshift. }; @@ -2594,7 +2595,7 @@ enum CreatureTypeFlags CREATURE_TYPEFLAGS_EXOTIC = 0x00010000, // Can be tamed by hunter as exotic pet CREATURE_TYPEFLAGS_UNK17 = 0x00020000, // ? Related to vehicles/pvp? CREATURE_TYPEFLAGS_UNK18 = 0x00040000, // ? Related to vehicle/siege weapons? - CREATURE_TYPEFLAGS_UNK19 = 0x00080000, + CREATURE_TYPEFLAGS_PROJECTILE_COLLISION = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ CREATURE_TYPEFLAGS_UNK20 = 0x00100000, CREATURE_TYPEFLAGS_UNK21 = 0x00200000, CREATURE_TYPEFLAGS_UNK22 = 0x00400000, @@ -3324,7 +3325,7 @@ enum BattlegroundTypeId BATTLEGROUND_DS = 10, // Dalaran Sewers BATTLEGROUND_RV = 11, // Ring of Valor BATTLEGROUND_IC = 30, // Isle of Conquest - BATTLEGROUND_RB = 32 // Random Battleground + BATTLEGROUND_RB = 32 // Random Battleground }; #define MAX_BATTLEGROUND_TYPE_ID 33 @@ -3550,7 +3551,7 @@ enum PartyResult }; const uint32 MMAP_MAGIC = 0x4d4d4150; // 'MMAP' -#define MMAP_VERSION 4 +#define MMAP_VERSION 5 struct MmapTileHeader { diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index d224c21efe8..55f745d993b 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -337,6 +337,9 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa if (_owner->GetTypeId() == TYPEID_PLAYER) return; + if (speedXY <= 0.1f) + return; + float x, y, z; float moveTimeHalf = speedZ / Movement::gravity; float dist = 2 * moveTimeHalf * speedXY; @@ -370,6 +373,8 @@ void MotionMaster::MoveJumpTo(float angle, float speedXY, float speedZ) void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id) { TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z); + if (speedXY <= 0.1f) + return; float moveTimeHalf = speedZ / Movement::gravity; float max_height = -Movement::computeFallElevation(moveTimeHalf, false, -speedZ); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 61f3a04bc5d..2ab408965c1 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -118,7 +118,7 @@ void ConfusedMovementGenerator<Creature>::DoFinalize(Creature* unit) unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); if (unit->GetVictim()) - unit->SetTarget(unit->GetVictim()->GetGUID()); + unit->SetTarget(unit->EnsureVictim()->GetGUID()); } template void ConfusedMovementGenerator<Player>::DoInitialize(Player*); diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 572d65b07c7..95320865d0b 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -45,8 +45,7 @@ void FleeingMovementGenerator<T>::_setTargetLocation(T* owner) _getPoint(owner, x, y, z); // Add LOS check for target point - Position mypos; - owner->GetPosition(&mypos); + Position mypos = owner->GetPosition(); bool isInLOS = VMAP::VMapFactory::createOrGetVMapManager()->isInLineOfSight(owner->GetMapId(), mypos.m_positionX, mypos.m_positionY, @@ -109,8 +108,7 @@ void FleeingMovementGenerator<T>::_getPoint(T* owner, float &x, float &y, float angle = frand(0, 2*static_cast<float>(M_PI)); } - Position pos; - owner->GetFirstCollisionPosition(pos, dist, angle); + Position pos = owner->GetFirstCollisionPosition(dist, angle); x = pos.m_positionX; y = pos.m_positionY; z = pos.m_positionZ; @@ -141,7 +139,7 @@ void FleeingMovementGenerator<Creature>::DoFinalize(Creature* owner) owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); if (owner->GetVictim()) - owner->SetTarget(owner->GetVictim()->GetGUID()); + owner->SetTarget(owner->EnsureVictim()->GetGUID()); } template<class T> diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index f1656592000..c59762066ae 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -25,6 +25,7 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" #include "Player.h" +#include "VehicleDefines.h" template<class T, typename D> void TargetedMovementGeneratorMedium<T, D>::_setTargetLocation(T* owner, bool updateDestination) @@ -154,11 +155,19 @@ bool TargetedMovementGeneratorMedium<T, D>::DoUpdate(T* owner, uint32 time_diff) //More distance let have better performance, less distance let have more sensitive reaction at target move. float allowed_dist = owner->GetCombatReach() + sWorld->getRate(RATE_TARGET_POS_RECALCULATION_RANGE); G3D::Vector3 dest = owner->movespline->FinalDestination(); + if (owner->movespline->onTransport) + if (TransportBase* transport = owner->GetDirectTransport()) + transport->CalculatePassengerPosition(dest.x, dest.y, dest.z); + // First check distance if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); + + // then, if the target is in range, check also Line of Sight. + if (!targetMoved) + targetMoved = !i_target->IsWithinLOSInMap(owner); } if (i_recalculateTravel || targetMoved) diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index c181750a414..246d4682739 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -191,6 +191,10 @@ bool WaypointMovementGenerator<Creature>::DoUpdate(Creature* creature, uint32 di } else { + // Set home position at place on waypoint movement. + if (!creature->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) || !creature->GetTransGUID()) + creature->SetHomePosition(creature->GetPosition()); + if (creature->IsStopped()) Stop(STOP_TIME_FOR_PLAYER); else if (creature->movespline->Finalized()) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 91ad6d2b676..3140fc23296 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -29,7 +29,7 @@ ////////////////// PathGenerator ////////////////// PathGenerator::PathGenerator(const Unit* owner) : _polyLength(0), _type(PATHFIND_BLANK), _useStraightPath(false), - _forceDestination(false), _pointPathLimit(MAX_POINT_PATH_LENGTH), + _forceDestination(false), _pointPathLimit(MAX_POINT_PATH_LENGTH), _straightLine(false), _endPosition(G3D::Vector3::zero()), _sourceUnit(owner), _navMesh(NULL), _navMeshQuery(NULL) { @@ -53,7 +53,7 @@ PathGenerator::~PathGenerator() TC_LOG_DEBUG("maps", "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUIDLow()); } -bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) +bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest, bool straightLine) { float x, y, z; _sourceUnit->GetPosition(x, y, z); @@ -68,6 +68,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo SetStartPosition(start); _forceDestination = forceDest; + _straightLine = straightLine; TC_LOG_DEBUG("maps", "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUIDLow()); @@ -99,7 +100,7 @@ dtPolyRef PathGenerator::GetPathPolyByPosition(dtPolyRef const* polyPath, uint32 for (uint32 i = 0; i < polyPathSize; ++i) { float closestPoint[VERTEX_SIZE]; - if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(polyPath[i], point, closestPoint))) + if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(polyPath[i], point, closestPoint, NULL))) continue; float d = dtVdist2DSqr(point, closestPoint); @@ -230,7 +231,7 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con { float closestPoint[VERTEX_SIZE]; // we may want to use closestPointOnPolyBoundary instead - if (dtStatusSucceed(_navMeshQuery->closestPointOnPoly(endPoly, endPoint, closestPoint))) + if (dtStatusSucceed(_navMeshQuery->closestPointOnPoly(endPoly, endPoint, closestPoint, NULL))) { dtVcopy(endPoint, closestPoint); SetActualEndPosition(G3D::Vector3(endPoint[2], endPoint[0], endPoint[1])); @@ -269,8 +270,16 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con { for (; pathStartIndex < _polyLength; ++pathStartIndex) { - // here to carch few bugs - ASSERT(_pathPolyRefs[pathStartIndex] != INVALID_POLYREF); + // here to catch few bugs + if (_pathPolyRefs[pathStartIndex] == INVALID_POLYREF) + { + TC_LOG_ERROR("maps", "Invalid poly ref in BuildPolyPath. _polyLength: %u, pathStartIndex: %u," + " startPos: %s, endPos: %s, mapid: %u", + _polyLength, pathStartIndex, startPos.toString().c_str(), endPos.toString().c_str(), + _sourceUnit->GetMapId()); + + break; + } if (_pathPolyRefs[pathStartIndex] == startPoly) { @@ -321,13 +330,13 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con // we need any point on our suffix start poly to generate poly-path, so we need last poly in prefix data float suffixEndPoint[VERTEX_SIZE]; - if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint))) + if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint, NULL))) { // we can hit offmesh connection as last poly - closestPointOnPoly() don't like that // try to recover by using prev polyref --prefixPolyLength; suffixStartPoly = _pathPolyRefs[prefixPolyLength-1]; - if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint))) + if (dtStatusFailed(_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint, NULL))) { // suffixStartPoly is still invalid, error state BuildShortcut(); @@ -338,15 +347,45 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con // generate suffix uint32 suffixPolyLength = 0; - dtStatus dtResult = _navMeshQuery->findPath( - suffixStartPoly, // start polygon - endPoly, // end polygon - suffixEndPoint, // start position - endPoint, // end position - &_filter, // polygon search filter - _pathPolyRefs + prefixPolyLength - 1, // [out] path - (int*)&suffixPolyLength, - MAX_PATH_LENGTH-prefixPolyLength); // max number of polygons in output path + + dtStatus dtResult; + if (_straightLine) + { + float hit = 0; + float hitNormal[3]; + memset(hitNormal, 0, sizeof(hitNormal)); + + dtResult = _navMeshQuery->raycast( + suffixStartPoly, + suffixEndPoint, + endPoint, + &_filter, + &hit, + hitNormal, + _pathPolyRefs + prefixPolyLength - 1, + (int*)&suffixPolyLength, + MAX_PATH_LENGTH - prefixPolyLength); + + // raycast() sets hit to FLT_MAX if there is a ray between start and end + if (hit != FLT_MAX) + { + // the ray hit something, return no path instead of the incomplete one + _type = PATHFIND_NOPATH; + return; + } + } + else + { + dtResult = _navMeshQuery->findPath( + suffixStartPoly, // start polygon + endPoly, // end polygon + suffixEndPoint, // start position + endPoint, // end position + &_filter, // polygon search filter + _pathPolyRefs + prefixPolyLength - 1, // [out] path + (int*)&suffixPolyLength, + MAX_PATH_LENGTH - prefixPolyLength); // max number of polygons in output path + } if (!suffixPolyLength || dtStatusFailed(dtResult)) { @@ -372,15 +411,44 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con // free and invalidate old path data Clear(); - dtStatus dtResult = _navMeshQuery->findPath( - startPoly, // start polygon - endPoly, // end polygon - startPoint, // start position - endPoint, // end position - &_filter, // polygon search filter - _pathPolyRefs, // [out] path - (int*)&_polyLength, - MAX_PATH_LENGTH); // max number of polygons in output path + dtStatus dtResult; + if (_straightLine) + { + float hit = 0; + float hitNormal[3]; + memset(hitNormal, 0, sizeof(hitNormal)); + + dtResult = _navMeshQuery->raycast( + startPoly, + startPoint, + endPoint, + &_filter, + &hit, + hitNormal, + _pathPolyRefs, + (int*)&_polyLength, + MAX_PATH_LENGTH); + + // raycast() sets hit to FLT_MAX if there is a ray between start and end + if (hit != FLT_MAX) + { + // the ray hit something, return no path instead of the incomplete one + _type = PATHFIND_NOPATH; + return; + } + } + else + { + dtResult = _navMeshQuery->findPath( + startPoly, // start polygon + endPoly, // end polygon + startPoint, // start position + endPoint, // end position + &_filter, // polygon search filter + _pathPolyRefs, // [out] path + (int*)&_polyLength, + MAX_PATH_LENGTH); // max number of polygons in output path + } if (!_polyLength || dtStatusFailed(dtResult)) { @@ -407,7 +475,15 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin float pathPoints[MAX_POINT_PATH_LENGTH*VERTEX_SIZE]; uint32 pointCount = 0; dtStatus dtResult = DT_FAILURE; - if (_useStraightPath) + if (_straightLine) + { + // if the path is a straight line then start and end position are enough + dtResult = DT_SUCCESS; + pointCount = 2; + memcpy(&pathPoints[0], startPoint, sizeof(float)* 3); + memcpy(&pathPoints[3], endPoint, sizeof(float)* 3); + } + else if (_useStraightPath) { dtResult = _navMeshQuery->findStraightPath( startPoint, // start position @@ -806,3 +882,41 @@ float PathGenerator::Dist3DSqr(G3D::Vector3 const& p1, G3D::Vector3 const& p2) c { return (p1 - p2).squaredLength(); } + +void PathGenerator::ReducePathLenghtByDist(float dist) +{ + if (GetPathType() == PATHFIND_BLANK) + { + TC_LOG_ERROR("maps", "PathGenerator::ReducePathLenghtByDist called before path was built"); + return; + } + + if (_pathPoints.size() < 2) // path building failure + return; + + uint32 i = _pathPoints.size(); + G3D::Vector3 nextVec = _pathPoints[--i]; + while (i > 0) + { + G3D::Vector3 currVec = _pathPoints[--i]; + G3D::Vector3 diffVec = (nextVec - currVec); + float len = diffVec.length(); + if (len > dist) + { + float step = dist / len; + // same as nextVec + _pathPoints[i + 1] -= diffVec * step; + _pathPoints.resize(i + 2); + break; + } + else if (i == 0) // at second point + { + _pathPoints[1] = _pathPoints[0]; + _pathPoints.resize(2); + break; + } + + dist -= len; + nextVec = currVec; // we're going backwards + } +} diff --git a/src/server/game/Movement/PathGenerator.h b/src/server/game/Movement/PathGenerator.h index ac66b7cec57..a9a13c37251 100644 --- a/src/server/game/Movement/PathGenerator.h +++ b/src/server/game/Movement/PathGenerator.h @@ -57,7 +57,7 @@ class PathGenerator // Calculate the path from owner to given destination // return: true if new path was calculated, false otherwise (no change needed) - bool CalculatePath(float destX, float destY, float destZ, bool forceDest = false); + bool CalculatePath(float destX, float destY, float destZ, bool forceDest = false, bool straightLine = false); // option setters - use optional void SetUseStraightPath(bool useStraightPath) { _useStraightPath = useStraightPath; } @@ -72,6 +72,8 @@ class PathGenerator PathType GetPathType() const { return _type; } + void ReducePathLenghtByDist(float dist); // path must be already built + private: dtPolyRef _pathPolyRefs[MAX_PATH_LENGTH]; // array of detour polygon references @@ -83,6 +85,7 @@ class PathGenerator bool _useStraightPath; // type of path will be generated bool _forceDestination; // when set, we will always arrive at given point uint32 _pointPathLimit; // limit point path size; min(this, MAX_POINT_PATH_LENGTH) + bool _straightLine; // use raycast if true for a straight line path G3D::Vector3 _startPosition; // {x, y, z} of current location G3D::Vector3 _endPosition; // {x, y, z} of the destination diff --git a/src/server/game/Movement/Spline/MovementTypedefs.h b/src/server/game/Movement/Spline/MovementTypedefs.h index ffc19f10454..22850036b61 100644 --- a/src/server/game/Movement/Spline/MovementTypedefs.h +++ b/src/server/game/Movement/Spline/MovementTypedefs.h @@ -47,12 +47,6 @@ namespace Movement float computeFallTime(float path_length, bool isSafeFall); float computeFallElevation(float t_passed, bool isSafeFall, float start_velocity = 0.0f); -#ifndef static_assert - #define CONCAT(x, y) CONCAT1 (x, y) - #define CONCAT1(x, y) x##y - #define static_assert(expr, msg) typedef char CONCAT(static_assert_failed_at_line_, __LINE__) [(expr) ? 1 : -1] -#endif - template<class T, T limit> class counter { diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h index 1444b2872d1..6e8a5a0281d 100644 --- a/src/server/game/Movement/Spline/Spline.h +++ b/src/server/game/Movement/Spline/Spline.h @@ -56,7 +56,7 @@ protected: // client's value is 20, blizzs use 2-3 steps to compute length STEPS_PER_SEGMENT = 3 }; - static_assert(STEPS_PER_SEGMENT > 0, "shouldn't be lesser than 1"); + static_assert(STEPS_PER_SEGMENT > 0, "STEPS_PER_SEGMENT shouldn't be lesser than 1"); protected: void EvaluateLinear(index_type, float, Vector3&) const; diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h index fe7ca5ec931..bafc6322e71 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.h +++ b/src/server/game/Movement/Waypoints/WaypointManager.h @@ -34,7 +34,7 @@ struct WaypointData }; typedef std::vector<WaypointData*> WaypointPath; -typedef UNORDERED_MAP<uint32, WaypointPath> WaypointPathContainer; +typedef std::unordered_map<uint32, WaypointPath> WaypointPathContainer; class WaypointMgr { diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 01ee5238789..cacec14d5e6 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -103,9 +103,9 @@ bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, return false; } -bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 team, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay) +bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 spawntimedelay /*= 0*/) { - if (uint32 guid = sObjectMgr->AddCreData(entry, team, map, x, y, z, o, spawntimedelay)) + if (uint32 guid = sObjectMgr->AddCreData(entry, map, x, y, z, o, spawntimedelay)) { AddCre(type, guid, entry); return true; diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index 9ea81ded055..9a7cc92c2ed 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -68,7 +68,6 @@ struct go_type struct creature_type { uint32 entry; - uint32 teamval; uint32 map; float x; float y; @@ -145,7 +144,7 @@ class OPvPCapturePoint bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3); - bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); + virtual bool AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId teamId = TEAM_NEUTRAL, uint32 spawntimedelay = 0); bool DelCreature(uint32 type); bool DelObject(uint32 type); @@ -249,6 +248,19 @@ class OutdoorPvP : public ZoneScript void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0); + static TeamId GetTeamIdByTeam(uint32 team) + { + switch (team) + { + case ALLIANCE: + return TEAM_ALLIANCE; + case HORDE: + return TEAM_HORDE; + default: + return TEAM_NEUTRAL; + } + } + protected: // the map of the objectives belonging to this outdoorpvp diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 9b3732d232b..099275ba8dc 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -137,7 +137,7 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) OfferRewardEmoteDelay[i] = questRecord[136+i].GetInt32(); - //int32 WDBVerified = questRecord[140].GetInt32(); + //int32 VerifiedBuild = questRecord[140].GetInt32(); if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT) Flags |= QUEST_FLAGS_AUTO_ACCEPT; diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index 69e677bd89d..46b73e74068 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -24,7 +24,7 @@ #include "World.h" #include "ObjectMgr.h" #include "ScriptMgr.h" -#include "Opcodes.h" +#include "WorldSession.h" const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000}; diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 8da94ef2852..f1359b70aa6 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -16,6 +16,7 @@ */ #include "ScriptLoader.h" +#include "World.h" //examples void AddSC_example_creature(); @@ -41,7 +42,7 @@ void AddSC_item_spell_scripts(); void AddSC_example_spell_scripts(); void AddSC_holiday_spell_scripts(); -void AddSC_SmartSCripts(); +void AddSC_SmartScripts(); //Commands void AddSC_account_commandscript(); @@ -97,6 +98,7 @@ void AddSC_npc_innkeeper(); void AddSC_npcs_special(); void AddSC_npc_taxi(); void AddSC_achievement_scripts(); +void AddSC_action_ip_logger(); //eastern kingdoms void AddSC_alterac_valley(); //Alterac Valley @@ -469,7 +471,6 @@ void AddSC_boss_xt002(); void AddSC_boss_kologarn(); void AddSC_boss_assembly_of_iron(); void AddSC_boss_general_vezax(); -void AddSC_ulduar_teleporter(); void AddSC_boss_mimiron(); void AddSC_boss_hodir(); void AddSC_boss_freya(); @@ -522,6 +523,7 @@ void AddSC_boss_falric(); void AddSC_boss_marwyn(); void AddSC_boss_lord_marrowgar(); // Icecrown Citadel void AddSC_boss_lady_deathwhisper(); +void AddSC_boss_icecrown_gunship_battle(); void AddSC_boss_deathbringer_saurfang(); void AddSC_boss_festergut(); void AddSC_boss_rotface(); @@ -695,6 +697,7 @@ void AddSC_outdoorpvp_zm(); // player void AddSC_chat_log(); +void AddSC_action_ip_logger(); #endif @@ -702,7 +705,7 @@ void AddScripts() { AddExampleScripts(); AddSpellScripts(); - AddSC_SmartSCripts(); + AddSC_SmartScripts(); AddCommandScripts(); #ifdef SCRIPTS AddWorldScripts(); @@ -803,7 +806,10 @@ void AddWorldScripts() AddSC_npcs_special(); AddSC_npc_taxi(); AddSC_achievement_scripts(); - AddSC_chat_log(); + AddSC_chat_log(); // location: scripts\World\chat_log.cpp + // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not. + if (sWorld->getBoolConfig(CONFIG_IP_BASED_ACTION_LOGGING)) + AddSC_action_ip_logger(); // location: scripts\World\action_ip_logger.cpp #endif } @@ -1308,7 +1314,6 @@ void AddNorthrendScripts() AddSC_boss_general_vezax(); AddSC_boss_assembly_of_iron(); AddSC_boss_kologarn(); - AddSC_ulduar_teleporter(); AddSC_boss_mimiron(); AddSC_boss_hodir(); AddSC_boss_freya(); @@ -1361,6 +1366,7 @@ void AddNorthrendScripts() AddSC_boss_marwyn(); AddSC_boss_lord_marrowgar(); // Icecrown Citadel AddSC_boss_lady_deathwhisper(); + AddSC_boss_icecrown_gunship_battle(); AddSC_boss_deathbringer_saurfang(); AddSC_boss_festergut(); AddSC_boss_rotface(); diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index d7a2c147edb..83f401d4e79 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -224,6 +224,7 @@ void ScriptMgr::Unload() SCR_CLEAR(TransportScript); SCR_CLEAR(AchievementCriteriaScript); SCR_CLEAR(PlayerScript); + SCR_CLEAR(AccountScript); SCR_CLEAR(GuildScript); SCR_CLEAR(GroupScript); SCR_CLEAR(UnitScript); @@ -691,6 +692,15 @@ bool ScriptMgr::OnItemExpire(Player* player, ItemTemplate const* proto) return tmpscript->OnExpire(player, proto); } +bool ScriptMgr::OnItemRemove(Player* player, Item* item) +{ + ASSERT(player); + ASSERT(item); + + GET_SCRIPT_RET(ItemScript, item->GetScriptId(), tmpscript, false); + return tmpscript->OnRemove(player, item); +} + bool ScriptMgr::OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, Creature* target) { ASSERT(caster); @@ -1233,9 +1243,9 @@ void ScriptMgr::OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck) FOREACH_SCRIPT(PlayerScript)->OnSpellCast(player, spell, skipCheck); } -void ScriptMgr::OnPlayerLogin(Player* player) +void ScriptMgr::OnPlayerLogin(Player* player, bool firstLogin) { - FOREACH_SCRIPT(PlayerScript)->OnLogin(player); + FOREACH_SCRIPT(PlayerScript)->OnLogin(player, firstLogin); } void ScriptMgr::OnPlayerLogout(Player* player) @@ -1248,9 +1258,14 @@ void ScriptMgr::OnPlayerCreate(Player* player) FOREACH_SCRIPT(PlayerScript)->OnCreate(player); } -void ScriptMgr::OnPlayerDelete(uint64 guid) +void ScriptMgr::OnPlayerDelete(uint64 guid, uint32 accountId) +{ + FOREACH_SCRIPT(PlayerScript)->OnDelete(guid, accountId); +} + +void ScriptMgr::OnPlayerFailedDelete(uint64 guid, uint32 accountId) { - FOREACH_SCRIPT(PlayerScript)->OnDelete(guid); + FOREACH_SCRIPT(PlayerScript)->OnFailedDelete(guid, accountId); } void ScriptMgr::OnPlayerSave(Player* player) @@ -1268,6 +1283,37 @@ void ScriptMgr::OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newAre FOREACH_SCRIPT(PlayerScript)->OnUpdateZone(player, newZone, newArea); } +// Account +void ScriptMgr::OnAccountLogin(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnAccountLogin(accountId); +} + +void ScriptMgr::OnFailedAccountLogin(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnFailedAccountLogin(accountId); +} + +void ScriptMgr::OnEmailChange(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnEmailChange(accountId); +} + +void ScriptMgr::OnFailedEmailChange(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnFailedEmailChange(accountId); +} + +void ScriptMgr::OnPasswordChange(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnPasswordChange(accountId); +} + +void ScriptMgr::OnFailedPasswordChange(uint32 accountId) +{ + FOREACH_SCRIPT(AccountScript)->OnFailedPasswordChange(accountId); +} + // Guild void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank) { @@ -1530,6 +1576,12 @@ PlayerScript::PlayerScript(const char* name) ScriptRegistry<PlayerScript>::AddScript(this); } +AccountScript::AccountScript(const char* name) + : ScriptObject(name) +{ + ScriptRegistry<AccountScript>::AddScript(this); +} + GuildScript::GuildScript(const char* name) : ScriptObject(name) { @@ -1572,6 +1624,7 @@ template class ScriptRegistry<PlayerScript>; template class ScriptRegistry<GuildScript>; template class ScriptRegistry<GroupScript>; template class ScriptRegistry<UnitScript>; +template class ScriptRegistry<AccountScript>; // Undefine utility macros. #undef GET_SCRIPT_RET diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a0724ac47fb..ee95759c72e 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -29,6 +29,7 @@ #include "World.h" #include "Weather.h" +class AccountMgr; class AuctionHouseObject; class AuraScript; class Battleground; @@ -183,6 +184,8 @@ template<class TObject> class UpdatableScript { } + virtual ~UpdatableScript() { } + public: virtual void OnUpdate(TObject* /*obj*/, uint32 /*diff*/) { } @@ -196,7 +199,7 @@ class SpellScriptLoader : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Should return a fully valid SpellScript pointer. virtual SpellScript* GetSpellScript() const { return NULL; } @@ -354,7 +357,7 @@ class InstanceMapScript : public ScriptObject, public MapScript<InstanceMap> public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Gets an InstanceScript object for this instance. virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return NULL; } @@ -375,7 +378,7 @@ class ItemScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when a dummy spell effect is triggered on the item. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; } @@ -388,6 +391,9 @@ class ItemScript : public ScriptObject // Called when the item expires (is destroyed). virtual bool OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return false; } + + // Called when the item is destroyed. + virtual bool OnRemove(Player* /*player*/, Item* /*item*/) { return false; } }; class UnitScript : public ScriptObject @@ -421,7 +427,7 @@ class CreatureScript : public UnitScript, public UpdatableScript<Creature> public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when a dummy spell effect is triggered on the creature. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Creature* /*target*/) { return false; } @@ -462,7 +468,7 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject> public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when a dummy spell effect is triggered on the gameobject. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, GameObject* /*target*/) { return false; } @@ -509,7 +515,7 @@ class AreaTriggerScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when the area trigger is activated by a player. virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; } @@ -523,7 +529,7 @@ class BattlegroundScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Should return a fully valid Battleground object for the type ID. virtual Battleground* GetBattleground() const = 0; @@ -537,7 +543,7 @@ class OutdoorPvPScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Should return a fully valid OutdoorPvP object for the type ID. virtual OutdoorPvP* GetOutdoorPvP() const = 0; @@ -563,7 +569,7 @@ class WeatherScript : public ScriptObject, public UpdatableScript<Weather> public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when the weather changes in the zone this script is associated with. virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { } @@ -598,7 +604,7 @@ class ConditionScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when a single condition is checked for a player. virtual bool OnConditionCheck(Condition* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; } @@ -646,7 +652,7 @@ class TransportScript : public ScriptObject, public UpdatableScript<Transport> public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when a player boards the transport. virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { } @@ -669,7 +675,7 @@ class AchievementCriteriaScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return true; } + bool IsDatabaseBound() const final { return true; } // Called when an additional criteria is checked. virtual bool OnCheck(Player* source, Unit* target) = 0; @@ -739,7 +745,7 @@ class PlayerScript : public UnitScript virtual void OnSpellCast(Player* /*player*/, Spell* /*spell*/, bool /*skipCheck*/) { } // Called when a player logs in. - virtual void OnLogin(Player* /*player*/) { } + virtual void OnLogin(Player* /*player*/, bool /*firstLogin*/) { } // Called when a player logs out. virtual void OnLogout(Player* /*player*/) { } @@ -748,7 +754,10 @@ class PlayerScript : public UnitScript virtual void OnCreate(Player* /*player*/) { } // Called when a player is deleted. - virtual void OnDelete(uint64 /*guid*/) { } + virtual void OnDelete(uint64 /*guid*/, uint32 /*accountId*/) { } + + // Called when a player delete failed + virtual void OnFailedDelete(uint64 /*guid*/, uint32 /*accountId*/) { } // Called when a player is about to be saved. virtual void OnSave(Player* /*player*/) { } @@ -763,6 +772,33 @@ class PlayerScript : public UnitScript virtual void OnMapChanged(Player* /*player*/) { } }; +class AccountScript : public ScriptObject +{ + protected: + + AccountScript(const char* name); + + public: + + // Called when an account logged in succesfully + virtual void OnAccountLogin(uint32 /*accountId*/) {} + + // Called when an account login failed + virtual void OnFailedAccountLogin(uint32 /*accountId*/) {} + + // Called when Email is successfully changed for Account + virtual void OnEmailChange(uint32 /*accountId*/) {} + + // Called when Email failed to change for Account + virtual void OnFailedEmailChange(uint32 /*accountId*/) {} + + // Called when Password is successfully changed for Account + virtual void OnPasswordChange(uint32 /*accountId*/) {} + + // Called when Password failed to change for Account + virtual void OnFailedPasswordChange(uint32 /*accountId*/) {} +}; + class GuildScript : public ScriptObject { protected: @@ -771,7 +807,7 @@ class GuildScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return false; } + bool IsDatabaseBound() const final { return false; } // Called when a member is added to the guild. virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { } @@ -814,7 +850,7 @@ class GroupScript : public ScriptObject public: - bool IsDatabaseBound() const FINAL { return false; } + bool IsDatabaseBound() const final { return false; } // Called when a member is added to a group. virtual void OnAddMember(Group* /*group*/, uint64 /*guid*/) { } @@ -918,6 +954,7 @@ class ScriptMgr bool OnQuestAccept(Player* player, Item* item, Quest const* quest); bool OnItemUse(Player* player, Item* item, SpellCastTargets const& targets); bool OnItemExpire(Player* player, ItemTemplate const* proto); + bool OnItemRemove(Player* player, Item* item); public: /* CreatureScript */ @@ -1028,14 +1065,24 @@ class ScriptMgr void OnPlayerEmote(Player* player, uint32 emote); void OnPlayerTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, uint64 guid); void OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck); - void OnPlayerLogin(Player* player); + void OnPlayerLogin(Player* player, bool firstLogin); void OnPlayerLogout(Player* player); void OnPlayerCreate(Player* player); - void OnPlayerDelete(uint64 guid); + void OnPlayerDelete(uint64 guid, uint32 accountId); + void OnPlayerFailedDelete(uint64 guid, uint32 accountId); void OnPlayerSave(Player* player); void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent); void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea); + public: /* AccountScript */ + + void OnAccountLogin(uint32 accountId); + void OnFailedAccountLogin(uint32 accountId); + void OnEmailChange(uint32 accountId); + void OnFailedEmailChange(uint32 accountId); + void OnPasswordChange(uint32 accountId); + void OnFailedPasswordChange(uint32 accountId); + public: /* GuildScript */ void OnGuildAddMember(Guild* guild, Player* player, uint8& plRank); diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h index af2e50bae36..11120f3031b 100644 --- a/src/server/game/Scripting/ScriptSystem.h +++ b/src/server/game/Scripting/ScriptSystem.h @@ -53,7 +53,7 @@ class SystemMgr ~SystemMgr() { } public: - typedef UNORDERED_MAP<uint32, ScriptPointVector> PointMoveMap; + typedef std::unordered_map<uint32, ScriptPointVector> PointMoveMap; //Database void LoadScriptWaypoints(); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index e581d7d1544..7b07abdf962 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -25,12 +25,6 @@ #include "Common.h" -// Note: this include need for be sure have full definition of class WorldSession -// if this class definition not complete then VS for x64 release use different size for -// struct OpcodeHandler in this header and Opcode.cpp and get totally wrong data from -// table opcodeTable in source when Opcode.h included but WorldSession.h not included -#include "WorldSession.h" - /// List of Opcodes enum Opcodes { @@ -1366,8 +1360,15 @@ enum PacketProcessing PROCESS_THREADSAFE //packet is thread-safe - process it in Map::Update() }; +class WorldSession; class WorldPacket; +#if defined(__GNUC__) +#pragma pack(1) +#else +#pragma pack(push, 1) +#endif + struct OpcodeHandler { char const* name; @@ -1378,6 +1379,12 @@ struct OpcodeHandler extern OpcodeHandler opcodeTable[NUM_MSG_TYPES]; +#if defined(__GNUC__) +#pragma pack() +#else +#pragma pack(pop) +#endif + /// Lookup opcode name for human understandable logging inline const char* LookupOpcodeName(uint16 id) { diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 58e7ba02f47..9f8b3785e92 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -46,6 +46,7 @@ #include "Transport.h" #include "WardenWin.h" #include "WardenMac.h" +#include "MoveSpline.h" namespace { @@ -120,8 +121,10 @@ WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8 m_TutorialsChanged(false), recruiterId(recruiter), isRecruiter(isARecruiter), - timeLastWhoCommand(0), - _RBACData(NULL) + _RBACData(NULL), + expireTime(60000), // 1 min after socket loss, session is deleted + forceExit(false), + m_currentBankerGUID(0) { memset(m_Tutorials, 0, sizeof(m_Tutorials)); @@ -276,12 +279,13 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session. uint32 processedPackets = 0; + time_t currentTime = time(NULL); while (m_Socket && !m_Socket->IsClosed() && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater)) { - if (!AntiDOS.EvaluateOpcode(*packet)) + if (!AntiDOS.EvaluateOpcode(*packet, currentTime)) { KickPlayer(); } @@ -418,8 +422,12 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) ///- Cleanup socket pointer if need if (m_Socket && m_Socket->IsClosed()) { - m_Socket->RemoveReference(); - m_Socket = NULL; + expireTime -= expireTime > diff ? diff : expireTime; + if (expireTime < diff || forceExit) + { + m_Socket->RemoveReference(); + m_Socket = NULL; + } } if (!m_Socket) @@ -445,7 +453,6 @@ void WorldSession::LogoutPlayer(bool save) DoLootRelease(lguid); ///- If the player just died before logging out, make him appear as a ghost - //FIXME: logout must be delayed in case lost connection with client in time of combat if (_player->GetDeathTimer()) { _player->getHostileRefManager().deleteReferences(); @@ -568,7 +575,6 @@ void WorldSession::LogoutPlayer(bool save) m_playerLogout = false; m_playerSave = false; m_playerRecentlyLogout = true; - AntiDOS.AllowOpcode(CMSG_CHAR_ENUM, true); LogoutRequest(0); } @@ -576,7 +582,10 @@ void WorldSession::LogoutPlayer(bool save) void WorldSession::KickPlayer() { if (m_Socket) + { m_Socket->CloseSocket(); + forceExit = true; + } } void WorldSession::SendNotification(const char *format, ...) @@ -891,6 +900,9 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY) && mi->HasMovementFlag(MOVEMENTFLAG_FALLING), MOVEMENTFLAG_FALLING); + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ENABLED) && + (!GetPlayer()->movespline->Initialized() || GetPlayer()->movespline->Finalized()), MOVEMENTFLAG_SPLINE_ENABLED); + #undef REMOVE_VIOLATING_FLAGS } @@ -1232,14 +1244,28 @@ void WorldSession::InvalidateRBACData() _RBACData = NULL; } -bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const +bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) const { - if (IsOpcodeAllowed(p.GetOpcode())) + uint32 maxPacketCounterAllowed = GetMaxPacketCounterAllowed(p.GetOpcode()); + + // Return true if there no limit for the opcode + if (!maxPacketCounterAllowed) + return true; + + PacketCounter& packetCounter = _PacketThrottlingMap[p.GetOpcode()]; + if (packetCounter.lastReceiveTime != time) + { + packetCounter.lastReceiveTime = time; + packetCounter.amountCounter = 0; + } + + // Check if player is flooding some packets + if (++packetCounter.amountCounter <= maxPacketCounterAllowed) return true; - // Opcode not allowed, let the punishment begin - TC_LOG_INFO("network", "AntiDOS: Account %u, IP: %s, sent unacceptable packet (opc: %u, size: %u)", - Session->GetAccountId(), Session->GetRemoteAddress().c_str(), p.GetOpcode(), (uint32)p.size()); + TC_LOG_WARN("network", "AntiDOS: Account %u, IP: %s, Ping: %u, Character: %s, flooding packet (opc: %s (0x%X), count: %u)", + Session->GetAccountId(), Session->GetRemoteAddress().c_str(), Session->GetLatency(), Session->GetPlayerName().c_str(), + opcodeTable[p.GetOpcode()].name, p.GetOpcode(), packetCounter.amountCounter); switch (_policy) { @@ -1268,3 +1294,238 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p) const return true; } } + + +uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) const +{ + uint32 maxPacketCounterAllowed; + switch (opcode) + { + // CPU usage sending 2000 packets/second on a 3.70 GHz 4 cores on Win x64 + // [% CPU mysqld] [%CPU worldserver RelWithDebInfo] + case CMSG_PLAYER_LOGIN: // 0 0.5 + case CMSG_NAME_QUERY: // 0 1 + case CMSG_PET_NAME_QUERY: // 0 1 + case CMSG_NPC_TEXT_QUERY: // 0 1 + case CMSG_ATTACKSTOP: // 0 1 + case CMSG_QUERY_QUESTS_COMPLETED: // 0 1 + case CMSG_QUERY_TIME: // 0 1 + case CMSG_CORPSE_MAP_POSITION_QUERY: // 0 1 + case CMSG_MOVE_TIME_SKIPPED: // 0 1 + case MSG_QUERY_NEXT_MAIL_TIME: // 0 1 + case CMSG_SETSHEATHED: // 0 1 + case MSG_RAID_TARGET_UPDATE: // 0 1 + case CMSG_PLAYER_LOGOUT: // 0 1 + case CMSG_LOGOUT_REQUEST: // 0 1 + case CMSG_PET_RENAME: // 0 1 + case CMSG_QUESTGIVER_CANCEL: // 0 1 + case CMSG_QUESTGIVER_REQUEST_REWARD: // 0 1 + case CMSG_COMPLETE_CINEMATIC: // 0 1 + case CMSG_BANKER_ACTIVATE: // 0 1 + case CMSG_BUY_BANK_SLOT: // 0 1 + case CMSG_OPT_OUT_OF_LOOT: // 0 1 + case CMSG_DUEL_ACCEPTED: // 0 1 + case CMSG_DUEL_CANCELLED: // 0 1 + case CMSG_CALENDAR_COMPLAIN: // 0 1 + case CMSG_QUEST_QUERY: // 0 1.5 + case CMSG_ITEM_QUERY_SINGLE: // 0 1.5 + case CMSG_ITEM_NAME_QUERY: // 0 1.5 + case CMSG_GAMEOBJECT_QUERY: // 0 1.5 + case CMSG_CREATURE_QUERY: // 0 1.5 + case CMSG_QUESTGIVER_STATUS_QUERY: // 0 1.5 + case CMSG_GUILD_QUERY: // 0 1.5 + case CMSG_ARENA_TEAM_QUERY: // 0 1.5 + case CMSG_TAXINODE_STATUS_QUERY: // 0 1.5 + case CMSG_TAXIQUERYAVAILABLENODES: // 0 1.5 + case CMSG_QUESTGIVER_QUERY_QUEST: // 0 1.5 + case CMSG_PAGE_TEXT_QUERY: // 0 1.5 + case MSG_QUERY_GUILD_BANK_TEXT: // 0 1.5 + case MSG_CORPSE_QUERY: // 0 1.5 + case MSG_MOVE_SET_FACING: // 0 1.5 + case CMSG_REQUEST_PARTY_MEMBER_STATS: // 0 1.5 + case CMSG_QUESTGIVER_COMPLETE_QUEST: // 0 1.5 + case CMSG_SET_ACTION_BUTTON: // 0 1.5 + case CMSG_RESET_INSTANCES: // 0 1.5 + case CMSG_HEARTH_AND_RESURRECT: // 0 1.5 + case CMSG_TOGGLE_PVP: // 0 1.5 + case CMSG_PET_ABANDON: // 0 1.5 + case CMSG_ACTIVATETAXIEXPRESS: // 0 1.5 + case CMSG_ACTIVATETAXI: // 0 1.5 + case CMSG_SELF_RES: // 0 1.5 + case CMSG_UNLEARN_SKILL: // 0 1.5 + case CMSG_EQUIPMENT_SET_SAVE: // 0 1.5 + case CMSG_DELETEEQUIPMENT_SET: // 0 1.5 + case CMSG_DISMISS_CRITTER: // 0 1.5 + case CMSG_REPOP_REQUEST: // 0 1.5 + case CMSG_GROUP_INVITE: // 0 1.5 + case CMSG_GROUP_DECLINE: // 0 1.5 + case CMSG_GROUP_ACCEPT: // 0 1.5 + case CMSG_GROUP_UNINVITE_GUID: // 0 1.5 + case CMSG_GROUP_UNINVITE: // 0 1.5 + case CMSG_GROUP_DISBAND: // 0 1.5 + case CMSG_BATTLEMASTER_JOIN_ARENA: // 0 1.5 + case CMSG_LEAVE_BATTLEFIELD: // 0 1.5 + case MSG_GUILD_BANK_LOG_QUERY: // 0 2 + case CMSG_LOGOUT_CANCEL: // 0 2 + case CMSG_REALM_SPLIT: // 0 2 + case CMSG_ALTER_APPEARANCE: // 0 2 + case CMSG_QUEST_CONFIRM_ACCEPT: // 0 2 + case MSG_GUILD_EVENT_LOG_QUERY: // 0 2.5 + case CMSG_READY_FOR_ACCOUNT_DATA_TIMES: // 0 2.5 + case CMSG_QUESTGIVER_STATUS_MULTIPLE_QUERY: // 0 2.5 + case CMSG_BEGIN_TRADE: // 0 2.5 + case CMSG_INITIATE_TRADE: // 0 3 + case CMSG_MESSAGECHAT: // 0 3.5 + case CMSG_INSPECT: // 0 3.5 + case CMSG_AREA_SPIRIT_HEALER_QUERY: // not profiled + { + // "0" is a magic number meaning there's no limit for the opcode. + // All the opcodes above must cause little CPU usage and no sync/async database queries at all + maxPacketCounterAllowed = 0; + break; + } + + case CMSG_QUESTGIVER_ACCEPT_QUEST: // 0 4 + case CMSG_QUESTLOG_REMOVE_QUEST: // 0 4 + case CMSG_QUESTGIVER_CHOOSE_REWARD: // 0 4 + case CMSG_CONTACT_LIST: // 0 5 + case CMSG_LEARN_PREVIEW_TALENTS: // 0 6 + case CMSG_AUTOBANK_ITEM: // 0 6 + case CMSG_AUTOSTORE_BANK_ITEM: // 0 6 + case CMSG_WHO: // 0 7 + case CMSG_PLAYER_VEHICLE_ENTER: // 0 8 + case CMSG_LEARN_PREVIEW_TALENTS_PET: // not profiled + case MSG_MOVE_HEARTBEAT: + { + maxPacketCounterAllowed = 200; + break; + } + + case CMSG_GUILD_SET_PUBLIC_NOTE: // 1 2 1 async db query + case CMSG_GUILD_SET_OFFICER_NOTE: // 1 2 1 async db query + case CMSG_SET_CONTACT_NOTES: // 1 2.5 1 async db query + case CMSG_CALENDAR_GET_CALENDAR: // 0 1.5 medium upload bandwidth usage + case CMSG_GUILD_BANK_QUERY_TAB: // 0 3.5 medium upload bandwidth usage + case CMSG_QUERY_INSPECT_ACHIEVEMENTS: // 0 13 high upload bandwidth usage + { + maxPacketCounterAllowed = 50; + break; + } + + case CMSG_QUEST_POI_QUERY: // 0 25 very high upload bandwidth usage + { + maxPacketCounterAllowed = MAX_QUEST_LOG_SIZE; + break; + } + + case CMSG_GM_REPORT_LAG: // 1 3 1 async db query + case CMSG_SPELLCLICK: // not profiled + case CMSG_GAMEOBJ_USE: // not profiled + case CMSG_GAMEOBJ_REPORT_USE: // not profiled + case CMSG_REMOVE_GLYPH: // not profiled + { + maxPacketCounterAllowed = 20; + break; + } + + case CMSG_PETITION_SIGN: // 9 4 2 sync 1 async db queries + case CMSG_TURN_IN_PETITION: // 8 5.5 2 sync db query + case CMSG_GROUP_CHANGE_SUB_GROUP: // 6 5 1 sync 1 async db queries + case CMSG_PETITION_QUERY: // 4 3.5 1 sync db query + case CMSG_CHAR_RACE_CHANGE: // 5 4 1 sync db query + case CMSG_CHAR_CUSTOMIZE: // 5 5 1 sync db query + case CMSG_CHAR_FACTION_CHANGE: // 5 5 1 sync db query + case CMSG_CHAR_DELETE: // 4 4 1 sync db query + case CMSG_DEL_FRIEND: // 7 5 1 async db query + case CMSG_ADD_FRIEND: // 6 4 1 async db query + case CMSG_CHAR_RENAME: // 5 3 1 async db query + case CMSG_GMSURVEY_SUBMIT: // 2 3 1 async db query + case CMSG_BUG: // 1 1 1 async db query + case CMSG_GROUP_SET_LEADER: // 1 2 1 async db query + case CMSG_GROUP_RAID_CONVERT: // 1 5 1 async db query + case CMSG_GROUP_ASSISTANT_LEADER: // 1 2 1 async db query + case CMSG_CALENDAR_ADD_EVENT: // 21 10 2 async db query + case CMSG_PETITION_BUY: // not profiled 1 sync 1 async db queries + case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE: // not profiled + case CMSG_REQUEST_VEHICLE_PREV_SEAT: // not profiled + case CMSG_REQUEST_VEHICLE_NEXT_SEAT: // not profiled + case CMSG_REQUEST_VEHICLE_SWITCH_SEAT: // not profiled + case CMSG_DISMISS_CONTROLLED_VEHICLE: // not profiled + case CMSG_REQUEST_VEHICLE_EXIT: // not profiled + case CMSG_CONTROLLER_EJECT_PASSENGER: // not profiled + case CMSG_ITEM_REFUND: // not profiled + case CMSG_SOCKET_GEMS: // not profiled + case CMSG_WRAP_ITEM: // not profiled + case CMSG_REPORT_PVP_AFK: // not profiled + { + maxPacketCounterAllowed = 10; + break; + } + + case CMSG_CHAR_CREATE: // 7 5 3 async db queries + case CMSG_CHAR_ENUM: // 22 3 2 async db queries + case CMSG_GMTICKET_CREATE: // 1 25 1 async db query + case CMSG_GMTICKET_UPDATETEXT: // 0 15 1 async db query + case CMSG_GMTICKET_DELETETICKET: // 1 25 1 async db query + case CMSG_GMRESPONSE_RESOLVE: // 1 25 1 async db query + case CMSG_CALENDAR_UPDATE_EVENT: // not profiled + case CMSG_CALENDAR_REMOVE_EVENT: // not profiled + case CMSG_CALENDAR_COPY_EVENT: // not profiled + case CMSG_CALENDAR_EVENT_INVITE: // not profiled + case CMSG_CALENDAR_EVENT_SIGNUP: // not profiled + case CMSG_CALENDAR_EVENT_RSVP: // not profiled + case CMSG_CALENDAR_EVENT_REMOVE_INVITE: // not profiled + case CMSG_CALENDAR_EVENT_MODERATOR_STATUS: // not profiled + case CMSG_ARENA_TEAM_INVITE: // not profiled + case CMSG_ARENA_TEAM_ACCEPT: // not profiled + case CMSG_ARENA_TEAM_DECLINE: // not profiled + case CMSG_ARENA_TEAM_LEAVE: // not profiled + case CMSG_ARENA_TEAM_DISBAND: // not profiled + case CMSG_ARENA_TEAM_REMOVE: // not profiled + case CMSG_ARENA_TEAM_LEADER: // not profiled + case CMSG_LOOT_METHOD: // not profiled + case CMSG_GUILD_INVITE: // not profiled + case CMSG_GUILD_ACCEPT: // not profiled + case CMSG_GUILD_DECLINE: // not profiled + case CMSG_GUILD_LEAVE: // not profiled + case CMSG_GUILD_DISBAND: // not profiled + case CMSG_GUILD_LEADER: // not profiled + case CMSG_GUILD_MOTD: // not profiled + case CMSG_GUILD_RANK: // not profiled + case CMSG_GUILD_ADD_RANK: // not profiled + case CMSG_GUILD_DEL_RANK: // not profiled + case CMSG_GUILD_INFO_TEXT: // not profiled + case CMSG_GUILD_BANK_DEPOSIT_MONEY: // not profiled + case CMSG_GUILD_BANK_WITHDRAW_MONEY: // not profiled + case CMSG_GUILD_BANK_BUY_TAB: // not profiled + case CMSG_GUILD_BANK_UPDATE_TAB: // not profiled + case CMSG_SET_GUILD_BANK_TEXT: // not profiled + case MSG_SAVE_GUILD_EMBLEM: // not profiled + case MSG_PETITION_RENAME: // not profiled + case MSG_PETITION_DECLINE: // not profiled + case MSG_TALENT_WIPE_CONFIRM: // not profiled + case MSG_SET_DUNGEON_DIFFICULTY: // not profiled + case MSG_SET_RAID_DIFFICULTY: // not profiled + case MSG_RANDOM_ROLL: // not profiled + case MSG_PARTY_ASSIGNMENT: // not profiled + case MSG_RAID_READY_CHECK: // not profiled + { + maxPacketCounterAllowed = 3; + break; + } + + case CMSG_ITEM_REFUND_INFO: // not profiled + { + maxPacketCounterAllowed = PLAYER_SLOTS_COUNT; + break; + } + + default: + { + maxPacketCounterAllowed = 100; + break; + } + } + + return maxPacketCounterAllowed; +} diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 904006e174d..c8c81a415e1 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -28,9 +28,11 @@ #include "AddonMgr.h" #include "DatabaseEnv.h" #include "World.h" +#include "Opcodes.h" #include "WorldPacket.h" #include "Cryptography/BigNumber.h" #include "AccountMgr.h" +#include <unordered_set> class Creature; class GameObject; @@ -138,6 +140,10 @@ public: protected: WorldSession* const m_pSession; + +private: + PacketFilter(PacketFilter const& right) = delete; + PacketFilter& operator=(PacketFilter const& right) = delete; }; //process only thread-safe packets in Map::Update() class MapSessionFilter : public PacketFilter @@ -192,6 +198,12 @@ class CharacterCreateInfo uint8 CharCount; }; +struct PacketCounter +{ + time_t lastReceiveTime; + uint32 amountCounter; +}; + /// Player session in the World class WorldSession { @@ -359,7 +371,6 @@ class WorldSession uint32 GetLatency() const { return m_latency; } void SetLatency(uint32 latency) { m_latency = latency; } void ResetClientTimeDelay() { m_clientTimeDelay = 0; } - uint32 getDialogStatus(Player* player, Object* questgiver); ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime; void UpdateTimeOutTime(uint32 diff) @@ -433,7 +444,6 @@ class WorldSession void HandleForceSpeedChangeAck(WorldPacket& recvData); void HandlePingOpcode(WorldPacket& recvPacket); - void HandleAuthSessionOpcode(WorldPacket& recvPacket); void HandleRepopRequestOpcode(WorldPacket& recvPacket); void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket); void HandleLootMoneyOpcode(WorldPacket& recvPacket); @@ -718,7 +728,6 @@ class WorldSession void HandleCompleteCinematic(WorldPacket& recvPacket); void HandleNextCinematicCamera(WorldPacket& recvPacket); - void HandlePageQuerySkippedOpcode(WorldPacket& recvPacket); void HandlePageTextQueryOpcode(WorldPacket& recvPacket); void HandleTutorialFlag (WorldPacket& recvData); @@ -926,8 +935,7 @@ class WorldSession friend class World; public: DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY)) { } - bool EvaluateOpcode(WorldPacket& p) const; - void AllowOpcode(uint16 opcode, bool allow) { _isOpcodeAllowed[opcode] = allow; } + bool EvaluateOpcode(WorldPacket& p, time_t time) const; protected: enum Policy { @@ -936,27 +944,26 @@ class WorldSession POLICY_BAN, }; - bool IsOpcodeAllowed(uint16 opcode) const - { - OpcodeStatusMap::const_iterator itr = _isOpcodeAllowed.find(opcode); - if (itr == _isOpcodeAllowed.end()) - return true; // No presence in the map indicates this is the first time the opcode was sent this session, so allow - - return itr->second; - } + uint32 GetMaxPacketCounterAllowed(uint16 opcode) const; WorldSession* Session; private: - typedef UNORDERED_MAP<uint16, bool> OpcodeStatusMap; - OpcodeStatusMap _isOpcodeAllowed; // could be bool array, but wouldn't be practical for game versions with non-linear opcodes Policy _policy; + typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap; + // mark this member as "mutable" so it can be modified even in const functions + mutable PacketThrottlingMap _PacketThrottlingMap; + + DosProtection(DosProtection const& right) = delete; + DosProtection& operator=(DosProtection const& right) = delete; } AntiDOS; private: // private trade methods void moveItems(Item* myItems[], Item* hisItems[]); + bool CanUseBank(uint64 bankerGUID = 0) const; + // logging helper void LogUnexpectedOpcode(WorldPacket* packet, const char* status, const char *reason); void LogUnprocessedTail(WorldPacket* packet); @@ -971,10 +978,11 @@ class WorldSession // characters who failed on Player::BuildEnumData shouldn't login std::set<uint32> _legitCharacters; - uint32 m_GUIDLow; // set loggined or recently logout player (while m_playerRecentlyLogout set) + uint32 m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set) Player* _player; WorldSocket* m_Socket; - std::string m_Address; + std::string m_Address; // Current Remote Address + // std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session! AccountTypes _security; uint32 _accountId; @@ -1002,8 +1010,13 @@ class WorldSession uint32 recruiterId; bool isRecruiter; ACE_Based::LockedQueue<WorldPacket*, ACE_Thread_Mutex> _recvQueue; - time_t timeLastWhoCommand; rbac::RBACData* _RBACData; + uint32 expireTime; + bool forceExit; + uint64 m_currentBankerGUID; + + WorldSession(WorldSession const& right) = delete; + WorldSession& operator=(WorldSession const& right) = delete; }; #endif /// @} diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 605b863bfa1..d35ee80099d 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -263,7 +263,7 @@ int WorldSocket::open (void *a) return 0; } -int WorldSocket::close (u_long) +int WorldSocket::close(u_long) { shutdown(); @@ -274,7 +274,7 @@ int WorldSocket::close (u_long) return 0; } -int WorldSocket::handle_input (ACE_HANDLE) +int WorldSocket::handle_input(ACE_HANDLE) { if (closing_) return -1; @@ -310,7 +310,7 @@ int WorldSocket::handle_input (ACE_HANDLE) ACE_NOTREACHED(return -1); } -int WorldSocket::handle_output (ACE_HANDLE) +int WorldSocket::handle_output(ACE_HANDLE) { ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, -1); @@ -356,7 +356,7 @@ int WorldSocket::handle_output (ACE_HANDLE) ACE_NOTREACHED (return 0); } -int WorldSocket::handle_output_queue (GuardType& g) +int WorldSocket::handle_output_queue(GuardType& g) { if (msg_queue()->is_empty()) return cancel_wakeup_output(g); @@ -417,7 +417,7 @@ int WorldSocket::handle_output_queue (GuardType& g) ACE_NOTREACHED(return -1); } -int WorldSocket::handle_close (ACE_HANDLE h, ACE_Reactor_Mask) +int WorldSocket::handle_close(ACE_HANDLE h, ACE_Reactor_Mask) { // Critical section { @@ -617,7 +617,7 @@ int WorldSocket::handle_input_missing_data (void) return size_t(n) == recv_size ? 1 : 2; } -int WorldSocket::cancel_wakeup_output (GuardType& g) +int WorldSocket::cancel_wakeup_output(GuardType& g) { if (!m_OutActive) return 0; @@ -637,7 +637,7 @@ int WorldSocket::cancel_wakeup_output (GuardType& g) return 0; } -int WorldSocket::schedule_wakeup_output (GuardType& g) +int WorldSocket::schedule_wakeup_output(GuardType& g) { if (m_OutActive) return 0; @@ -758,6 +758,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) uint64 unk4; WorldPacket packet, SendAddonPacked; BigNumber k; + bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED); if (sWorld->IsClosed()) { @@ -795,6 +796,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) // Stop if the account is not found if (!result) { + // We can not log here, as we do not know the account. Thus, no accountId. SendAuthResponseError(AUTH_UNKNOWN_ACCOUNT); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (unknown account)."); return -1; @@ -807,19 +809,34 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) if (expansion > world_expansion) expansion = world_expansion; + // For hook purposes, we get Remoteaddress at this point. + std::string address = GetRemoteAddress(); + + // As we don't know if attempted login process by ip works, we update last_attempt_ip right away + stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP); + + stmt->setString(0, address); + stmt->setString(1, account); + + LoginDatabase.Execute(stmt); + // This also allows to check for possible "hack" attempts on account + + // id has to be fetched at this point, so that first actual account response that fails can be logged + id = fields[0].GetUInt32(); + ///- Re-check ip locking (same check as in realmd). if (fields[3].GetUInt8() == 1) // if ip is locked { - if (strcmp (fields[2].GetCString(), GetRemoteAddress().c_str())) + if (strcmp (fields[2].GetCString(), address.c_str())) { SendAuthResponseError(AUTH_FAILED); - TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs)."); + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", fields[2].GetCString(), address.c_str()); + // We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well + sScriptMgr->OnFailedAccountLogin(id); return -1; } } - id = fields[0].GetUInt32(); - k.SetHexStr(fields[1].GetCString()); int64 mutetime = fields[5].GetInt64(); @@ -844,10 +861,10 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) std::string os = fields[8].GetString(); // Must be done before WorldSession is created - if (sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED) && os != "Win" && os != "OSX") + if (wardenActive && os != "Win" && os != "OSX") { SendAuthResponseError(AUTH_REJECT); - TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", GetRemoteAddress().c_str(), os.c_str()); + TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), os.c_str()); return -1; } @@ -871,7 +888,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BANS); stmt->setUInt32(0, id); - stmt->setString(1, GetRemoteAddress()); + stmt->setString(1, address); PreparedQueryResult banresult = LoginDatabase.Query(stmt); @@ -879,6 +896,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) { SendAuthResponseError(AUTH_BANNED); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account banned)."); + sScriptMgr->OnFailedAccountLogin(id); return -1; } @@ -889,6 +907,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) { SendAuthResponseError(AUTH_UNAVAILABLE); TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough"); + sScriptMgr->OnFailedAccountLogin(id); return -1; } @@ -903,8 +922,6 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) sha.UpdateBigNumbers(&k, NULL); sha.Finalize(); - std::string address = GetRemoteAddress(); - if (memcmp(sha.GetDigest(), digest, 20)) { SendAuthResponseError(AUTH_FAILED); @@ -927,8 +944,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) if (result) isRecruiter = true; - // Update the last_ip in the database - + // Update the last_ip in the database as it was successful for login stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_IP); stmt->setString(0, address); @@ -946,8 +962,11 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) m_Session->ReadAddonsInfo(recvPacket); m_Session->LoadPermissions(); + // At this point, we can safely hook a successful login + sScriptMgr->OnAccountLogin(id); + // Initialize Warden system only if it is enabled by config - if (sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED)) + if (wardenActive) m_Session->InitWarden(&k, os); // Sleep this Network thread for @@ -958,7 +977,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) return 0; } -int WorldSocket::HandlePing (WorldPacket& recvPacket) +int WorldSocket::HandlePing(WorldPacket& recvPacket) { uint32 ping; uint32 latency; diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 103d60346e8..1f98be0152b 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -208,6 +208,8 @@ class WorldSocket : public WorldHandler uint32 m_Seed; + WorldSocket(WorldSocket const& right) = delete; + WorldSocket& operator=(WorldSocket const& right) = delete; }; #endif /* _WORLDSOCKET_H */ diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp index 5e272edb531..e8a89039031 100644 --- a/src/server/game/Skills/SkillDiscovery.cpp +++ b/src/server/game/Skills/SkillDiscovery.cpp @@ -40,7 +40,7 @@ struct SkillDiscoveryEntry }; typedef std::list<SkillDiscoveryEntry> SkillDiscoveryList; -typedef UNORDERED_MAP<int32, SkillDiscoveryList> SkillDiscoveryMap; +typedef std::unordered_map<int32, SkillDiscoveryList> SkillDiscoveryMap; static SkillDiscoveryMap SkillDiscoveryStore; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index c769a0b6aea..152dc903825 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -379,6 +379,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32 *baseAmount, Unit* caster): m_base(base), m_spellInfo(base->GetSpellInfo()), m_baseAmount(baseAmount ? *baseAmount : m_spellInfo->Effects[effIndex].BasePoints), +m_damage(0), m_critChance(0.0f), m_donePct(1.0f), m_spellmod(NULL), m_periodicTimer(0), m_tickNumber(0), m_effIndex(effIndex), m_canBeRecalculated(true), m_isPeriodic(false) { @@ -890,19 +891,15 @@ void AuraEffect::UpdatePeriodic(Unit* caster) GetBase()->CallScriptEffectUpdatePeriodicHandlers(this); } -bool AuraEffect::IsPeriodicTickCrit(Unit* target, Unit const* caster) const +bool AuraEffect::CanPeriodicTickCrit(Unit const* caster) const { ASSERT(caster); - Unit::AuraEffectList const& mPeriodicCritAuras= caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_PERIODIC_CRIT); - for (Unit::AuraEffectList::const_iterator itr = mPeriodicCritAuras.begin(); itr != mPeriodicCritAuras.end(); ++itr) - { - if ((*itr)->IsAffectedOnSpell(m_spellInfo) && caster->isSpellCrit(target, m_spellInfo, m_spellInfo->GetSchoolMask())) - return true; - } + if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_ABILITY_PERIODIC_CRIT, m_spellInfo)) + return true; // Rupture - since 3.3.3 can crit if (m_spellInfo->SpellIconID == 500 && m_spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE) - return caster->isSpellCrit(target, m_spellInfo, m_spellInfo->GetSchoolMask()); + return true; return false; } @@ -1672,9 +1669,6 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo if (aurApp->GetRemoveMode()) return; - if (modelid > 0) - target->SetDisplayId(modelid); - if (PowerType != POWER_MANA) { uint32 oldPower = target->GetPower(PowerType); @@ -1725,6 +1719,12 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo return; target->SetShapeshiftForm(form); + if (modelid > 0) + { + SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm()); + if (!transformSpellInfo || !GetSpellInfo()->IsPositive()) + target->SetDisplayId(modelid); + } } else { @@ -1824,6 +1824,7 @@ void AuraEffect::HandleAuraModShapeshift(AuraApplication const* aurApp, uint8 mo if (target->GetTypeId() == TYPEID_PLAYER) { SpellShapeshiftEntry const* shapeInfo = sSpellShapeshiftStore.LookupEntry(form); + ASSERT(shapeInfo); // Learn spells for shapeshift form - no need to send action bars or add spells to spellbook for (uint8 i = 0; i<MAX_SHAPESHIFT_SPELLS; ++i) { @@ -1846,9 +1847,11 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, if (apply) { - // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case - if (!target->GetModelForForm(target->GetShapeshiftForm()) || !GetSpellInfo()->IsPositive()) + // update active transform spell only when transform not set or not overwriting negative by positive case + SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm()); + if (!transformSpellInfo || !GetSpellInfo()->IsPositive() || transformSpellInfo->IsPositive()) { + target->setTransForm(GetId()); // special case (spell specific functionality) if (GetMiscValue() == 0) { @@ -2017,11 +2020,6 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, } } - // update active transform spell only when transform or shapeshift not set or not overwriting negative by positive case - SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(target->getTransForm()); - if (!transformSpellInfo || !GetSpellInfo()->IsPositive() || transformSpellInfo->IsPositive()) - target->setTransForm(GetId()); - // polymorph case if ((mode & AURA_EFFECT_HANDLE_REAL) && target->GetTypeId() == TYPEID_PLAYER && target->IsPolymorphed()) { @@ -3496,11 +3494,23 @@ void AuraEffect::HandleModResistancePercent(AuraApplication const* aurApp, uint8 return; Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_RESISTANCE_PCT); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; for (int8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; i++) { if (GetMiscValue() & int32(1<<i)) { + if (spellGroupVal) + { + target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, (float)spellGroupVal, !apply); + if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet()) + { + target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), true, (float)spellGroupVal, !apply); + target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), false, (float)spellGroupVal, !apply); + } + } target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, float(GetAmount()), apply); if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) { @@ -3560,19 +3570,29 @@ void AuraEffect::HandleAuraModStat(AuraApplication const* aurApp, uint8 mode, bo if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; - Unit* target = aurApp->GetTarget(); - if (GetMiscValue() < -2 || GetMiscValue() > 4) { TC_LOG_ERROR("spells", "WARNING: Spell %u effect %u has an unsupported misc value (%i) for SPELL_AURA_MOD_STAT ", GetId(), GetEffIndex(), GetMiscValue()); return; } + Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_STAT, true, GetMiscValue()); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; + for (int32 i = STAT_STRENGTH; i < MAX_STATS; i++) { // -1 or -2 is all stats (misc < -2 checked in function beginning) if (GetMiscValue() < 0 || GetMiscValue() == i) { + if (spellGroupVal) + { + target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, float(spellGroupVal), !apply); + if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) + target->ApplyStatBuffMod(Stats(i), float(spellGroupVal), !apply); + } + //target->ApplyStatMod(Stats(i), m_amount, apply); target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_VALUE, float(GetAmount()), apply); if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) @@ -3684,14 +3704,30 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; - Unit* target = aurApp->GetTarget(); - if (GetMiscValue() < -1 || GetMiscValue() > 4) { TC_LOG_ERROR("spells", "WARNING: Misc Value for SPELL_AURA_MOD_PERCENT_STAT not valid"); return; } + Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, -1); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; + + if (spellGroupVal) + { + for (int32 i = STAT_STRENGTH; i < MAX_STATS; i++) + { + if (GetMiscValue() == i || GetMiscValue() == -1) // affect the same stats + { + target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(spellGroupVal), !apply); + if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) + target->ApplyStatPercentBuffMod(Stats(i), float(spellGroupVal), !apply); + } + } + } + // save current health state float healthPct = target->GetHealthPct(); bool alive = target->IsAlive(); @@ -3700,6 +3736,17 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 { if (GetMiscValue() == i || GetMiscValue() == -1) { + int32 spellGroupVal2 = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, true, i); + if (abs(spellGroupVal2) >= abs(GetAmount())) + continue; + + if (spellGroupVal2) + { + target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(spellGroupVal2), !apply); + if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) + target->ApplyStatPercentBuffMod(Stats(i), float(spellGroupVal2), !apply); + } + target->HandleStatModifier(UnitMods(UNIT_MOD_STAT_START + i), TOTAL_PCT, float(GetAmount()), apply); if (target->GetTypeId() == TYPEID_PLAYER || target->ToCreature()->IsPet()) target->ApplyStatPercentBuffMod(Stats(i), float(GetAmount()), apply); @@ -4098,7 +4145,17 @@ void AuraEffect::HandleModCombatSpeedPct(AuraApplication const* aurApp, uint8 mo return; Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MELEE_SLOW); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; + if (spellGroupVal) + { + target->ApplyCastTimePercentMod(float(spellGroupVal), !apply); + target->ApplyAttackTimePercentMod(BASE_ATTACK, float(spellGroupVal), !apply); + target->ApplyAttackTimePercentMod(OFF_ATTACK, float(spellGroupVal), !apply); + target->ApplyAttackTimePercentMod(RANGED_ATTACK, float(spellGroupVal), !apply); + } target->ApplyCastTimePercentMod(float(m_amount), apply); target->ApplyAttackTimePercentMod(BASE_ATTACK, float(GetAmount()), apply); target->ApplyAttackTimePercentMod(OFF_ATTACK, float(GetAmount()), apply); @@ -4122,7 +4179,15 @@ void AuraEffect::HandleModMeleeSpeedPct(AuraApplication const* aurApp, uint8 mod return; Unit* target = aurApp->GetTarget(); + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_MELEE_HASTE); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; + if (spellGroupVal) + { + target->ApplyAttackTimePercentMod(BASE_ATTACK, float(spellGroupVal), !apply); + target->ApplyAttackTimePercentMod(OFF_ATTACK, float(spellGroupVal), !apply); + } target->ApplyAttackTimePercentMod(BASE_ATTACK, float(GetAmount()), apply); target->ApplyAttackTimePercentMod(OFF_ATTACK, float(GetAmount()), apply); } @@ -4359,7 +4424,8 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 return; Unit* target = aurApp->GetTarget(); - if (!target) + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); + if (abs(spellGroupVal) >= abs(GetAmount())) return; if (target->GetTypeId() == TYPEID_PLAYER) @@ -4371,12 +4437,23 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER)) { + if (spellGroupVal) + { + target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(spellGroupVal), !apply); + target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(spellGroupVal), !apply); + target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(spellGroupVal), !apply); + } target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float (GetAmount()), apply); + if (Player* player = target->ToPlayer()) + { + if (spellGroupVal) + player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(spellGroupVal), !apply); + + player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(GetAmount()), apply); + } } else { @@ -4523,28 +4600,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool // AT APPLY if (apply) { - // Overpower - if (caster && m_spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && - m_spellInfo->SpellFamilyFlags[0] & 0x4) - { - // In addition, if you strike a player.. - if (target->GetTypeId() != TYPEID_PLAYER) - return; - // ..while they are casting - if (target->IsNonMeleeSpellCast(false, false, true, false, true)) - if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_ADD_FLAT_MODIFIER, SPELLFAMILY_WARRIOR, 2775, 0)) - switch (aurEff->GetId()) - { - // Unrelenting Assault, rank 1 - case 46859: - target->CastSpell(target, 64849, true, NULL, aurEff); - break; - // Unrelenting Assault, rank 2 - case 46860: - target->CastSpell(target, 64850, true, NULL, aurEff); - break; - } - } switch (GetId()) { case 1515: // Tame beast @@ -4772,7 +4827,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool uint32 spellId = 24659; if (apply && caster) { - SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellId); + SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(spellId); for (uint32 i = 0; i < spell->StackAmount; ++i) caster->CastSpell(target, spell->Id, true, NULL, NULL, GetCasterGUID()); @@ -4787,7 +4842,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool uint32 spellId = 24662; if (apply && caster) { - SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellId); + SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(spellId); for (uint32 i = 0; i < spell->StackAmount; ++i) caster->CastSpell(target, spell->Id, true, NULL, NULL, GetCasterGUID()); break; @@ -5372,12 +5427,12 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const { // Feeding Frenzy Rank 1 case 53511: - if (target->GetVictim() && target->GetVictim()->HealthBelowPct(35)) + if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35)) target->CastSpell(target, 60096, true, 0, this); return; // Feeding Frenzy Rank 2 case 53512: - if (target->GetVictim() && target->GetVictim()->HealthBelowPct(35)) + if (target->GetVictim() && target->EnsureVictim()->HealthBelowPct(35)) target->CastSpell(target, 60097, true, 0, this); return; default: @@ -5779,15 +5834,19 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const uint32 resist = 0; CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL); - // ignore non positive values (can be result apply spellmods to aura damage - uint32 damage = std::max(GetAmount(), 0); + // AOE spells are not affected by the new periodic system. + bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA); + // ignore negative values (can be result apply spellmods to aura damage + uint32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage; // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations - sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + if (isAreaAura) + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); if (GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE) { - damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); + if (isAreaAura) + damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT); damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); // Calculate armor mitigation @@ -5843,12 +5902,25 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const else damage = uint32(target->CountPctFromMaxHealth(damage)); - bool crit = IsPeriodicTickCrit(target, caster); + if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura) + { + damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); + if (caster->GetTypeId() != TYPEID_PLAYER) + damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); + } + + bool crit = false; + + if (CanPeriodicTickCrit(caster)) + crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance); + if (crit) damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target); int32 dmg = damage; - caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); + if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); damage = dmg; caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &absorb, &resist, GetSpellInfo()); @@ -5897,25 +5969,45 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c uint32 resist = 0; CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL); - uint32 damage = std::max(GetAmount(), 0); + bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA); + // ignore negative values (can be result apply spellmods to aura damage + uint32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage; - damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); + if (isAreaAura) + { + // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT); + } damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); - bool crit = IsPeriodicTickCrit(target, caster); - if (crit) - damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target); - // Calculate armor mitigation - if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), m_effIndex)) + if (Unit::IsDamageReducedByArmor(GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), GetEffIndex())) { uint32 damageReductedArmor = caster->CalcArmorReducedDamage(target, damage, GetSpellInfo()); cleanDamage.mitigated_damage += damage - damageReductedArmor; damage = damageReductedArmor; } + if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura) + { + damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); + if (caster->GetTypeId() != TYPEID_PLAYER) + damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); + } + + bool crit = false; + + if (CanPeriodicTickCrit(caster)) + crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance); + + if (crit) + damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target); + int32 dmg = damage; - caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); + if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); damage = dmg; caster->CalcAbsorbResist(target, GetSpellInfo()->GetSchoolMask(), DOT, damage, &absorb, &resist, m_spellInfo); @@ -5997,8 +6089,9 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const if (GetBase()->IsPermanent() && target->IsFullHealth()) return; + bool isAreaAura = m_spellInfo->Effects[m_effIndex].IsAreaAuraEffect() || m_spellInfo->Effects[m_effIndex].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA); // ignore negative values (can be result apply spellmods to aura damage - int32 damage = std::max(m_amount, 0); + int32 damage = isAreaAura ? std::max(GetAmount(), 0) : m_damage; if (GetAuraType() == SPELL_AURA_OBS_MOD_HEALTH) { @@ -6046,12 +6139,16 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const damage += addition; } - - damage = caster->SpellHealingBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); + if (isAreaAura) + damage = caster->SpellHealingBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellHealingPctDone(target, m_spellInfo); damage = target->SpellHealingBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); } - bool crit = IsPeriodicTickCrit(target, caster); + bool crit = false; + + if (CanPeriodicTickCrit(caster)) + crit = roll_chance_f(isAreaAura ? caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask()) : m_critChance); + if (crit) damage = caster->SpellCriticalHealingBonus(m_spellInfo, damage, target); @@ -6203,6 +6300,9 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons { Powers powerType = Powers(GetMiscValue()); + if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + return; + if (!target->IsAlive() || !target->GetMaxPower(powerType)) return; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 0887ce123e2..5eec9021291 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -70,6 +70,13 @@ class AuraEffect void HandleEffect(Unit* target, uint8 mode, bool apply); void ApplySpellMod(Unit* target, bool apply); + void SetDamage(int32 val) { m_damage = val; } + int32 GetDamage() const { return m_damage; } + void SetCritChance(float val) { m_critChance = val; } + float GetCritChance() const { return m_critChance; } + void SetDonePct(float val) { m_donePct = val; } + float GetDonePct() const { return m_donePct; } + void Update(uint32 diff, Unit* caster); void UpdatePeriodic(Unit* caster); @@ -98,6 +105,9 @@ class AuraEffect int32 const m_baseAmount; int32 m_amount; + int32 m_damage; + float m_critChance; + float m_donePct; SpellModifier* m_spellmod; @@ -109,7 +119,7 @@ class AuraEffect bool m_canBeRecalculated; bool m_isPeriodic; private: - bool IsPeriodicTickCrit(Unit* target, Unit const* caster) const; + bool CanPeriodicTickCrit(Unit const* caster) const; public: // aura effect apply/remove handlers diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 9c7fff612b7..75dbd457b91 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -539,6 +539,9 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply) || !CanBeAppliedOn(itr->first)) addUnit = false; + if (addUnit && !itr->first->IsHighestExclusiveAura(this, true)) + addUnit = false; + if (addUnit) { // persistent area aura does not hit flying targets @@ -691,21 +694,12 @@ void Aura::Update(uint32 diff, Unit* caster) if (int32(caster->GetHealth()) > manaPerSecond) caster->ModifyHealth(-manaPerSecond); else - { Remove(); - return; - } } + else if (int32(caster->GetPower(powertype)) >= manaPerSecond) + caster->ModifyPower(powertype, -manaPerSecond); else - { - if (int32(caster->GetPower(powertype)) >= manaPerSecond) - caster->ModifyPower(powertype, -manaPerSecond); - else - { - Remove(); - return; - } - } + Remove(); } } } @@ -731,24 +725,35 @@ int32 Aura::CalcMaxDuration(Unit* caster) const // IsPermanent() checks max duration (which we are supposed to calculate here) if (maxDuration != -1 && modOwner) modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, maxDuration); + return maxDuration; } void Aura::SetDuration(int32 duration, bool withMods) { if (withMods) - { if (Unit* caster = GetCaster()) if (Player* modOwner = caster->GetSpellModOwner()) modOwner->ApplySpellMod(GetId(), SPELLMOD_DURATION, duration); - } + m_duration = duration; SetNeedClientUpdateForTargets(); } -void Aura::RefreshDuration() +void Aura::RefreshDuration(bool withMods) { - SetDuration(GetMaxDuration()); + if (withMods) + { + int32 duration = m_spellInfo->GetMaxDuration(); + // Calculate duration of periodics affected by haste. + if (GetCaster()->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) + duration = int32(duration * GetCaster()->GetFloatValue(UNIT_MOD_CAST_SPEED)); + + SetMaxDuration(duration); + SetDuration(duration); + } + else + SetDuration(GetMaxDuration()); if (m_spellInfo->ManaPerSecond || m_spellInfo->ManaPerSecondPerLevel) m_timeCla = 1 * IN_MILLISECONDS; @@ -768,6 +773,7 @@ void Aura::SetCharges(uint8 charges) { if (m_procCharges == charges) return; + m_procCharges = charges; m_isUsingCharges = m_procCharges != 0; SetNeedClientUpdateForTargets(); @@ -782,6 +788,7 @@ uint8 Aura::CalcMaxCharges(Unit* caster) const if (caster) if (Player* modOwner = caster->GetSpellModOwner()) modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, maxProcCharges); + return maxProcCharges; } @@ -804,6 +811,7 @@ bool Aura::ModCharges(int32 num, AuraRemoveMode removeMode) SetCharges(charges); } + return false; } @@ -825,7 +833,10 @@ void Aura::SetStackAmount(uint8 stackAmount) for (std::list<AuraApplication*>::const_iterator apptItr = applications.begin(); apptItr != applications.end(); ++apptItr) if (!(*apptItr)->GetRemoveMode()) + { HandleAuraSpecificMods(*apptItr, caster, true, true); + HandleAuraSpecificPeriodics(*apptItr, caster); + } SetNeedClientUpdateForTargets(); } @@ -869,6 +880,7 @@ bool Aura::ModStackAmount(int32 num, AuraRemoveMode removeMode) if (SpellModifier* mod = aurEff->GetSpellModifier()) mod->charges = GetCharges(); } + SetNeedClientUpdateForTargets(); return false; } @@ -880,13 +892,22 @@ void Aura::RefreshSpellMods() player->RestoreAllSpellMods(0, this); } +bool Aura::HasMoreThanOneEffectForType(AuraType auraType) const +{ + uint32 count = 0; + for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + if (HasEffect(i) && AuraType(GetSpellInfo()->Effects[i].ApplyAuraName) == auraType) + ++count; + + return count > 1; +} + bool Aura::IsArea() const { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - { if (HasEffect(i) && GetSpellInfo()->Effects[i].IsAreaAuraEffect()) return true; - } + return false; } @@ -1343,17 +1364,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b if (target->HasAura(61988) && !target->HasAura(25771)) target->RemoveAura(61988); break; - case 72368: // Shared Suffering - case 72369: - if (caster) - { - if (AuraEffect* aurEff = GetEffect(0)) - { - int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber()); - if (remainingDamage > 0) - caster->CastCustomSpell(caster, 72373, NULL, &remainingDamage, NULL, true); - } - } + default: break; } break; @@ -1525,11 +1536,8 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b player->RemoveSpellCooldown(GetSpellInfo()->Id, true); player->AddSpellCooldown(GetSpellInfo()->Id, 0, uint32(time(NULL) + aurEff->GetAmount())); - WorldPacket data(SMSG_SPELL_COOLDOWN, 8+1+4+4); - data << uint64(player->GetGUID()); - data << uint8(0x0); // flags (0x1, 0x2) - data << uint32(GetSpellInfo()->Id); - data << uint32(aurEff->GetAmount()*IN_MILLISECONDS); + WorldPacket data; + player->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, GetSpellInfo()->Id, aurEff->GetAmount()*IN_MILLISECONDS); player->SendDirectMessage(&data); } break; @@ -1644,26 +1652,62 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b break; } break; - case SPELLFAMILY_WARLOCK: - // Drain Soul - If the target is at or below 25% health, Drain Soul causes four times the normal damage - if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00004000) + } +} + +void Aura::HandleAuraSpecificPeriodics(AuraApplication const* aurApp, Unit* caster) +{ + Unit* target = aurApp->GetTarget(); + + if (!caster || aurApp->GetRemoveMode()) + return; + + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + if (!HasEffect(i)) + continue; + + if (m_spellInfo->Effects[i].IsAreaAuraEffect() || m_spellInfo->Effects[i].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA)) + continue; + + switch (m_spellInfo->Effects[i].ApplyAuraName) + { + case SPELL_AURA_PERIODIC_DAMAGE: + case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: + case SPELL_AURA_PERIODIC_LEECH: { - if (!caster) - break; - if (apply) - { - if (target != caster && !target->HealthAbovePct(25)) - caster->CastSpell(caster, 100001, true); - } - else - { - if (target != caster) - caster->RemoveAurasDueToSpell(GetId()); - else - caster->RemoveAurasDueToSpell(100001); - } + AuraEffect* aurEff = GetEffect(i); + + // ignore non positive values (can be result apply spellmods to aura damage + uint32 damage = std::max(aurEff->GetAmount(), 0); + + // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + + aurEff->SetDonePct(caster->SpellDamagePctDone(target, m_spellInfo, DOT)); // Calculate done percentage first! + aurEff->SetDamage(caster->SpellDamageBonusDone(target, m_spellInfo, damage, DOT, GetStackAmount()) * aurEff->GetDonePct()); + aurEff->SetCritChance(caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask())); + break; } - break; + case SPELL_AURA_PERIODIC_HEAL: + case SPELL_AURA_OBS_MOD_HEALTH: + { + AuraEffect* aurEff = GetEffect(i); + + // ignore non positive values (can be result apply spellmods to aura damage + uint32 damage = std::max(aurEff->GetAmount(), 0); + + // Script Hook For HandlePeriodicDamageAurasTick -- Allow scripts to change the Damage pre class mitigation calculations + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + + aurEff->SetDonePct(caster->SpellHealingPctDone(target, m_spellInfo)); // Calculate done percentage first! + aurEff->SetDamage(caster->SpellHealingBonusDone(target, m_spellInfo, damage, DOT, GetStackAmount()) * aurEff->GetDonePct()); + aurEff->SetCritChance(caster->GetUnitSpellCriticalChance(target, m_spellInfo, m_spellInfo->GetSchoolMask())); + break; + } + default: + break; + } } } @@ -1721,13 +1765,19 @@ bool Aura::CanStackWith(Aura const* existingAura) const return false; // check spell group stack rules - SpellGroupStackRule stackRule = sSpellMgr->CheckSpellGroupStackRules(m_spellInfo, existingSpellInfo); - if (stackRule) + switch (sSpellMgr->CheckSpellGroupStackRules(m_spellInfo, existingSpellInfo)) { - if (stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE) - return false; - if (sameCaster && stackRule == SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER) + case SPELL_GROUP_STACK_RULE_EXCLUSIVE: + case SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST: // if it reaches this point, existing aura is lower/equal return false; + case SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER: + if (sameCaster) + return false; + break; + case SPELL_GROUP_STACK_RULE_DEFAULT: + case SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT: + default: + break; } if (m_spellInfo->SpellFamilyName != existingSpellInfo->SpellFamilyName) diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index f62b1ff47b4..8c426ea2175 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -129,7 +129,7 @@ class Aura int32 CalcMaxDuration(Unit* caster) const; int32 GetDuration() const { return m_duration; } void SetDuration(int32 duration, bool withMods = false); - void RefreshDuration(); + void RefreshDuration(bool withMods = false); void RefreshTimers(); bool IsExpired() const { return !GetDuration();} bool IsPermanent() const { return GetMaxDuration() == -1; } @@ -149,6 +149,7 @@ class Aura uint8 GetCasterLevel() const { return m_casterLevel; } + bool HasMoreThanOneEffectForType(AuraType auraType) const; bool IsArea() const; bool IsPassive() const; bool IsDeathPersistent() const; @@ -190,6 +191,7 @@ class Aura void SetNeedClientUpdateForTargets() const; void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply); + void HandleAuraSpecificPeriodics(AuraApplication const* aurApp, Unit* caster); bool CanBeAppliedOn(Unit* target); bool CheckAreaTarget(Unit* target); bool CanStackWith(Aura const* existingAura) const; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index eb2d44a6676..d223425a027 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -567,10 +567,11 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_spellState = SPELL_STATE_NULL; _triggeredCastFlags = triggerFlags; if (info->AttributesEx4 & SPELL_ATTR4_TRIGGERED) - _triggeredCastFlags = TRIGGERED_FULL_MASK; + _triggeredCastFlags = TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT); m_CastItem = NULL; m_castItemGUID = 0; + m_castItemEntry = 0; unitTarget = NULL; itemTarget = NULL; @@ -953,7 +954,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa case TARGET_UNIT_CHANNEL_TARGET: { WorldObject* target = ObjectAccessor::GetUnit(*m_caster, m_originalCaster->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT)); - CallScriptObjectTargetSelectHandlers(target, effIndex); + CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); // unit target may be no longer avalible - teleported out of map for example if (target && target->ToUnit()) AddUnitTarget(target->ToUnit(), 1 << effIndex); @@ -966,7 +967,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa m_targets.SetDst(channeledSpell->m_targets); else if (WorldObject* target = ObjectAccessor::GetWorldObject(*m_caster, m_originalCaster->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT))) { - CallScriptObjectTargetSelectHandlers(target, effIndex); + CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); if (target) m_targets.SetDst(*target); } @@ -1047,17 +1048,34 @@ void Spell::SelectImplicitNearbyTargets(SpellEffIndex effIndex, SpellImplicitTar return; } - CallScriptObjectTargetSelectHandlers(target, effIndex); + CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); + if (!target) + { + TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id %u set NULL target, effect %u", m_spellInfo->Id, effIndex); + return; + } switch (targetType.GetObjectType()) { case TARGET_OBJECT_TYPE_UNIT: + { if (Unit* unitTarget = target->ToUnit()) AddUnitTarget(unitTarget, effMask, true, false); + else + { + TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id %u set object of wrong type, expected unit, got %s, effect %u", m_spellInfo->Id, GetLogNameForGuid(target->GetGUID()), effMask); + return; + } break; + } case TARGET_OBJECT_TYPE_GOBJ: if (GameObject* gobjTarget = target->ToGameObject()) AddGOTarget(gobjTarget, effMask); + else + { + TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id %u set object of wrong type, expected gameobject, got %s, effect %u", m_spellInfo->Id, GetLogNameForGuid(target->GetGUID()), effMask); + return; + } break; case TARGET_OBJECT_TYPE_DEST: m_targets.SetDst(*target); @@ -1090,7 +1108,7 @@ void Spell::SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTarge Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellConeTargetCheck> searcher(m_caster, targets, check, containerTypeMask); SearchTargets<Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellConeTargetCheck> >(searcher, containerTypeMask, m_caster, m_caster, radius); - CallScriptObjectAreaTargetSelectHandlers(targets, effIndex); + CallScriptObjectAreaTargetSelectHandlers(targets, effIndex, targetType); if (!targets.empty()) { @@ -1171,78 +1189,7 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge float radius = m_spellInfo->Effects[effIndex].CalcRadius(m_caster) * m_spellValue->RadiusMod; SearchAreaTargets(targets, radius, center, referer, targetType.GetObjectType(), targetType.GetCheckType(), m_spellInfo->Effects[effIndex].ImplicitTargetConditions); - // Custom entries - /// @todo remove those - switch (m_spellInfo->Id) - { - case 46584: // Raise Dead - { - if (Player* playerCaster = m_caster->ToPlayer()) - { - for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr) - { - switch ((*itr)->GetTypeId()) - { - case TYPEID_UNIT: - case TYPEID_PLAYER: - { - Unit* unitTarget = (*itr)->ToUnit(); - if (unitTarget->IsAlive() || !playerCaster->isHonorOrXPTarget(unitTarget) - || ((unitTarget->GetCreatureTypeMask() & (1 << (CREATURE_TYPE_HUMANOID-1))) == 0) - || (unitTarget->GetDisplayId() != unitTarget->GetNativeDisplayId())) - break; - AddUnitTarget(unitTarget, effMask, false); - // no break; - } - case TYPEID_CORPSE: // wont work until corpses are allowed in target lists, but at least will send dest in packet - m_targets.SetDst(*(*itr)); - return; // nothing more to do here - default: - break; - } - } - } - return; // don't add targets to target map - } - // Corpse Explosion - case 49158: - case 51325: - case 51326: - case 51327: - case 51328: - // check if our target is not valid (spell can target ghoul or dead unit) - if (!(m_targets.GetUnitTarget() && m_targets.GetUnitTarget()->GetDisplayId() == m_targets.GetUnitTarget()->GetNativeDisplayId() && - ((m_targets.GetUnitTarget()->GetEntry() == 26125 && m_targets.GetUnitTarget()->GetOwnerGUID() == m_caster->GetGUID()) - || m_targets.GetUnitTarget()->isDead()))) - { - // remove existing targets - CleanupTargetList(); - - for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr) - { - switch ((*itr)->GetTypeId()) - { - case TYPEID_UNIT: - case TYPEID_PLAYER: - if (!(*itr)->ToUnit()->isDead()) - break; - AddUnitTarget((*itr)->ToUnit(), 1 << effIndex, false); - return; - default: - break; - } - } - if (m_caster->GetTypeId() == TYPEID_PLAYER) - m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); - SendCastResult(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW); - finish(false); - } - return; - default: - break; - } - - CallScriptObjectAreaTargetSelectHandlers(targets, effIndex); + CallScriptObjectAreaTargetSelectHandlers(targets, effIndex, targetType); if (!targets.empty()) { @@ -1304,8 +1251,12 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici float angle = float(rand_norm()) * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f); m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dist, angle); - float ground = z; - float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground); + float ground = m_caster->GetMap()->GetHeight(m_caster->GetPhaseMask(), x, y, z, true, 50.0f); + float liquidLevel = VMAP_INVALID_HEIGHT_VALUE; + LiquidData liquidData; + if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData)) + liquidLevel = liquidData.level; + if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level { SendCastResult(SPELL_FAILED_NOT_HERE); @@ -1341,17 +1292,14 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici dist = objSize + (dist - objSize) * float(rand_norm()); Position pos = dest._position; - if (targetType.GetTarget() == TARGET_DEST_CASTER_FRONT_LEAP) - m_caster->MovePositionToFirstCollision(pos, dist, angle); - else - m_caster->MovePosition(pos, dist, angle); + m_caster->MovePositionToFirstCollision(pos, dist, angle); dest.Relocate(pos); break; } } - CallScriptDestinationTargetSelectHandlers(dest, effIndex); + CallScriptDestinationTargetSelectHandlers(dest, effIndex, targetType); m_targets.SetDst(dest); } @@ -1378,14 +1326,14 @@ void Spell::SelectImplicitTargetDestTargets(SpellEffIndex effIndex, SpellImplici dist = objSize + (dist - objSize) * float(rand_norm()); Position pos = dest._position; - target->MovePosition(pos, dist, angle); + target->MovePositionToFirstCollision(pos, dist, angle); dest.Relocate(pos); break; } } - CallScriptDestinationTargetSelectHandlers(dest, effIndex); + CallScriptDestinationTargetSelectHandlers(dest, effIndex, targetType); m_targets.SetDst(dest); } @@ -1417,14 +1365,14 @@ void Spell::SelectImplicitDestDestTargets(SpellEffIndex effIndex, SpellImplicitT dist *= float(rand_norm()); Position pos = dest._position; - m_caster->MovePosition(pos, dist, angle); + m_caster->MovePositionToFirstCollision(pos, dist, angle); dest.Relocate(pos); break; } } - CallScriptDestinationTargetSelectHandlers(dest, effIndex); + CallScriptDestinationTargetSelectHandlers(dest, effIndex, targetType); m_targets.ModDst(dest); } @@ -1467,7 +1415,7 @@ void Spell::SelectImplicitCasterObjectTargets(SpellEffIndex effIndex, SpellImpli break; } - CallScriptObjectTargetSelectHandlers(target, effIndex); + CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); if (target && target->ToUnit()) AddUnitTarget(target->ToUnit(), 1 << effIndex, checkIfValid); @@ -1479,7 +1427,7 @@ void Spell::SelectImplicitTargetObjectTargets(SpellEffIndex effIndex, SpellImpli WorldObject* target = m_targets.GetObjectTarget(); - CallScriptObjectTargetSelectHandlers(target, effIndex); + CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); if (target) { @@ -1514,7 +1462,7 @@ void Spell::SelectImplicitChainTargets(SpellEffIndex effIndex, SpellImplicitTarg , m_spellInfo->Effects[effIndex].ImplicitTargetConditions, targetType.GetTarget() == TARGET_UNIT_TARGET_CHAINHEAL_ALLY); // Chain primary target is added earlier - CallScriptObjectAreaTargetSelectHandlers(targets, effIndex); + CallScriptObjectAreaTargetSelectHandlers(targets, effIndex, targetType); for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr) if (Unit* unitTarget = (*itr)->ToUnit()) @@ -1567,10 +1515,24 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex) std::list<WorldObject*>::const_iterator itr = targets.begin(); for (; itr != targets.end(); ++itr) { + if (!m_caster->HasInLine(*itr, 5.0f)) + continue; + + if (m_spellInfo->CheckTarget(m_caster, *itr, true) != SPELL_CAST_OK) + continue; + if (Unit* unitTarget = (*itr)->ToUnit()) - if (m_caster == *itr || m_caster->IsOnVehicle(unitTarget) || (unitTarget)->GetVehicle())//(*itr)->IsOnVehicle(m_caster)) + { + if (m_caster == *itr || m_caster->IsOnVehicle(unitTarget) || unitTarget->GetVehicle()) continue; + if (Creature* creatureTarget = unitTarget->ToCreature()) + { + if (!(creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PROJECTILE_COLLISION)) + continue; + } + } + const float size = std::max((*itr)->GetObjectSize() * 0.7f, 1.0f); // 1/sqrt(3) /// @todo all calculation should be based on src instead of m_caster const float objDist2d = m_targets.GetSrcPos()->GetExactDist2d(*itr) * std::cos(m_targets.GetSrcPos()->GetRelativeAngle(*itr)); @@ -1668,7 +1630,7 @@ void Spell::SelectImplicitTrajTargets(SpellEffIndex effIndex) SpellDestination dest(*m_targets.GetDst()); dest.Relocate(trajDst); - CallScriptDestinationTargetSelectHandlers(dest, effIndex); + CallScriptDestinationTargetSelectHandlers(dest, effIndex, SpellImplicitTargetInfo(TARGET_DEST_TRAJ)); m_targets.ModDst(dest); } } @@ -1685,7 +1647,7 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex) { WorldObject* target = ObjectAccessor::FindPlayer(m_caster->GetTarget()); - CallScriptObjectTargetSelectHandlers(target, SpellEffIndex(effIndex)); + CallScriptObjectTargetSelectHandlers(target, SpellEffIndex(effIndex), SpellImplicitTargetInfo()); if (target && target->ToPlayer()) AddUnitTarget(target->ToUnit(), 1 << effIndex, false); @@ -1745,7 +1707,7 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex) break; } - CallScriptObjectTargetSelectHandlers(target, SpellEffIndex(effIndex)); + CallScriptObjectTargetSelectHandlers(target, SpellEffIndex(effIndex), SpellImplicitTargetInfo()); if (target) { @@ -2304,7 +2266,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied //Spells with this flag cannot trigger if effect is cast on self - bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && CanExecuteTriggersOnHit(mask); + bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); Unit* spellHitTarget = NULL; if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target @@ -2350,15 +2312,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (m_damage > 0) positive = false; else if (!m_healing) - { - for (uint8 i = 0; i< MAX_SPELL_EFFECTS; ++i) - // If at least one effect negative spell is negative hit - if (mask & (1<<i) && !m_spellInfo->IsPositiveEffect(i)) - { - positive = false; - break; - } - } + positive = m_spellInfo->IsPositive(); + switch (m_spellInfo->DmgClass) { case SPELL_DAMAGE_CLASS_MAGIC: @@ -2393,7 +2348,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) // Do healing and triggers if (m_healing > 0) { - bool crit = caster->isSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask); + bool crit = caster->IsSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask); uint32 addhealth = m_healing; if (crit) { @@ -2436,7 +2391,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) caster->ToPlayer()->CastItemCombatSpell(unitTarget, m_attackType, procVictim, procEx); } - m_damage = damageInfo.damage; caster->DealSpellDamage(&damageInfo, true); @@ -2577,9 +2531,14 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA } } + uint8 aura_effmask = 0; + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + if (effectMask & (1 << i) && m_spellInfo->Effects[i].IsUnitOwnedAuraEffect()) + aura_effmask |= 1 << i; + // Get Data Needed for Diminishing Returns, some effects may have multiple auras, so this must be done on spell hit, not aura add m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo, m_triggeredByAuraSpell); - if (m_diminishGroup) + if (m_diminishGroup && aura_effmask) { m_diminishLevel = unit->GetDiminishing(m_diminishGroup); DiminishingReturnsType type = GetDiminishingReturnsGroupType(m_diminishGroup); @@ -2590,11 +2549,6 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA unit->IncrDiminishing(m_diminishGroup); } - uint8 aura_effmask = 0; - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (effectMask & (1 << i) && m_spellInfo->Effects[i].IsUnitOwnedAuraEffect()) - aura_effmask |= 1 << i; - if (aura_effmask) { // Select rank for aura with level requirements only in specific cases @@ -2660,10 +2614,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA // Haste modifies duration of channeled spells if (m_spellInfo->IsChanneled()) - { - if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) - m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this); - } + m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this); // and duration of auras affected by SPELL_AURA_PERIODIC_HASTE else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED)); @@ -2861,9 +2812,15 @@ bool Spell::UpdateChanneledTargetList() void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura) { if (m_CastItem) + { m_castItemGUID = m_CastItem->GetGUID(); + m_castItemEntry = m_CastItem->GetEntry(); + } else + { m_castItemGUID = 0; + m_castItemEntry = 0; + } InitExplicitTargets(*targets); @@ -3071,7 +3028,12 @@ void Spell::cancel() void Spell::cast(bool skipCheck) { // update pointers base at GUIDs to prevent access to non-existed already object - UpdatePointers(); + if (!UpdatePointers()) + { + // cancel the spell if UpdatePointers() returned false, something wrong happened there + cancel(); + return; + } // cancel at lost explicit target during cast if (m_targets.GetObjectTargetGUID() && !m_targets.GetObjectTarget()) @@ -3092,7 +3054,7 @@ void Spell::cast(bool skipCheck) if (this->GetSpellInfo()->DmgClass != SPELL_DAMAGE_CLASS_NONE) if (Pet* playerPet = playerCaster->GetPet()) if (playerPet->IsAlive() && playerPet->isControlled() && (m_targets.GetTargetMask() & TARGET_FLAG_UNIT)) - playerPet->AI()->OwnerAttacked(m_targets.GetObjectTarget()->ToUnit()); + playerPet->AI()->OwnerAttacked(m_targets.GetUnitTarget()); } SetExecutedCurrently(true); @@ -3276,9 +3238,9 @@ void Spell::handle_immediate() // Apply duration mod if (Player* modOwner = m_caster->GetSpellModOwner()) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration); + // Apply haste mods - if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) - m_caster->ModSpellCastTime(m_spellInfo, duration, this); + m_caster->ModSpellCastTime(m_spellInfo, duration, this); m_spellState = SPELL_STATE_CASTING; m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags); @@ -3321,7 +3283,12 @@ void Spell::handle_immediate() uint64 Spell::handle_delayed(uint64 t_offset) { - UpdatePointers(); + if (!UpdatePointers()) + { + // finish the spell if UpdatePointers() returned false, something wrong happened there + finish(false); + return 0; + } if (m_caster->GetTypeId() == TYPEID_PLAYER) m_caster->ToPlayer()->SetSpellModTakingSpell(this, true); @@ -3473,7 +3440,12 @@ void Spell::SendSpellCooldown() void Spell::update(uint32 difftime) { // update pointers based at it's GUIDs - UpdatePointers(); + if (!UpdatePointers()) + { + // cancel the spell if UpdatePointers() returned false, something wrong happened there + cancel(); + return; + } if (m_targets.GetUnitTargetGUID() && !m_targets.GetUnitTarget()) { @@ -3797,7 +3769,7 @@ void Spell::SendSpellStart() castFlags |= CAST_FLAG_POWER_LEFT_SELF; if (m_spellInfo->RuneCostID && m_spellInfo->PowerType == POWER_RUNE) - castFlags |= CAST_FLAG_UNKNOWN_19; + castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it WorldPacket data(SMSG_SPELL_START, (8+8+4+4+2)); if (m_CastItem) @@ -3853,21 +3825,22 @@ void Spell::SendSpellGo() if ((m_caster->GetTypeId() == TYPEID_PLAYER) && (m_caster->getClass() == CLASS_DEATH_KNIGHT) && m_spellInfo->RuneCostID - && m_spellInfo->PowerType == POWER_RUNE) + && m_spellInfo->PowerType == POWER_RUNE + && !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_AND_REAGENT_COST)) { - castFlags |= CAST_FLAG_UNKNOWN_19; // same as in SMSG_SPELL_START + castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list } if (m_spellInfo->HasEffect(SPELL_EFFECT_ACTIVATE_RUNE)) - { castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list - castFlags |= CAST_FLAG_UNKNOWN_19; // same as in SMSG_SPELL_START - } if (m_targets.HasTraj()) castFlags |= CAST_FLAG_ADJUST_MISSILE; + if (!m_spellInfo->StartRecoveryTime) + castFlags |= CAST_FLAG_NO_GCD; + WorldPacket data(SMSG_SPELL_GO, 50); // guess size if (m_CastItem) @@ -4220,7 +4193,7 @@ void Spell::SendChannelStart(uint32 duration) void Spell::SendResurrectRequest(Player* target) { - // get ressurector name for creature resurrections, otherwise packet will be not accepted + // get resurrector name for creature resurrections, otherwise packet will be not accepted // for player resurrections the name is looked up by guid std::string const sentName(m_caster->GetTypeId() == TYPEID_PLAYER ? "" @@ -4303,6 +4276,8 @@ void Spell::TakeCastItem() m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; } } @@ -4547,6 +4522,8 @@ void Spell::TakeReagents() } m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; } // if GetItemTarget is also spell reagent @@ -4867,8 +4844,7 @@ SpellCastResult Spell::CheckCast(bool strict) uint32 zone, area; m_caster->GetZoneAndAreaId(zone, area); - SpellCastResult locRes= m_spellInfo->CheckLocation(m_caster->GetMapId(), zone, area, - m_caster->GetTypeId() == TYPEID_PLAYER ? m_caster->ToPlayer() : NULL); + SpellCastResult locRes = m_spellInfo->CheckLocation(m_caster->GetMapId(), zone, area, m_caster->ToPlayer()); if (locRes != SPELL_CAST_OK) return locRes; } @@ -5068,16 +5044,24 @@ SpellCastResult Spell::CheckCast(bool strict) if (!target) return SPELL_FAILED_DONT_REPORT; - Position pos; - target->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); - target->GetFirstCollisionPosition(pos, CONTACT_DISTANCE, target->GetRelativeAngle(m_caster)); + float objSize = target->GetObjectSize(); + float range = m_spellInfo->GetMaxRange(true, m_caster, this) * 1.5f + objSize; // can't be overly strict - m_preGeneratedPath.SetPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f); - bool result = m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize()); + m_preGeneratedPath.SetPathLengthLimit(range); + // first try with raycast, if it fails fall back to normal path + bool result = m_preGeneratedPath.CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + target->GetObjectSize(), false, true); if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT) return SPELL_FAILED_OUT_OF_RANGE; else if (!result || m_preGeneratedPath.GetPathType() & PATHFIND_NOPATH) - return SPELL_FAILED_NOPATH; + { + result = m_preGeneratedPath.CalculatePath(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ() + target->GetObjectSize(), false, false); + if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT) + return SPELL_FAILED_OUT_OF_RANGE; + else if (!result || m_preGeneratedPath.GetPathType() & PATHFIND_NOPATH) + return SPELL_FAILED_NOPATH; + } + + m_preGeneratedPath.ReducePathLenghtByDist(objSize); // move back } break; } @@ -5193,6 +5177,7 @@ SpellCastResult Spell::CheckCast(bool strict) case SUMMON_CATEGORY_PET: if (m_caster->GetPetGUID()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; + // intentional missing break, check both GetPetGUID() and GetCharmGUID for SUMMON_CATEGORY_PET case SUMMON_CATEGORY_PUPPET: if (m_caster->GetCharmGUID()) return SPELL_FAILED_ALREADY_HAVE_CHARM; @@ -6357,7 +6342,7 @@ void Spell::DelayedChannel() SendChannelUpdate(m_timer); } -void Spell::UpdatePointers() +bool Spell::UpdatePointers() { if (m_originalCasterGUID == m_caster->GetGUID()) m_originalCaster = m_caster; @@ -6369,13 +6354,22 @@ void Spell::UpdatePointers() } if (m_castItemGUID && m_caster->GetTypeId() == TYPEID_PLAYER) + { m_CastItem = m_caster->ToPlayer()->GetItemByGuid(m_castItemGUID); + // cast item not found, somehow the item is no longer where we expected + if (!m_CastItem) + return false; + + // check if the item is really the same, in case it has been wrapped for example + if (m_castItemEntry != m_CastItem->GetEntry()) + return false; + } m_targets.Update(m_caster); // further actions done only for dest targets if (!m_targets.HasDst()) - return; + return true; // cache last transport WorldObject* transport = NULL; @@ -6396,6 +6390,8 @@ void Spell::UpdatePointers() dest._position.RelocateOffset(dest._transportOffset); } } + + return true; } CurrentSpellTypes Spell::GetCurrentContainer() const @@ -6723,10 +6719,10 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier) if (m_damage > 0) { - if (m_spellInfo->Effects[i].IsTargetingArea()) + if (m_spellInfo->Effects[i].IsTargetingArea() || m_spellInfo->Effects[i].IsAreaAuraEffect() || m_spellInfo->Effects[i].IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA)) { m_damage = int32(float(m_damage) * unit->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); - if (m_caster->GetTypeId() == TYPEID_UNIT) + if (m_caster->GetTypeId() != TYPEID_PLAYER) m_damage = int32(float(m_damage) * unit->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); if (m_caster->GetTypeId() == TYPEID_PLAYER) @@ -6747,7 +6743,7 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier) } } - targetInfo.crit = m_caster->isSpellCrit(unit, m_spellInfo, m_spellSchoolMask, m_attackType); + targetInfo.crit = m_caster->IsSpellCrit(unit, m_spellInfo, m_spellSchoolMask, m_attackType); } SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& skillId, int32& reqSkillValue, int32& skillValue) @@ -7040,42 +7036,42 @@ void Spell::CallScriptAfterHitHandlers() } } -void Spell::CallScriptObjectAreaTargetSelectHandlers(std::list<WorldObject*>& targets, SpellEffIndex effIndex) +void Spell::CallScriptObjectAreaTargetSelectHandlers(std::list<WorldObject*>& targets, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType) { for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr) { (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_OBJECT_AREA_TARGET_SELECT); std::list<SpellScript::ObjectAreaTargetSelectHandler>::iterator hookItrEnd = (*scritr)->OnObjectAreaTargetSelect.end(), hookItr = (*scritr)->OnObjectAreaTargetSelect.begin(); for (; hookItr != hookItrEnd; ++hookItr) - if ((*hookItr).IsEffectAffected(m_spellInfo, effIndex)) - (*hookItr).Call(*scritr, targets); + if (hookItr->IsEffectAffected(m_spellInfo, effIndex) && targetType.GetTarget() == hookItr->GetTarget()) + hookItr->Call(*scritr, targets); (*scritr)->_FinishScriptCall(); } } -void Spell::CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffIndex effIndex) +void Spell::CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType) { for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr) { (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_OBJECT_TARGET_SELECT); std::list<SpellScript::ObjectTargetSelectHandler>::iterator hookItrEnd = (*scritr)->OnObjectTargetSelect.end(), hookItr = (*scritr)->OnObjectTargetSelect.begin(); for (; hookItr != hookItrEnd; ++hookItr) - if ((*hookItr).IsEffectAffected(m_spellInfo, effIndex)) - (*hookItr).Call(*scritr, target); + if (hookItr->IsEffectAffected(m_spellInfo, effIndex) && targetType.GetTarget() == hookItr->GetTarget()) + hookItr->Call(*scritr, target); (*scritr)->_FinishScriptCall(); } } -void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target, SpellEffIndex effIndex) +void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType) { for (std::list<SpellScript*>::iterator scritr = m_loadedScripts.begin(); scritr != m_loadedScripts.end(); ++scritr) { (*scritr)->_PrepareScriptCall(SPELL_SCRIPT_HOOK_DESTINATION_TARGET_SELECT); std::list<SpellScript::DestinationTargetSelectHandler>::iterator hookItrEnd = (*scritr)->OnDestinationTargetSelect.end(), hookItr = (*scritr)->OnDestinationTargetSelect.begin(); for (; hookItr != hookItrEnd; ++hookItr) - if (hookItr->IsEffectAffected(m_spellInfo, effIndex)) + if (hookItr->IsEffectAffected(m_spellInfo, effIndex) && targetType.GetTarget() == hookItr->GetTarget()) hookItr->Call(*scritr, target); (*scritr)->_FinishScriptCall(); diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 76be075e94d..584c20fdfb3 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -57,7 +57,7 @@ enum SpellCastFlags CAST_FLAG_UNKNOWN_16 = 0x00008000, CAST_FLAG_UNKNOWN_17 = 0x00010000, CAST_FLAG_ADJUST_MISSILE = 0x00020000, - CAST_FLAG_UNKNOWN_19 = 0x00040000, + CAST_FLAG_NO_GCD = 0x00040000, // no GCD for spell casts from charm/summon (vehicle spells is an example) CAST_FLAG_VISUAL_CHAIN = 0x00080000, CAST_FLAG_UNKNOWN_21 = 0x00100000, CAST_FLAG_RUNE_LIST = 0x00200000, @@ -451,6 +451,7 @@ class Spell SpellInfo const* const m_spellInfo; Item* m_CastItem; uint64 m_castItemGUID; + uint32 m_castItemEntry; uint8 m_cast_count; uint32 m_glyphIndex; uint32 m_preCastSpell; @@ -486,7 +487,7 @@ class Spell SpellInfo const* GetSpellInfo() const { return m_spellInfo; } int32 GetPowerCost() const { return m_powerCost; } - void UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc) + bool UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc) void CleanupTargetList(); @@ -557,7 +558,7 @@ class Spell GameObject* focusObject; // Damage and healing in effects need just calculate - int32 m_damage; // Damge in effects count here + int32 m_damage; // Damage in effects count here int32 m_healing; // Healing in effects count here // ****************************************** @@ -639,9 +640,9 @@ class Spell void CallScriptBeforeHitHandlers(); void CallScriptOnHitHandlers(); void CallScriptAfterHitHandlers(); - void CallScriptObjectAreaTargetSelectHandlers(std::list<WorldObject*>& targets, SpellEffIndex effIndex); - void CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffIndex effIndex); - void CallScriptDestinationTargetSelectHandlers(SpellDestination& target, SpellEffIndex effIndex); + void CallScriptObjectAreaTargetSelectHandlers(std::list<WorldObject*>& targets, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType); + void CallScriptObjectTargetSelectHandlers(WorldObject*& target, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType); + void CallScriptDestinationTargetSelectHandlers(SpellDestination& target, SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType); bool CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck); std::list<SpellScript*> m_loadedScripts; @@ -688,6 +689,9 @@ class Spell double rand_norm() { return m_caster->GetMap()->mtRand.randExc(); } double rand_chance() { return m_caster->GetMap()->mtRand.randExc(100.0); } #endif + + Spell(Spell const& right) = delete; + Spell& operator=(Spell const& right) = delete; }; namespace Trinity diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 987a07be896..c3ca10905fd 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -259,7 +259,7 @@ void Spell::EffectResurrectNew(SpellEffIndex effIndex) Player* target = unitTarget->ToPlayer(); - if (target->isRessurectRequested()) // already have one active request + if (target->isResurrectRequested()) // already have one active request return; uint32 health = damage; @@ -654,14 +654,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) } break; } - case SPELLFAMILY_MAGE: - { - // Deep Freeze should deal damage to permanently stun-immune targets. - if (m_spellInfo->Id == 71757) - if (unitTarget->GetTypeId() != TYPEID_UNIT || !(unitTarget->IsImmunedToSpellEffect(sSpellMgr->GetSpellInfo(44572), 0))) - return; - break; - } } if (m_originalCaster && damage > 0 && apply_direct_bonus) @@ -682,11 +674,6 @@ void Spell::EffectDummy(SpellEffIndex effIndex) if (!unitTarget && !gameObjTarget && !itemTarget) return; - uint32 spell_id = 0; - int32 bp = 0; - bool triggered = true; - SpellCastTargets targets; - // selection by spell family switch (m_spellInfo->SpellFamilyName) { @@ -723,60 +710,10 @@ void Spell::EffectDummy(SpellEffIndex effIndex) } } break; - case SPELLFAMILY_DEATHKNIGHT: - switch (m_spellInfo->Id) - { - case 46584: // Raise Dead - if (m_caster->GetTypeId() != TYPEID_PLAYER) - return; - - // Do we have talent Master of Ghouls? - if (m_caster->HasAura(52143)) - // summon as pet - bp = 52150; - else - // or guardian - bp = 46585; - - if (m_targets.HasDst()) - targets.SetDst(*m_targets.GetDstPos()); - else - { - targets.SetDst(*m_caster); - // Corpse not found - take reagents (only not triggered cast can take them) - triggered = false; - } - // Remove cooldown - summon spellls have category - m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); - spell_id = 48289; - break; - // Raise dead - take reagents and trigger summon spells - case 48289: - if (m_targets.HasDst()) - targets.SetDst(*m_targets.GetDstPos()); - spell_id = CalculateDamage(0, NULL); - break; - } + default: break; } - //spells triggered by dummy effect should not miss - if (spell_id) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id); - - if (!spellInfo) - { - TC_LOG_ERROR("spells", "EffectDummy of spell %u: triggering unknown spell id %i\n", m_spellInfo->Id, spell_id); - return; - } - - targets.SetUnitTarget(unitTarget); - Spell* spell = new Spell(m_caster, spellInfo, triggered ? TRIGGERED_FULL_MASK : TRIGGERED_NONE, m_originalCasterGUID, true); - if (bp) spell->SetSpellValue(SPELLVALUE_BASE_POINT0, bp); - spell->prepare(&targets); - } - // pet auras if (PetAura const* petSpell = sSpellMgr->GetPetAura(m_spellInfo->Id, effIndex)) { @@ -891,10 +828,10 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) { // remove all harmful spells on you... SpellInfo const* spell = iter->second->GetBase()->GetSpellInfo(); - if ((spell->DmgClass == SPELL_DAMAGE_CLASS_MAGIC // only affect magic spells - || ((spell->GetDispelMask()) & dispelMask)) + if (((spell->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && spell->GetSchoolMask() != SPELL_SCHOOL_MASK_NORMAL) // only affect magic spells + || (spell->GetDispelMask() & dispelMask)) && // ignore positive and passive auras - && !iter->second->IsPositive() && !iter->second->GetBase()->IsPassive()) + !iter->second->IsPositive() && !iter->second->GetBase()->IsPassive()) { m_caster->RemoveAura(iter); } @@ -910,7 +847,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(triggered_spell_id); if (!spellInfo) { - TC_LOG_DEBUG("spells", "Spell::EffectTriggerSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id); + TC_LOG_ERROR("spells", "Spell::EffectTriggerSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id); return; } @@ -965,7 +902,7 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex) SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(triggered_spell_id); if (!spellInfo) { - TC_LOG_DEBUG("spells", "Spell::EffectTriggerMissileSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id); + TC_LOG_ERROR("spells", "Spell::EffectTriggerMissileSpell spell %u tried to trigger unknown spell %u", m_spellInfo->Id, triggered_spell_id); return; } @@ -1154,7 +1091,7 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) TC_LOG_DEBUG("spells", "Spell::EffectTeleportUnits - teleport unit to %u %f %f %f %f\n", mapid, x, y, z, orientation); if (unitTarget->GetTypeId() == TYPEID_PLAYER) - unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL : 0); + unitTarget->ToPlayer()->TeleportTo(mapid, x, y, z, orientation, unitTarget == m_caster ? TELE_TO_SPELL | TELE_TO_NOT_LEAVE_COMBAT : 0); else if (mapid == unitTarget->GetMapId()) unitTarget->NearTeleportTo(x, y, z, orientation, unitTarget == m_caster); else @@ -1809,6 +1746,12 @@ void Spell::EffectEnergize(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + return; + + if (unitTarget->GetMaxPower(power) == 0) + return; + // Some level depends spells int level_multiplier = 0; int level_diff = 0; @@ -1854,9 +1797,6 @@ void Spell::EffectEnergize(SpellEffIndex effIndex) if (damage < 0) return; - if (unitTarget->GetMaxPower(power) == 0) - return; - m_caster->EnergizeBySpell(unitTarget, m_spellInfo->Id, damage, power); // Mad Alchemist's Potion @@ -1887,7 +1827,7 @@ void Spell::EffectEnergize(SpellEffIndex effIndex) sSpellMgr->GetSetOfSpellsInSpellGroup(SPELL_GROUP_ELIXIR_BATTLE, avalibleElixirs); for (std::set<uint32>::iterator itr = avalibleElixirs.begin(); itr != avalibleElixirs.end();) { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(*itr); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(*itr); if (spellInfo->SpellLevel < m_spellInfo->SpellLevel || spellInfo->SpellLevel > unitTarget->getLevel()) avalibleElixirs.erase(itr++); else if (sSpellMgr->IsSpellMemberOfSpellGroup(*itr, SPELL_GROUP_ELIXIR_SHATTRATH)) @@ -1921,6 +1861,9 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + return; + uint32 maxPower = unitTarget->GetMaxPower(power); if (maxPower == 0) return; @@ -2154,6 +2097,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->StoreItem(dest, pNewItem, true); return; @@ -2172,6 +2117,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->BankItem(dest, pNewItem, true); return; @@ -2194,6 +2141,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->EquipItem(dest, pNewItem, true); player->AutoUnequipOffhandIfNeed(); @@ -2350,7 +2299,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) pos = *destTarget; else // randomize position for multiple summons - m_caster->GetRandomPoint(*destTarget, radius, pos); + pos = m_caster->GetRandomPoint(*destTarget, radius); summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration); if (!summon) @@ -2654,8 +2603,16 @@ void Spell::EffectLearnSkill(SpellEffIndex effIndex) return; uint32 skillid = m_spellInfo->Effects[effIndex].MiscValue; + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skillid, unitTarget->getRace(), unitTarget->getClass()); + if (!rcEntry) + return; + + SkillTiersEntry const* tier = sSkillTiersStore.LookupEntry(rcEntry->SkillTier); + if (!tier) + return; + uint16 skillval = unitTarget->ToPlayer()->GetPureSkillValue(skillid); - unitTarget->ToPlayer()->SetSkill(skillid, m_spellInfo->Effects[effIndex].CalcValue(), skillval?skillval:1, damage*75); + unitTarget->ToPlayer()->SetSkill(skillid, m_spellInfo->Effects[effIndex].CalcValue(), std::max<uint16>(skillval, 1), tier->MaxSkill[damage - 1]); } void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/) @@ -3653,9 +3610,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) } return; } - case 45204: // Clone Me! - m_caster->CastSpell(unitTarget, damage, true); - break; case 55693: // Remove Collapsing Cave Aura if (!unitTarget) return; @@ -4104,26 +4058,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) } break; } - case SPELLFAMILY_DEATHKNIGHT: - { - // Pestilence - if (m_spellInfo->SpellFamilyFlags[1]&0x10000) - { - // Get diseases on target of spell - if (m_targets.GetUnitTarget() && // Glyph of Disease - cast on unit target too to refresh aura - (m_targets.GetUnitTarget() != unitTarget || m_caster->GetAura(63334))) - { - // And spread them on target - // Blood Plague - if (m_targets.GetUnitTarget()->GetAura(55078)) - m_caster->CastSpell(unitTarget, 55078, true); - // Frost Fever - if (m_targets.GetUnitTarget()->GetAura(55095)) - m_caster->CastSpell(unitTarget, 55095, true); - } - } - break; - } } // normal DB scripted effect @@ -4597,7 +4531,7 @@ void Spell::EffectResurrect(SpellEffIndex effIndex) Player* target = unitTarget->ToPlayer(); - if (target->isRessurectRequested()) // already have one active request + if (target->isResurrectRequested()) // already have one active request return; uint32 health = target->CountPctFromMaxHealth(damage); @@ -4654,9 +4588,8 @@ void Spell::EffectLeap(SpellEffIndex /*effIndex*/) if (!m_targets.HasDst()) return; - Position pos; - destTarget->GetPosition(&pos); - unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetDistance(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ() + 2.0f), 0.0f); + Position pos = destTarget->GetPosition(); + pos = unitTarget->GetFirstCollisionPosition(unitTarget->GetDistance(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()), 0.0f); unitTarget->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), unitTarget == m_caster); } @@ -4774,6 +4707,7 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/) m_caster->ToPlayer()->SendLoot(creature->GetGUID(), LOOT_SKINNING); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + creature->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel-10)*10 : targetLevel*5; @@ -4793,9 +4727,8 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) // Spell is not using explicit target - no generated path if (m_preGeneratedPath.GetPathType() == PATHFIND_BLANK) { - Position pos; - unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); - unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetObjectSize(), unitTarget->GetRelativeAngle(m_caster)); + //unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); + Position pos = unitTarget->GetFirstCollisionPosition(unitTarget->GetObjectSize(), unitTarget->GetRelativeAngle(m_caster)); m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ); } else @@ -4817,11 +4750,10 @@ void Spell::EffectChargeDest(SpellEffIndex /*effIndex*/) if (m_targets.HasDst()) { - Position pos; - destTarget->GetPosition(&pos); + Position pos = destTarget->GetPosition(); float angle = m_caster->GetRelativeAngle(pos.GetPositionX(), pos.GetPositionY()); float dist = m_caster->GetDistance(pos); - m_caster->GetFirstCollisionPosition(pos, dist, angle); + pos = m_caster->GetFirstCollisionPosition(dist, angle); m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ); } @@ -4922,7 +4854,7 @@ void Spell::EffectQuestClear(SpellEffIndex effIndex) } } - player->RemoveActiveQuest(quest_id); + player->RemoveActiveQuest(quest_id, false); player->RemoveRewardedQuest(quest_id); } @@ -5529,13 +5461,23 @@ void Spell::EffectQuestStart(SpellEffIndex effIndex) if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) return; - if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) + if (!unitTarget) return; Player* player = unitTarget->ToPlayer(); - if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(m_spellInfo->Effects[effIndex].MiscValue)) - if (player->CanTakeQuest(qInfo, false) && player->CanAddQuest(qInfo, false)) - player->AddQuestAndCheckCompletion(qInfo, NULL); + if (!player) + return; + + if (Quest const* quest = sObjectMgr->GetQuestTemplate(m_spellInfo->Effects[effIndex].MiscValue)) + { + if (!player->CanTakeQuest(quest, false)) + return; + + if (quest->IsAutoAccept() && player->CanAddQuest(quest, false)) + player->AddQuestAndCheckCompletion(quest, player); + + player->PlayerTalkClass->SendQuestGiverQuestDetails(quest, player->GetGUID(), true); + } } void Spell::EffectActivateRune(SpellEffIndex effIndex) @@ -5739,7 +5681,7 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* pos = *destTarget; else // randomize position for multiple summons - m_caster->GetRandomPoint(*destTarget, radius, pos); + pos = m_caster->GetRandomPoint(*destTarget, radius); TempSummon* summon = map->SummonCreature(entry, pos, properties, duration, caster, m_spellInfo->Id); if (!summon) @@ -5960,10 +5902,7 @@ void Spell::EffectBind(SpellEffIndex effIndex) if (m_targets.HasDst()) homeLoc.WorldRelocate(*destTarget); else - { - player->GetPosition(&homeLoc); - homeLoc.m_mapId = player->GetMapId(); - } + homeLoc = player->GetWorldLocation(); player->SetHomebind(homeLoc, areaId); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 21c36510a32..8034002a470 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -24,6 +24,7 @@ #include "Player.h" #include "Battleground.h" #include "Vehicle.h" +#include "Pet.h" uint32 GetTargetFlagMask(SpellTargetObjectTypes objType) { @@ -966,7 +967,7 @@ bool SpellInfo::IsAbilityLearnedWithProfession() const for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { SkillLineAbilityEntry const* pAbility = _spell_idx->second; - if (!pAbility || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL) + if (!pAbility || pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) continue; if (pAbility->req_skill_value > 0) @@ -1206,10 +1207,8 @@ bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) return true; - // these spells (Cyclone for example) can pierce all... - if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) - // ...but not these (Divine shield for example) - && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY))) + // these spells (Cyclone for example) can pierce all... // ...but not these (Divine shield, Ice block, Cyclone and Banish for example) + if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH))) return true; return false; @@ -1505,8 +1504,16 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta // creature/player specific target checks if (unitTarget) { - if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT && unitTarget->IsInCombat()) - return SPELL_FAILED_TARGET_AFFECTING_COMBAT; + if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT) + { + if (unitTarget->IsInCombat()) + return SPELL_FAILED_TARGET_AFFECTING_COMBAT; + // player with active pet counts as a player in combat + else if (Player const* player = unitTarget->ToPlayer()) + if (Pet* pet = player->GetPet()) + if (pet->GetVictim() && !pet->HasUnitState(UNIT_STATE_CONTROLLED)) + return SPELL_FAILED_TARGET_AFFECTING_COMBAT; + } // only spells with SPELL_ATTR3_ONLY_TARGET_GHOSTS can target ghosts if (((AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST)) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 8b31e749c62..77450dc859a 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -765,6 +765,15 @@ SpellGroupStackRule SpellMgr::CheckSpellGroupStackRules(SpellInfo const* spellIn return rule; } +SpellGroupStackRule SpellMgr::GetSpellGroupStackRule(SpellGroup group) const +{ + SpellGroupStackMap::const_iterator itr = mSpellGroupStack.find(group); + if (itr != mSpellGroupStack.end()) + return itr->second; + + return SPELL_GROUP_STACK_RULE_DEFAULT; +} + SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const { SpellProcEventMap::const_iterator itr = mSpellProcEventMap.find(spellId); @@ -773,7 +782,7 @@ SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const return NULL; } -bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const +bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const { // No extra req need uint32 procEvent_procEx = PROC_EX_NONE; @@ -784,43 +793,71 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr bool hasFamilyMask = false; - /* Check Periodic Auras + /** + + * @brief Check auras procced by periodics + + *Only damaging Dots can proc auras with PROC_FLAG_TAKEN_DAMAGE + + *Only Dots can proc if ONLY has PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC. + + *Hots can proc if ONLY has PROC_FLAG_DONE_PERIODIC and spellfamily != 0 - *Dots can trigger if spell has no PROC_FLAG_SUCCESSFUL_NEGATIVE_MAGIC_SPELL - nor PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL + *Only Dots can proc auras with PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG or PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG - *Only Hots can trigger if spell has PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL + *Only Hots can proc auras with PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS or PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS - *Only dots can trigger if spell has both positivity flags or PROC_FLAG_SUCCESSFUL_NEGATIVE_MAGIC_SPELL + *Only Dots can proc auras with PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG or PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG - *Aura has to have PROC_FLAG_TAKEN_POSITIVE_MAGIC_SPELL or spellfamily specified to trigger from Hot + *Only Hots can proc auras with PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS or PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS + + * @param procSpell the spell proccing the aura + * @param procFlags proc_flags of spellProc + * @param procExtra proc_EX of procSpell + * @param EventProcFlag proc_flags of aura to be procced + * @param spellProto SpellInfo of aura to be procced */ - if (procFlags & PROC_FLAG_DONE_PERIODIC) + /// Quick Check - If PROC_FLAG_TAKEN_DAMAGE is set for aura and procSpell dealt damage, proc no matter what kind of spell that deals the damage. + if (procFlags & PROC_FLAG_TAKEN_DAMAGE && EventProcFlag & PROC_FLAG_TAKEN_DAMAGE) + return true; + + if (procFlags & PROC_FLAG_DONE_PERIODIC && EventProcFlag & PROC_FLAG_DONE_PERIODIC) { - if (EventProcFlag & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG) + if (procExtra & PROC_EX_INTERNAL_HOT) { - if (!(procExtra & PROC_EX_INTERNAL_DOT)) + if (EventProcFlag == PROC_FLAG_DONE_PERIODIC) + { + /// no aura with only PROC_FLAG_DONE_PERIODIC and spellFamilyName == 0 can proc from a HOT. + if (!spellProto->SpellFamilyName) + return false; + } + /// Aura must have positive procflags for a HOT to proc + else if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS))) return false; } - else if (procExtra & PROC_EX_INTERNAL_HOT) - procExtra |= PROC_EX_INTERNAL_REQ_FAMILY; - else if (EventProcFlag & PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS) - return false; + /// Aura must have negative or neutral(PROC_FLAG_DONE_PERIODIC only) procflags for a DOT to proc + else if (EventProcFlag != PROC_FLAG_DONE_PERIODIC) + if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG))) + return false; } - if (procFlags & PROC_FLAG_TAKEN_PERIODIC) + if (procFlags & PROC_FLAG_TAKEN_PERIODIC && EventProcFlag & PROC_FLAG_TAKEN_PERIODIC) { - if (EventProcFlag & PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS) + if (procExtra & PROC_EX_INTERNAL_HOT) { - if (!(procExtra & PROC_EX_INTERNAL_HOT)) + /// No aura that only has PROC_FLAG_TAKEN_PERIODIC can proc from a HOT. + if (EventProcFlag == PROC_FLAG_TAKEN_PERIODIC) + return false; + /// Aura must have positive procflags for a HOT to proc + if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS))) return false; } - else if (procExtra & PROC_EX_INTERNAL_HOT) - procExtra |= PROC_EX_INTERNAL_REQ_FAMILY; - else if (EventProcFlag & PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS) - return false; + /// Aura must have negative or neutral(PROC_FLAG_TAKEN_PERIODIC only) procflags for a DOT to proc + else if (EventProcFlag != PROC_FLAG_TAKEN_PERIODIC) + if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG))) + return false; } // Trap casts are active by default if (procFlags & PROC_FLAG_DONE_TRAP_ACTIVATION) @@ -2345,7 +2382,7 @@ void SpellMgr::LoadPetLevelupSpellMap() if (skillLine->skillId != creatureFamily->skillLine[j]) continue; - if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) + if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; SpellInfo const* spell = GetSpellInfo(skillLine->spellId); @@ -2714,8 +2751,39 @@ void SpellMgr::UnloadSpellInfoImplicitTargetConditionLists() void SpellMgr::LoadSpellInfoCustomAttributes() { uint32 oldMSTime = getMSTime(); - + uint32 oldMSTime2 = oldMSTime; SpellInfo* spellInfo = NULL; + + QueryResult result = WorldDatabase.Query("SELECT entry, attributes FROM spell_custom_attr"); + + if (!result) + TC_LOG_INFO("server.loading", ">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty."); + else + { + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + + uint32 spellId = fields[0].GetUInt32(); + uint32 attributes = fields[1].GetUInt32(); + + spellInfo = _GetSpellInfo(spellId); + if (!spellInfo) + { + TC_LOG_ERROR("sql.sql", "Table `spell_custom_attr` has wrong spell (entry: %u), ignored.", spellId); + continue; + } + + // TODO: validate attributes + + spellInfo->AttributesCu |= attributes; + ++count; + } while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u spell custom attributes from DB in %u ms", count, GetMSTimeDiffToNow(oldMSTime2)); + } + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { spellInfo = mSpellInfoMap[i]; @@ -2826,171 +2894,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes() if (spellInfo->SpellVisual[0] == 3879) spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_BACK; - switch (spellInfo->Id) - { - case 1776: // Gouge - case 1777: - case 8629: - case 11285: - case 11286: - case 12540: - case 13579: - case 24698: - case 28456: - case 29425: - case 34940: - case 36862: - case 38764: - case 38863: - case 52743: // Head Smack - spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER; - break; - case 53: // Backstab - case 2589: - case 2590: - case 2591: - case 7159: - case 8627: - case 8721: - case 11279: - case 11280: - case 11281: - case 15582: - case 15657: - case 22416: - case 25300: - case 26863: - case 37685: - case 48656: - case 48657: - case 703: // Garrote - case 8631: - case 8632: - case 8633: - case 11289: - case 11290: - case 26839: - case 26884: - case 48675: - case 48676: - case 5221: // Shred - case 6800: - case 8992: - case 9829: - case 9830: - case 27001: - case 27002: - case 48571: - case 48572: - case 8676: // Ambush - case 8724: - case 8725: - case 11267: - case 11268: - case 11269: - case 27441: - case 48689: - case 48690: - case 48691: - case 6785: // Ravage - case 6787: - case 9866: - case 9867: - case 27005: - case 48578: - case 48579: - case 21987: // Lash of Pain - case 23959: // Test Stab R50 - case 24825: // Test Backstab - case 58563: // Assassinate Restless Lookout - spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET; - break; - case 26029: // Dark Glare - case 37433: // Spout - case 43140: // Flame Breath - case 43215: // Flame Breath - case 70461: // Coldflame Trap - case 72133: // Pain and Suffering - case 73788: // Pain and Suffering - case 73789: // Pain and Suffering - case 73790: // Pain and Suffering - spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_LINE; - break; - case 24340: // Meteor - case 26558: // Meteor - case 28884: // Meteor - case 36837: // Meteor - case 38903: // Meteor - case 41276: // Meteor - case 57467: // Meteor - case 26789: // Shard of the Fallen Star - case 31436: // Malevolent Cleave - case 35181: // Dive Bomb - case 40810: // Saber Lash - case 43267: // Saber Lash - case 43268: // Saber Lash - case 42384: // Brutal Swipe - case 45150: // Meteor Slash - case 64688: // Sonic Screech - case 72373: // Shared Suffering - case 71904: // Chaos Bane - case 70492: // Ooze Eruption - case 72505: // Ooze Eruption - case 72624: // Ooze Eruption - case 72625: // Ooze Eruption - // ONLY SPELLS WITH SPELLFAMILY_GENERIC and EFFECT_SCHOOL_DAMAGE - spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE; - break; - case 18500: // Wing Buffet - case 33086: // Wild Bite - case 49749: // Piercing Blow - case 52890: // Penetrating Strike - case 53454: // Impale - case 59446: // Impale - case 62383: // Shatter - case 64777: // Machine Gun - case 65239: // Machine Gun - case 65919: // Impale - case 67858: // Impale - case 67859: // Impale - case 67860: // Impale - case 69293: // Wing Buffet - case 74439: // Machine Gun - case 63278: // Mark of the Faceless (General Vezax) - case 62544: // Thrust (Argent Tournament) - case 64588: // Thrust (Argent Tournament) - case 66479: // Thrust (Argent Tournament) - case 68505: // Thrust (Argent Tournament) - case 62709: // Counterattack! (Argent Tournament) - case 62626: // Break-Shield (Argent Tournament, Player) - case 64590: // Break-Shield (Argent Tournament, Player) - case 64342: // Break-Shield (Argent Tournament, NPC) - case 64686: // Break-Shield (Argent Tournament, NPC) - case 65147: // Break-Shield (Argent Tournament, NPC) - case 68504: // Break-Shield (Argent Tournament, NPC) - case 62874: // Charge (Argent Tournament, Player) - case 68498: // Charge (Argent Tournament, Player) - case 64591: // Charge (Argent Tournament, Player) - case 63003: // Charge (Argent Tournament, NPC) - case 63010: // Charge (Argent Tournament, NPC) - case 68321: // Charge (Argent Tournament, NPC) - case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang) - case 72444: // Mark of the Fallen Champion (Deathbringer Saurfang) - case 72445: // Mark of the Fallen Champion (Deathbringer Saurfang) - case 72446: // Mark of the Fallen Champion (Deathbringer Saurfang) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; - break; - case 64422: // Sonic Screech (Auriaya) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE; - spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR; - break; - case 72293: // Mark of the Fallen Champion (Deathbringer Saurfang) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_NEGATIVE_EFF0; - break; - default: - break; - } - switch (spellInfo->SpellFamilyName) { case SPELLFAMILY_WARRIOR: @@ -3047,15 +2950,9 @@ void SpellMgr::LoadSpellInfoCorrections() case 53096: // Quetz'lun's Judgment spellInfo->MaxAffectedTargets = 1; break; - case 42730: - spellInfo->Effects[EFFECT_1].TriggerSpell = 42739; - break; case 42436: // Drink! (Brewfest) spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ANY); break; - case 59735: - spellInfo->Effects[EFFECT_1].TriggerSpell = 59736; - break; case 52611: // Summon Skeletons case 52612: // Summon Skeletons spellInfo->Effects[EFFECT_0].MiscValueB = 64; @@ -3319,6 +3216,9 @@ void SpellMgr::LoadSpellInfoCorrections() case 63675: // Improved Devouring Plague spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; break; + case 12721: // Deep Wounds shouldnt ignore resillience or damage taken auras because its damage is not based off a spell. + spellInfo->AttributesEx4 = 0; + break; case 8145: // Tremor Totem (instant pulse) case 6474: // Earthbind Totem (instant pulse) spellInfo->AttributesEx5 |= SPELL_ATTR5_START_PERIODIC_AT_APPLY; @@ -3487,6 +3387,21 @@ void SpellMgr::LoadSpellInfoCorrections() break; // ENDOF TRIAL OF THE CRUSADER SPELLS // + // HALLS OF REFLECTION SPELLS + // + case 72435: // Defiling Horror + case 72452: // Defiling Horror + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + break; + case 72830: // Achievement Check + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + break; + case 72900: // Start Halls of Reflection Quest AE + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd + break; + // ENDOF HALLS OF REFLECTION SPELLS + // // ICECROWN CITADEL SPELLS // // THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK @@ -3518,6 +3433,15 @@ void SpellMgr::LoadSpellInfoCorrections() case 71169: // Shadow's Fate spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; break; + case 72347: // Lock Players and Tap Chest + spellInfo->AttributesEx3 &= ~SPELL_ATTR3_NO_INITIAL_AGGRO; + break; + case 73843: // Award Reputation - Boss Kill + case 73844: // Award Reputation - Boss Kill + case 73845: // Award Reputation - Boss Kill + case 73846: // Award Reputation - Boss Kill + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS); // 50000yd + break; case 72378: // Blood Nova (Deathbringer Saurfang) case 73058: // Blood Nova (Deathbringer Saurfang) spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 01fe7708db2..757bd813613 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -23,14 +23,15 @@ #include <ace/Singleton.h> +#include "Define.h" #include "DBCStructure.h" #include "SharedDefines.h" -#include "UnorderedMap.h" #include "Util.h" #include <map> #include <set> #include <vector> +#include <unordered_map> class SpellInfo; class Player; @@ -287,7 +288,7 @@ struct SpellProcEventEntry uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_ }; -typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap; +typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap; struct SpellProcEntry { @@ -305,7 +306,7 @@ struct SpellProcEntry uint32 charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite }; -typedef UNORDERED_MAP<uint32, SpellProcEntry> SpellProcMap; +typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap; struct SpellEnchantProcEntry { @@ -314,7 +315,7 @@ struct SpellEnchantProcEntry uint32 procEx; }; -typedef UNORDERED_MAP<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap; +typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap; struct SpellBonusEntry { @@ -324,7 +325,7 @@ struct SpellBonusEntry float ap_dot_bonus; }; -typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap; +typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap; enum SpellGroup { @@ -348,14 +349,14 @@ typedef std::pair<SpellGroupSpellMap::const_iterator, SpellGroupSpellMap::const_ enum SpellGroupStackRule { - SPELL_GROUP_STACK_RULE_DEFAULT = 0, - SPELL_GROUP_STACK_RULE_EXCLUSIVE = 1, - SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER = 2, - SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT = 3 + SPELL_GROUP_STACK_RULE_DEFAULT, + SPELL_GROUP_STACK_RULE_EXCLUSIVE, + SPELL_GROUP_STACK_RULE_EXCLUSIVE_FROM_SAME_CASTER, + SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT, + SPELL_GROUP_STACK_RULE_EXCLUSIVE_HIGHEST, + SPELL_GROUP_STACK_RULE_MAX }; -#define SPELL_GROUP_STACK_RULE_MAX 4 - typedef std::map<SpellGroup, SpellGroupStackRule> SpellGroupStackMap; struct SpellThreatEntry @@ -445,7 +446,7 @@ enum EffectRadiusIndex class PetAura { private: - typedef UNORDERED_MAP<uint32, uint32> PetAuraMap; + typedef std::unordered_map<uint32, uint32> PetAuraMap; public: PetAura() : removeOnChangePet(false), damage(0) { } @@ -525,7 +526,7 @@ struct SpellChainNode uint8 rank; }; -typedef UNORDERED_MAP<uint32, SpellChainNode> SpellChainMap; +typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap; // spell_id req_spell typedef std::multimap<uint32, uint32> SpellRequiredMap; @@ -654,10 +655,11 @@ class SpellMgr // Spell Group Stack Rules table bool AddSameEffectStackRuleSpellGroups(SpellInfo const* spellInfo, int32 amount, std::map<SpellGroup, int32>& groups) const; SpellGroupStackRule CheckSpellGroupStackRules(SpellInfo const* spellInfo1, SpellInfo const* spellInfo2) const; + SpellGroupStackRule GetSpellGroupStackRule(SpellGroup groupid) const; // Spell proc event table SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const; - bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const; + bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const; // Spell proc table SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const; @@ -690,6 +692,14 @@ class SpellMgr // SpellInfo object management SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : NULL; } + // Use this only with 100% valid spellIds + SpellInfo const* EnsureSpellInfo(uint32 spellId) const + { + ASSERT(spellId < GetSpellInfoStoreSize()); + SpellInfo const* spellInfo = mSpellInfoMap[spellId]; + ASSERT(spellInfo); + return spellInfo; + } uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); } private: diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index c7eebb495c0..c0bcd477e5b 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -576,16 +576,28 @@ void SpellScript::PreventHitDefaultEffect(SpellEffIndex effIndex) m_hitPreventDefaultEffectMask |= 1 << effIndex; } -int32 SpellScript::GetEffectValue() +int32 SpellScript::GetEffectValue() const { if (!IsInEffectHook()) { - TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::PreventHitDefaultEffect was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId); + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::GetEffectValue was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId); return 0; } + return m_spell->damage; } +void SpellScript::SetEffectValue(int32 value) +{ + if (!IsInEffectHook()) + { + TC_LOG_ERROR("scripts", "Script: `%s` Spell: `%u`: function SpellScript::SetEffectValue was called, but function has no effect in current hook!", m_scriptName->c_str(), m_scriptSpellId); + return; + } + + m_spell->damage = value; +} + Item* SpellScript::GetCastItem() { return m_spell->m_CastItem; diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index dfa494e38e6..32b8781fb89 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -208,6 +208,7 @@ class SpellScript : public _SpellScript TargetHook(uint8 _effectIndex, uint16 _targetType, bool _area, bool _dest); bool CheckEffect(SpellInfo const* spellInfo, uint8 effIndex); std::string ToString(); + uint16 GetTarget() const { return targetType; } protected: uint16 targetType; bool area; @@ -248,7 +249,7 @@ class SpellScript : public _SpellScript class HitHandlerFunction : public SpellScript::HitHandler { public: HitHandlerFunction(SpellHitFnType _pHitHandlerScript) : SpellScript::HitHandler((SpellScript::SpellHitFnType)_pHitHandlerScript) { } }; \ class ObjectAreaTargetSelectHandlerFunction : public SpellScript::ObjectAreaTargetSelectHandler { public: ObjectAreaTargetSelectHandlerFunction(SpellObjectAreaTargetSelectFnType _pObjectAreaTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectAreaTargetSelectHandler((SpellScript::SpellObjectAreaTargetSelectFnType)_pObjectAreaTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ class ObjectTargetSelectHandlerFunction : public SpellScript::ObjectTargetSelectHandler { public: ObjectTargetSelectHandlerFunction(SpellObjectTargetSelectFnType _pObjectTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::ObjectTargetSelectHandler((SpellScript::SpellObjectTargetSelectFnType)_pObjectTargetSelectHandlerScript, _effIndex, _targetType) { } }; \ - class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } }; + class DestinationTargetSelectHandlerFunction : public SpellScript::DestinationTargetSelectHandler { public: DestinationTargetSelectHandlerFunction(SpellDestinationTargetSelectFnType _DestinationTargetSelectHandlerScript, uint8 _effIndex, uint16 _targetType) : SpellScript::DestinationTargetSelectHandler((SpellScript::SpellDestinationTargetSelectFnType)_DestinationTargetSelectHandlerScript, _effIndex, _targetType) { } } #define PrepareSpellScript(CLASSNAME) SPELLSCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) SPELLSCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) public: @@ -411,7 +412,8 @@ class SpellScript : public _SpellScript void PreventHitDefaultEffect(SpellEffIndex effIndex); // method avalible only in EffectHandler method - int32 GetEffectValue(); + int32 GetEffectValue() const; + void SetEffectValue(int32 value); // returns: cast item if present. Item* GetCastItem(); @@ -621,7 +623,7 @@ class AuraScript : public _SpellScript class EffectSplitFunction : public AuraScript::EffectSplitHandler { public: EffectSplitFunction(AuraEffectSplitFnType _pEffectHandlerScript, uint8 _effIndex) : AuraScript::EffectSplitHandler((AuraScript::AuraEffectSplitFnType)_pEffectHandlerScript, _effIndex) { } }; \ class CheckProcHandlerFunction : public AuraScript::CheckProcHandler { public: CheckProcHandlerFunction(AuraCheckProcFnType handlerScript) : AuraScript::CheckProcHandler((AuraScript::AuraCheckProcFnType)handlerScript) { } }; \ class AuraProcHandlerFunction : public AuraScript::AuraProcHandler { public: AuraProcHandlerFunction(AuraProcFnType handlerScript) : AuraScript::AuraProcHandler((AuraScript::AuraProcFnType)handlerScript) { } }; \ - class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } }; \ + class EffectProcHandlerFunction : public AuraScript::EffectProcHandler { public: EffectProcHandlerFunction(AuraEffectProcFnType effectHandlerScript, uint8 effIndex, uint16 effName) : AuraScript::EffectProcHandler((AuraScript::AuraEffectProcFnType)effectHandlerScript, effIndex, effName) { } } #define PrepareAuraScript(CLASSNAME) AURASCRIPT_FUNCTION_TYPE_DEFINES(CLASSNAME) AURASCRIPT_FUNCTION_CAST_DEFINES(CLASSNAME) diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 46cb7a46773..8bd7a5a5e71 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -24,23 +24,24 @@ #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "CreatureTextMgr.h" +#include "Group.h" class CreatureTextBuilder { public: - CreatureTextBuilder(WorldObject* obj, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) - : _source(obj), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) - { - } + CreatureTextBuilder(WorldObject const* obj, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { - std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); + std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale); } - WorldObject* _source; + private: + WorldObject const* _source; + uint8 _gender; ChatMsg _msgType; uint8 _textGroup; uint32 _textId; @@ -51,20 +52,20 @@ class CreatureTextBuilder class PlayerTextBuilder { public: - PlayerTextBuilder(WorldObject* obj, WorldObject* speaker, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) - : _source(obj), _talker(speaker), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) - { - } + PlayerTextBuilder(WorldObject const* obj, WorldObject const* speaker, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { - std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); + std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _talker, _target, text, 0, "", locale); } - WorldObject* _source; - WorldObject* _talker; + private: + WorldObject const* _source; + WorldObject const* _talker; + uint8 _gender; ChatMsg _msgType; uint8 _textGroup; uint32 _textId; @@ -84,7 +85,7 @@ void CreatureTextMgr::LoadCreatureTexts() if (!result) { - TC_LOG_INFO("server.loading", ">> Loaded 0 ceature texts. DB table `creature_texts` is empty."); + TC_LOG_INFO("server.loading", ">> Loaded 0 ceature texts. DB table `creature_text` is empty."); return; } @@ -97,54 +98,69 @@ void CreatureTextMgr::LoadCreatureTexts() Field* fields = result->Fetch(); CreatureTextEntry temp; - temp.entry = fields[0].GetUInt32(); - temp.group = fields[1].GetUInt8(); - temp.id = fields[2].GetUInt8(); - temp.text = fields[3].GetString(); - temp.type = ChatMsg(fields[4].GetUInt8()); - temp.lang = Language(fields[5].GetUInt8()); - temp.probability = fields[6].GetFloat(); - temp.emote = Emote(fields[7].GetUInt32()); - temp.duration = fields[8].GetUInt32(); - temp.sound = fields[9].GetUInt32(); + temp.entry = fields[0].GetUInt32(); + temp.group = fields[1].GetUInt8(); + temp.id = fields[2].GetUInt8(); + temp.text = fields[3].GetString(); + temp.type = ChatMsg(fields[4].GetUInt8()); + temp.lang = Language(fields[5].GetUInt8()); + temp.probability = fields[6].GetFloat(); + temp.emote = Emote(fields[7].GetUInt32()); + temp.duration = fields[8].GetUInt32(); + temp.sound = fields[9].GetUInt32(); + temp.BroadcastTextId = fields[10].GetUInt32(); if (temp.sound) { - if (!sSoundEntriesStore.LookupEntry(temp.sound)){ - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Sound %u but sound does not exist.", temp.entry, temp.group, temp.sound); + if (!sSoundEntriesStore.LookupEntry(temp.sound)) + { + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Sound %u but sound does not exist.", temp.entry, temp.group, temp.sound); temp.sound = 0; } } + if (!GetLanguageDescByID(temp.lang)) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` using Language %u but Language does not exist.", temp.entry, temp.group, uint32(temp.lang)); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` using Language %u but Language does not exist.", temp.entry, temp.group, uint32(temp.lang)); temp.lang = LANG_UNIVERSAL; } + if (temp.type >= MAX_CHAT_MSG_TYPE) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Type %u but this Chat Type does not exist.", temp.entry, temp.group, uint32(temp.type)); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Type %u but this Chat Type does not exist.", temp.entry, temp.group, uint32(temp.type)); temp.type = CHAT_MSG_SAY; } + if (temp.emote) { if (!sEmotesStore.LookupEntry(temp.emote)) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_texts` has Emote %u but emote does not exist.", temp.entry, temp.group, uint32(temp.emote)); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u in table `creature_text` has Emote %u but emote does not exist.", temp.entry, temp.group, uint32(temp.emote)); temp.emote = EMOTE_ONESHOT_NONE; } } - //entry not yet added, add empty TextHolder (list of groups) + + if (temp.BroadcastTextId) + { + if (!sObjectMgr->GetBroadcastText(temp.BroadcastTextId)) + { + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Entry %u, Group %u, Id %u in table `creature_text` has non-existing or incompatible BroadcastTextId %u.", temp.entry, temp.group, temp.id, temp.BroadcastTextId); + temp.BroadcastTextId = 0; + } + } + + // entry not yet added, add empty TextHolder (list of groups) if (mTextMap.find(temp.entry) == mTextMap.end()) ++creatureCount; - //add the text into our entry's group + // add the text into our entry's group mTextMap[temp.entry][temp.group].push_back(temp); ++textCount; - } while (result->NextRow()); + } + while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %u creature texts for %u creatures in %u ms", textCount, creatureCount, GetMSTimeDiffToNow(oldMSTime)); - } void CreatureTextMgr::LoadCreatureTextLocales() @@ -185,7 +201,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject CreatureTextMap::const_iterator sList = mTextMap.find(source->GetEntry()); if (sList == mTextMap.end()) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature(%s) Entry %u in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry()); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow()); return 0; } @@ -193,7 +209,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject CreatureTextHolder::const_iterator itr = textHolder.find(textGroup); if (itr == textHolder.end()) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature(%s) GuidLow %u Entry %u. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetGUIDLow(), source->GetEntry()); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow()); return 0; } @@ -270,14 +286,15 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject if (srcPlr) { - PlayerTextBuilder builder(source, finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + PlayerTextBuilder builder(source, finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget); SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } else { - CreatureTextBuilder builder(finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + CreatureTextBuilder builder(finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget); SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } + if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f)) SetRepeatId(source, textGroup, iter->id); @@ -315,14 +332,12 @@ void CreatureTextMgr::SendSound(Creature* source, uint32 sound, ChatMsg msgType, void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const { - float dist = GetRangeForChatType(msgType); - switch (msgType) { case CHAT_MSG_MONSTER_WHISPER: case CHAT_MSG_RAID_BOSS_WHISPER: { - if (range == TEXT_RANGE_NORMAL)//ignores team and gmOnly + if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly { if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER) return; @@ -332,6 +347,18 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, } break; } + case CHAT_MSG_MONSTER_PARTY: + if (!whisperTarget) + return; + + if (Player const* player = whisperTarget->ToPlayer()) + { + if (Group* group = const_cast<Group*>(player->GetGroup())) + for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) + if (Player* member = itr->GetSource()) + member->GetSession()->SendPacket(data); + } + return; default: break; } @@ -378,6 +405,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data, break; } + float dist = GetRangeForChatType(msgType); source->SendMessageToSetInRange(data, dist, true); } @@ -439,7 +467,7 @@ bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup) return true; } -std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const +std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const { CreatureTextMap::const_iterator mapitr = mTextMap.find(entry); if (mapitr == mTextMap.end()) @@ -457,18 +485,23 @@ std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGrou if (groupItr == holderItr->second.end()) return ""; - std::string baseText = groupItr->text; - if (locale == DEFAULT_LOCALE) - return baseText; - if (locale > MAX_LOCALES) - return baseText; + locale = DEFAULT_LOCALE; - LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); - if (locItr == mLocaleTextMap.end()) - return baseText; + std::string baseText = ""; + BroadcastText const* bct = sObjectMgr->GetBroadcastText(groupItr->BroadcastTextId); - ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); + if (bct) + baseText = bct->GetText(locale, gender); + else + baseText = groupItr->text; + + if (locale != DEFAULT_LOCALE && !bct) + { + LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); + if (locItr != mLocaleTextMap.end()) + ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); + } return baseText; } diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 12236844828..ab5b9f59032 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -36,6 +36,7 @@ struct CreatureTextEntry Emote emote; uint32 duration; uint32 sound; + uint32 BroadcastTextId; }; enum CreatureTextRange @@ -69,15 +70,15 @@ struct CreatureTextId }; typedef std::vector<CreatureTextEntry> CreatureTextGroup; //texts in a group -typedef UNORDERED_MAP<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid -typedef UNORDERED_MAP<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry +typedef std::unordered_map<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid +typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap; //used for handling non-repeatable random texts typedef std::vector<uint8> CreatureTextRepeatIds; -typedef UNORDERED_MAP<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; -typedef UNORDERED_MAP<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based +typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; +typedef std::unordered_map<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based class CreatureTextMgr { @@ -96,7 +97,7 @@ class CreatureTextMgr //if sent, returns the 'duration' of the text else 0 if error uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = NULL, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL); bool TextExist(uint32 sourceEntry, uint8 textGroup); - std::string GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const; + std::string GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const; template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = NULL, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const; @@ -186,7 +187,7 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder case CHAT_MSG_MONSTER_WHISPER: case CHAT_MSG_RAID_BOSS_WHISPER: { - if (range == TEXT_RANGE_NORMAL) //ignores team and gmOnly + if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly { if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER) return; diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 43c9ba80e24..71d51153b4c 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -36,7 +36,9 @@ GmTicket::GmTicket() : _id(0), _playerGuid(0), _posX(0), _posY(0), _posZ(0), _ma _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needResponse(false), _needMoreHelp(false) { } -GmTicket::GmTicket(Player* player) : _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needResponse(false), _needMoreHelp(false) +GmTicket::GmTicket(Player* player) : _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)), + _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), + _needResponse(false), _needMoreHelp(false) { _id = sTicketMgr->GenerateTicketId(); _playerName = player->GetName(); @@ -231,7 +233,7 @@ void GmTicket::SetChatLog(std::list<uint32> time, std::string const& log) std::stringstream ss(log); std::stringstream newss; std::string line; - while (std::getline(ss, line)) + while (std::getline(ss, line) && !time.empty()) { newss << secsToTimeString(time.front()) << ": " << line << "\n"; time.pop_front(); diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 55d70514594..6cec8ba0220 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -41,7 +41,6 @@ static DumpTable dumpTables[DUMP_TABLE_COUNT] = { "character_aura", DTT_CHAR_TABLE }, { "character_declinedname", DTT_CHAR_TABLE }, { "character_equipmentsets", DTT_EQSET_TABLE}, - { "character_gifts", DTT_ITEM_GIFT }, { "character_glyphs", DTT_CHAR_TABLE }, { "character_homebind", DTT_CHAR_TABLE }, { "character_inventory", DTT_INVENTORY }, @@ -54,12 +53,13 @@ static DumpTable dumpTables[DUMP_TABLE_COUNT] = { "character_spell", DTT_CHAR_TABLE }, { "character_spell_cooldown", DTT_CHAR_TABLE }, { "character_talent", DTT_CHAR_TABLE }, - { "item_instance", DTT_ITEM }, { "mail", DTT_MAIL }, - { "mail_items", DTT_MAIL_ITEM }, - { "pet_aura", DTT_PET_TABLE }, - { "pet_spell", DTT_PET_TABLE }, - { "pet_spell_cooldown", DTT_PET_TABLE }, + { "mail_items", DTT_MAIL_ITEM }, // must be after mail + { "pet_aura", DTT_PET_TABLE }, // must be after character_pet + { "pet_spell", DTT_PET_TABLE }, // must be after character_pet + { "pet_spell_cooldown", DTT_PET_TABLE }, // must be after character_pet + { "item_instance", DTT_ITEM }, // must be after character_inventory and mail_items + { "character_gifts", DTT_ITEM_GIFT }, // must be after item_instance }; // Low level functions diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 4611a4da884..0810295c0cc 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -223,6 +223,9 @@ std::string Warden::Penalty(WardenCheck* check /*= NULL*/) void WorldSession::HandleWardenDataOpcode(WorldPacket& recvData) { + if (!_warden || recvData.empty()) + return; + _warden->DecryptData(recvData.contents(), recvData.size()); uint8 opcode; recvData >> opcode; diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index cb332df9a41..8d39f553910 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -28,7 +28,7 @@ #include "ObjectMgr.h" #include "Util.h" #include "ScriptMgr.h" -#include "Opcodes.h" +#include "WorldSession.h" /// Create the Weather object Weather::Weather(uint32 zone, WeatherData const* weatherChances) diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 886a910becc..5cf5cde75fd 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -27,15 +27,15 @@ #include "AutoPtr.h" #include "Player.h" #include "WorldPacket.h" -#include "Opcodes.h" +#include "WorldSession.h" namespace WeatherMgr { namespace { - typedef UNORDERED_MAP<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap; - typedef UNORDERED_MAP<uint32, WeatherData> WeatherZoneMap; + typedef std::unordered_map<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap; + typedef std::unordered_map<uint32, WeatherData> WeatherZoneMap; WeatherMap m_weathers; WeatherZoneMap mWeatherZoneMap; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 3fde3ad4a11..78470d4e790 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1044,6 +1044,8 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetBoolDefault("OffhandCheckAtSpellUnlearn", true); + m_int_configs[CONFIG_CREATURE_PICKPOCKET_REFILL] = sConfigMgr->GetIntDefault("Creature.PickPocketRefillDelay", 10 * MINUTE); + if (int32 clientCacheId = sConfigMgr->GetIntDefault("ClientCacheVersion", 0)) { // overwrite DB/old value @@ -1177,17 +1179,6 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_NUMTHREADS] = sConfigMgr->GetIntDefault("MapUpdate.Threads", 1); m_int_configs[CONFIG_MAX_RESULTS_LOOKUP_COMMANDS] = sConfigMgr->GetIntDefault("Command.LookupMaxResults", 0); - // chat logging - m_bool_configs[CONFIG_CHATLOG_CHANNEL] = sConfigMgr->GetBoolDefault("ChatLogs.Channel", false); - m_bool_configs[CONFIG_CHATLOG_WHISPER] = sConfigMgr->GetBoolDefault("ChatLogs.Whisper", false); - m_bool_configs[CONFIG_CHATLOG_SYSCHAN] = sConfigMgr->GetBoolDefault("ChatLogs.SysChan", false); - m_bool_configs[CONFIG_CHATLOG_PARTY] = sConfigMgr->GetBoolDefault("ChatLogs.Party", false); - m_bool_configs[CONFIG_CHATLOG_RAID] = sConfigMgr->GetBoolDefault("ChatLogs.Raid", false); - m_bool_configs[CONFIG_CHATLOG_GUILD] = sConfigMgr->GetBoolDefault("ChatLogs.Guild", false); - m_bool_configs[CONFIG_CHATLOG_PUBLIC] = sConfigMgr->GetBoolDefault("ChatLogs.Public", false); - m_bool_configs[CONFIG_CHATLOG_ADDON] = sConfigMgr->GetBoolDefault("ChatLogs.Addon", false); - m_bool_configs[CONFIG_CHATLOG_BGROUND] = sConfigMgr->GetBoolDefault("ChatLogs.Battleground", false); - // Warden m_bool_configs[CONFIG_WARDEN_ENABLED] = sConfigMgr->GetBoolDefault("Warden.Enabled", false); m_int_configs[CONFIG_WARDEN_NUM_MEM_CHECKS] = sConfigMgr->GetIntDefault("Warden.NumMemChecks", 3); @@ -1262,6 +1253,12 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_PACKET_SPOOF_BANDURATION] = sConfigMgr->GetIntDefault("PacketSpoof.BanDuration", 86400); + m_int_configs[CONFIG_BIRTHDAY_TIME] = sConfigMgr->GetIntDefault("BirthdayTime", 1222964635); + + m_bool_configs[CONFIG_IP_BASED_ACTION_LOGGING] = sConfigMgr->GetBoolDefault("Allow.IP.Based.Action.Logging", false); + + m_bool_configs[CONFIG_IP_BASED_LOGIN_LOGGING] = sConfigMgr->GetBoolDefault("Wrong.Password.Login.Logging", false); + // call ScriptMgr if we're reloading the configuration if (reload) sScriptMgr->OnConfigLoad(reload); @@ -1361,6 +1358,10 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading instances..."); sInstanceSaveMgr->LoadInstances(); + TC_LOG_INFO("server.loading", "Loading Broadcast texts..."); + sObjectMgr->LoadBroadcastTexts(); + sObjectMgr->LoadBroadcastTextLocales(); + TC_LOG_INFO("server.loading", "Loading Localization strings..."); uint32 oldMSTime = getMSTime(); sObjectMgr->LoadCreatureLocales(); @@ -1631,7 +1632,7 @@ void World::SetInitialWorldSettings() sObjectMgr->LoadGameObjectForQuests(); TC_LOG_INFO("server.loading", "Loading BattleMasters..."); - sBattlegroundMgr->LoadBattleMastersEntry(); + sBattlegroundMgr->LoadBattleMastersEntry(); // must be after load CreatureTemplate TC_LOG_INFO("server.loading", "Loading GameTeleports..."); sObjectMgr->LoadGameTele(); @@ -2865,7 +2866,7 @@ void World::ResetDailyQuests() { TC_LOG_INFO("misc", "Daily quests reset for all characters."); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_DAILY); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_DAILY); CharacterDatabase.Execute(stmt); for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) @@ -2899,7 +2900,7 @@ void World::ResetWeeklyQuests() { TC_LOG_INFO("misc", "Weekly quests reset for all characters."); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_WEEKLY); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_WEEKLY); CharacterDatabase.Execute(stmt); for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) @@ -2917,7 +2918,7 @@ void World::ResetMonthlyQuests() { TC_LOG_INFO("misc", "Monthly quests reset for all characters."); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_MONTHLY); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_MONTHLY); CharacterDatabase.Execute(stmt); for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) @@ -2959,7 +2960,9 @@ void World::ResetMonthlyQuests() void World::ResetEventSeasonalQuests(uint16 event_id) { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_STATUS_SEASONAL); + TC_LOG_INFO("misc", "Seasonal quests reset for all characters."); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_SEASONAL_BY_EVENT); stmt->setUInt16(0, event_id); CharacterDatabase.Execute(stmt); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index a320933e181..61acdc37b07 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -139,15 +139,6 @@ enum WorldBoolConfigs CONFIG_SHOW_KICK_IN_WORLD, CONFIG_SHOW_MUTE_IN_WORLD, CONFIG_SHOW_BAN_IN_WORLD, - CONFIG_CHATLOG_CHANNEL, - CONFIG_CHATLOG_WHISPER, - CONFIG_CHATLOG_SYSCHAN, - CONFIG_CHATLOG_PARTY, - CONFIG_CHATLOG_RAID, - CONFIG_CHATLOG_GUILD, - CONFIG_CHATLOG_PUBLIC, - CONFIG_CHATLOG_ADDON, - CONFIG_CHATLOG_BGROUND, CONFIG_AUTOBROADCAST, CONFIG_ALLOW_TICKETS, CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, @@ -163,6 +154,8 @@ enum WorldBoolConfigs CONFIG_EVENT_ANNOUNCE, CONFIG_STATS_LIMITS_ENABLE, CONFIG_INSTANCES_RESET_ANNOUNCE, + CONFIG_IP_BASED_ACTION_LOGGING, + CONFIG_IP_BASED_LOGIN_LOGGING, BOOL_CONFIG_VALUE_COUNT }; @@ -339,6 +332,8 @@ enum WorldIntConfigs CONFIG_BG_REWARD_WINNER_ARENA_LAST, CONFIG_BG_REWARD_LOSER_HONOR_FIRST, CONFIG_BG_REWARD_LOSER_HONOR_LAST, + CONFIG_BIRTHDAY_TIME, + CONFIG_CREATURE_PICKPOCKET_REFILL, INT_CONFIG_VALUE_COUNT }; @@ -499,17 +494,18 @@ struct CliCommandHolder CommandFinished* m_commandFinished; CliCommandHolder(void* callbackArg, const char *command, Print* zprint, CommandFinished* commandFinished) - : m_callbackArg(callbackArg), m_print(zprint), m_commandFinished(commandFinished) + : m_callbackArg(callbackArg), m_command(strdup(command)), m_print(zprint), m_commandFinished(commandFinished) { - size_t len = strlen(command)+1; - m_command = new char[len]; - memcpy(m_command, command, len); } - ~CliCommandHolder() { delete[] m_command; } + ~CliCommandHolder() { free(m_command); } + +private: + CliCommandHolder(CliCommandHolder const& right) = delete; + CliCommandHolder& operator=(CliCommandHolder const& right) = delete; }; -typedef UNORDERED_MAP<uint32, WorldSession*> SessionMap; +typedef std::unordered_map<uint32, WorldSession*> SessionMap; struct CharacterNameData { @@ -781,7 +777,7 @@ class World uint32 m_currentTime; SessionMap m_sessions; - typedef UNORDERED_MAP<uint32, time_t> DisconnectMap; + typedef std::unordered_map<uint32, time_t> DisconnectMap; DisconnectMap m_disconnects; uint32 m_maxActiveSessionCount; uint32 m_maxQueuedSessionCount; diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index c1a9435de52..938520209a0 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -47,7 +47,9 @@ message("") include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/SFMT ${CMAKE_SOURCE_DIR}/dep/zlib diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index ec3d34332b0..1121e4d0a2f 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -33,7 +33,7 @@ class account_commandscript : public CommandScript public: account_commandscript() : CommandScript("account_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand accountSetSecTable[] = { @@ -377,6 +377,7 @@ public: if (!AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(oldEmail))) { handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL); + sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided email [%s] is not equal to registration email [%s].", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), @@ -388,6 +389,7 @@ public: if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(password))) { handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD); + sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), @@ -398,6 +400,7 @@ public: if (strcmp(email, oldEmail) == 0) { handler->SendSysMessage(LANG_OLD_EMAIL_IS_NEW_EMAIL); + sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); return false; } @@ -405,6 +408,7 @@ public: if (strcmp(email, emailConfirmation) != 0) { handler->SendSysMessage(LANG_NEW_EMAILS_NOT_MATCH); + sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), @@ -418,6 +422,7 @@ public: { case AOR_OK: handler->SendSysMessage(LANG_COMMAND_EMAIL); + sScriptMgr->OnEmailChange(handler->GetSession()->GetAccountId()); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Email from [%s] to [%s].", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), @@ -425,6 +430,7 @@ public: break; case AOR_EMAIL_TOO_LONG: handler->SendSysMessage(LANG_EMAIL_TOO_LONG); + sScriptMgr->OnFailedEmailChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); return false; default: @@ -469,6 +475,7 @@ public: if (!AccountMgr::CheckPassword(handler->GetSession()->GetAccountId(), std::string(oldPassword))) { handler->SendSysMessage(LANG_COMMAND_WRONGOLDPASSWORD); + sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the provided old password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), @@ -481,6 +488,7 @@ public: && !AccountMgr::CheckEmail(handler->GetSession()->GetAccountId(), std::string(emailConfirmation))) // ... and returns false if the comparison fails. { handler->SendSysMessage(LANG_COMMAND_WRONGEMAIL); + sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the entered email [%s] is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), @@ -493,6 +501,7 @@ public: if (strcmp(newPassword, passwordConfirmation) != 0) { handler->SendSysMessage(LANG_NEW_PASSWORDS_NOT_MATCH); + sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); return false; } @@ -503,12 +512,14 @@ public: { case AOR_OK: handler->SendSysMessage(LANG_COMMAND_PASSWORD); + sScriptMgr->OnPasswordChange(handler->GetSession()->GetAccountId()); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Password.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow()); break; case AOR_PASS_TOO_LONG: handler->SendSysMessage(LANG_PASSWORD_TOO_LONG); + sScriptMgr->OnFailedPasswordChange(handler->GetSession()->GetAccountId()); handler->SetSentErrorMessage(true); return false; default: diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index 041b6c86881..edcdb553be0 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -33,7 +33,7 @@ class achievement_commandscript : public CommandScript public: achievement_commandscript() : CommandScript("achievement_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand achievementCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index e3e726eb348..5658701bd54 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -34,7 +34,7 @@ class arena_commandscript : public CommandScript public: arena_commandscript() : CommandScript("arena_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand arenaCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index aa90c21c995..afaf5f651bc 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -35,7 +35,7 @@ class ban_commandscript : public CommandScript public: ban_commandscript() : CommandScript("ban_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand unbanCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp index 2bc962f0768..b74bb733822 100644 --- a/src/server/scripts/Commands/cs_bf.cpp +++ b/src/server/scripts/Commands/cs_bf.cpp @@ -31,7 +31,7 @@ class bf_commandscript : public CommandScript public: bf_commandscript() : CommandScript("bf_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand battlefieldcommandTable[] = { diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index 545ae405c20..9bc79c3f8f9 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -33,7 +33,7 @@ class cast_commandscript : public CommandScript public: cast_commandscript() : CommandScript("cast_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand castCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index f9ef827e8c3..7722c330e5f 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -35,7 +35,7 @@ class character_commandscript : public CommandScript public: character_commandscript() : CommandScript("character_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand pdumpCommandTable[] = { @@ -217,7 +217,7 @@ public: return; } - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UDP_RESTORE_DELETE_INFO); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_RESTORE_DELETE_INFO); stmt->setString(0, delInfo.name); stmt->setUInt32(1, delInfo.accountId); stmt->setUInt32(2, delInfo.lowGuid); @@ -277,7 +277,7 @@ public: if (titleInfo && target->HasTitle(titleInfo)) { - std::string name = titleInfo->name[loc]; + std::string name = target->getGender() == GENDER_MALE ? titleInfo->nameMale[loc] : titleInfo->nameFemale[loc]; if (name.empty()) continue; diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index bf51141ba4f..b61cf2c54fe 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -33,7 +33,7 @@ class cheat_commandscript : public CommandScript public: cheat_commandscript() : CommandScript("cheat_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand cheatCommandTable[] = diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 597823abc13..f18f9b4499c 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -41,7 +41,7 @@ class debug_commandscript : public CommandScript public: debug_commandscript() : CommandScript("debug_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand debugPlayCommandTable[] = { @@ -927,7 +927,7 @@ public: Map* map = handler->GetSession()->GetPlayer()->GetMap(); - if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, id, handler->GetSession()->GetPlayer()->GetTeam(), x, y, z, o)) + if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id)) { delete v; return false; @@ -1382,8 +1382,7 @@ public: } else { - Position pos; - transport->GetPosition(&pos); + Position pos = transport->GetPosition(); handler->PSendSysMessage("Transport %s is %s", transport->GetName().c_str(), transport->GetGoState() == GO_STATE_READY ? "stopped" : "moving"); handler->PSendSysMessage("Transport position: %s", pos.ToString().c_str()); return true; diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp index 5a9c799a4a8..9dcecba05ef 100644 --- a/src/server/scripts/Commands/cs_deserter.cpp +++ b/src/server/scripts/Commands/cs_deserter.cpp @@ -43,7 +43,7 @@ public: * @brief Returns the command structure for the system. */ - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand deserterInstanceCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp index 5d7296ca495..8cf60e4bb28 100644 --- a/src/server/scripts/Commands/cs_disable.cpp +++ b/src/server/scripts/Commands/cs_disable.cpp @@ -37,7 +37,7 @@ class disable_commandscript : public CommandScript public: disable_commandscript() : CommandScript("disable_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand removeDisableCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp index 849a8b5634e..b89c5686511 100644 --- a/src/server/scripts/Commands/cs_event.cpp +++ b/src/server/scripts/Commands/cs_event.cpp @@ -33,7 +33,7 @@ class event_commandscript : public CommandScript public: event_commandscript() : CommandScript("event_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand eventCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index 498ee68ba11..a2c0861c113 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -36,7 +36,7 @@ class gm_commandscript : public CommandScript public: gm_commandscript() : CommandScript("gm_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand gmCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index fecb4edf968..44ebb1ea4e0 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -29,13 +29,14 @@ EndScriptData */ #include "Chat.h" #include "Language.h" #include "Player.h" +#include "Transport.h" class go_commandscript : public CommandScript { public: go_commandscript() : CommandScript("go_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand goCommandTable[] = { @@ -132,21 +133,24 @@ public: float x = fields[0].GetFloat(); float y = fields[1].GetFloat(); float z = fields[2].GetFloat(); - float ort = fields[3].GetFloat(); - int mapId = fields[4].GetUInt16(); + float o = fields[3].GetFloat(); + uint32 mapId = fields[4].GetUInt16(); uint32 guid = fields[5].GetUInt32(); uint32 id = fields[6].GetUInt32(); - // if creature is in same map with caster go at its current location - if (Creature* creature = sObjectAccessor->GetCreature(*player, MAKE_NEW_GUID(guid, id, HIGHGUID_UNIT))) + Transport* transport = NULL; + + if (Creature* creature = ObjectAccessor::GetObjectInWorld(MAKE_NEW_GUID(guid, id, HIGHGUID_UNIT), (Creature*)NULL)) { x = creature->GetPositionX(); y = creature->GetPositionY(); z = creature->GetPositionZ(); - ort = creature->GetOrientation(); + o = creature->GetOrientation(); + mapId = creature->GetMapId(); + transport = creature->GetTransport(); } - if (!MapManager::IsValidMapCoord(mapId, x, y, z, ort)) + if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId)) { handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId); handler->SetSentErrorMessage(true); @@ -163,7 +167,11 @@ public: else player->SaveRecallPosition(); - player->TeleportTo(mapId, x, y, z, ort); + if (player->TeleportTo(mapId, x, y, z, o)) + { + if (transport) + transport->AddPassenger(player); + } return true; } @@ -274,8 +282,8 @@ public: if (!guid) return false; - float x, y, z, ort; - int mapId; + float x, y, z, o; + uint32 mapId; // by DB guid if (GameObjectData const* goData = sObjectMgr->GetGOData(guid)) @@ -283,7 +291,7 @@ public: x = goData->posX; y = goData->posY; z = goData->posZ; - ort = goData->orientation; + o = goData->orientation; mapId = goData->mapid; } else @@ -293,7 +301,7 @@ public: return false; } - if (!MapManager::IsValidMapCoord(mapId, x, y, z, ort)) + if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId)) { handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId); handler->SetSentErrorMessage(true); @@ -310,7 +318,7 @@ public: else player->SaveRecallPosition(); - player->TeleportTo(mapId, x, y, z, ort); + player->TeleportTo(mapId, x, y, z, o); return true; } @@ -441,6 +449,7 @@ public: // update to parent zone if exist (client map show only zones without parents) AreaTableEntry const* zoneEntry = areaEntry->zone ? GetAreaEntryByAreaID(areaEntry->zone) : areaEntry; + ASSERT(zoneEntry); Map const* map = sMapMgr->CreateBaseMap(zoneEntry->mapid); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 423a47eb3c8..ce0bee0d8c5 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -166,7 +166,11 @@ public: // fill the gameobject data and save to the db object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn()); + // delete the old object and do a clean load from DB with a fresh new GameObject instance. + // this is required to avoid weird behavior and memory leaks + delete object; + object = new GameObject(); // this will generate a new guid if the object is in an instance if (!object->LoadGameObjectFromDB(guidLow, map)) { @@ -209,6 +213,13 @@ public: uint32 objectId = atoi(id); + if (!sObjectMgr->GetGameObjectTemplate(objectId)) + { + handler->PSendSysMessage(LANG_GAMEOBJECT_NOT_EXIST, objectId); + handler->SetSentErrorMessage(true); + return false; + } + player->SummonGameObject(objectId, x, y, z, ang, 0, 0, rot2, rot3, spawntm); return true; diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index c236af40e45..477eb3649b7 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -28,7 +28,7 @@ class group_commandscript : public CommandScript public: group_commandscript() : CommandScript("group_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand groupCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp index 40663ca5a10..6b76f753403 100644 --- a/src/server/scripts/Commands/cs_honor.cpp +++ b/src/server/scripts/Commands/cs_honor.cpp @@ -33,7 +33,7 @@ class honor_commandscript : public CommandScript public: honor_commandscript() : CommandScript("honor_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand honorAddCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index 93cabaeeca7..b8d69c250bb 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -35,7 +35,7 @@ class instance_commandscript : public CommandScript public: instance_commandscript() : CommandScript("instance_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand instanceCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 113f6da2e31..03d10149ae5 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -36,7 +36,7 @@ class learn_commandscript : public CommandScript public: learn_commandscript() : CommandScript("learn_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand learnAllMyCommandTable[] = { @@ -332,7 +332,8 @@ public: if (!handler->extractPlayerTarget((char*)args, &target)) return false; - target->learnDefaultSpells(); + target->LearnDefaultSkills(); + target->LearnCustomSpells(); target->learnQuestRewardedSpells(); handler->PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST, handler->GetNameLink(target).c_str()); diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 2c6534be8a2..2bb2ff24aae 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -41,7 +41,7 @@ class lfg_commandscript : public CommandScript public: lfg_commandscript() : CommandScript("lfg_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand lfgCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 1ee92625735..3c86d059ef5 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -36,7 +36,7 @@ class list_commandscript : public CommandScript public: list_commandscript() : CommandScript("list_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand listCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index f2b4f54363b..ee307a1d065 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -37,7 +37,7 @@ class lookup_commandscript : public CommandScript public: lookup_commandscript() : CommandScript("lookup_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand lookupPlayerCommandTable[] = { @@ -1183,8 +1183,9 @@ public: CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id); if (titleInfo) { + /// @todo: implement female support int locale = handler->GetSessionDbcLocale(); - std::string name = titleInfo->name[locale]; + std::string name = titleInfo->nameMale[locale]; if (name.empty()) continue; @@ -1196,7 +1197,7 @@ public: if (locale == handler->GetSessionDbcLocale()) continue; - name = titleInfo->name[locale]; + name = titleInfo->nameMale[locale]; if (name.empty()) continue; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 6de8a155d01..458538936fd 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -42,7 +42,7 @@ class misc_commandscript : public CommandScript public: misc_commandscript() : CommandScript("misc_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand commandTable[] = { @@ -809,10 +809,13 @@ public: if (handler->HasLowerSecurity(target, 0)) return false; - char const* kickReason = strtok(NULL, "\r"); std::string kickReasonStr = "No reason"; - if (kickReason != NULL) - kickReasonStr = kickReason; + if (*args != '\0') + { + char const* kickReason = strtok(NULL, "\r"); + 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()); @@ -1015,7 +1018,6 @@ public: int32 area = GetAreaFlagByAreaID(atoi((char*)args)); int32 offset = area / 32; - uint32 val = uint32((1 << (area % 32))); if (area<0 || offset >= PLAYER_EXPLORED_ZONES_SIZE) { @@ -1024,6 +1026,7 @@ public: return false; } + uint32 val = uint32((1 << (area % 32))); uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset); playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields | val))); @@ -1046,7 +1049,6 @@ public: int32 area = GetAreaFlagByAreaID(atoi((char*)args)); int32 offset = area / 32; - uint32 val = uint32((1 << (area % 32))); if (area < 0 || offset >= PLAYER_EXPLORED_ZONES_SIZE) { @@ -1055,6 +1057,7 @@ public: return false; } + uint32 val = uint32((1 << (area % 32))); uint32 currFields = playerTarget->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset); playerTarget->SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, uint32((currFields ^ val))); diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 61598bf0945..d89edd4d925 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -41,7 +41,7 @@ class mmaps_commandscript : public CommandScript public: mmaps_commandscript() : CommandScript("mmaps_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand mmapCommandTable[] = { @@ -127,8 +127,8 @@ public: int32 gx = 32 - player->GetPositionX() / SIZE_OF_GRIDS; int32 gy = 32 - player->GetPositionY() / SIZE_OF_GRIDS; - handler->PSendSysMessage("%03u%02i%02i.mmtile", player->GetMapId(), gy, gx); - handler->PSendSysMessage("gridloc [%i, %i]", gx, gy); + handler->PSendSysMessage("%03u%02i%02i.mmtile", player->GetMapId(), gx, gy); + handler->PSendSysMessage("gridloc [%i, %i]", gy, gx); // calculate navmesh tile location dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId()); diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index c2d6bf47154..5dbe95b3e54 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -36,7 +36,7 @@ class modify_commandscript : public CommandScript public: modify_commandscript() : CommandScript("modify_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand modifyspeedCommandTable[] = { @@ -476,7 +476,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -524,7 +524,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -569,7 +569,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -614,7 +614,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -659,7 +659,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -1020,7 +1020,7 @@ public: } else { - if (newmoney > MAX_MONEY_AMOUNT) + if (newmoney > static_cast<int32>(MAX_MONEY_AMOUNT)) newmoney = MAX_MONEY_AMOUNT; handler->PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(moneyToAdd), handler->GetNameLink(target).c_str()); @@ -1035,10 +1035,7 @@ public: if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, handler->GetNameLink().c_str(), moneyToAdd); - if (moneyToAdd >= MAX_MONEY_AMOUNT) - moneyToAdd = MAX_MONEY_AMOUNT; - - if (targetMoney >= uint32(MAX_MONEY_AMOUNT) - moneyToAdd) + if (targetMoney >= MAX_MONEY_AMOUNT - moneyToAdd) moneyToAdd -= targetMoney; target->ModifyMoney(moneyToAdd); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index a5b13301403..9cf8c041883 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -43,6 +43,7 @@ struct EnumName #define CREATE_NAMED_ENUM(VALUE) { VALUE, STRINGIZE(VALUE) } #define NPCFLAG_COUNT 24 +#define FLAGS_EXTRA_COUNT 16 EnumName<NPCFlags, int32> const npcFlagTexts[NPCFLAG_COUNT] = { @@ -144,12 +145,32 @@ EnumName<UnitFlags> const unitFlags[MAX_UNIT_FLAGS] = CREATE_NAMED_ENUM(UNIT_FLAG_UNK_31) }; +EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] = +{ + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_INSTANCE_BIND), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_CIVILIAN), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_PARRY), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_BLOCK), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_CRUSH), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_XP_AT_KILL), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TRIGGER), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_TAUNT), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_WORLDEVENT), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_GUARD), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_CRIT), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_SKILLGAIN), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TAUNT_DIMINISH), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_ALL_DIMINISH), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_DUNGEON_BOSS) +}; + class npc_commandscript : public CommandScript { public: npc_commandscript() : CommandScript("npc_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand npcAddCommandTable[] = { @@ -226,14 +247,6 @@ public: if (!charID) return false; - char* team = strtok(NULL, " "); - int32 teamval = 0; - if (team) - teamval = atoi(team); - - if (teamval < 0) - teamval = 0; - uint32 id = atoi(charID); if (!sObjectMgr->GetCreatureTemplate(id)) return false; @@ -265,7 +278,7 @@ public: } Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, (uint32)teamval, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { delete creature; return false; @@ -596,17 +609,13 @@ public: // Update in memory.. if (CreatureTemplate const* cinfo = creature->GetCreatureTemplate()) - { - const_cast<CreatureTemplate*>(cinfo)->faction_A = factionId; - const_cast<CreatureTemplate*>(cinfo)->faction_H = factionId; - } + const_cast<CreatureTemplate*>(cinfo)->faction = factionId; // ..and DB PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_FACTION); stmt->setUInt16(0, uint16(factionId)); - stmt->setUInt16(1, uint16(factionId)); - stmt->setUInt32(2, creature->GetEntry()); + stmt->setUInt32(1, creature->GetEntry()); WorldDatabase.Execute(stmt); @@ -727,6 +736,7 @@ public: handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel()); handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId()); handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth()); + handler->PSendSysMessage(LANG_NPCINFO_INHABIT_TYPE, cInfo->InhabitType); handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS)); for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i) @@ -741,6 +751,10 @@ public: handler->PSendSysMessage(LANG_NPCINFO_ARMOR, target->GetArmor()); handler->PSendSysMessage(LANG_NPCINFO_POSITION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); handler->PSendSysMessage(LANG_NPCINFO_AIINFO, target->GetAIName().c_str(), target->GetScriptName().c_str()); + handler->PSendSysMessage(LANG_NPCINFO_FLAGS_EXTRA, cInfo->flags_extra); + for (uint8 i = 0; i < FLAGS_EXTRA_COUNT; ++i) + if (cInfo->flags_extra & flagsExtra[i].Value) + handler->PSendSysMessage("%s (0x%X)", flagsExtra[i].Name, flagsExtra[i].Value); for (uint8 i = 0; i < NPCFLAG_COUNT; i++) if (npcflags & npcFlagTexts[i].Value) diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index 1a5df88f144..82f99501a58 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -27,7 +27,7 @@ class pet_commandscript : public CommandScript public: pet_commandscript() : CommandScript("pet_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand petCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 01e28b0910d..6004cd0bc89 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -33,7 +33,7 @@ class quest_commandscript : public CommandScript public: quest_commandscript() : CommandScript("quest_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand questCommandTable[] = { @@ -91,13 +91,8 @@ public: // ok, normal (creature/GO starting) quest if (player->CanAddQuest(quest, true)) - { player->AddQuestAndCheckCompletion(quest, NULL); - if (player->CanCompleteQuest(entry)) - player->CompleteQuest(entry); - } - return true; } @@ -147,7 +142,7 @@ public: } } - player->RemoveActiveQuest(entry); + player->RemoveActiveQuest(entry, false); player->RemoveRewardedQuest(entry); handler->SendSysMessage(LANG_COMMAND_QUEST_REMOVED); diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp index df4ce993433..47fa01837f6 100644 --- a/src/server/scripts/Commands/cs_rbac.cpp +++ b/src/server/scripts/Commands/cs_rbac.cpp @@ -320,7 +320,7 @@ public: handler->PSendSysMessage(LANG_RBAC_LIST_ELEMENT, permission->GetId(), permission->GetName().c_str());
}
}
- handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_DENIED, command->rbac->GetId(), command->rbac->GetName().c_str());
+ handler->PSendSysMessage(LANG_RBAC_LIST_HEADER_BY_SEC_LEVEL, command->rbac->GetId(), command->rbac->GetName().c_str(), command->rbac->GetSecurityLevel());
rbac::RBACPermissionContainer const& defaultPermissions = sAccountMgr->GetRBACDefaultPermissions(command->rbac->GetSecurityLevel());
if (defaultPermissions.empty())
handler->PSendSysMessage("%s", handler->GetTrinityString(LANG_RBAC_LIST_EMPTY));
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 7e759a788f5..89dc08d5737 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -50,117 +50,118 @@ public: { static ChatCommand reloadAllCommandTable[] = { - { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL }, - { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL }, - { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL }, - { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL }, - { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL }, - { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL }, - { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL }, - { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL }, - { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL }, - { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL }, + { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL }, + { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL }, + { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL }, + { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL }, + { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL }, + { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL }, + { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL }, + { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL }, + { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL }, + { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand reloadCommandTable[] = { - { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL }, - { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL }, - { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL }, - { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL }, - { "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable }, - { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL }, - { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL }, - { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL }, - { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL }, - { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL }, - { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL }, - { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL }, - { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL }, - { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL }, - { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL }, - { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, - { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL }, - { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL }, - { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, - { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL }, - //{ "db_script_string", rbac::RBAC_PERM_COMMAND_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL }, - { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL }, - { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL }, - { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL }, - { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL }, - { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL }, - { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL }, - { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL }, - { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, - { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL }, - { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL }, - { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL }, - { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, - { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL }, - { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL }, - { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL }, - { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL }, - { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL }, - { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL }, - { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL }, - { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL }, - { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL }, - { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL }, - { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL }, - { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL }, - { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL }, - { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL }, - { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL }, - { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL }, - { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL }, - { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL }, - { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL}, - { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL }, - { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL }, - { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL }, - { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL}, - { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL }, - { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL }, - { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL }, - { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL }, - { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL }, - { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL }, - { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL }, - { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL }, - { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL }, - { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL }, - { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL }, - { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL }, - { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL }, - { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL }, - { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL }, - { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL }, - { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL }, - { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL }, - { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL }, - { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL }, - { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL }, - { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL }, - { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL }, - { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL }, - { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL }, - { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL }, - { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL }, - { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL }, - { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL }, - { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL }, - { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL }, - { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL }, + { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL }, + { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL }, + { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL }, + { "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable }, + { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL }, + { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL }, + { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL }, + { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL }, + { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "", NULL }, + { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL }, + { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL }, + { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL }, + { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL }, + { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL }, + { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL }, + { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, + { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL }, + { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL }, + { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, + { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL }, + //{ "db_script_string", rbac::RBAC_PERM_COMMAND_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL }, + { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL }, + { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL }, + { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL }, + { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL }, + { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL }, + { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL }, + { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL }, + { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, + { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL }, + { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL }, + { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL }, + { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, + { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL }, + { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL }, + { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL }, + { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL }, + { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL }, + { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL }, + { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL }, + { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL }, + { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL }, + { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL }, + { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL }, + { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL }, + { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL }, + { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL }, + { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL }, + { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL }, + { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL }, + { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL }, + { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL }, + { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL }, + { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL }, + { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL }, + { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL }, + { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL }, + { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL }, + { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL }, + { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL }, + { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL }, + { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL }, + { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL }, + { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, + { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, + { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL }, + { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL }, + { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL }, + { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL }, + { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL }, + { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL }, + { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL }, + { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL }, + { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL }, + { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL }, + { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL }, + { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL }, + { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL }, + { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL }, + { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL }, + { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL }, + { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL }, + { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL }, + { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL }, + { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL }, + { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL }, + { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL }, + { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL }, + { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL }, + { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable }, + { NULL, 0, false, NULL, "", NULL } }; return commandTable; } @@ -375,6 +376,15 @@ public: return true; } + static bool HandleReloadBroadcastTextCommand(ChatHandler* handler, const char* /*args*/) + { + TC_LOG_INFO("misc", "Re-Loading Broadcast texts..."); + sObjectMgr->LoadBroadcastTexts(); + sObjectMgr->LoadBroadcastTextLocales(); + handler->SendGlobalGMSysMessage("DB table `broadcast_text` reloaded."); + return true; + } + static bool HandleReloadCommandCommand(ChatHandler* handler, const char* /*args*/) { handler->SetLoadCommandTable(true); @@ -446,72 +456,71 @@ public: cInfo->minlevel = fields[13].GetUInt8(); cInfo->maxlevel = fields[14].GetUInt8(); cInfo->expansion = fields[15].GetUInt16(); - cInfo->faction_A = fields[16].GetUInt16(); - cInfo->faction_H = fields[17].GetUInt16(); - cInfo->npcflag = fields[18].GetUInt32(); - cInfo->speed_walk = fields[19].GetFloat(); - cInfo->speed_run = fields[20].GetFloat(); - cInfo->scale = fields[21].GetFloat(); - cInfo->rank = fields[22].GetUInt8(); - cInfo->mindmg = fields[23].GetFloat(); - cInfo->maxdmg = fields[24].GetFloat(); - cInfo->dmgschool = fields[25].GetUInt8(); - cInfo->attackpower = fields[26].GetUInt32(); - cInfo->dmg_multiplier = fields[27].GetFloat(); - cInfo->baseattacktime = fields[28].GetUInt32(); - cInfo->rangeattacktime = fields[29].GetUInt32(); - cInfo->unit_class = fields[30].GetUInt8(); - cInfo->unit_flags = fields[31].GetUInt32(); - cInfo->unit_flags2 = fields[32].GetUInt32(); - cInfo->dynamicflags = fields[33].GetUInt32(); - cInfo->family = fields[34].GetUInt8(); - cInfo->trainer_type = fields[35].GetUInt8(); - cInfo->trainer_spell = fields[36].GetUInt32(); - cInfo->trainer_class = fields[37].GetUInt8(); - cInfo->trainer_race = fields[38].GetUInt8(); - cInfo->minrangedmg = fields[39].GetFloat(); - cInfo->maxrangedmg = fields[40].GetFloat(); - cInfo->rangedattackpower = fields[41].GetUInt16(); - cInfo->type = fields[42].GetUInt8(); - cInfo->type_flags = fields[43].GetUInt32(); - cInfo->lootid = fields[44].GetUInt32(); - cInfo->pickpocketLootId = fields[45].GetUInt32(); - cInfo->SkinLootId = fields[46].GetUInt32(); + cInfo->faction = fields[16].GetUInt16(); + cInfo->npcflag = fields[17].GetUInt32(); + cInfo->speed_walk = fields[18].GetFloat(); + cInfo->speed_run = fields[19].GetFloat(); + cInfo->scale = fields[20].GetFloat(); + cInfo->rank = fields[21].GetUInt8(); + cInfo->mindmg = fields[22].GetFloat(); + cInfo->maxdmg = fields[23].GetFloat(); + cInfo->dmgschool = fields[24].GetUInt8(); + cInfo->attackpower = fields[25].GetUInt32(); + cInfo->dmg_multiplier = fields[26].GetFloat(); + cInfo->baseattacktime = fields[27].GetUInt32(); + cInfo->rangeattacktime = fields[28].GetUInt32(); + cInfo->unit_class = fields[29].GetUInt8(); + cInfo->unit_flags = fields[30].GetUInt32(); + cInfo->unit_flags2 = fields[31].GetUInt32(); + cInfo->dynamicflags = fields[32].GetUInt32(); + cInfo->family = fields[33].GetUInt8(); + cInfo->trainer_type = fields[34].GetUInt8(); + cInfo->trainer_spell = fields[35].GetUInt32(); + cInfo->trainer_class = fields[36].GetUInt8(); + cInfo->trainer_race = fields[37].GetUInt8(); + cInfo->minrangedmg = fields[38].GetFloat(); + cInfo->maxrangedmg = fields[39].GetFloat(); + cInfo->rangedattackpower = fields[40].GetUInt16(); + cInfo->type = fields[41].GetUInt8(); + cInfo->type_flags = fields[42].GetUInt32(); + cInfo->lootid = fields[43].GetUInt32(); + cInfo->pickpocketLootId = fields[44].GetUInt32(); + cInfo->SkinLootId = fields[45].GetUInt32(); for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - cInfo->resistance[i] = fields[47 + i -1].GetUInt16(); - - cInfo->spells[0] = fields[53].GetUInt32(); - cInfo->spells[1] = fields[54].GetUInt32(); - cInfo->spells[2] = fields[55].GetUInt32(); - cInfo->spells[3] = fields[56].GetUInt32(); - cInfo->spells[4] = fields[57].GetUInt32(); - cInfo->spells[5] = fields[58].GetUInt32(); - cInfo->spells[6] = fields[59].GetUInt32(); - cInfo->spells[7] = fields[60].GetUInt32(); - cInfo->PetSpellDataId = fields[61].GetUInt32(); - cInfo->VehicleId = fields[62].GetUInt32(); - cInfo->mingold = fields[63].GetUInt32(); - cInfo->maxgold = fields[64].GetUInt32(); - cInfo->AIName = fields[65].GetString(); - cInfo->MovementType = fields[66].GetUInt8(); - cInfo->InhabitType = fields[67].GetUInt8(); - cInfo->HoverHeight = fields[68].GetFloat(); - cInfo->ModHealth = fields[69].GetFloat(); - cInfo->ModMana = fields[70].GetFloat(); - cInfo->ModArmor = fields[71].GetFloat(); - cInfo->RacialLeader = fields[72].GetBool(); - cInfo->questItems[0] = fields[73].GetUInt32(); - cInfo->questItems[1] = fields[74].GetUInt32(); - cInfo->questItems[2] = fields[75].GetUInt32(); - cInfo->questItems[3] = fields[76].GetUInt32(); - cInfo->questItems[4] = fields[77].GetUInt32(); - cInfo->questItems[5] = fields[78].GetUInt32(); - cInfo->movementId = fields[79].GetUInt32(); - cInfo->RegenHealth = fields[80].GetBool(); - cInfo->MechanicImmuneMask = fields[81].GetUInt32(); - cInfo->flags_extra = fields[82].GetUInt32(); - cInfo->ScriptID = sObjectMgr->GetScriptId(fields[83].GetCString()); + cInfo->resistance[i] = fields[46 + i -1].GetUInt16(); + + cInfo->spells[0] = fields[52].GetUInt32(); + cInfo->spells[1] = fields[53].GetUInt32(); + cInfo->spells[2] = fields[54].GetUInt32(); + cInfo->spells[3] = fields[55].GetUInt32(); + cInfo->spells[4] = fields[56].GetUInt32(); + cInfo->spells[5] = fields[57].GetUInt32(); + cInfo->spells[6] = fields[58].GetUInt32(); + cInfo->spells[7] = fields[59].GetUInt32(); + cInfo->PetSpellDataId = fields[60].GetUInt32(); + cInfo->VehicleId = fields[61].GetUInt32(); + cInfo->mingold = fields[62].GetUInt32(); + cInfo->maxgold = fields[63].GetUInt32(); + cInfo->AIName = fields[64].GetString(); + cInfo->MovementType = fields[65].GetUInt8(); + cInfo->InhabitType = fields[66].GetUInt8(); + cInfo->HoverHeight = fields[67].GetFloat(); + cInfo->ModHealth = fields[68].GetFloat(); + cInfo->ModMana = fields[69].GetFloat(); + cInfo->ModArmor = fields[70].GetFloat(); + cInfo->RacialLeader = fields[71].GetBool(); + cInfo->questItems[0] = fields[72].GetUInt32(); + cInfo->questItems[1] = fields[73].GetUInt32(); + cInfo->questItems[2] = fields[74].GetUInt32(); + cInfo->questItems[3] = fields[75].GetUInt32(); + cInfo->questItems[4] = fields[76].GetUInt32(); + cInfo->questItems[5] = fields[77].GetUInt32(); + cInfo->movementId = fields[78].GetUInt32(); + cInfo->RegenHealth = fields[79].GetBool(); + cInfo->MechanicImmuneMask = fields[80].GetUInt32(); + cInfo->flags_extra = fields[81].GetUInt32(); + cInfo->ScriptID = sObjectMgr->GetScriptId(fields[82].GetCString()); sObjectMgr->CheckCreatureTemplate(cInfo); } diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index 4299e690989..d61c36c887f 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -35,7 +35,7 @@ class reset_commandscript : public CommandScript public: reset_commandscript() : CommandScript("reset_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand resetCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp index 58970a91e20..486645df290 100644 --- a/src/server/scripts/Commands/cs_send.cpp +++ b/src/server/scripts/Commands/cs_send.cpp @@ -27,7 +27,7 @@ class send_commandscript : public CommandScript public: send_commandscript() : CommandScript("send_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand sendCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 4cd5e1f6274..04cc9ae4ad5 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -35,7 +35,7 @@ class server_commandscript : public CommandScript public: server_commandscript() : CommandScript("server_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand serverIdleRestartCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index f6618227ae6..ad77464b6e1 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -35,7 +35,7 @@ class tele_commandscript : public CommandScript public: tele_commandscript() : CommandScript("tele_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand teleCommandTable[] = { diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index 20bffdbb792..dee9c33ae99 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -33,7 +33,7 @@ class titles_commandscript : public CommandScript public: titles_commandscript() : CommandScript("titles_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand titlesSetCommandTable[] = { @@ -96,7 +96,7 @@ public: target->SetTitle(titleInfo); // to be sure that title now known target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->bit_index); - handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, titleInfo->name[handler->GetSessionDbcLocale()], tNameLink.c_str()); + handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], tNameLink.c_str()); return true; } @@ -139,7 +139,7 @@ public: std::string tNameLink = handler->GetNameLink(target); char titleNameStr[80]; - snprintf(titleNameStr, 80, titleInfo->name[handler->GetSessionDbcLocale()], target->GetName().c_str()); + snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str()); target->SetTitle(titleInfo); handler->PSendSysMessage(LANG_TITLE_ADD_RES, id, titleNameStr, tNameLink.c_str()); @@ -187,7 +187,7 @@ public: std::string tNameLink = handler->GetNameLink(target); char titleNameStr[80]; - snprintf(titleNameStr, 80, titleInfo->name[handler->GetSessionDbcLocale()], target->GetName().c_str()); + snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str()); handler->PSendSysMessage(LANG_TITLE_REMOVE_RES, id, titleNameStr, tNameLink.c_str()); diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 9b20383e94a..94f84aaf20a 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -34,7 +34,7 @@ class wp_commandscript : public CommandScript public: wp_commandscript() : CommandScript("wp_commandscript") { } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand wpCommandTable[] = { @@ -561,7 +561,7 @@ public: // Check // Remember: "show" must also be the name of a column! if ((show != "delay") && (show != "action") && (show != "action_chance") - && (show != "move_flag") && (show != "del") && (show != "move") && (show != "wpadd") + && (show != "move_flag") && (show != "del") && (show != "move") ) { return false; @@ -690,7 +690,7 @@ public: } // re-create Creature* wpCreature2 = new Creature(); - if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, 0, 0, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) + if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); delete wpCreature2; @@ -914,7 +914,7 @@ public: float o = chr->GetOrientation(); Creature* wpCreature = new Creature(); - if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o)) + if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete wpCreature; @@ -978,7 +978,7 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete creature; @@ -1027,7 +1027,7 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, 0, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); delete creature; diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt index 78db719ae6e..80ebe36b555 100644 --- a/src/server/scripts/Custom/CMakeLists.txt +++ b/src/server/scripts/Custom/CMakeLists.txt @@ -8,8 +8,11 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# file(GLOB_RECURSE sources_Custom Custom/*.cpp Custom/*.h) + set(scripts_STAT_SRCS ${scripts_STAT_SRCS} +# ${sources_Custom} ) message(" -> Prepared: Custom") diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index 3859555a90c..6f8b93bbdba 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -86,7 +86,7 @@ class npc_av_marshal_or_warmaster : public CreatureScript { npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_CHARGE_TARGET, urand(2 * IN_MILLISECONDS, 12 * IN_MILLISECONDS)); @@ -99,12 +99,12 @@ class npc_av_marshal_or_warmaster : public CreatureScript _hasAura = false; } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // I have a feeling this isn't blizzlike, but owell, I'm only passing by and cleaning up. if (!_hasAura) @@ -170,7 +170,7 @@ class npc_av_marshal_or_warmaster : public CreatureScript bool _hasAura; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_av_marshal_or_warmasterAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index ab135a2fd78..47e91cac63d 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -50,20 +50,25 @@ public: struct npc_water_elementalAI : public ScriptedAI { - npc_water_elementalAI(Creature* creature) : ScriptedAI(creature) { } + npc_water_elementalAI(Creature* creature) : ScriptedAI(creature) + { + waterBoltTimer = 3 * IN_MILLISECONDS; + resetTimer = 5 * IN_MILLISECONDS; + balindaGUID = 0; + } uint32 waterBoltTimer; uint64 balindaGUID; uint32 resetTimer; - void Reset() OVERRIDE + void Reset() override { waterBoltTimer = 3 * IN_MILLISECONDS; resetTimer = 5 * IN_MILLISECONDS; balindaGUID = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -77,7 +82,7 @@ public: // check if creature is not outside of building if (resetTimer < diff) { - if (Creature* pBalinda = Unit::GetCreature(*me, balindaGUID)) + if (Creature* pBalinda = ObjectAccessor::GetCreature(*me, balindaGUID)) if (me->GetDistance2d(pBalinda->GetHomePosition().GetPositionX(), pBalinda->GetHomePosition().GetPositionY()) > 50) EnterEvadeMode(); resetTimer = 5 * IN_MILLISECONDS; @@ -87,7 +92,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_water_elementalAI(creature); } @@ -111,7 +116,7 @@ public: SummonList summons; - void Reset() OVERRIDE + void Reset() override { arcaneExplosionTimer = urand(5 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); coneOfColdTimer = 8 * IN_MILLISECONDS; @@ -123,17 +128,17 @@ public: summons.DespawnAll(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_AGGRO); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { CAST_AI(npc_water_elemental::npc_water_elementalAI, summoned->AI())->balindaGUID = me->GetGUID(); summoned->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true)); @@ -141,12 +146,12 @@ public: summons.Summon(summoned); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { summons.DespawnAll(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -197,7 +202,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_balindaAI(creature); } @@ -207,4 +212,4 @@ void AddSC_boss_balinda() { new boss_balinda; new npc_water_elemental; -}; +} diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 2f48ca4a3b6..4ecb57177a6 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -54,7 +54,7 @@ public: uint32 YellTimer; uint32 ResetTimer; - void Reset() OVERRIDE + void Reset() override { WhirlwindTimer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); Whirlwind2Timer = urand(1 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); @@ -64,18 +64,18 @@ public: YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); //20 to 30 seconds } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_AGGRO); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); Talk(YELL_RESPAWN); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -125,7 +125,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_drektharAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp index aa852ffd30c..c00b7db2ce7 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp @@ -49,7 +49,7 @@ public: uint32 MortalStrikeTimer; uint32 ResetTimer; - void Reset() OVERRIDE + void Reset() override { CleaveTimer = urand(1 * IN_MILLISECONDS, 9 * IN_MILLISECONDS); FrighteningShoutTimer = urand(2 * IN_MILLISECONDS, 19 * IN_MILLISECONDS); @@ -59,17 +59,17 @@ public: ResetTimer = 5 * IN_MILLISECONDS; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_AGGRO); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -119,7 +119,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_galvangarAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp index 4e7c2abcdcc..076607a5672 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp @@ -50,7 +50,7 @@ public: uint32 ResetTimer; uint32 YellTimer; - void Reset() OVERRIDE + void Reset() override { AvatarTimer = 3 * IN_MILLISECONDS; ThunderclapTimer = 4 * IN_MILLISECONDS; @@ -59,12 +59,12 @@ public: YellTimer = urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -108,7 +108,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_vanndarAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 55a89d062e8..3eab75cfd76 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -29,7 +29,7 @@ class go_shadowforge_brazier : public GameObjectScript public: go_shadowforge_brazier() : GameObjectScript("go_shadowforge_brazier") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) { @@ -82,7 +82,7 @@ class at_ring_of_law : public AreaTriggerScript public: at_ring_of_law() : AreaTriggerScript("at_ring_of_law") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { if (InstanceScript* instance = player->GetInstanceScript()) { @@ -115,7 +115,7 @@ class npc_grimstone : public CreatureScript public: npc_grimstone() : CreatureScript("npc_grimstone") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_grimstoneAI>(creature); } @@ -142,7 +142,7 @@ public: bool CanWalk; - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -181,7 +181,7 @@ public: MobDeath_Timer = 2500; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -219,7 +219,7 @@ public: instance->HandleGameObject(instance->GetData64(id), open); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (MobDeath_Timer) { @@ -229,7 +229,7 @@ public: if (RingBossGUID) { - Creature* boss = Unit::GetCreature(*me, RingBossGUID); + Creature* boss = ObjectAccessor::GetCreature(*me, RingBossGUID); if (boss && !boss->IsAlive() && boss->isDead()) { RingBossGUID = 0; @@ -242,7 +242,7 @@ public: for (uint8 i = 0; i < MAX_NPC_AMOUNT; ++i) { - Creature* mob = Unit::GetCreature(*me, RingMobGUID[i]); + Creature* mob = ObjectAccessor::GetCreature(*me, RingMobGUID[i]); if (mob && !mob->IsAlive() && mob->isDead()) { RingMobGUID[i] = 0; @@ -346,7 +346,7 @@ class npc_phalanx : public CreatureScript public: npc_phalanx() : CreatureScript("npc_phalanx") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_phalanxAI(creature); } @@ -359,14 +359,14 @@ public: uint32 FireballVolley_Timer; uint32 MightyBlow_Timer; - void Reset() OVERRIDE + void Reset() override { ThunderClap_Timer = 12000; FireballVolley_Timer = 0; MightyBlow_Timer = 15000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -424,7 +424,7 @@ class npc_kharan_mighthammer : public CreatureScript public: npc_kharan_mighthammer() : CreatureScript("npc_kharan_mighthammer") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -473,7 +473,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -518,7 +518,7 @@ class npc_lokhtos_darkbargainer : public CreatureScript public: npc_lokhtos_darkbargainer() : CreatureScript("npc_lokhtos_darkbargainer") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -532,7 +532,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -571,7 +571,7 @@ class npc_dughal_stormwing : public CreatureScript public: npc_dughal_stormwing() : CreatureScript("npc_dughal_stormwing") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { npc_dughal_stormwingAI* dughal_stormwingAI = new npc_dughal_stormwingAI(creature); @@ -582,7 +582,7 @@ public: return dughal_stormwingAI; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -595,7 +595,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS) { @@ -609,7 +609,7 @@ public: { npc_dughal_stormwingAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -628,10 +628,10 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE { } - void Reset() OVERRIDE { } + void EnterCombat(Unit* who) override { } + void Reset() override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (IsBeingEscorted && killer == me) { @@ -642,7 +642,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return; if ((instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_FAILED || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_ENDED)&& instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_ENDED) @@ -687,7 +687,7 @@ class npc_marshal_windsor : public CreatureScript public: npc_marshal_windsor() : CreatureScript("npc_marshal_windsor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { npc_marshal_windsorAI* marshal_windsorAI = new npc_marshal_windsorAI(creature); @@ -715,7 +715,7 @@ public: return marshal_windsorAI; } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == 4322) { @@ -737,7 +737,7 @@ public: instance = creature->GetInstanceScript(); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -782,7 +782,7 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { switch (urand(0, 2)) { @@ -798,14 +798,14 @@ public: } } - void Reset() OVERRIDE { } + void Reset() override { } - void JustDied(Unit* slayer) OVERRIDE + void JustDied(Unit* slayer) override { instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return; @@ -871,7 +871,7 @@ class npc_marshal_reginald_windsor : public CreatureScript public: npc_marshal_reginald_windsor() : CreatureScript("npc_marshal_reginald_windsor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { npc_marshal_reginald_windsorAI* marshal_reginald_windsorAI = new npc_marshal_reginald_windsorAI(creature); @@ -920,7 +920,7 @@ public: { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { wp = waypointId; switch (waypointId) @@ -978,7 +978,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) @@ -998,7 +998,7 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { switch (urand(0, 2)) { @@ -1013,14 +1013,14 @@ public: break; } } - void Reset() OVERRIDE { } + void Reset() override { } - void JustDied(Unit* slayer) OVERRIDE + void JustDied(Unit* slayer) override { instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return; @@ -1081,7 +1081,7 @@ class npc_tobias_seecher : public CreatureScript public: npc_tobias_seecher() : CreatureScript("npc_tobias_seecher") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { npc_tobias_seecherAI* tobias_seecherAI = new npc_tobias_seecherAI(creature); @@ -1094,7 +1094,7 @@ public: return tobias_seecherAI; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -1107,7 +1107,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS) { @@ -1121,10 +1121,10 @@ public: { npc_tobias_seecherAI(Creature* creature) : npc_escortAI(creature) { } - void EnterCombat(Unit* who) OVERRIDE { } - void Reset() OVERRIDE { } + void EnterCombat(Unit* who) override { } + void Reset() override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (IsBeingEscorted && killer == me) { @@ -1135,7 +1135,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -1154,7 +1154,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return; @@ -1199,7 +1199,7 @@ class npc_rocknot : public CreatureScript public: npc_rocknot() : CreatureScript("npc_rocknot") { } - bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*item*/) OVERRIDE + bool OnQuestReward(Player* /*player*/, Creature* creature, Quest const* quest, uint32 /*item*/) override { InstanceScript* instance = creature->GetInstanceScript(); if (!instance) @@ -1229,7 +1229,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_rocknotAI>(creature); } @@ -1246,7 +1246,7 @@ public: uint32 BreakKeg_Timer; uint32 BreakDoor_Timer; - void Reset() OVERRIDE + void Reset() override { if (HasEscortState(STATE_ESCORT_ESCORTING)) return; @@ -1261,7 +1261,7 @@ public: go->SetGoState((GOState)state); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -1284,7 +1284,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (BreakKeg_Timer) { @@ -1304,7 +1304,7 @@ public: DoGo(DATA_GO_BAR_KEG_TRAP, 0); //doesn't work very well, leaving code here for future //spell by trap has effect61, this indicate the bar go hostile - if (Unit* tmp = Unit::GetUnit(*me, instance->GetData64(DATA_PHALANX))) + if (Unit* tmp = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PHALANX))) tmp->setFaction(14); //for later, this event(s) has alot more to it. diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp index 5201e06aa17..3e4097daf20 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -24,64 +23,74 @@ enum Spells SPELL_FIREBLAST = 15573 }; -class boss_ambassador_flamelash : public CreatureScript +enum Events { -public: - boss_ambassador_flamelash() : CreatureScript("boss_ambassador_flamelash") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_ambassador_flamelashAI(creature); - } - - struct boss_ambassador_flamelashAI : public ScriptedAI - { - boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) { } + EVENT_FIREBLAST = 1, + EVENT_SUMMON_SPIRITS = 2 +}; - uint32 FireBlast_Timer; - uint32 Spirit_Timer; +class boss_ambassador_flamelash : public CreatureScript +{ + public: + boss_ambassador_flamelash() : CreatureScript("boss_ambassador_flamelash") { } - void Reset() OVERRIDE + struct boss_ambassador_flamelashAI : public ScriptedAI { - FireBlast_Timer = 2000; - Spirit_Timer = 24000; - } + boss_ambassador_flamelashAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - - void SummonSpirits(Unit* victim) - { - if (Creature* Spirit = DoSpawnCreature(9178, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000)) - Spirit->AI()->AttackStart(victim); - } + void Reset() override + { + _events.Reset(); + } - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_FIREBLAST, 2000); + _events.ScheduleEvent(EVENT_SUMMON_SPIRITS, 24000); + } - //FireBlast_Timer - if (FireBlast_Timer <= diff) + void SummonSpirit(Unit* victim) { - DoCastVictim(SPELL_FIREBLAST); - FireBlast_Timer = 7000; - } else FireBlast_Timer -= diff; + if (Creature* spirit = DoSpawnCreature(9178, frand(-9, 9), frand(-9, 9), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000)) + spirit->AI()->AttackStart(victim); + } - //Spirit_Timer - if (Spirit_Timer <= diff) + void UpdateAI(uint32 diff) override { - SummonSpirits(me->GetVictim()); - SummonSpirits(me->GetVictim()); - SummonSpirits(me->GetVictim()); - SummonSpirits(me->GetVictim()); + if (!UpdateVictim()) + return; - Spirit_Timer = 30000; - } else Spirit_Timer -= diff; + _events.Update(diff); - DoMeleeAttackIfReady(); + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_FIREBLAST: + DoCastVictim(SPELL_FIREBLAST); + _events.ScheduleEvent(EVENT_FIREBLAST, 7000); + break; + case EVENT_SUMMON_SPIRITS: + for (uint32 i = 0; i < 4; ++i) + SummonSpirit(me->GetVictim()); + _events.ScheduleEvent(EVENT_SUMMON_SPIRITS, 30000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_ambassador_flamelashAI(creature); } - }; }; void AddSC_boss_ambassador_flamelash() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp index 33e0484c0d5..894b528c03c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -21,90 +20,94 @@ enum Spells { - SPELL_SHADOWBOLT = 17228, - SPELL_CURSEOFTONGUES = 15470, - SPELL_CURSEOFWEAKNESS = 17227, - SPELL_DEMONARMOR = 11735, - SPELL_ENVELOPINGWEB = 15471 + SPELL_SHADOWBOLT = 17228, + SPELL_CURSEOFTONGUES = 15470, + SPELL_CURSEOFWEAKNESS = 17227, + SPELL_DEMONARMOR = 11735, + SPELL_ENVELOPINGWEB = 15471 }; -class boss_anubshiah : public CreatureScript +enum Events { -public: - boss_anubshiah() : CreatureScript("boss_anubshiah") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_anubshiahAI(creature); - } - - struct boss_anubshiahAI : public ScriptedAI - { - boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 ShadowBolt_Timer; - uint32 CurseOfTongues_Timer; - uint32 CurseOfWeakness_Timer; - uint32 DemonArmor_Timer; - uint32 EnvelopingWeb_Timer; - - void Reset() OVERRIDE - { - ShadowBolt_Timer = 7000; - CurseOfTongues_Timer = 24000; - CurseOfWeakness_Timer = 12000; - DemonArmor_Timer = 3000; - EnvelopingWeb_Timer = 16000; - } + EVENT_SHADOWBOLT = 1, + EVENT_CURSE_OF_TONGUES = 2, + EVENT_CURSE_OF_WEAKNESS = 3, + EVENT_DEMON_ARMOR = 4, + EVENT_ENVELOPING_WEB = 5 +}; - void EnterCombat(Unit* /*who*/) OVERRIDE { } +class boss_anubshiah : public CreatureScript +{ + public: + boss_anubshiah() : CreatureScript("boss_anubshiah") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_anubshiahAI : public ScriptedAI { - //Return since we have no target - if (!UpdateVictim()) - return; - - //ShadowBolt_Timer - if (ShadowBolt_Timer <= diff) - { - DoCastVictim(SPELL_SHADOWBOLT); - ShadowBolt_Timer = 7000; - } else ShadowBolt_Timer -= diff; - - //CurseOfTongues_Timer - if (CurseOfTongues_Timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CURSEOFTONGUES); - CurseOfTongues_Timer = 18000; - } else CurseOfTongues_Timer -= diff; + boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { } - //CurseOfWeakness_Timer - if (CurseOfWeakness_Timer <= diff) + void Reset() override { - DoCastVictim(SPELL_CURSEOFWEAKNESS); - CurseOfWeakness_Timer = 45000; - } else CurseOfWeakness_Timer -= diff; + _events.Reset(); + } - //DemonArmor_Timer - if (DemonArmor_Timer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCast(me, SPELL_DEMONARMOR); - DemonArmor_Timer = 300000; - } else DemonArmor_Timer -= diff; - - //EnvelopingWeb_Timer - if (EnvelopingWeb_Timer <= diff) + _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000); + _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 24000); + _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 12000); + _events.ScheduleEvent(EVENT_DEMON_ARMOR, 3000); + _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 16000); + } + + void UpdateAI(uint32 diff) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_ENVELOPINGWEB); - EnvelopingWeb_Timer = 12000; - } else EnvelopingWeb_Timer -= diff; - - DoMeleeAttackIfReady(); + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SHADOWBOLT: + DoCast(me, SPELL_SHADOWBOLT); + _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000); + break; + case EVENT_CURSE_OF_TONGUES: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_CURSEOFTONGUES); + _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 18000); + break; + case EVENT_CURSE_OF_WEAKNESS: + DoCastVictim(SPELL_CURSEOFWEAKNESS); + _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000); + break; + case EVENT_DEMON_ARMOR: + DoCast(me, SPELL_DEMONARMOR); + _events.ScheduleEvent(EVENT_DEMON_ARMOR, 300000); + break; + case EVENT_ENVELOPING_WEB: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_ENVELOPINGWEB); + _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 12000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_anubshiahAI(creature); } - }; }; void AddSC_boss_anubshiah() 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 1edb1100289..cec29bcd4d1 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 @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -32,89 +31,89 @@ enum Spells SPELL_AVATAROFFLAME = 15636 }; -class boss_emperor_dagran_thaurissan : public CreatureScript +enum Events { -public: - boss_emperor_dagran_thaurissan() : CreatureScript("boss_emperor_dagran_thaurissan") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_draganthaurissanAI>(creature); - } - - struct boss_draganthaurissanAI : public ScriptedAI - { - boss_draganthaurissanAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; - uint32 HandOfThaurissan_Timer; - uint32 AvatarOfFlame_Timer; - //uint32 Counter; + EVENT_HANDOFTHAURISSAN = 1, + EVENT_AVATAROFFLAME = 2 +}; - void Reset() OVERRIDE - { - HandOfThaurissan_Timer = 4000; - AvatarOfFlame_Timer = 25000; - //Counter= 0; - } +class boss_emperor_dagran_thaurissan : public CreatureScript +{ + public: + boss_emperor_dagran_thaurissan() : CreatureScript("boss_emperor_dagran_thaurissan") { } - void EnterCombat(Unit* /*who*/) OVERRIDE + struct boss_draganthaurissanAI : public ScriptedAI { - Talk(SAY_AGGRO); - me->CallForHelp(VISIBLE_RANGE); - } + boss_draganthaurissanAI(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + } - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_SLAY); - } + void Reset() override + { + _events.Reset(); + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (Creature* Moira = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOIRA))) + void EnterCombat(Unit* /*who*/) override { - Moira->AI()->EnterEvadeMode(); - Moira->setFaction(35); + Talk(SAY_AGGRO); + me->CallForHelp(VISIBLE_RANGE); + _events.ScheduleEvent(EVENT_HANDOFTHAURISSAN, 4000); + _events.ScheduleEvent(EVENT_AVATAROFFLAME, 25000); } - } - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } - if (HandOfThaurissan_Timer <= diff) + void JustDied(Unit* /*killer*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_HANDOFTHAURISSAN); - - //3 Hands of Thaurissan will be cast - //if (Counter < 3) - //{ - // HandOfThaurissan_Timer = 1000; - // ++Counter; - //} - //else - //{ - HandOfThaurissan_Timer = 5000; - //Counter = 0; - //} - } else HandOfThaurissan_Timer -= diff; - - //AvatarOfFlame_Timer - if (AvatarOfFlame_Timer <= diff) + if (Creature* moira = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MOIRA))) + { + moira->AI()->EnterEvadeMode(); + moira->setFaction(35); + } + } + + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_AVATAROFFLAME); - AvatarOfFlame_Timer = 18000; - } else AvatarOfFlame_Timer -= diff; + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_HANDOFTHAURISSAN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_HANDOFTHAURISSAN); + _events.ScheduleEvent(EVENT_HANDOFTHAURISSAN, 5000); + break; + case EVENT_AVATAROFFLAME: + DoCastVictim(SPELL_AVATAROFFLAME); + _events.ScheduleEvent(EVENT_AVATAROFFLAME, 18000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + InstanceScript* _instance; + EventMap _events; + }; - DoMeleeAttackIfReady(); + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_draganthaurissanAI>(creature); } - }; }; void AddSC_boss_draganthaurissan() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp index 258dfd5db07..d5b8d1deadd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -26,101 +25,113 @@ enum Spells SPELL_CLEAVE = 20691 }; -class boss_general_angerforge : public CreatureScript +enum Events { -public: - boss_general_angerforge() : CreatureScript("boss_general_angerforge") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_general_angerforgeAI(creature); - } - - struct boss_general_angerforgeAI : public ScriptedAI - { - boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 MightyBlow_Timer; - uint32 HamString_Timer; - uint32 Cleave_Timer; - uint32 Adds_Timer; - bool Medics; - - void Reset() OVERRIDE - { - MightyBlow_Timer = 8000; - HamString_Timer = 12000; - Cleave_Timer = 16000; - Adds_Timer = 0; - Medics = false; - } - - void EnterCombat(Unit* /*who*/) OVERRIDE { } + EVENT_MIGHTYBLOW = 1, + EVENT_HAMSTRING = 2, + EVENT_CLEAVE = 3, + EVENT_MEDIC = 4, + EVENT_ADDS = 5 +}; - void SummonAdds(Unit* victim) - { - if (Creature* SummonedAdd = DoSpawnCreature(8901, float(irand(-14, 14)), float(irand(-14, 14)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000)) - SummonedAdd->AI()->AttackStart(victim); - } +enum Phases +{ + PHASE_ONE = 1, + PHASE_TWO = 2 +}; - void SummonMedics(Unit* victim) - { - if (Creature* SummonedMedic = DoSpawnCreature(8894, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000)) - SummonedMedic->AI()->AttackStart(victim); - } +class boss_general_angerforge : public CreatureScript +{ + public: + boss_general_angerforge() : CreatureScript("boss_general_angerforge") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_general_angerforgeAI : public ScriptedAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_general_angerforgeAI(Creature* creature) : ScriptedAI(creature) { } - //MightyBlow_Timer - if (MightyBlow_Timer <= diff) + void Reset() override { - DoCastVictim(SPELL_MIGHTYBLOW); - MightyBlow_Timer = 18000; - } else MightyBlow_Timer -= diff; + _events.Reset(); + } - //HamString_Timer - if (HamString_Timer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCastVictim(SPELL_HAMSTRING); - HamString_Timer = 15000; - } else HamString_Timer -= diff; + _events.SetPhase(PHASE_ONE); + _events.ScheduleEvent(EVENT_MIGHTYBLOW, 8000); + _events.ScheduleEvent(EVENT_HAMSTRING, 12000); + _events.ScheduleEvent(EVENT_CLEAVE, 16000); + } - //Cleave_Timer - if (Cleave_Timer <= diff) + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - DoCastVictim(SPELL_CLEAVE); - Cleave_Timer = 9000; - } else Cleave_Timer -= diff; + if (me->HealthBelowPctDamaged(20, damage) && _events.IsInPhase(PHASE_ONE)) + { + _events.SetPhase(PHASE_TWO); + _events.ScheduleEvent(EVENT_MEDIC, 0, 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_ADDS, 0, 0, PHASE_TWO); + } + } - //Adds_Timer - if (HealthBelowPct(21)) + void SummonAdd(Unit* victim) { - if (Adds_Timer <= diff) - { - // summon 3 Adds every 25s - SummonAdds(me->GetVictim()); - SummonAdds(me->GetVictim()); - SummonAdds(me->GetVictim()); + if (Creature* SummonedAdd = DoSpawnCreature(8901, float(irand(-14, 14)), float(irand(-14, 14)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000)) + SummonedAdd->AI()->AttackStart(victim); + } - Adds_Timer = 25000; - } else Adds_Timer -= diff; + void SummonMedic(Unit* victim) + { + if (Creature* SummonedMedic = DoSpawnCreature(8894, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000)) + SummonedMedic->AI()->AttackStart(victim); } - //Summon Medics - if (!Medics && HealthBelowPct(21)) + void UpdateAI(uint32 diff) override { - SummonMedics(me->GetVictim()); - SummonMedics(me->GetVictim()); - Medics = true; + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_MIGHTYBLOW: + DoCastVictim(SPELL_MIGHTYBLOW); + _events.ScheduleEvent(EVENT_MIGHTYBLOW, 18000); + break; + case EVENT_HAMSTRING: + DoCastVictim(SPELL_HAMSTRING); + _events.ScheduleEvent(EVENT_HAMSTRING, 15000); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + _events.ScheduleEvent(EVENT_CLEAVE, 9000); + break; + case EVENT_MEDIC: + for (uint8 i = 0; i < 2; ++i) + SummonMedic(me->GetVictim()); + break; + case EVENT_ADDS: + for (uint8 i = 0; i < 3; ++i) + SummonAdd(me->GetVictim()); + _events.ScheduleEvent(EVENT_ADDS, 25000, 0, PHASE_TWO); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_general_angerforgeAI(creature); } - }; }; void AddSC_boss_general_angerforge() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp index acc739425ee..e9034e17d83 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -25,56 +24,67 @@ enum Spells SPELL_MORTALSTRIKE = 24573 }; +enum Events +{ + EVENT_WHIRLWIND = 1, + EVENT_MORTALSTRIKE = 2 +}; + class boss_gorosh_the_dervish : public CreatureScript { -public: - boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { } + public: + boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_gorosh_the_dervishAI(creature); - } + struct boss_gorosh_the_dervishAI : public ScriptedAI + { + boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { } - struct boss_gorosh_the_dervishAI : public ScriptedAI - { - boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { } + void Reset() override + { + _events.Reset(); + } - uint32 WhirlWind_Timer; - uint32 MortalStrike_Timer; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_WHIRLWIND, 12000); + _events.ScheduleEvent(EVENT_MORTALSTRIKE, 22000); + } - void Reset() OVERRIDE - { - WhirlWind_Timer = 12000; - MortalStrike_Timer = 22000; - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void EnterCombat(Unit* /*who*/) OVERRIDE - { - } + _events.Update(diff); - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_WHIRLWIND: + DoCast(me, SPELL_WHIRLWIND); + _events.ScheduleEvent(EVENT_WHIRLWIND, 15000); + break; + case EVENT_MORTALSTRIKE: + DoCastVictim(SPELL_MORTALSTRIKE); + _events.ScheduleEvent(EVENT_MORTALSTRIKE, 15000); + break; + default: + break; + } + } - //WhirlWind_Timer - if (WhirlWind_Timer <= diff) - { - DoCast(me, SPELL_WHIRLWIND); - WhirlWind_Timer = 15000; - } else WhirlWind_Timer -= diff; + DoMeleeAttackIfReady(); + } - //MortalStrike_Timer - if (MortalStrike_Timer <= diff) - { - DoCastVictim(SPELL_MORTALSTRIKE); - MortalStrike_Timer = 15000; - } else MortalStrike_Timer -= diff; + private: + EventMap _events; + }; - DoMeleeAttackIfReady(); + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_gorosh_the_dervishAI(creature); } - }; }; void AddSC_boss_gorosh_the_dervish() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp index 9bd36203dd2..f53fd0f65b3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -26,59 +25,83 @@ enum Grizzle EMOTE_FRENZY_KILL = 0 }; -class boss_grizzle : public CreatureScript +enum Events { -public: - boss_grizzle() : CreatureScript("boss_grizzle") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_grizzleAI(creature); - } + EVENT_GROUNDTREMOR = 1, + EVENT_FRENZY = 2 +}; - struct boss_grizzleAI : public ScriptedAI - { - boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { } +enum Phases +{ + PHASE_ONE = 1, + PHASE_TWO = 2 +}; - uint32 GroundTremor_Timer; - uint32 Frenzy_Timer; +class boss_grizzle : public CreatureScript +{ + public: + boss_grizzle() : CreatureScript("boss_grizzle") { } - void Reset() OVERRIDE + struct boss_grizzleAI : public ScriptedAI { - GroundTremor_Timer = 12000; - Frenzy_Timer =0; - } + boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override + { + _events.Reset(); + } - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.SetPhase(PHASE_ONE); + _events.ScheduleEvent(EVENT_GROUNDTREMOR, 12000); + } - //GroundTremor_Timer - if (GroundTremor_Timer <= diff) + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - DoCastVictim(SPELL_GROUNDTREMOR); - GroundTremor_Timer = 8000; - } else GroundTremor_Timer -= diff; + if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE)) + { + _events.SetPhase(PHASE_TWO); + _events.ScheduleEvent(EVENT_FRENZY, 0, 0, PHASE_TWO); + } + } - //Frenzy_Timer - if (HealthBelowPct(51)) + void UpdateAI(uint32 diff) override { - if (Frenzy_Timer <= diff) + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) { - DoCast(me, SPELL_FRENZY); - Talk(EMOTE_FRENZY_KILL); + switch (eventId) + { + case EVENT_GROUNDTREMOR: + DoCastVictim(SPELL_GROUNDTREMOR); + _events.ScheduleEvent(EVENT_GROUNDTREMOR, 8000); + break; + case EVENT_FRENZY: + DoCast(me, SPELL_FRENZY); + Talk(EMOTE_FRENZY_KILL); + _events.ScheduleEvent(EVENT_FRENZY, 15000, 0, PHASE_TWO); + break; + default: + break; + } + } - Frenzy_Timer = 15000; - } else Frenzy_Timer -= diff; + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_grizzleAI(creature); } - }; }; void AddSC_boss_grizzle() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp index 65a3fd35d48..c41ddf9d98b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -27,74 +26,81 @@ enum Spells SPELL_SHADOWSHIELD = 22417 }; -class boss_high_interrogator_gerstahn : public CreatureScript +enum Events { -public: - boss_high_interrogator_gerstahn() : CreatureScript("boss_high_interrogator_gerstahn") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_high_interrogator_gerstahnAI(creature); - } - - struct boss_high_interrogator_gerstahnAI : public ScriptedAI - { - boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 ShadowWordPain_Timer; - uint32 ManaBurn_Timer; - uint32 PsychicScream_Timer; - uint32 ShadowShield_Timer; - - void Reset() OVERRIDE - { - ShadowWordPain_Timer = 4000; - ManaBurn_Timer = 14000; - PsychicScream_Timer = 32000; - ShadowShield_Timer = 8000; - } + EVENT_SHADOW_WORD_PAIN = 1, + EVENT_MANABURN = 2, + EVENT_PSYCHIC_SCREAM = 3, + EVENT_SHADOWSHIELD = 4 +}; - void EnterCombat(Unit* /*who*/) OVERRIDE { } +class boss_high_interrogator_gerstahn : public CreatureScript +{ + public: + boss_high_interrogator_gerstahn() : CreatureScript("boss_high_interrogator_gerstahn") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_high_interrogator_gerstahnAI : public ScriptedAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_high_interrogator_gerstahnAI(Creature* creature) : ScriptedAI(creature) { } - //ShadowWordPain_Timer - if (ShadowWordPain_Timer <= diff) + void Reset() override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_SHADOWWORDPAIN); - ShadowWordPain_Timer = 7000; - } else ShadowWordPain_Timer -= diff; + _events.Reset(); + } - //ManaBurn_Timer - if (ManaBurn_Timer <= diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_MANABURN); - ManaBurn_Timer = 10000; - } else ManaBurn_Timer -= diff; + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 4000); + _events.ScheduleEvent(EVENT_MANABURN, 14000); + _events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 32000); + _events.ScheduleEvent(EVENT_SHADOWSHIELD, 8000); + } - //PsychicScream_Timer - if (PsychicScream_Timer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_PSYCHICSCREAM); - PsychicScream_Timer = 30000; - } else PsychicScream_Timer -= diff; + if (!UpdateVictim()) + return; - //ShadowShield_Timer - if (ShadowShield_Timer <= diff) - { - DoCast(me, SPELL_SHADOWSHIELD); - ShadowShield_Timer = 25000; - } else ShadowShield_Timer -= diff; + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SHADOW_WORD_PAIN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_SHADOWWORDPAIN); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 7000); + break; + case EVENT_PSYCHIC_SCREAM: + DoCastVictim(SPELL_PSYCHICSCREAM); + _events.ScheduleEvent(EVENT_PSYCHIC_SCREAM, 30000); + break; + case EVENT_MANABURN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_MANABURN); + _events.ScheduleEvent(EVENT_MANABURN, 10000); + break; + case EVENT_SHADOWSHIELD: + DoCast(me, SPELL_SHADOWSHIELD); + _events.ScheduleEvent(EVENT_SHADOWSHIELD, 25000); + break; + default: + break; + } + } - DoMeleeAttackIfReady(); + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_high_interrogator_gerstahnAI(creature); } - }; }; void AddSC_boss_high_interrogator_gerstahn() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp index ce3a11d817b..e6bbbaa73a9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -18,75 +17,96 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "blackrock_depths.h" enum Spells { - SPELL_FIERYBURST = 13900, - SPELL_WARSTOMP = 24375 + SPELL_FIERYBURST = 13900, + SPELL_WARSTOMP = 24375 }; -enum Misc +enum Events { - DATA_THRONE_DOOR = 24 // not id or guid of doors but number of enum in blackrock_depths.h + EVENT_FIERY_BURST = 1, + EVENT_WARSTOMP = 2 }; -class boss_magmus : public CreatureScript +enum Phases { -public: - boss_magmus() : CreatureScript("boss_magmus") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_magmusAI(creature); - } - - struct boss_magmusAI : public ScriptedAI - { - boss_magmusAI(Creature* creature) : ScriptedAI(creature) { } + PHASE_ONE = 1, + PHASE_TWO = 2 +}; - uint32 FieryBurst_Timer; - uint32 WarStomp_Timer; +class boss_magmus : public CreatureScript +{ + public: + boss_magmus() : CreatureScript("boss_magmus") { } - void Reset() OVERRIDE + struct boss_magmusAI : public ScriptedAI { - FieryBurst_Timer = 5000; - WarStomp_Timer =0; - } + boss_magmusAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override + { + _events.Reset(); + } - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.SetPhase(PHASE_ONE); + _events.ScheduleEvent(EVENT_FIERY_BURST, 5000); + } - //FieryBurst_Timer - if (FieryBurst_Timer <= diff) + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - DoCastVictim(SPELL_FIERYBURST); - FieryBurst_Timer = 6000; - } else FieryBurst_Timer -= diff; + if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE)) + { + _events.SetPhase(PHASE_TWO); + _events.ScheduleEvent(EVENT_WARSTOMP, 0, 0, PHASE_TWO); + } + } - //WarStomp_Timer - if (HealthBelowPct(51)) + void UpdateAI(uint32 diff) override { - if (WarStomp_Timer <= diff) + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) { - DoCastVictim(SPELL_WARSTOMP); - WarStomp_Timer = 8000; - } else WarStomp_Timer -= diff; + switch (eventId) + { + case EVENT_FIERY_BURST: + DoCastVictim(SPELL_FIERYBURST); + _events.ScheduleEvent(EVENT_FIERY_BURST, 6000); + break; + case EVENT_WARSTOMP: + DoCastVictim(SPELL_WARSTOMP); + _events.ScheduleEvent(EVENT_WARSTOMP, 8000, 0, PHASE_TWO); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - // When he die open door to last chamber - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* /*killer*/) override + { + if (InstanceScript* instance = me->GetInstanceScript()) + instance->HandleGameObject(instance->GetData64(DATA_THRONE_DOOR), true); + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (InstanceScript* instance = killer->GetInstanceScript()) - instance->HandleGameObject(instance->GetData64(DATA_THRONE_DOOR), true); + return new boss_magmusAI(creature); } - }; }; void AddSC_boss_magmus() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp index 21c887ac7d6..8342bef682b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -29,63 +28,73 @@ enum Spells SPELL_SMITE = 10934 }; -class boss_moira_bronzebeard : public CreatureScript +enum Events { -public: - boss_moira_bronzebeard() : CreatureScript("boss_moira_bronzebeard") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_moira_bronzebeardAI(creature); - } - - struct boss_moira_bronzebeardAI : public ScriptedAI - { - boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 Heal_Timer; - uint32 MindBlast_Timer; - uint32 ShadowWordPain_Timer; - uint32 Smite_Timer; - - void Reset() OVERRIDE - { - Heal_Timer = 12000; //These times are probably wrong - MindBlast_Timer = 16000; - ShadowWordPain_Timer = 2000; - Smite_Timer = 8000; - } + EVENT_MINDBLAST = 1, + EVENT_SHADOW_WORD_PAIN = 2, + EVENT_SMITE = 3, + EVENT_HEAL = 4 // not used atm +}; - void EnterCombat(Unit* /*who*/) OVERRIDE { } +class boss_moira_bronzebeard : public CreatureScript +{ + public: + boss_moira_bronzebeard() : CreatureScript("boss_moira_bronzebeard") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_moira_bronzebeardAI : public ScriptedAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_moira_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { } - //MindBlast_Timer - if (MindBlast_Timer <= diff) + void Reset() override { - DoCastVictim(SPELL_MINDBLAST); - MindBlast_Timer = 14000; - } else MindBlast_Timer -= diff; + _events.Reset(); + } - //ShadowWordPain_Timer - if (ShadowWordPain_Timer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCastVictim(SPELL_SHADOWWORDPAIN); - ShadowWordPain_Timer = 18000; - } else ShadowWordPain_Timer -= diff; + //_events.ScheduleEvent(EVENT_HEAL, 12000); // not used atm // These times are probably wrong + _events.ScheduleEvent(EVENT_MINDBLAST, 16000); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 2000); + _events.ScheduleEvent(EVENT_SMITE, 8000); + } - //Smite_Timer - if (Smite_Timer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_SMITE); - Smite_Timer = 10000; - } else Smite_Timer -= diff; + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_MINDBLAST: + DoCastVictim(SPELL_MINDBLAST); + _events.ScheduleEvent(EVENT_MINDBLAST, 14000); + break; + case EVENT_SHADOW_WORD_PAIN: + DoCastVictim(SPELL_SHADOWWORDPAIN); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 18000); + break; + case EVENT_SMITE: + DoCastVictim(SPELL_SMITE); + _events.ScheduleEvent(EVENT_SMITE, 10000); + break; + default: + break; + } + } + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_moira_bronzebeardAI(creature); } - }; }; void AddSC_boss_moira_bronzebeard() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index f432d71ff68..83464c12230 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -24,18 +24,24 @@ enum Spells { - SPELL_SMELT_DARK_IRON = 14891, - SPELL_LEARN_SMELT = 14894, + SPELL_SMELT_DARK_IRON = 14891, + SPELL_LEARN_SMELT = 14894, }; enum Quests { - QUEST_SPECTRAL_CHALICE = 4083 + QUEST_SPECTRAL_CHALICE = 4083 }; enum Misc { - DATA_SKILLPOINT_MIN = 230 + DATA_SKILLPOINT_MIN = 230 +}; + +enum Phases +{ + PHASE_ONE = 1, + PHASE_TWO = 2 }; #define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron" @@ -48,7 +54,7 @@ class boss_gloomrel : public CreatureScript public: boss_gloomrel() : CreatureScript("boss_gloomrel") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -77,7 +83,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestRewardStatus(QUEST_SPECTRAL_CHALICE) == 1 && player->GetSkillValue(SKILL_MINING) >= DATA_SKILLPOINT_MIN && !player->HasSpell(SPELL_SMELT_DARK_IRON)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); @@ -99,149 +105,151 @@ enum DoomrelSpells SPELL_SUMMON_VOIDWALKERS = 15092 }; +enum DoomrelEvents +{ + EVENT_SHADOW_BOLT_VOLLEY = 1, + EVENT_IMMOLATE = 2, + EVENT_CURSE_OF_WEAKNESS = 3, + EVENT_DEMONARMOR = 4, + EVENT_SUMMON_VOIDWALKERS = 5 +}; + #define GOSSIP_ITEM_CHALLENGE "Your bondage is at an end, Doom'rel. I challenge you!" #define GOSSIP_SELECT_DOOMREL "[PH] Continue..." class boss_doomrel : public CreatureScript { -public: - boss_doomrel() : CreatureScript("boss_doomrel") { } + public: + boss_doomrel() : CreatureScript("boss_doomrel") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_DOOMREL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(2605, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->CLOSE_GOSSIP_MENU(); - //start event here - creature->setFaction(FACTION_HOSTILE); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - creature->AI()->AttackStart(player); - InstanceScript* instance = creature->GetInstanceScript(); - if (instance) - instance->SetData64(DATA_EVENSTARTER, player->GetGUID()); - break; + player->PlayerTalkClass->ClearMenus(); + switch (action) + { + case GOSSIP_ACTION_INFO_DEF+1: + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT_DOOMREL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + player->SEND_GOSSIP_MENU(2605, creature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+2: + player->CLOSE_GOSSIP_MENU(); + //start event here + creature->setFaction(FACTION_HOSTILE); + creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + creature->AI()->AttackStart(player); + InstanceScript* instance = creature->GetInstanceScript(); + if (instance) + instance->SetData64(DATA_EVENSTARTER, player->GetGUID()); + break; + } + return true; } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_CHALLENGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(2601, creature->GetGUID()); - - return true; - } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_doomrelAI>(creature); - } - - struct boss_doomrelAI : public ScriptedAI - { - boss_doomrelAI(Creature* creature) : ScriptedAI(creature) + bool OnGossipHello(Player* player, Creature* creature) override { - instance = creature->GetInstanceScript(); - } + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_CHALLENGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->SEND_GOSSIP_MENU(2601, creature->GetGUID()); - InstanceScript* instance; - uint32 ShadowVolley_Timer; - uint32 Immolate_Timer; - uint32 CurseOfWeakness_Timer; - uint32 DemonArmor_Timer; - bool Voidwalkers; + return true; + } - void Reset() OVERRIDE + struct boss_doomrelAI : public ScriptedAI { - ShadowVolley_Timer = 10000; - Immolate_Timer = 18000; - CurseOfWeakness_Timer = 5000; - DemonArmor_Timer = 16000; - Voidwalkers = false; - - me->setFaction(FACTION_FRIEND); + boss_doomrelAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - // was set before event start, so set again - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + void Reset() override + { + _voidwalkers = false; - if (instance->GetData(DATA_GHOSTKILL) >= 7) - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - else - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - } + me->setFaction(FACTION_FRIEND); - void EnterCombat(Unit* /*who*/) OVERRIDE - { - } + // was set before event start, so set again + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - void EnterEvadeMode() OVERRIDE - { - me->RemoveAllAuras(); - me->DeleteThreatList(); - me->CombatStop(true); - me->LoadCreaturesAddon(); - if (me->IsAlive()) - me->GetMotionMaster()->MoveTargetedHome(); - me->SetLootRecipient(NULL); - instance->SetData64(DATA_EVENSTARTER, 0); - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - instance->SetData(DATA_GHOSTKILL, 1); - } + if (_instance->GetData(DATA_GHOSTKILL) >= 7) + me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + else + me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + } - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 10000); + _events.ScheduleEvent(EVENT_IMMOLATE, 18000); + _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 5000); + _events.ScheduleEvent(EVENT_DEMONARMOR, 16000); + } - //ShadowVolley_Timer - if (ShadowVolley_Timer <= diff) + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { - DoCastVictim(SPELL_SHADOWBOLTVOLLEY); - ShadowVolley_Timer = 12000; - } else ShadowVolley_Timer -= diff; + if (!_voidwalkers && !HealthAbovePct(50)) + { + DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true); + _voidwalkers = true; + } + } - //Immolate_Timer - if (Immolate_Timer <= diff) + void EnterEvadeMode() override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_IMMOLATE); + ScriptedAI::EnterEvadeMode(); - Immolate_Timer = 25000; - } else Immolate_Timer -= diff; + _instance->SetData64(DATA_EVENSTARTER, 0); + } - //CurseOfWeakness_Timer - if (CurseOfWeakness_Timer <= diff) + void JustDied(Unit* /*killer*/) override { - DoCastVictim(SPELL_CURSEOFWEAKNESS); - CurseOfWeakness_Timer = 45000; - } else CurseOfWeakness_Timer -= diff; + _instance->SetData(DATA_GHOSTKILL, 1); + } - //DemonArmor_Timer - if (DemonArmor_Timer <= diff) + void UpdateAI(uint32 diff) override { - DoCast(me, SPELL_DEMONARMOR); - DemonArmor_Timer = 300000; - } else DemonArmor_Timer -= diff; + if (!UpdateVictim()) + return; - //Summon Voidwalkers - if (!Voidwalkers && HealthBelowPct(51)) - { - DoCastVictim(SPELL_SUMMON_VOIDWALKERS, true); - Voidwalkers = true; + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SHADOW_BOLT_VOLLEY: + DoCastVictim(SPELL_SHADOWBOLTVOLLEY); + _events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 12000); + break; + case EVENT_IMMOLATE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_IMMOLATE); + _events.ScheduleEvent(EVENT_IMMOLATE, 25000); + break; + case EVENT_CURSE_OF_WEAKNESS: + DoCastVictim(SPELL_CURSEOFWEAKNESS); + _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000); + break; + case EVENT_DEMONARMOR: + DoCast(me, SPELL_DEMONARMOR); + _events.ScheduleEvent(EVENT_DEMONARMOR, 300000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); + private: + InstanceScript* _instance; + EventMap _events; + bool _voidwalkers; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_doomrelAI>(creature); } - }; }; void AddSC_boss_tomb_of_seven() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index 42c7c046d48..f51a2a95c81 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -69,7 +69,7 @@ class instance_blackrock_depths : public InstanceMapScript public: instance_blackrock_depths() : InstanceMapScript("instance_blackrock_depths", 230) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blackrock_depths_InstanceMapScript(map); } @@ -115,7 +115,7 @@ public: uint32 TombTimer; uint32 TombEventCounter; - void Initialize() OVERRIDE + void Initialize() override { memset(&encounter, 0, sizeof(encounter)); @@ -156,7 +156,7 @@ public: TombBossGUIDs[i] = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -178,7 +178,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -212,7 +212,7 @@ public: } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { TC_LOG_DEBUG("scripts", "Instance Blackrock Depths: SetData64 update (Type: %u Data " UI64FMTD ")", type, data); @@ -228,7 +228,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { TC_LOG_DEBUG("scripts", "Instance Blackrock Depths: SetData update (Type: %u Data %u)", type, data); @@ -275,7 +275,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -300,7 +300,7 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -342,12 +342,12 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -429,7 +429,7 @@ public: TombEventStarterGUID = 0; SetData(TYPE_TOMB_OF_SEVEN, DONE); } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (TombEventStarterGUID && GhostKillCount < 7) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp index 32b87a94ae4..6a56ce363f4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp @@ -45,12 +45,12 @@ public: { boss_drakkisathAI(Creature* creature) : BossAI(creature, DATA_GENERAL_DRAKKISATH) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FIRE_NOVA, 6000); @@ -59,12 +59,12 @@ public: events.ScheduleEvent(EVENT_THUNDERCLAP, 17000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -100,7 +100,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_drakkisathAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp index 1c6c0a5aa62..e92409555da 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp @@ -48,29 +48,29 @@ public: { boss_gizrul_the_slavenerAI(Creature* creature) : BossAI(creature, DATA_GIZRUL_THE_SLAVENER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { me->GetMotionMaster()->MovePath(GIZRUL_PATH, false); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FATAL_BITE, urand(17000,20000)); events.ScheduleEvent(EVENT_INFECTED_BITE, urand(10000,12000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -100,7 +100,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gizrul_the_slavenerAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index 96582fdf6fe..ed62e26075c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -57,7 +57,7 @@ public: bool SummonedRend; - void Reset() OVERRIDE + void Reset() override { SummonedRend = false; if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS) @@ -67,7 +67,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -77,12 +77,12 @@ public: events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(12000, 18000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_GYTH, DONE); } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { switch (data) { @@ -94,7 +94,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!SummonedRend && HealthBelowPct(5)) @@ -160,7 +160,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gythAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp index 482cc9cf81a..d5f7a4ce34b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp @@ -47,20 +47,20 @@ public: { boss_halyconAI(Creature* creature) : BossAI(creature, DATA_HALYCON) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); Summoned = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_REND, urand(17000,20000)); events.ScheduleEvent(EVENT_THRASH, urand(10000,12000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SummonCreature(NPC_GIZRUL_THE_SLAVENER, SummonLocation, TEMPSUMMON_TIMED_DESPAWN, 300000); Talk(EMOTE_DEATH); @@ -68,7 +68,7 @@ public: Summoned = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -99,7 +99,7 @@ public: bool Summoned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_halyconAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp index 590c025388b..25e8014639f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp @@ -37,7 +37,7 @@ class boss_highlord_omokk : public CreatureScript public: boss_highlord_omokk() : CreatureScript("boss_highlord_omokk") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_highlordomokkAI(creature); } @@ -46,24 +46,24 @@ public: { boss_highlordomokkAI(Creature* creature) : BossAI(creature, DATA_HIGHLORD_OMOKK) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FRENZY, 20000); events.ScheduleEvent(EVENT_KNOCK_AWAY, 18000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index 41e0fb61018..23593442e86 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -48,26 +48,26 @@ public: { boss_lord_valthalakAI(Creature* creature) : BossAI(creature, DATA_LORD_VALTHALAK) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); frenzy40 = false; frenzy15 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN, urand(6000,8000)); events.ScheduleEvent(EVENT_SHADOW_WRATH, urand(9000,18000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_LORD_VALTHALAK, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -125,7 +125,7 @@ public: bool frenzy15; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lord_valthalakAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp index ed1916b90d6..87ecd00609d 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp @@ -38,7 +38,7 @@ class boss_mother_smolderweb : public CreatureScript public: boss_mother_smolderweb() : CreatureScript("boss_mother_smolderweb") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_mothersmolderwebAI(creature); } @@ -47,30 +47,30 @@ public: { boss_mothersmolderwebAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SMOLDERWEB) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_CRYSTALIZE, 20 * IN_MILLISECONDS); events.ScheduleEvent(EVENT_MOTHERS_MILK, 10 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (me->GetHealth() <= damage) DoCast(me, SPELL_SUMMON_SPIRE_SPIDERLING, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp index 8db2065b3ea..cc6911b5da7 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp @@ -50,7 +50,7 @@ class boss_overlord_wyrmthalak : public CreatureScript public: boss_overlord_wyrmthalak() : CreatureScript("boss_overlord_wyrmthalak") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_overlordwyrmthalakAI(creature); } @@ -61,13 +61,13 @@ public: bool Summoned; - void Reset() OVERRIDE + void Reset() override { _Reset(); Summoned = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_BLAST_WAVE, 20 * IN_MILLISECONDS); @@ -76,12 +76,12 @@ public: events.ScheduleEvent(EVENT_KNOCK_AWAY, 12 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 7f5cd93a5b1..4be139c2ee9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -77,7 +77,7 @@ public: { boss_pyroguard_emberseerAI(Creature* creature) : BossAI(creature, DATA_PYROGAURD_EMBERSEER) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); events.Reset(); @@ -95,7 +95,7 @@ public: OpenDoors(false); // Opens 2 entrance doors } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { switch (data) { @@ -119,7 +119,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { // ### TODO Check combat timing ### events.ScheduleEvent(EVENT_FIRENOVA, 6000); @@ -127,7 +127,7 @@ public: events.ScheduleEvent(EVENT_PYROBLAST, 14000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // Activate all the runes UpdateRunes(GO_STATE_READY); @@ -137,7 +137,7 @@ public: instance->SetBossState(DATA_PYROGAURD_EMBERSEER, DONE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ENCAGE_EMBERSEER) { @@ -196,7 +196,7 @@ public: rune7->SetGoState(state); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -305,7 +305,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_pyroguard_emberseerAI>(creature); } @@ -333,19 +333,19 @@ public: { npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC); if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true)) Emberseer->AI()->SetData(1, 3); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(10000); } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data == 1 && value == 1) { @@ -360,7 +360,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { // Used to close doors if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true)) @@ -379,7 +379,7 @@ public: _events.ScheduleEvent(EVENT_ENCAGE, urand(10000, 20000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { @@ -431,7 +431,7 @@ public: EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_blackhand_incarceratorAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp index 27229b6ba71..e431bebcf02 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp @@ -42,24 +42,24 @@ public: { boss_quatermasterzigrisAI(Creature* creature) : BossAI(creature, DATA_QUARTERMASTER_ZIGRIS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SHOOT, 1000); events.ScheduleEvent(EVENT_STUN_BOMB, 16000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -87,7 +87,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_quatermasterzigrisAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index 8989a8065dc..94bf3e991f4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -164,9 +164,14 @@ public: struct boss_rend_blackhandAI : public BossAI { - boss_rend_blackhandAI(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND) { } + boss_rend_blackhandAI(Creature* creature) : BossAI(creature, DATA_WARCHIEF_REND_BLACKHAND) + { + gythEvent = false; + victorGUID = 0; + portcullisGUID = 0; + } - void Reset() OVERRIDE + void Reset() override { _Reset(); gythEvent = false; @@ -174,7 +179,7 @@ public: portcullisGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_WHIRLWIND, urand(13000, 15000)); @@ -182,14 +187,14 @@ public: events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(17000, 19000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true)) victor->AI()->SetData(1, 2); } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == AREATRIGGER && data == AREATRIGGER_BLACKROCK_STADIUM) { @@ -209,7 +214,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE) { @@ -227,7 +232,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (gythEvent) { @@ -238,37 +243,37 @@ public: switch (eventId) { case EVENT_START_1: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_0); events.ScheduleEvent(EVENT_START_2, 4000); break; case EVENT_START_2: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT); events.ScheduleEvent(EVENT_START_3, 4000); break; case EVENT_START_3: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_1); events.ScheduleEvent(EVENT_WAVE_1, 2000); events.ScheduleEvent(EVENT_TURN_TO_REND, 4000); events.ScheduleEvent(EVENT_WAVES_TEXT_1, 20000); break; case EVENT_TURN_TO_REND: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) { victor->SetFacingToObject(me); victor->HandleEmoteCommand(EMOTE_ONESHOT_TALK); } break; case EVENT_TURN_TO_PLAYER: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) if (Unit* player = victor->SelectNearestPlayer(60.0f)) victor->SetFacingToObject(player); break; case EVENT_TURN_TO_FACING_1: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->SetFacingTo(1.518436f); break; case EVENT_TURN_TO_FACING_2: @@ -278,7 +283,7 @@ public: me->SetFacingTo(1.500983f); break; case EVENT_WAVES_EMOTE_1: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION); break; case EVENT_WAVES_EMOTE_2: @@ -286,7 +291,7 @@ public: break; case EVENT_WAVES_TEXT_1: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_2); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); @@ -296,7 +301,7 @@ public: break; case EVENT_WAVES_TEXT_2: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_3); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); events.ScheduleEvent(EVENT_WAVE_3, 2000); @@ -304,7 +309,7 @@ public: break; case EVENT_WAVES_TEXT_3: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_4); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); events.ScheduleEvent(EVENT_WAVE_4, 2000); @@ -319,7 +324,7 @@ public: break; case EVENT_WAVES_TEXT_5: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_5); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); events.ScheduleEvent(EVENT_WAVE_6, 2000); @@ -327,26 +332,26 @@ public: break; case EVENT_WAVES_COMPLETE_TEXT_1: events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_6); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4000); events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_2, 13000); break; case EVENT_WAVES_COMPLETE_TEXT_2: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_7); Talk(SAY_BLACKHAND_2); events.ScheduleEvent(EVENT_PATH_REND, 1000); events.ScheduleEvent(EVENT_WAVES_COMPLETE_TEXT_3, 4000); break; case EVENT_WAVES_COMPLETE_TEXT_3: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_8); events.ScheduleEvent(EVENT_PATH_NEFARIUS, 1000); events.ScheduleEvent(EVENT_PATH_REND, 1000); break; case EVENT_PATH_NEFARIUS: - if (Creature* victor = me->GetCreature(*me, victorGUID)) + if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true); break; case EVENT_PATH_REND: @@ -436,7 +441,7 @@ public: uint64 portcullisGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_rend_blackhandAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp index dac7e8f50ba..f70864c0ebe 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp @@ -39,7 +39,7 @@ class boss_shadow_hunter_voshgajin : public CreatureScript public: boss_shadow_hunter_voshgajin() : CreatureScript("boss_shadow_hunter_voshgajin") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_shadowvoshAI(creature); } @@ -48,13 +48,13 @@ public: { boss_shadowvoshAI(Creature* creature) : BossAI(creature, DATA_SHADOW_HUNTER_VOSHGAJIN) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); //DoCast(me, SPELL_ICEARMOR, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 2 * IN_MILLISECONDS); @@ -62,12 +62,12 @@ public: events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index 0c9c66b83f3..51e84359707 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -39,7 +39,7 @@ class boss_the_beast : public CreatureScript public: boss_the_beast() : CreatureScript("boss_the_beast") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_thebeastAI(creature); } @@ -48,12 +48,12 @@ public: { boss_thebeastAI(Creature* creature) : BossAI(creature, DATA_THE_BEAST) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FLAME_BREAK, 12 * IN_MILLISECONDS); @@ -61,12 +61,12 @@ public: events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 23 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp index a525e0395d1..412844b8709 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp @@ -48,12 +48,12 @@ public: { boss_urok_doomhowlAI(Creature* creature) : BossAI(creature, DATA_UROK_DOOMHOWL) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(SPELL_REND, urand(17000,20000)); @@ -61,12 +61,12 @@ public: Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -96,7 +96,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_urok_doomhowlAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp index dc84aba0ee3..756f8d22511 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp @@ -49,12 +49,12 @@ public: { boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS); @@ -65,12 +65,12 @@ public: events.ScheduleEvent(EVENT_THROW_AXE, 1 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -114,7 +114,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_warmastervooneAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp index d335ebccb6c..b3a55e1fe4a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp @@ -26,7 +26,7 @@ #include "ScriptedCreature.h" #include "blackrock_spire.h" -uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 }; +//uint32 const DragonspireRunes[7] = { GO_HALL_RUNE_1, GO_HALL_RUNE_2, GO_HALL_RUNE_3, GO_HALL_RUNE_4, GO_HALL_RUNE_5, GO_HALL_RUNE_6, GO_HALL_RUNE_7 }; uint32 const DragonspireMobs[3] = { NPC_BLACKHAND_DREADWEAVER, NPC_BLACKHAND_SUMMONER, NPC_BLACKHAND_VETERAN }; @@ -77,7 +77,7 @@ public: memset(go_emberseerrunes, 0, sizeof(go_emberseerrunes)); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -135,7 +135,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -242,7 +242,7 @@ public: } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -272,7 +272,7 @@ public: return true; } - void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override { switch (eventId) { @@ -294,7 +294,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -309,7 +309,7 @@ public: } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -385,7 +385,7 @@ public: return 0; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { Events.Update(diff); @@ -502,7 +502,7 @@ public: } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -513,7 +513,7 @@ public: return saveStream.str(); } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { @@ -574,7 +574,7 @@ public: uint64 go_portcullis_tobossrooms; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blackrock_spireMapScript(map); } @@ -589,7 +589,7 @@ class at_dragonspire_hall : public AreaTriggerScript public: at_dragonspire_hall() : AreaTriggerScript("at_dragonspire_hall") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { if (player && player->IsAlive()) { @@ -613,7 +613,7 @@ class at_blackrock_stadium : public AreaTriggerScript public: at_blackrock_stadium() : AreaTriggerScript("at_blackrock_stadium") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { if (player && player->IsAlive()) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp index 307f5e24619..491d8cbd512 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp @@ -52,7 +52,7 @@ public: { boss_broodlordAI(Creature* creature) : BossAI(creature, BOSS_BROODLORD) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (instance->GetBossState(BOSS_VAELASTRAZ) != DONE) { @@ -70,7 +70,7 @@ public: events.ScheduleEvent(EVENT_CHECK, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -114,7 +114,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_broodlordAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 3930656f0e1..efe0a0e2a78 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -173,7 +173,7 @@ public: EnterEvadeMode(); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -181,7 +181,7 @@ public: Enraged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (instance->GetBossState(BOSS_FLAMEGOR) != DONE) { @@ -197,7 +197,7 @@ public: events.ScheduleEvent(EVENT_FRENZY, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -280,7 +280,7 @@ public: bool Enraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_chromaggusAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp index 8d25fe117fe..158ffce8cea 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp @@ -43,7 +43,7 @@ public: { boss_ebonrocAI(Creature* creature) : BossAI(creature, BOSS_EBONROC) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (instance->GetBossState(BOSS_BROODLORD) != DONE) { @@ -57,7 +57,7 @@ public: events.ScheduleEvent(EVENT_SHADOWOFEBONROC, urand(8000, 10000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -90,7 +90,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ebonrocAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp index cbd625e852a..4814a1a98d1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp @@ -43,7 +43,7 @@ public: { boss_firemawAI(Creature* creature) : BossAI(creature, BOSS_FIREMAW) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (instance->GetBossState(BOSS_BROODLORD) != DONE) { @@ -57,7 +57,7 @@ public: events.ScheduleEvent(EVENT_FLAMEBUFFET, 5000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -92,7 +92,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_firemawAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp index 390bcaa3c9d..98bf146c9c9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp @@ -48,7 +48,7 @@ public: { boss_flamegorAI(Creature* creature) : BossAI(creature, BOSS_FLAMEGOR) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (instance->GetBossState(BOSS_BROODLORD) != DONE) { @@ -62,7 +62,7 @@ public: events.ScheduleEvent(EVENT_FRENZY, 10000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -98,7 +98,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_flamegorAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 02662cd235c..23a7cb10dd8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -168,7 +168,7 @@ public: { boss_victor_nefariusAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { } - void Reset() OVERRIDE + void Reset() override { SpawnedAdds = 0; @@ -186,7 +186,7 @@ public: } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { Reset(); } @@ -208,7 +208,7 @@ public: events.ScheduleEvent(EVENT_SPAWN_ADD, 10000); } - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override { if (summon->GetEntry() != NPC_NEFARIAN) { @@ -219,9 +219,9 @@ public: } } - void JustSummoned(Creature* /*summon*/) OVERRIDE { } + void JustSummoned(Creature* /*summon*/) override { } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if ( type == 1 && data == 1) { @@ -233,7 +233,7 @@ public: events.ScheduleEvent(EVENT_SUCCESS_1, 5000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -342,7 +342,7 @@ public: nefarian->setActive(true); nefarian->SetCanFly(true); nefarian->SetDisableGravity(true); - nefarian->AI()->DoCastAOE(SPELL_SHADOWFLAME_INITIAL); + nefarian->CastSpell((Unit*)NULL, SPELL_SHADOWFLAME_INITIAL); nefarian->GetMotionMaster()->MovePoint(1, NefarianLoc[1]); } events.CancelEvent(EVENT_MIND_CONTROL); @@ -359,7 +359,7 @@ public: } } - void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 action) override { if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID) { @@ -373,7 +373,7 @@ public: uint32 SpawnedAdds; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_victor_nefariusAI>(creature); } @@ -388,19 +388,19 @@ public: { boss_nefarianAI(Creature* creature) : BossAI(creature, BOSS_NEFARIAN) { } - void Reset() OVERRIDE + void Reset() override { Phase3 = false; canDespawn = false; DespawnTimer = 30000; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { canDespawn = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_SHADOWFLAME, 12000); events.ScheduleEvent(EVENT_FEAR, urand(25000, 35000)); @@ -411,13 +411,13 @@ public: Talk(SAY_RANDOM); } - void JustDied(Unit* /*Killer*/) OVERRIDE + void JustDied(Unit* /*Killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (rand()%5) return; @@ -425,7 +425,7 @@ public: Talk(SAY_SLAY, victim); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -438,7 +438,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (canDespawn && DespawnTimer <= diff) { @@ -568,7 +568,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_nefarianAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index b1bc34b0437..8d4a84197b1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -70,7 +70,7 @@ public: { boss_razorgoreAI(Creature* creature) : BossAI(creature, BOSS_RAZORGORE) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -78,7 +78,7 @@ public: instance->SetData(DATA_EGG_EVENT, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -98,19 +98,19 @@ public: me->SetHealth(me->GetMaxHealth()); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_PHASE_TWO) DoChangePhase(); } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { if (!secondPhase) damage = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -138,7 +138,7 @@ public: break; case EVENT_CONFLAGRATION: DoCastVictim(SPELL_CONFLAGRATION); - if (me->GetVictim() && me->GetVictim()->HasAura(SPELL_CONFLAGRATION)) + if (me->GetVictim() && me->EnsureVictim()->HasAura(SPELL_CONFLAGRATION)) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true)) me->TauntApply(target); events.ScheduleEvent(EVENT_CONFLAGRATION, 30000); @@ -152,7 +152,7 @@ public: bool secondPhase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_razorgoreAI>(creature); } @@ -163,11 +163,11 @@ class go_orb_of_domination : public GameObjectScript public: go_orb_of_domination() : GameObjectScript("go_orb_of_domination") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) if (instance->GetData(DATA_EGG_EVENT) != DONE) - if (Creature* razor = Unit::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED))) + if (Creature* razor = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_RAZORGORE_THE_UNTAMED))) { razor->Attack(player, true); player->CastSpell(razor, SPELL_MINDCONTROL); @@ -191,13 +191,13 @@ class spell_egg_event : public SpellScriptLoader instance->SetData(DATA_EGG_EVENT, SPECIAL); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_egg_eventSpellScript::HandleOnHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_egg_eventSpellScript(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index f8e00e4ed74..bbe70947901 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -75,7 +75,7 @@ public: creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -85,7 +85,7 @@ public: HasYelled = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -109,7 +109,7 @@ public: events.ScheduleEvent(EVENT_SPEECH_1, 1000); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (rand()%5) return; @@ -117,7 +117,7 @@ public: Talk(SAY_KILLTARGET, victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -146,8 +146,8 @@ public: break; case EVENT_SPEECH_4: me->setFaction(103); - if (PlayerGUID && Unit::GetUnit(*me, PlayerGUID)) - AttackStart(Unit::GetUnit(*me, PlayerGUID));; + if (PlayerGUID && ObjectAccessor::GetUnit(*me, PlayerGUID)) + AttackStart(ObjectAccessor::GetUnit(*me, PlayerGUID));; break; } } @@ -200,7 +200,7 @@ public: break; case EVENT_BURNINGADRENALINE_TANK: // have the victim cast the spell on himself otherwise the third effect aura will be applied to Vael instead of the player - me->GetVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true); + me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_BURNINGADRENALINE, true); events.ScheduleEvent(EVENT_BURNINGADRENALINE_TANK, 45000); break; } @@ -216,7 +216,7 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 action) override { if (sender == GOSSIP_ID && action == 0) { @@ -230,7 +230,7 @@ public: bool HasYelled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_vaelAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 39d2a6d87d5..be8bc34acf1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -56,10 +56,32 @@ public: { instance_blackwing_lair_InstanceMapScript(Map* map) : InstanceScript(map) { + // Razorgore + EggCount = 0; + EggEvent = 0; + RazorgoreTheUntamedGUID = 0; + RazorgoreDoorGUID = 0; + // Vaelastrasz the Corrupt + VaelastraszTheCorruptGUID = 0; + VaelastraszDoorGUID = 0; + // Broodlord Lashlayer + BroodlordLashlayerGUID = 0; + BroodlordDoorGUID = 0; + // 3 Dragons + FiremawGUID = 0; + EbonrocGUID = 0; + FlamegorGUID = 0; + ChrommagusDoorGUID = 0; + // Chormaggus + ChromaggusGUID = 0; + NefarianDoorGUID = 0; + // Nefarian + LordVictorNefariusGUID = 0; + NefarianGUID = 0; SetBossNumber(EncounterCount); } - void Initialize() OVERRIDE + void Initialize() override { // Razorgore EggCount = 0; @@ -86,7 +108,7 @@ public: NefarianGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -127,7 +149,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -160,13 +182,13 @@ public: } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { if (go->GetEntry() == 177807) // Egg EggList.remove(go->GetGUID()); } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -216,7 +238,7 @@ public: return true; } - uint64 GetData64(uint32 id) const OVERRIDE + uint64 GetData64(uint32 id) const override { switch (id) { @@ -234,7 +256,7 @@ public: return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_EGG_EVENT) { @@ -269,14 +291,14 @@ public: } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { //! HACK, needed because of buggy CreatureAI after charm if (unit->GetEntry() == NPC_RAZORGORE && GetBossState(BOSS_RAZORGORE) != DONE) SetBossState(BOSS_RAZORGORE, DONE); } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (_events.Empty()) return; @@ -344,7 +366,7 @@ public: uint64 NefarianGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blackwing_lair_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp index 334f055b748..81731fabeb0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp @@ -59,7 +59,7 @@ class boss_baron_geddon : public CreatureScript { } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_INFERNO, 45000); @@ -67,7 +67,7 @@ class boss_baron_geddon : public CreatureScript events.ScheduleEvent(EVENT_LIVING_BOMB, 35000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -113,7 +113,7 @@ class boss_baron_geddon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_baron_geddonAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp index da72f9f5b5c..2a1309dc097 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp @@ -57,14 +57,14 @@ class boss_garr : public CreatureScript { } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_ANTIMAGIC_PULSE, 25000); events.ScheduleEvent(EVENT_MAGMA_SHACKLES, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -95,7 +95,7 @@ class boss_garr : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_garrAI(creature); } @@ -112,12 +112,12 @@ class npc_firesworn : public CreatureScript uint32 immolateTimer; - void Reset() OVERRIDE + void Reset() override { immolateTimer = 4000; //These times are probably wrong } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { uint32 const health10pct = me->CountPctFromMaxHealth(10); uint32 health = me->GetHealth(); @@ -129,7 +129,7 @@ class npc_firesworn : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -147,7 +147,7 @@ class npc_firesworn : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fireswornAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp index b1ee30b1cf2..39dc0f11248 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp @@ -53,7 +53,7 @@ class boss_gehennas : public CreatureScript { } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_GEHENNAS_CURSE, 12000); @@ -61,7 +61,7 @@ class boss_gehennas : public CreatureScript events.ScheduleEvent(EVENT_SHADOW_BOLT, 6000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -98,7 +98,7 @@ class boss_gehennas : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gehennasAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp index 57922d7f7d9..f9757997731 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp @@ -63,19 +63,19 @@ class boss_golemagg : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { BossAI::Reset(); DoCast(me, SPELL_MAGMASPLASH, true); } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_PYROBLAST, 7000); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!HealthBelowPct(10) || me->HasAura(SPELL_ENRAGE)) return; @@ -84,7 +84,7 @@ class boss_golemagg : public CreatureScript events.ScheduleEvent(EVENT_EARTHQUAKE, 3000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -116,7 +116,7 @@ class boss_golemagg : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_golemaggAI(creature); } @@ -134,17 +134,17 @@ class npc_core_rager : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { mangleTimer = 7*IN_MILLISECONDS; // These times are probably wrong } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (HealthAbovePct(50) || !instance) return; - if (Creature* pGolemagg = instance->instance->GetCreature(instance->GetData64(BOSS_GOLEMAGG_THE_INCINERATOR))) + if (Creature* pGolemagg = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_GOLEMAGG_THE_INCINERATOR))) { if (pGolemagg->IsAlive()) { @@ -155,7 +155,7 @@ class npc_core_rager : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -177,7 +177,7 @@ class npc_core_rager : public CreatureScript uint32 mangleTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_core_ragerAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp index fa6f5bab928..e61b6f2cbf9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp @@ -53,7 +53,7 @@ class boss_lucifron : public CreatureScript { } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_IMPENDING_DOOM, 10000); @@ -61,7 +61,7 @@ class boss_lucifron : public CreatureScript events.ScheduleEvent(EVENT_SHADOW_SHOCK, 6000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -96,7 +96,7 @@ class boss_lucifron : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lucifronAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp index d674ab876f0..4a3b6cc16e4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp @@ -59,13 +59,13 @@ class boss_magmadar : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { BossAI::Reset(); DoCast(me, SPELL_MAGMA_SPIT, true); } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_FRENZY, 30000); @@ -73,7 +73,7 @@ class boss_magmadar : public CreatureScript events.ScheduleEvent(EVENT_LAVA_BOMB, 12000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -110,7 +110,7 @@ class boss_magmadar : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_magmadarAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index d2bd82447dc..80f907d4803 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -78,13 +78,13 @@ class boss_majordomo : public CreatureScript { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (urand(0, 99) < 25) Talk(SAY_SLAY); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { BossAI::EnterCombat(who); Talk(SAY_AGGRO); @@ -94,7 +94,7 @@ class boss_majordomo : public CreatureScript events.ScheduleEvent(EVENT_TELEPORT, 20000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetBossState(BOSS_MAJORDOMO_EXECUTUS) != DONE) { @@ -107,7 +107,7 @@ class boss_majordomo : public CreatureScript { instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, me->GetEntry(), me); me->setFaction(35); - me->AI()->EnterEvadeMode(); + EnterEvadeMode(); Talk(SAY_DEFEAT); _JustDied(); events.ScheduleEvent(EVENT_OUTRO_1, 32000); @@ -173,7 +173,7 @@ class boss_majordomo : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_RAGNAROS) { @@ -190,21 +190,21 @@ class boss_majordomo : public CreatureScript } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->SEND_GOSSIP_MENU(GOSSIP_HELLO, creature->GetGUID()); return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); creature->AI()->DoAction(ACTION_START_RAGNAROS); return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_majordomoAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 4d22ba6abb3..6eafb41a8fa 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -87,7 +87,7 @@ class boss_ragnaros : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void Reset() OVERRIDE + void Reset() override { BossAI::Reset(); _emergeTimer = 90000; @@ -97,7 +97,7 @@ class boss_ragnaros : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_ERUPTION, 15000); @@ -109,13 +109,13 @@ class boss_ragnaros : public CreatureScript events.ScheduleEvent(EVENT_SUBMERGE, 180000); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (urand(0, 99) < 25) Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_introState != 2) { @@ -147,7 +147,7 @@ class boss_ragnaros : public CreatureScript break; case EVENT_INTRO_4: Talk(SAY_ARRIVAL5_RAG); - if (Creature* executus = Unit::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS))) + if (Creature* executus = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MAJORDOMO_EXECUTUS))) me->Kill(executus); break; case EVENT_INTRO_5: @@ -300,7 +300,7 @@ class boss_ragnaros : public CreatureScript bool _isBanished; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ragnarosAI>(creature); } @@ -318,12 +318,12 @@ class npc_son_of_flame : public CreatureScript instance = me->GetInstanceScript(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_RAGNAROS_ADDS, 1); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -335,7 +335,7 @@ class npc_son_of_flame : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_son_of_flameAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp index 4ca66a1c856..fcabf3d1b18 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp @@ -56,7 +56,7 @@ class boss_shazzrah : public CreatureScript { } - void EnterCombat(Unit* target) OVERRIDE + void EnterCombat(Unit* target) override { BossAI::EnterCombat(target); events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 6000); @@ -66,7 +66,7 @@ class boss_shazzrah : public CreatureScript events.ScheduleEvent(EVENT_BLINK, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -117,7 +117,7 @@ class boss_shazzrah : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_shazzrahAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp index ddb079b7b3d..dfe7a1527cd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp @@ -67,7 +67,7 @@ class boss_sulfuron : public CreatureScript { } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { BossAI::EnterCombat(victim); events.ScheduleEvent(EVENT_DARK_STRIKE, 10000); @@ -77,7 +77,7 @@ class boss_sulfuron : public CreatureScript events.ScheduleEvent(EVENT_FLAMESPEAR, 2000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -127,7 +127,7 @@ class boss_sulfuron : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_sulfuronAI(creature); } @@ -144,17 +144,17 @@ class npc_flamewaker_priest : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { events.Reset(); } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { ScriptedAI::EnterCombat(victim); events.ScheduleEvent(EVENT_HEAL, urand(15000, 30000)); @@ -162,7 +162,7 @@ class npc_flamewaker_priest : public CreatureScript events.ScheduleEvent(EVENT_IMMOLATE, 8000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -203,7 +203,7 @@ class npc_flamewaker_priest : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_flamewaker_priestAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp index 587ea51fc76..7dee91bfb6f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp @@ -79,7 +79,7 @@ class instance_molten_core : public InstanceMapScript } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -94,7 +94,7 @@ class instance_molten_core : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -106,7 +106,7 @@ class instance_molten_core : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_RAGNAROS_ADDS) { @@ -117,7 +117,7 @@ class instance_molten_core : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -128,7 +128,7 @@ class instance_molten_core : public InstanceMapScript return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -183,7 +183,7 @@ class instance_molten_core : public InstanceMapScript summon->AI()->DoAction(ACTION_START_RAGNAROS_ALT); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -252,7 +252,7 @@ class instance_molten_core : public InstanceMapScript bool _summonedExecutus; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_molten_core_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp index af8d1253dd8..ffb3c02d101 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp @@ -43,7 +43,7 @@ class boss_mr_smite : public CreatureScript public: boss_mr_smite() : CreatureScript("boss_mr_smite") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_mr_smiteAI>(creature); } @@ -66,7 +66,7 @@ public: uint32 uiPhase; uint32 uiTimer; - void Reset() OVERRIDE + void Reset() override { uiTrashTimer = urand(5000, 9000); uiSlamTimer = 9000; @@ -80,7 +80,7 @@ public: SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } @@ -94,7 +94,7 @@ public: return true; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -165,7 +165,7 @@ public: DoMeleeAttackIfReady(); } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp index f48314ea220..15d3f6225e1 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp @@ -39,7 +39,7 @@ class item_defias_gunpowder : public ItemScript public: item_defias_gunpowder() : ItemScript("item_defias_gunpowder") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) OVERRIDE + bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override { InstanceScript* instance = player->GetInstanceScript(); diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index a2369f290f1..050ef1eb642 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -72,7 +72,7 @@ class instance_deadmines : public InstanceMapScript uint32 PiratesDelay_Timer; uint64 uiSmiteChestGUID; - void Initialize() OVERRIDE + void Initialize() override { FactoryDoorGUID = 0; IronCladDoorGUID = 0; @@ -86,7 +86,7 @@ class instance_deadmines : public InstanceMapScript uiSmiteChestGUID = 0; } - virtual void Update(uint32 diff) OVERRIDE + virtual void Update(uint32 diff) override { if (!IronCladDoorGUID || !DefiasCannonGUID || !DoorLeverGUID) return; @@ -188,7 +188,7 @@ class instance_deadmines : public InstanceMapScript pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4); } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -200,7 +200,7 @@ class instance_deadmines : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -216,7 +216,7 @@ class instance_deadmines : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -227,7 +227,7 @@ class instance_deadmines : public InstanceMapScript return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -246,7 +246,7 @@ class instance_deadmines : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_deadmines_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index 2b50c525f78..b171bf014c7 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -24,17 +24,13 @@ Script Data End */ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "ScriptedGossip.h" -#include "gnomeregan.h" #include "ScriptedEscortAI.h" +#include "ScriptedGossip.h" #include "Player.h" - -#define GOSSIP_START_EVENT "I am ready to being" +#include "gnomeregan.h" enum BlastmasterEmi { - GOSSIP_TEXT_EMI = 1693, - SAY_BLASTMASTER_0 = 0, SAY_BLASTMASTER_1 = 1, SAY_BLASTMASTER_2 = 2, @@ -88,39 +84,11 @@ class npc_blastmaster_emi_shortfuse : public CreatureScript public: npc_blastmaster_emi_shortfuse() : CreatureScript("npc_blastmaster_emi_shortfuse") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_blastmaster_emi_shortfuseAI>(creature); } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - { - if (npc_escortAI* pEscortAI = CAST_AI(npc_blastmaster_emi_shortfuse::npc_blastmaster_emi_shortfuseAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); - - creature->setFaction(player->getFaction()); - creature->AI()->SetData(1, 0); - - player->CLOSE_GOSSIP_MENU(); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - InstanceScript* instance = creature->GetInstanceScript(); - - if (instance && instance->GetData(TYPE_EVENT) == NOT_STARTED) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_START_EVENT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(GOSSIP_TEXT_EMI, creature->GetGUID()); - - return true; - } - struct npc_blastmaster_emi_shortfuseAI : public npc_escortAI { npc_blastmaster_emi_shortfuseAI(Creature* creature) : npc_escortAI(creature) @@ -138,7 +106,7 @@ public: std::list<uint64> SummonList; std::list<uint64> GoSummonList; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -152,6 +120,19 @@ public: } } + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override + { + if (gossipListId == 0) + { + Start(true, false, player->GetGUID()); + + me->setFaction(player->getFaction()); + SetData(1, 0); + + player->PlayerTalkClass->SendCloseGossip(); + } + } + void NextStep(uint32 uiTimerStep, bool bNextStep = true, uint8 uiPhaseStep = 0) { uiTimer = uiTimerStep; @@ -217,7 +198,7 @@ public: if (!SummonList.empty()) for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr) { - if (Creature* summon = Unit::GetCreature(*me, *itr)) + if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) { if (summon->IsAlive()) summon->DisappearAndDie(); @@ -251,7 +232,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { //just in case if (GetPlayerForEscort()) @@ -295,7 +276,7 @@ public: } } - void SetData(uint32 uiI, uint32 uiValue) OVERRIDE + void SetData(uint32 uiI, uint32 uiValue) override { switch (uiI) { @@ -392,7 +373,7 @@ public: } } - void UpdateEscortAI(const uint32 uiDiff) OVERRIDE + void UpdateEscortAI(const uint32 uiDiff) override { if (uiPhase) { @@ -519,7 +500,7 @@ public: DoMeleeAttackIfReady(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { SummonList.push_back(summon->GetGUID()); AggroAllPlayers(summon); @@ -533,7 +514,7 @@ class boss_grubbis : public CreatureScript public: boss_grubbis() : CreatureScript("boss_grubbis") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_grubbisAI(creature); } @@ -555,7 +536,7 @@ public: creature->AI()->SetData(2, 1); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -563,7 +544,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!me->IsSummon()) return; diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index 9dde2d91d1a..b35601fcc6c 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -27,7 +27,7 @@ class instance_gnomeregan : public InstanceMapScript public: instance_gnomeregan() : InstanceMapScript("instance_gnomeregan", 90) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_gnomeregan_InstanceMapScript(map); } @@ -45,7 +45,7 @@ public: uint64 uiBastmasterEmiShortfuseGUID; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -55,7 +55,7 @@ public: uiBastmasterEmiShortfuseGUID = 0; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -77,7 +77,7 @@ public: OUT_LOAD_INST_DATA_COMPLETE; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -85,7 +85,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -102,7 +102,7 @@ public: } } - void SetData(uint32 uiType, uint32 uiData) OVERRIDE + void SetData(uint32 uiType, uint32 uiData) override { switch (uiType) { @@ -114,7 +114,7 @@ public: } } - uint32 GetData(uint32 uiType) const OVERRIDE + uint32 GetData(uint32 uiType) const override { switch (uiType) { @@ -123,7 +123,7 @@ public: return 0; } - uint64 GetData64(uint32 uiType) const OVERRIDE + uint64 GetData64(uint32 uiType) const override { switch (uiType) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp index a16cec93da7..06c523dfabb 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp @@ -53,7 +53,7 @@ class boss_curator : public CreatureScript public: boss_curator() : CreatureScript("boss_curator") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_curatorAI(creature); } @@ -69,7 +69,7 @@ public: bool Enraged; bool Evocating; - void Reset() OVERRIDE + void Reset() override { AddTimer = 10000; HatefulBoltTimer = 15000; //This time may be wrong @@ -80,22 +80,22 @@ public: me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, true); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index 5ac7cedd6af..2e29c68e2ce 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -45,7 +45,7 @@ class boss_maiden_of_virtue : public CreatureScript public: boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_maiden_of_virtueAI(creature); } @@ -62,7 +62,7 @@ public: bool Enraged; - void Reset() OVERRIDE + void Reset() override { Repentance_Timer = 25000+(rand()%15000); Holyfire_Timer = 8000+(rand()%17000); @@ -73,23 +73,23 @@ public: Enraged = false; } - void KilledUnit(Unit* /*Victim*/) OVERRIDE + void KilledUnit(Unit* /*Victim*/) override { if (urand(0, 1) == 0) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 14cc3083d59..b130ac74be3 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -53,7 +53,7 @@ class boss_attumen : public CreatureScript public: boss_attumen() : CreatureScript("boss_attumen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_attumenAI(creature); } @@ -79,35 +79,35 @@ public: uint32 ChargeTimer; //only when mounted uint32 ResetTimer; - void Reset() OVERRIDE + void Reset() override { ResetTimer = 0; Midnight = 0; } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); ResetTimer = 2000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - if (Unit* midnight = Unit::GetUnit(*me, Midnight)) + if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight)) midnight->Kill(midnight); } - void UpdateAI(uint32 diff) OVERRIDE; + void UpdateAI(uint32 diff) override; - void SpellHit(Unit* /*source*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*source*/, const SpellInfo* spell) override { if (spell->Mechanic == MECHANIC_DISARM) Talk(SAY_DISARMED); @@ -120,7 +120,7 @@ class boss_midnight : public CreatureScript public: boss_midnight() : CreatureScript("boss_midnight") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_midnightAI(creature); } @@ -133,7 +133,7 @@ public: uint8 Phase; uint32 Mount_Timer; - void Reset() OVERRIDE + void Reset() override { Phase = 1; Attumen = 0; @@ -143,18 +143,18 @@ public: me->SetVisible(true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (Phase == 2) { - if (Unit* unit = Unit::GetUnit(*me, Attumen)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, Attumen)) Talk(SAY_MIDNIGHT_KILL, unit); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -172,7 +172,7 @@ public: } else if (Phase == 2 && HealthBelowPct(25)) { - if (Unit* pAttumen = Unit::GetUnit(*me, Attumen)) + if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen)) Mount(pAttumen); } else if (Phase == 3) @@ -184,14 +184,14 @@ public: Mount_Timer = 0; me->SetVisible(false); me->GetMotionMaster()->MoveIdle(); - if (Unit* pAttumen = Unit::GetUnit(*me, Attumen)) + if (Unit* pAttumen = ObjectAccessor::GetUnit(*me, Attumen)) { pAttumen->SetDisplayId(MOUNTED_DISPLAYID); pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); if (pAttumen->GetVictim()) { pAttumen->GetMotionMaster()->MoveChase(pAttumen->GetVictim()); - pAttumen->SetTarget(pAttumen->GetVictim()->GetGUID()); + pAttumen->SetTarget(pAttumen->EnsureVictim()->GetGUID()); } pAttumen->SetObjectScale(1); } @@ -242,7 +242,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff) if (ResetTimer <= diff) { ResetTimer = 0; - Unit* pMidnight = Unit::GetUnit(*me, Midnight); + Unit* pMidnight = ObjectAccessor::GetUnit(*me, Midnight); if (pMidnight) { pMidnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -288,7 +288,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff) std::vector<Unit*> target_list; for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) { - target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false)) target_list.push_back(target); target = NULL; @@ -304,7 +304,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff) { if (HealthBelowPct(25)) { - Creature* pMidnight = Unit::GetCreature(*me, Midnight); + Creature* pMidnight = ObjectAccessor::GetCreature(*me, Midnight); if (pMidnight && pMidnight->GetTypeId() == TYPEID_UNIT) { CAST_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index 2dff776c35a..0ca7ee90986 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -96,7 +96,7 @@ class boss_moroes : public CreatureScript public: boss_moroes() : CreatureScript("boss_moroes") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_moroesAI>(creature); } @@ -125,7 +125,7 @@ public: bool InVanish; bool Enrage; - void Reset() OVERRIDE + void Reset() override { Vanish_Timer = 30000; Blind_Timer = 35000; @@ -148,7 +148,7 @@ public: DoZoneInCombat(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { StartEvent(); @@ -157,12 +157,12 @@ public: DoZoneInCombat(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -236,7 +236,7 @@ public: { if (AddGUID[i]) { - Creature* temp = Creature::GetCreature((*me), AddGUID[i]); + Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]); if (temp && temp->IsAlive()) { temp->AI()->AttackStart(me->GetVictim()); @@ -247,7 +247,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -270,7 +270,7 @@ public: { if (AddGUID[i]) { - Creature* temp = Unit::GetCreature((*me), AddGUID[i]); + Creature* temp = ObjectAccessor::GetCreature((*me), AddGUID[i]); if (temp && temp->IsAlive()) if (!temp->GetVictim()) temp->AI()->AttackStart(me->GetVictim()); @@ -343,14 +343,14 @@ struct boss_moroes_guestAI : public ScriptedAI instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { instance->SetData(TYPE_MOROES, NOT_STARTED); } void AcquireGUID() { - if (Creature* Moroes = Unit::GetCreature(*me, instance->GetData64(DATA_MOROES))) + if (Creature* Moroes = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOROES))) for (uint8 i = 0; i < 4; ++i) if (uint64 GUID = CAST_AI(boss_moroes::boss_moroesAI, Moroes->AI())->AddGUID[i]) GuestGUID[i] = GUID; @@ -361,7 +361,7 @@ struct boss_moroes_guestAI : public ScriptedAI uint64 TempGUID = GuestGUID[rand()%4]; if (TempGUID) { - Unit* unit = Unit::GetUnit(*me, TempGUID); + Unit* unit = ObjectAccessor::GetUnit(*me, TempGUID); if (unit && unit->IsAlive()) return unit; } @@ -369,7 +369,7 @@ struct boss_moroes_guestAI : public ScriptedAI return me; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!instance->GetData(TYPE_MOROES)) EnterEvadeMode(); @@ -383,7 +383,7 @@ class boss_baroness_dorothea_millstipe : public CreatureScript public: boss_baroness_dorothea_millstipe() : CreatureScript("boss_baroness_dorothea_millstipe") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_baroness_dorothea_millstipeAI>(creature); } @@ -397,7 +397,7 @@ public: uint32 MindFlay_Timer; uint32 ShadowWordPain_Timer; - void Reset() OVERRIDE + void Reset() override { ManaBurn_Timer = 7000; MindFlay_Timer = 1000; @@ -408,7 +408,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -446,7 +446,7 @@ class boss_baron_rafe_dreuger : public CreatureScript public: boss_baron_rafe_dreuger() : CreatureScript("boss_baron_rafe_dreuger") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_baron_rafe_dreugerAI>(creature); } @@ -460,7 +460,7 @@ public: uint32 SealOfCommand_Timer; uint32 JudgementOfCommand_Timer; - void Reset() OVERRIDE + void Reset() override { HammerOfJustice_Timer = 1000; SealOfCommand_Timer = 7000; @@ -469,7 +469,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -503,7 +503,7 @@ class boss_lady_catriona_von_indi : public CreatureScript public: boss_lady_catriona_von_indi() : CreatureScript("boss_lady_catriona_von_indi") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lady_catriona_von_indiAI>(creature); } @@ -518,7 +518,7 @@ public: uint32 HolyFire_Timer; uint32 PowerWordShield_Timer; - void Reset() OVERRIDE + void Reset() override { DispelMagic_Timer = 11000; GreaterHeal_Timer = 1500; @@ -530,7 +530,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -573,7 +573,7 @@ class boss_lady_keira_berrybuck : public CreatureScript public: boss_lady_keira_berrybuck() : CreatureScript("boss_lady_keira_berrybuck") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lady_keira_berrybuckAI>(creature); } @@ -588,7 +588,7 @@ public: uint32 HolyLight_Timer; uint32 DivineShield_Timer; - void Reset() OVERRIDE + void Reset() override { Cleanse_Timer = 13000; GreaterBless_Timer = 1000; @@ -600,7 +600,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -647,7 +647,7 @@ class boss_lord_robin_daris : public CreatureScript public: boss_lord_robin_daris() : CreatureScript("boss_lord_robin_daris") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lord_robin_darisAI>(creature); } @@ -661,7 +661,7 @@ public: uint32 MortalStrike_Timer; uint32 WhirlWind_Timer; - void Reset() OVERRIDE + void Reset() override { Hamstring_Timer = 7000; MortalStrike_Timer = 10000; @@ -670,7 +670,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -703,7 +703,7 @@ class boss_lord_crispin_ference : public CreatureScript public: boss_lord_crispin_ference() : CreatureScript("boss_lord_crispin_ference") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lord_crispin_ferenceAI>(creature); } @@ -718,7 +718,7 @@ public: uint32 ShieldBash_Timer; uint32 ShieldWall_Timer; - void Reset() OVERRIDE + void Reset() override { Disarm_Timer = 6000; HeroicStrike_Timer = 10000; @@ -728,7 +728,7 @@ public: boss_moroes_guestAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index ebd8762e9be..010b7223f97 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -69,7 +69,7 @@ class boss_netherspite : public CreatureScript public: boss_netherspite() : CreatureScript("boss_netherspite") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_netherspiteAI>(creature); } @@ -127,7 +127,7 @@ public: return sqrt((xa-xb)*(xa-xb) + (ya-yb)*(ya-yb)); } - void Reset() OVERRIDE + void Reset() override { Berserk = false; NetherInfusionTimer = 540000; @@ -158,9 +158,9 @@ public: { for (int i=0; i<3; ++i) { - if (Creature* portal = Unit::GetCreature(*me, PortalGUID[i])) + if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[i])) portal->DisappearAndDie(); - if (Creature* portal = Unit::GetCreature(*me, BeamerGUID[i])) + if (Creature* portal = ObjectAccessor::GetCreature(*me, BeamerGUID[i])) portal->DisappearAndDie(); PortalGUID[i] = 0; BeamTarget[i] = 0; @@ -170,10 +170,10 @@ public: void UpdatePortals() // Here we handle the beams' behavior { for (int j=0; j<3; ++j) // j = color - if (Creature* portal = Unit::GetCreature(*me, PortalGUID[j])) + if (Creature* portal = ObjectAccessor::GetCreature(*me, PortalGUID[j])) { // the one who's been cast upon before - Unit* current = Unit::GetUnit(*portal, BeamTarget[j]); + Unit* current = ObjectAccessor::GetUnit(*portal, BeamTarget[j]); // temporary store for the best suitable beam reciever Unit* target = me; @@ -205,7 +205,7 @@ public: { BeamTarget[j] = target->GetGUID(); // remove currently beaming portal - if (Creature* beamer = Unit::GetCreature(*portal, BeamerGUID[j])) + if (Creature* beamer = ObjectAccessor::GetCreature(*portal, BeamerGUID[j])) { beamer->CastSpell(target, PortalBeam[j], false); beamer->DisappearAndDie(); @@ -257,19 +257,19 @@ public: Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { HandleDoors(false); SwitchToPortalPhase(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { HandleDoors(true); DestroyPortals(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index fe0bd23c755..c8df08937b9 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -69,7 +69,7 @@ class boss_nightbane : public CreatureScript public: boss_nightbane() : CreatureScript("boss_nightbane") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_nightbaneAI>(creature); } @@ -109,7 +109,7 @@ public: uint32 WaitTimer; uint32 MovePhase; - void Reset() OVERRIDE + void Reset() override { BellowingRoarTimer = 30000; CharredEarthTimer = 15000; @@ -154,7 +154,7 @@ public: instance->HandleGameObject(instance->GetData64(DATA_MASTERS_TERRACE_DOOR_2), open); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(TYPE_NIGHTBANE, IN_PROGRESS); @@ -162,27 +162,27 @@ public: Talk(YELL_AGGRO); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!Intro && !Flying) ScriptedAI::AttackStart(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_NIGHTBANE, DONE); HandleTerraceDoors(true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Intro && !Flying) ScriptedAI::MoveInLineOfSight(who); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -228,7 +228,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me->GetVictim()); } @@ -253,7 +253,7 @@ public: Skeletons = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { /* The timer for this was never setup apparently, not sure if the code works properly: if (WaitTimer <= diff) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index bde326a5c37..befe72a6403 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -102,7 +102,7 @@ class netherspite_infernal : public CreatureScript public: netherspite_infernal() : CreatureScript("netherspite_infernal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new netherspite_infernalAI(creature); } @@ -117,12 +117,12 @@ public: uint64 malchezaar; InfernalPoint *point; - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (HellfireTimer) { @@ -144,14 +144,14 @@ public: } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { - if (Unit* unit = Unit::GetUnit(*me, malchezaar)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, malchezaar)) if (Creature* creature = unit->ToCreature()) creature->AI()->KilledUnit(who); } - void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*who*/, const SpellInfo* spell) override { if (spell->Id == SPELL_INFERNAL_RELAY) { @@ -162,7 +162,7 @@ public: } } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != malchezaar) damage = 0; @@ -177,7 +177,7 @@ class boss_malchezaar : public CreatureScript public: boss_malchezaar() : CreatureScript("boss_malchezaar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_malchezaarAI>(creature); } @@ -211,7 +211,7 @@ public: uint32 phase; - void Reset() OVERRIDE + void Reset() override { AxesCleanup(); ClearWeapons(); @@ -242,12 +242,12 @@ public: instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -262,7 +262,7 @@ public: instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -273,7 +273,7 @@ public: { //Infernal Cleanup for (std::vector<uint64>::const_iterator itr = infernals.begin(); itr != infernals.end(); ++itr) - if (Unit* pInfernal = Unit::GetUnit(*me, *itr)) + if (Unit* pInfernal = ObjectAccessor::GetUnit(*me, *itr)) if (pInfernal->IsAlive()) { pInfernal->SetVisible(false); @@ -287,7 +287,7 @@ public: { for (uint8 i = 0; i < 2; ++i) { - Unit* axe = Unit::GetUnit(*me, axes[i]); + Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]); if (axe && axe->IsAlive()) axe->Kill(axe); axes[i] = 0; @@ -316,7 +316,7 @@ public: ThreatContainer::StorageType::const_iterator itr = t_list.begin(); std::advance(itr, 1); for (; itr != t_list.end(); ++itr) //store the threat list in a different container - if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER) targets.push_back(target); @@ -340,7 +340,7 @@ public: { for (uint8 i = 0; i < 5; ++i) { - Unit* target = Unit::GetUnit(*me, enfeeble_targets[i]); + Unit* target = ObjectAccessor::GetUnit(*me, enfeeble_targets[i]); if (target && target->IsAlive()) target->SetHealth(enfeeble_health[i]); enfeeble_targets[i] = 0; @@ -353,7 +353,7 @@ public: InfernalPoint *point = NULL; Position pos; if ((me->GetMapId() != 532) || positions.empty()) - me->GetRandomNearPosition(pos, 60); + pos = me->GetRandomNearPosition(60); else { point = Trinity::Containers::SelectRandomContainerElement(positions); @@ -377,7 +377,7 @@ public: Talk(SAY_SUMMON); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -391,8 +391,8 @@ public: if (me->HasUnitState(UNIT_STATE_STUNNED)) // While shifting to phase 2 malchezaar stuns himself return; - if (me->GetUInt64Value(UNIT_FIELD_TARGET) != me->GetVictim()->GetGUID()) - me->SetTarget(me->GetVictim()->GetGUID()); + if (me->GetVictim() && me->GetUInt64Value(UNIT_FIELD_TARGET) != me->EnsureVictim()->GetGUID()) + me->SetTarget(me->EnsureVictim()->GetGUID()); if (phase == 1) { @@ -480,7 +480,7 @@ public: { for (uint8 i = 0; i < 2; ++i) { - if (Unit* axe = Unit::GetUnit(*me, axes[i])) + if (Unit* axe = ObjectAccessor::GetUnit(*me, axes[i])) { if (axe->GetVictim()) DoModifyThreatPercent(axe->GetVictim(), -100); @@ -583,7 +583,7 @@ public: void netherspite_infernal::netherspite_infernalAI::Cleanup() { - Creature* pMalchezaar = Unit::GetCreature(*me, malchezaar); + Creature* pMalchezaar = ObjectAccessor::GetCreature(*me, malchezaar); if (pMalchezaar && pMalchezaar->IsAlive()) CAST_AI(boss_malchezaar::boss_malchezaarAI, pMalchezaar->AI())->Cleanup(me, point); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 69f852f158c..9bda41b03a1 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -84,7 +84,7 @@ class boss_shade_of_aran : public CreatureScript public: boss_shade_of_aran() : CreatureScript("boss_shade_of_aran") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_aranAI>(creature); } @@ -123,7 +123,7 @@ public: bool Drinking; bool DrinkInturrupted; - void Reset() OVERRIDE + void Reset() override { SecondarySpellTimer = 5000; NormalCastTimer = 0; @@ -152,12 +152,12 @@ public: instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -165,7 +165,7 @@ public: instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -184,7 +184,7 @@ public: //store the threat list in a different container for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); //only on alive players if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER) targets.push_back(target); @@ -208,7 +208,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -450,7 +450,7 @@ public: if (!FlameWreathTarget[i]) continue; - Unit* unit = Unit::GetUnit(*me, FlameWreathTarget[i]); + Unit* unit = ObjectAccessor::GetUnit(*me, FlameWreathTarget[i]); if (unit && !unit->IsWithinDist2d(FWTargPosX[i], FWTargPosY[i], 3)) { unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID()); @@ -466,13 +466,13 @@ public: DoMeleeAttackIfReady(); } - void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override { if (!DrinkInturrupted && Drinking && damage) DrinkInturrupted = true; } - void SpellHit(Unit* /*pAttacker*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*pAttacker*/, const SpellInfo* Spell) override { //We only care about interrupt effects and only if they are durring a spell currently being cast if ((Spell->Effects[0].Effect != SPELL_EFFECT_INTERRUPT_CAST && @@ -501,7 +501,7 @@ class npc_aran_elemental : public CreatureScript public: npc_aran_elemental() : CreatureScript("npc_aran_elemental") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new water_elementalAI(creature); } @@ -512,14 +512,14 @@ public: uint32 CastTimer; - void Reset() OVERRIDE + void Reset() override { CastTimer = 2000 + (rand()%3000); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 22398314a41..3b499b649cf 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -70,7 +70,7 @@ class npc_kilrek : public CreatureScript public: npc_kilrek() : CreatureScript("npc_kilrek") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_kilrekAI>(creature); } @@ -88,28 +88,28 @@ public: uint32 AmplifyTimer; - void Reset() OVERRIDE + void Reset() override { TerestianGUID = 0; AmplifyTimer = 2000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { uint64 TerestianGUID = instance->GetData64(DATA_TERESTIAN); if (TerestianGUID) { - Unit* Terestian = Unit::GetUnit(*me, TerestianGUID); + Unit* Terestian = ObjectAccessor::GetUnit(*me, TerestianGUID); if (Terestian && Terestian->IsAlive()) DoCast(Terestian, SPELL_BROKEN_PACT, true); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -133,7 +133,7 @@ class npc_demon_chain : public CreatureScript public: npc_demon_chain() : CreatureScript("npc_demon_chain") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_demon_chainAI(creature); } @@ -144,21 +144,21 @@ public: uint64 SacrificeGUID; - void Reset() OVERRIDE + void Reset() override { SacrificeGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (SacrificeGUID) { - Unit* Sacrifice = Unit::GetUnit(*me, SacrificeGUID); + Unit* Sacrifice = ObjectAccessor::GetUnit(*me, SacrificeGUID); if (Sacrifice) Sacrifice->RemoveAurasDueToSpell(SPELL_SACRIFICE); } @@ -171,7 +171,7 @@ class npc_fiendish_portal : public CreatureScript public: npc_fiendish_portal() : CreatureScript("npc_fiendish_portal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fiendish_portalAI(creature); } @@ -182,12 +182,12 @@ public: SummonList summons; - void Reset() OVERRIDE + void Reset() override { DespawnAllImp(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); DoZoneInCombat(summon); @@ -205,7 +205,7 @@ class npc_fiendish_imp : public CreatureScript public: npc_fiendish_imp() : CreatureScript("npc_fiendish_imp") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fiendish_impAI(creature); } @@ -216,16 +216,16 @@ public: uint32 FireboltTimer; - void Reset() OVERRIDE + void Reset() override { FireboltTimer = 2000; me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -247,7 +247,7 @@ class boss_terestian_illhoof : public CreatureScript public: boss_terestian_illhoof() : CreatureScript("boss_terestian_illhoof") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_terestianAI>(creature); } @@ -274,13 +274,13 @@ public: bool SummonedPortals; bool Berserk; - void Reset() OVERRIDE + void Reset() override { for (uint8 i = 0; i < 2; ++i) { if (PortalGUID[i]) { - if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[i])) + if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[i])) { CAST_AI(npc_fiendish_portal::npc_fiendish_portalAI, pPortal->AI())->DespawnAllImp(); pPortal->DespawnOrUnsummon(); @@ -314,12 +314,12 @@ public: else DoCast(me, SPELL_SUMMON_IMP, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_PORTAL) { @@ -334,18 +334,18 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (uint8 i = 0; i < 2; ++i) { if (PortalGUID[i]) { - if (Creature* pPortal = Unit::GetCreature((*me), PortalGUID[i])) + if (Creature* pPortal = ObjectAccessor::GetCreature((*me), PortalGUID[i])) pPortal->DespawnOrUnsummon(); PortalGUID[i] = 0; @@ -357,7 +357,7 @@ public: instance->SetData(TYPE_TERESTIAN, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -396,7 +396,7 @@ public: if (PortalGUID[0] && PortalGUID[1]) { - if (Creature* pPortal = Unit::GetCreature(*me, PortalGUID[urand(0, 1)])) + if (Creature* pPortal = ObjectAccessor::GetCreature(*me, PortalGUID[urand(0, 1)])) pPortal->CastSpell(me->GetVictim(), SPELL_SUMMON_FIENDISIMP, false); SummonTimer = 5000; } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 108aceebb90..c0e6a8d3b90 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -109,14 +109,14 @@ void SummonCroneIfReady(InstanceScript* instance, Creature* creature) pCrone->AI()->AttackStart(creature->GetVictim()); } } -}; +} class boss_dorothee : public CreatureScript { public: boss_dorothee() : CreatureScript("boss_dorothee") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_dorotheeAI>(creature); } @@ -139,7 +139,7 @@ public: bool SummonedTito; bool TitoDied; - void Reset() OVERRIDE + void Reset() override { AggroTimer = 500; @@ -151,26 +151,26 @@ public: TitoDied = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_DOROTHEE_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } void SummonTito(); - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DOROTHEE_DEATH); SummonCroneIfReady(instance, me); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -178,7 +178,7 @@ public: ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -187,7 +187,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AggroTimer) { @@ -230,7 +230,7 @@ class npc_tito : public CreatureScript public: npc_tito() : CreatureScript("npc_tito") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_titoAI(creature); } @@ -242,19 +242,19 @@ public: uint64 DorotheeGUID; uint32 YipTimer; - void Reset() OVERRIDE + void Reset() override { DorotheeGUID = 0; YipTimer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (DorotheeGUID) { - Creature* Dorothee = (Unit::GetCreature((*me), DorotheeGUID)); + Creature* Dorothee = (ObjectAccessor::GetCreature((*me), DorotheeGUID)); if (Dorothee && Dorothee->IsAlive()) { CAST_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true; @@ -263,7 +263,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -296,7 +296,7 @@ class boss_strawman : public CreatureScript public: boss_strawman() : CreatureScript("boss_strawman") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_strawmanAI>(creature); } @@ -314,14 +314,14 @@ public: uint32 BrainBashTimer; uint32 BrainWipeTimer; - void Reset() OVERRIDE + void Reset() override { AggroTimer = 13000; BrainBashTimer = 5000; BrainWipeTimer = 7000; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -329,7 +329,7 @@ public: ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -338,17 +338,17 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_STRAWMAN_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override { if ((Spell->SchoolMask == SPELL_SCHOOL_MASK_FIRE) && (!(rand()%10))) { @@ -361,19 +361,19 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_STRAWMAN_DEATH); SummonCroneIfReady(instance, me); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_STRAWMAN_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AggroTimer) { @@ -410,7 +410,7 @@ class boss_tinhead : public CreatureScript public: boss_tinhead() : CreatureScript("boss_tinhead") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_tinheadAI>(creature); } @@ -430,7 +430,7 @@ public: uint8 RustCount; - void Reset() OVERRIDE + void Reset() override { AggroTimer = 15000; CleaveTimer = 5000; @@ -439,17 +439,17 @@ public: RustCount = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_TINHEAD_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -457,7 +457,7 @@ public: ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -466,19 +466,19 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_TINHEAD_DEATH); SummonCroneIfReady(instance, me); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_TINHEAD_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AggroTimer) { @@ -519,7 +519,7 @@ class boss_roar : public CreatureScript public: boss_roar() : CreatureScript("boss_roar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_roarAI>(creature); } @@ -538,7 +538,7 @@ public: uint32 ShredTimer; uint32 ScreamTimer; - void Reset() OVERRIDE + void Reset() override { AggroTimer = 20000; MangleTimer = 5000; @@ -546,7 +546,7 @@ public: ScreamTimer = 15000; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -555,7 +555,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -563,29 +563,29 @@ public: ScriptedAI::AttackStart(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_ROAR_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_ROAR_DEATH); SummonCroneIfReady(instance, me); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ROAR_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AggroTimer) { @@ -627,7 +627,7 @@ class boss_crone : public CreatureScript public: boss_crone() : CreatureScript("boss_crone") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_croneAI>(creature); } @@ -644,30 +644,30 @@ public: uint32 CycloneTimer; uint32 ChainLightningTimer; - void Reset() OVERRIDE + void Reset() override { CycloneTimer = 30000; ChainLightningTimer = 10000; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_CRONE_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_CRONE_AGGRO); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_CRONE_DEATH); @@ -679,7 +679,7 @@ public: pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -710,7 +710,7 @@ class npc_cyclone : public CreatureScript public: npc_cyclone() : CreatureScript("npc_cyclone") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_cycloneAI(creature); } @@ -721,27 +721,26 @@ public: uint32 MoveTimer; - void Reset() OVERRIDE + void Reset() override { MoveTimer = 1000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->HasAura(SPELL_KNOCKBACK)) DoCast(me, SPELL_KNOCKBACK, true); if (MoveTimer <= diff) { - Position pos; - me->GetRandomNearPosition(pos, 10); + Position pos = me->GetRandomNearPosition(10); me->GetMotionMaster()->MovePoint(0, pos); MoveTimer = urand(5000, 8000); } else MoveTimer -= diff; @@ -776,7 +775,7 @@ class npc_grandmother : public CreatureScript public: npc_grandmother() : CreatureScript("npc_grandmother") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -790,7 +789,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_GRANDMA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->SEND_GOSSIP_MENU(8990, creature->GetGUID()); @@ -804,7 +803,7 @@ class boss_bigbadwolf : public CreatureScript public: boss_bigbadwolf() : CreatureScript("boss_bigbadwolf") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_bigbadwolfAI>(creature); } @@ -827,7 +826,7 @@ public: bool IsChasing; - void Reset() OVERRIDE + void Reset() override { ChaseTimer = 30000; FearTimer = urand(25000, 35000); @@ -839,22 +838,22 @@ public: IsChasing = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_WOLF_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_WOLF_SLAY); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoPlaySoundToSet(me, SOUND_WOLF_DEATH); @@ -866,7 +865,7 @@ public: pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -894,7 +893,7 @@ public: { IsChasing = false; - if (Unit* target = Unit::GetUnit(*me, HoodGUID)) + if (Unit* target = ObjectAccessor::GetUnit(*me, HoodGUID)) { HoodGUID = 0; if (DoGetThreat(target)) @@ -1003,7 +1002,7 @@ class boss_julianne : public CreatureScript public: boss_julianne() : CreatureScript("boss_julianne") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_julianneAI>(creature); } @@ -1040,7 +1039,7 @@ public: bool SummonedRomulo; bool RomuloDead; - void Reset() OVERRIDE + void Reset() override { RomuloGUID = 0; Phase = PHASE_JULIANNE; @@ -1063,9 +1062,9 @@ public: RomuloDead = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1073,7 +1072,7 @@ public: ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -1082,12 +1081,12 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override { if (Spell->Id == SPELL_DRINK_POISON) { @@ -1096,9 +1095,9 @@ public: } } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE; + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_JULIANNE_DEATH02); @@ -1109,12 +1108,12 @@ public: pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_JULIANNE_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE; + void UpdateAI(uint32 diff) override; }; }; @@ -1123,7 +1122,7 @@ class boss_romulo : public CreatureScript public: boss_romulo() : CreatureScript("boss_romulo") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_romuloAI>(creature); } @@ -1153,7 +1152,7 @@ public: bool IsFakingDeath; bool JulianneDead; - void Reset() OVERRIDE + void Reset() override { JulianneGUID = 0; Phase = PHASE_ROMULO; @@ -1168,12 +1167,12 @@ public: JulianneDead = false; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->DespawnOrUnsummon(); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage < me->GetHealth()) return; @@ -1187,7 +1186,7 @@ public: IsFakingDeath = true; Phase = PHASE_BOTH; - if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) + if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->RomuloDead = true; CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->ResurrectSelfTimer = 10000; @@ -1201,7 +1200,7 @@ public: { if (JulianneDead) { - if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) + if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Julianne->GetMotionMaster()->Clear(); @@ -1213,7 +1212,7 @@ public: return; } - if (Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID))) + if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { PretendToDie(me); IsFakingDeath = true; @@ -1227,12 +1226,12 @@ public: TC_LOG_ERROR("scripts", "boss_romuloAI: DamageTaken reach end of code, that should not happen."); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_ROMULO_AGGRO); if (JulianneGUID) { - Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)); + Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)); if (Julianne && Julianne->GetVictim()) { me->AddThreat(Julianne->GetVictim(), 1.0f); @@ -1241,7 +1240,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -1250,7 +1249,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_ROMULO_DEATH); @@ -1262,12 +1261,12 @@ public: pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ROMULO_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || IsFakingDeath) return; @@ -1276,7 +1275,7 @@ public: { if (ResurrectTimer <= diff) { - Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)); + Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)); if (Julianne && CAST_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath) { Talk(SAY_ROMULO_RESURRECT); @@ -1396,7 +1395,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff) { if (ResurrectTimer <= diff) { - Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)); + Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)); if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath) { Talk(SAY_JULIANNE_RESURRECT); @@ -1431,7 +1430,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff) { if (urand(0, 1) && SummonedRomulo) { - Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID)); + Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)); if (Romulo && Romulo->IsAlive() && !RomuloDead) DoCast(Romulo, SPELL_ETERNAL_AFFECTION); } else DoCast(me, SPELL_ETERNAL_AFFECTION); @@ -1461,7 +1460,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama DoCast(me, SPELL_DRINK_POISON); IsFakingDeath = true; - //IS THIS USEFULL? Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)); + //IS THIS USEFULL? Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)); return; } @@ -1477,7 +1476,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama //if this is true then we have to kill romulo too if (RomuloDead) { - if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID))) + if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID))) { Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Romulo->GetMotionMaster()->Clear(); @@ -1491,7 +1490,7 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama } //if not already returned, then romulo is alive and we can pretend die - if (Creature* Romulo = (Unit::GetCreature((*me), RomuloGUID))) + if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID))) { PretendToDie(me); IsFakingDeath = true; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 2e4f1eaca10..3300e92869b 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -49,7 +49,7 @@ class instance_karazhan : public InstanceMapScript public: instance_karazhan() : InstanceMapScript("instance_karazhan", 532) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_karazhan_InstanceMapScript(map); } @@ -80,7 +80,7 @@ public: uint64 ImageGUID; uint64 DustCoveredChest; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -108,7 +108,7 @@ public: DustCoveredChest = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -117,7 +117,7 @@ public: return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -127,7 +127,7 @@ public: } } - void SetData(uint32 type, uint32 uiData) OVERRIDE + void SetData(uint32 type, uint32 uiData) override { switch (type) { @@ -182,7 +182,7 @@ public: } } - void SetData64(uint32 identifier, uint64 data) OVERRIDE + void SetData64(uint32 identifier, uint64 data) override { switch (identifier) { @@ -190,7 +190,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -236,12 +236,12 @@ public: } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return strSaveData; } - uint32 GetData(uint32 uiData) const OVERRIDE + uint32 GetData(uint32 uiData) const override { switch (uiData) { @@ -264,7 +264,7 @@ public: return 0; } - uint64 GetData64(uint32 uiData) const OVERRIDE + uint64 GetData64(uint32 uiData) const override { switch (uiData) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 241ac85faa2..976a83a98c2 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -148,7 +148,7 @@ public: bool PerformanceReady; bool RaidWiped; - void Reset() OVERRIDE + void Reset() override { m_uiSpotlightGUID = 0; @@ -172,9 +172,9 @@ public: Start(false, false); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -276,7 +276,7 @@ public: RaidWiped = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -286,7 +286,7 @@ public: { if (TalkCount > 3) { - if (Creature* pSpotlight = Unit::GetCreature(*me, m_uiSpotlightGUID)) + if (Creature* pSpotlight = ObjectAccessor::GetCreature(*me, m_uiSpotlightGUID)) pSpotlight->DespawnOrUnsummon(); SetEscortPaused(false); @@ -336,7 +336,7 @@ public: } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); npc_barnesAI* pBarnesAI = CAST_AI(npc_barnes::npc_barnesAI, creature->AI()); @@ -371,7 +371,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (InstanceScript* instance = creature->GetInstanceScript()) { @@ -403,7 +403,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_barnesAI>(creature); } @@ -420,7 +420,7 @@ class npc_berthold : public CreatureScript public: npc_berthold() : CreatureScript("npc_berthold") { } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -430,7 +430,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (InstanceScript* instance = creature->GetInstanceScript()) { @@ -467,7 +467,7 @@ class npc_image_of_medivh : public CreatureScript public: npc_image_of_medivh() : CreatureScript("npc_image_of_medivh") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_image_of_medivhAI>(creature); } @@ -490,7 +490,7 @@ public: bool EventStarted; - void Reset() OVERRIDE + void Reset() override { ArcanagosGUID = 0; EventStarted = false; @@ -508,9 +508,9 @@ public: me->RemoveCorpse(); } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -539,7 +539,7 @@ public: uint32 NextStep(uint32 Step) { - Creature* arca = Unit::GetCreature(*me, ArcanagosGUID); + Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID); Map* map = me->GetMap(); switch (Step) { @@ -584,10 +584,13 @@ public: arca->MonsterYell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL, NULL); return 5000; case 12: - arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f); - arca->setActive(true); - arca->InterruptNonMeleeSpells(true); - arca->SetSpeed(MOVE_FLIGHT, 2.0f); + if (arca) + { + arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f); + arca->setActive(true); + arca->InterruptNonMeleeSpells(true); + arca->SetSpeed(MOVE_FLIGHT, 2.0f); + } return 10000; case 13: me->MonsterYell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL, NULL); @@ -617,7 +620,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (YellTimer <= diff) { @@ -627,7 +630,7 @@ public: if (Step >= 7 && Step <= 12) { - Unit* arca = Unit::GetUnit(*me, ArcanagosGUID); + Unit* arca = ObjectAccessor::GetUnit(*me, ArcanagosGUID); if (FireArcanagosTimer <= diff) { diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 0601c69e96d..7944011c7a0 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -94,7 +94,7 @@ class boss_felblood_kaelthas : public CreatureScript public: boss_felblood_kaelthas() : CreatureScript("boss_felblood_kaelthas") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return GetInstanceAI<boss_felblood_kaelthasAI>(c); } @@ -132,7 +132,7 @@ public: // 1 = Fireball; Summon Phoenix; Flamestrike // 2 = Gravity Lapses - void Reset() OVERRIDE + void Reset() override { /// @todo Timers FireballTimer = 0; @@ -150,32 +150,32 @@ public: Phase = 0; - instance->SetData(DATA_KAELTHAS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_KAELTHAS, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - instance->SetData(DATA_KAELTHAS_EVENT, DONE); + instance->SetBossState(DATA_KAELTHAS, DONE); // Enable the Translocation Orb Exit if (GameObject* escapeOrb = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_ESCAPE_ORB))) escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage > me->GetHealth()) RemoveGravityLapse(); // Remove Gravity Lapse so that players fall to ground if they kill him when in air. } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { - instance->SetData(DATA_KAELTHAS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!HasTaunted && me->IsWithinDistInMap(who, 40.0f)) @@ -196,7 +196,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && unit->IsAlive()) { float threat = me->getThreatManager().getThreat(unit); @@ -214,7 +214,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) unit->CastSpell(unit, SPELL_TELEPORT_CENTER, true); } @@ -227,7 +227,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) // Knockback into the air unit->CastSpell(unit, SPELL_GRAVITY_LAPSE_DOT, true, 0, 0, me->GetGUID()); @@ -240,7 +240,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) { // Also needs an exception in spell system. @@ -260,7 +260,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) { unit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); @@ -274,7 +274,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -430,7 +430,7 @@ class npc_felkael_flamestrike : public CreatureScript public: npc_felkael_flamestrike() : CreatureScript("npc_felkael_flamestrike") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_felkael_flamestrikeAI(c); } @@ -443,7 +443,7 @@ public: uint32 FlameStrikeTimer; - void Reset() OVERRIDE + void Reset() override { FlameStrikeTimer = 5000; @@ -453,10 +453,10 @@ public: DoCast(me, SPELL_FLAMESTRIKE2, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (FlameStrikeTimer <= diff) { @@ -472,7 +472,7 @@ class npc_felkael_phoenix : public CreatureScript public: npc_felkael_phoenix() : CreatureScript("npc_felkael_phoenix") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return GetInstanceAI<npc_felkael_phoenixAI>(c); } @@ -490,7 +490,7 @@ public: bool Rebirth; bool FakeDeath; - void Reset() OVERRIDE + void Reset() override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); me->SetDisableGravity(true); @@ -501,9 +501,9 @@ public: FakeDeath = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (damage < me->GetHealth()) return; @@ -515,7 +515,7 @@ public: return; } //Don't really die in all phases of Kael'Thas - if (instance->GetData(DATA_KAELTHAS_EVENT) == 0) + if (instance->GetBossState(DATA_KAELTHAS) == 0) { //prevent death damage = 0; @@ -537,12 +537,12 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SummonCreature(CREATURE_PHOENIX_EGG, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 45000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //If we are fake death, we cast revbirth and after that we kill the phoenix to spawn the egg. if (FakeDeath) @@ -585,7 +585,7 @@ class npc_felkael_phoenix_egg : public CreatureScript public: npc_felkael_phoenix_egg() : CreatureScript("npc_felkael_phoenix_egg") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_felkael_phoenix_eggAI(c); } @@ -596,16 +596,16 @@ public: uint32 HatchTimer; - void Reset() OVERRIDE + void Reset() override { HatchTimer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (HatchTimer <= diff) { @@ -621,7 +621,7 @@ class npc_arcane_sphere : public CreatureScript public: npc_arcane_sphere() : CreatureScript("npc_arcane_sphere") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_arcane_sphereAI(c); } @@ -633,7 +633,7 @@ public: uint32 DespawnTimer; uint32 ChangeTargetTimer; - void Reset() OVERRIDE + void Reset() override { DespawnTimer = 30000; ChangeTargetTimer = urand(6000, 12000); @@ -644,9 +644,9 @@ public: DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (DespawnTimer <= diff) me->Kill(me); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 4bc0ee68cc3..2af9d9b1567 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -108,7 +108,7 @@ class boss_priestess_delrissa : public CreatureScript public: boss_priestess_delrissa() : CreatureScript("boss_priestess_delrissa") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_priestess_delrissaAI>(creature); } @@ -136,7 +136,7 @@ public: uint32 DispelTimer; uint32 ResetTimer; - void Reset() OVERRIDE + void Reset() override { PlayersKilled = 0; @@ -151,18 +151,18 @@ public: } //this mean she at some point evaded - void JustReachedHome() OVERRIDE + void JustReachedHome() override { - instance->SetData(DATA_DELRISSA_EVENT, FAIL); + instance->SetBossState(DATA_DELRISSA, FAIL); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_AGGRO); for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) { - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i])) { if (!pAdd->GetVictim()) { @@ -172,7 +172,7 @@ public: } } - instance->SetData(DATA_DELRISSA_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_DELRISSA, IN_PROGRESS); } void InitializeLackeys() @@ -210,7 +210,7 @@ public: { for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr) { - Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[j]); + Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[j]); //object already removed, not exist if (!pAdd) @@ -224,7 +224,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -235,12 +235,12 @@ public: ++PlayersKilled; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY) - instance->SetData(DATA_DELRISSA_EVENT, DONE); + instance->SetBossState(DATA_DELRISSA, DONE); else { if (me->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE)) @@ -248,7 +248,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -271,7 +271,7 @@ public: Unit* target = me; for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) { - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[i])) { if (pAdd->IsAlive() && pAdd->GetHealth() < health) target = pAdd; @@ -287,7 +287,7 @@ public: Unit* target = me; if (urand(0, 1)) - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) if (pAdd->IsAlive()) target = pAdd; @@ -300,7 +300,7 @@ public: Unit* target = me; if (urand(0, 1)) - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) if (pAdd->IsAlive() && !pAdd->HasAura(SPELL_SHIELD)) target = pAdd; @@ -319,7 +319,7 @@ public: if (urand(0, 1)) target = me; else - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUID[rand()%MAX_ACTIVE_LACKEY])) if (pAdd->IsAlive()) target = pAdd; } @@ -365,7 +365,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI bool UsedPotion; - void Reset() OVERRIDE + void Reset() override { UsedPotion = false; @@ -383,14 +383,14 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!who) return; for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) { - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i])) { if (!pAdd->GetVictim() && pAdd != me) { @@ -400,7 +400,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI } } - if (Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA))) + if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA))) { if (pDelrissa->IsAlive() && !pDelrissa->GetVictim()) { @@ -410,9 +410,9 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)); + Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)); uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT); if (!pDelrissa) @@ -434,27 +434,27 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI if (!pDelrissa->HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE)) pDelrissa->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - instance->SetData(DATA_DELRISSA_EVENT, DONE); + instance->SetBossState(DATA_DELRISSA, DONE); } } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { - if (Creature* Delrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA))) + if (Creature* Delrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA))) Delrissa->AI()->KilledUnit(victim); } void AcquireGUIDs() { - if (Creature* Delrissa = (Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))) + if (Creature* Delrissa = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))) { for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) m_auiLackeyGUIDs[i] = CAST_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i]; } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UsedPotion && HealthBelowPct(25)) { @@ -485,7 +485,7 @@ class boss_kagani_nightstrike : public CreatureScript public: boss_kagani_nightstrike() : CreatureScript("boss_kagani_nightstrike") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kagani_nightstrikeAI>(creature); } @@ -502,7 +502,7 @@ public: uint32 Wait_Timer; bool InVanish; - void Reset() OVERRIDE + void Reset() override { Gouge_Timer = 5500; Kick_Timer = 7000; @@ -515,7 +515,7 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -589,7 +589,7 @@ class boss_ellris_duskhallow : public CreatureScript public: boss_ellris_duskhallow() : CreatureScript("boss_ellris_duskhallow") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ellris_duskhallowAI>(creature); } @@ -605,7 +605,7 @@ public: uint32 Curse_of_Agony_Timer; uint32 Fear_Timer; - void Reset() OVERRIDE + void Reset() override { Immolate_Timer = 6000; Shadow_Bolt_Timer = 3000; @@ -616,12 +616,12 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_SUMMON_IMP); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -680,7 +680,7 @@ class boss_eramas_brightblaze : public CreatureScript public: boss_eramas_brightblaze() : CreatureScript("boss_eramas_brightblaze") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_eramas_brightblazeAI>(creature); } @@ -693,7 +693,7 @@ public: uint32 Knockdown_Timer; uint32 Snap_Kick_Timer; - void Reset() OVERRIDE + void Reset() override { Knockdown_Timer = 6000; Snap_Kick_Timer = 4500; @@ -701,7 +701,7 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -741,7 +741,7 @@ class boss_yazzai : public CreatureScript public: boss_yazzai() : CreatureScript("boss_yazzai") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_yazzaiAI>(creature); } @@ -762,7 +762,7 @@ public: uint32 Frostbolt_Timer; uint32 Blink_Timer; - void Reset() OVERRIDE + void Reset() override { HasIceBlocked = false; @@ -778,7 +778,7 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -832,7 +832,7 @@ public: ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) { //if in melee range if (target->IsWithinDistInMap(me, 5)) @@ -871,7 +871,7 @@ class boss_warlord_salaris : public CreatureScript public: boss_warlord_salaris() : CreatureScript("boss_warlord_salaris") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_warlord_salarisAI>(creature); } @@ -888,7 +888,7 @@ public: uint32 Hamstring_Timer; uint32 Mortal_Strike_Timer; - void Reset() OVERRIDE + void Reset() override { Intercept_Stun_Timer = 500; Disarm_Timer = 6000; @@ -900,12 +900,12 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_BATTLE_SHOUT); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -918,7 +918,7 @@ public: ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) { //if in melee range if (target->IsWithinDistInMap(me, ATTACK_DISTANCE)) @@ -991,7 +991,7 @@ class boss_garaxxas : public CreatureScript public: boss_garaxxas() : CreatureScript("boss_garaxxas") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_garaxxasAI>(creature); } @@ -1013,7 +1013,7 @@ public: uint32 Wing_Clip_Timer; uint32 Freezing_Trap_Timer; - void Reset() OVERRIDE + void Reset() override { Aimed_Shot_Timer = 6000; Shoot_Timer = 2500; @@ -1022,19 +1022,19 @@ public: Wing_Clip_Timer = 4000; Freezing_Trap_Timer = 15000; - Unit* pPet = Unit::GetUnit(*me, m_uiPetGUID); + Unit* pPet = ObjectAccessor::GetUnit(*me, m_uiPetGUID); if (!pPet) me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); boss_priestess_lackey_commonAI::Reset(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { m_uiPetGUID = summoned->GetGUID(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1102,7 +1102,7 @@ class boss_apoko : public CreatureScript public: boss_apoko() : CreatureScript("boss_apoko") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_apokoAI>(creature); } @@ -1119,7 +1119,7 @@ public: uint32 Healing_Wave_Timer; uint32 Frost_Shock_Timer; - void Reset() OVERRIDE + void Reset() override { Totem_Timer = 2000; Totem_Amount = 1; @@ -1131,7 +1131,7 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1171,7 +1171,7 @@ public: // uint64 guid = (*itr)->guid; // if (guid) // { - // Unit* pAdd = Unit::GetUnit(*me, (*itr)->guid); + // Unit* pAdd = ObjectAccessor::GetUnit(*me, (*itr)->guid); // if (pAdd && pAdd->IsAlive()) // { DoCast(me, SPELL_LESSER_HEALING_WAVE); @@ -1200,7 +1200,7 @@ class boss_zelfan : public CreatureScript public: boss_zelfan() : CreatureScript("boss_zelfan") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_zelfanAI>(creature); } @@ -1216,7 +1216,7 @@ public: uint32 High_Explosive_Sheep_Timer; uint32 Fel_Iron_Bomb_Timer; - void Reset() OVERRIDE + void Reset() override { Goblin_Dragon_Gun_Timer = 20000; Rocket_Launch_Timer = 7000; @@ -1227,7 +1227,7 @@ public: boss_priestess_lackey_commonAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1256,7 +1256,7 @@ public: { for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) { - if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i])) + if (Unit* pAdd = ObjectAccessor::GetUnit(*me, m_auiLackeyGUIDs[i])) { if (pAdd->IsPolymorphed()) { @@ -1285,7 +1285,7 @@ class npc_high_explosive_sheep : public CreatureScript public: npc_high_explosive_sheep() : CreatureScript("npc_high_explosive_sheep") { } - //CreatureAI* GetAI(Creature* creature) const OVERRIDE + //CreatureAI* GetAI(Creature* creature) const override //{ // return new npc_high_explosive_sheepAI(creature); //}; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 758ecb996f4..d6c0f95f967 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -64,7 +64,7 @@ class boss_selin_fireheart : public CreatureScript public: boss_selin_fireheart() : CreatureScript("boss_selin_fireheart") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_selin_fireheartAI>(creature); }; @@ -102,13 +102,13 @@ public: uint64 CrystalGUID; // This will help us create a pointer to the crystal we are draining. We store GUIDs, never units in case unit is deleted/offline (offline if player of course). - void Reset() OVERRIDE + void Reset() override { //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i) for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr) { - //Unit* unit = Unit::GetUnit(*me, FelCrystals[i]); - if (Creature* creature = Unit::GetCreature(*me, *itr)) + //Unit* unit = ObjectAccessor::GetUnit(*me, FelCrystals[i]); + if (Creature* creature = ObjectAccessor::GetCreature(*me, *itr)) { if (!creature->IsAlive()) creature->Respawn(); // Let the core handle setting death state, etc. @@ -119,7 +119,7 @@ public: } // Set Inst data for encounter - instance->SetData(DATA_SELIN_EVENT, NOT_STARTED); + instance->SetBossState(DATA_SELIN, NOT_STARTED); DrainLifeTimer = urand(3000, 7000); DrainManaTimer = DrainLifeTimer + 5000; @@ -148,8 +148,8 @@ public: for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr) { pCrystal = NULL; - //pCrystal = Unit::GetUnit(*me, FelCrystals[i]); - pCrystal = Unit::GetUnit(*me, *itr); + //pCrystal = ObjectAccessor::GetUnit(*me, FelCrystals[i]); + pCrystal = ObjectAccessor::GetUnit(*me, *itr); if (pCrystal && pCrystal->IsAlive()) { // select nearest @@ -184,29 +184,29 @@ public: //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i) for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr) { - //Creature* pCrystal = (Unit::GetCreature(*me, FelCrystals[i])); - Creature* pCrystal = Unit::GetCreature(*me, *itr); + //Creature* pCrystal = (ObjectAccessor::GetCreature(*me, FelCrystals[i])); + Creature* pCrystal = ObjectAccessor::GetCreature(*me, *itr); if (pCrystal && pCrystal->IsAlive()) pCrystal->Kill(pCrystal); } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - instance->SetData(DATA_SELIN_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_SELIN, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == 1) { - Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID); + Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID); if (CrystalChosen && CrystalChosen->IsAlive()) { // Make the crystal attackable @@ -224,15 +224,15 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); - instance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete! + instance->SetBossState(DATA_SELIN, DONE); // Encounter complete! ShatterRemainingCrystals(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -292,7 +292,7 @@ public: Talk(SAY_EMPOWERED); - Unit* CrystalChosen = Unit::GetUnit(*me, CrystalGUID); + Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID); if (CrystalChosen && CrystalChosen->IsAlive()) // Use Deal Damage to kill it, not setDeathState. CrystalChosen->Kill(CrystalChosen); @@ -315,7 +315,7 @@ class npc_fel_crystal : public CreatureScript public: npc_fel_crystal() : CreatureScript("npc_fel_crystal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fel_crystalAI(creature); }; @@ -324,18 +324,18 @@ public: { npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (InstanceScript* instance = me->GetInstanceScript()) { - Creature* Selin = (Unit::GetCreature(*me, instance->GetData64(DATA_SELIN))); + Creature* Selin = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SELIN))); if (Selin && Selin->IsAlive()) { if (CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->CrystalGUID == me->GetGUID()) @@ -351,7 +351,7 @@ public: } } } - } else TC_LOG_ERROR("scripts", ERROR_INST_DATA); + } } }; }; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp index 95bfcb93878..b9930820303 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -16,13 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Vexallus -SD%Complete: 90 -SDComment: Heroic and Normal support. Needs further testing. -SDCategory: Magister's Terrace -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "magisters_terrace.h" @@ -41,26 +33,22 @@ enum Yells enum Spells { - // Pure energy spell info - SPELL_ENERGY_BOLT = 46156, - SPELL_ENERGY_FEEDBACK = 44335, - - // Vexallus spell info SPELL_CHAIN_LIGHTNING = 44318, - SPELL_H_CHAIN_LIGHTNING = 46380, // heroic spell SPELL_OVERLOAD = 44353, SPELL_ARCANE_SHOCK = 44319, - SPELL_H_ARCANE_SHOCK = 46381, // heroic spell SPELL_SUMMON_PURE_ENERGY = 44322, // mod scale -10 H_SPELL_SUMMON_PURE_ENERGY1 = 46154, // mod scale -5 H_SPELL_SUMMON_PURE_ENERGY2 = 46159 // mod scale -5 - }; -enum Creatures +enum Events { - NPC_PURE_ENERGY = 24745, + EVENT_ENERGY_BOLT = 1, + EVENT_ENERGY_FEEDBACK, + EVENT_CHAIN_LIGHTNING, + EVENT_OVERLOAD, + EVENT_ARCANE_SHOCK }; enum Misc @@ -71,170 +59,160 @@ enum Misc class boss_vexallus : public CreatureScript { -public: - boss_vexallus() : CreatureScript("boss_vexallus") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_vexallusAI>(creature); - }; - - struct boss_vexallusAI : public BossAI - { - boss_vexallusAI(Creature* creature) : BossAI(creature, DATA_VEXALLUS_EVENT) - { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; + public: + boss_vexallus() : CreatureScript("boss_vexallus") { } - uint32 ChainLightningTimer; - uint32 ArcaneShockTimer; - uint32 OverloadTimer; - uint32 IntervalHealthAmount; - bool Enraged; - - void Reset() OVERRIDE + struct boss_vexallusAI : public BossAI { - summons.DespawnAll(); - ChainLightningTimer = 8000; - ArcaneShockTimer = 5000; - OverloadTimer = 1200; - IntervalHealthAmount = 1; - Enraged = false; - - instance->SetData(DATA_VEXALLUS_EVENT, NOT_STARTED); - } + boss_vexallusAI(Creature* creature) : BossAI(creature, DATA_VEXALLUS) + { + _intervalHealthAmount = 1; + _enraged = false; + } - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_KILL); - } + void Reset() override + { + _Reset(); + _intervalHealthAmount = 1; + _enraged = false; + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - summons.DespawnAll(); - instance->SetData(DATA_VEXALLUS_EVENT, DONE); - } + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_KILL); + } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + } - instance->SetData(DATA_VEXALLUS_EVENT, IN_PROGRESS); - } + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _EnterCombat(); - void JustSummoned(Creature* summoned) OVERRIDE - { - if (Unit* temp = SelectTarget(SELECT_TARGET_RANDOM, 0)) - summoned->GetMotionMaster()->MoveFollow(temp, 0, 0); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 8000); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, 5000); + } - //spells are SUMMON_TYPE_GUARDIAN, so using setOwner should be ok - summoned->CastSpell(summoned, SPELL_ENERGY_BOLT, false, 0, 0, me->GetGUID()); - } + void JustSummoned(Creature* summoned) override + { + if (Unit* temp = SelectTarget(SELECT_TARGET_RANDOM, 0)) + summoned->GetMotionMaster()->MoveFollow(temp, 0, 0); - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + summons.Summon(summoned); + } - if (!Enraged) + void DamageTaken(Unit* /*who*/, uint32& /*damage*/) override { - //used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25% - if (!HealthAbovePct(100 - INTERVAL_MODIFIER * IntervalHealthAmount)) + if (_enraged) + return; + + // 85%, 70%, 55%, 40%, 25% + if (!HealthAbovePct(100 - INTERVAL_MODIFIER * _intervalHealthAmount)) { - //increase amount, unless we're at 10%, then we switch and return - if (IntervalHealthAmount == INTERVAL_SWITCH) + // increase amount, unless we're at 10%, then we switch and return + if (_intervalHealthAmount == INTERVAL_SWITCH) { - Enraged = true; + _enraged = true; + events.Reset(); + events.ScheduleEvent(EVENT_OVERLOAD, 1200); return; } else - ++IntervalHealthAmount; + ++_intervalHealthAmount; Talk(SAY_ENERGY); Talk(EMOTE_DISCHARGE_ENERGY); if (IsHeroic()) { - DoCast(me, H_SPELL_SUMMON_PURE_ENERGY1, false); - DoCast(me, H_SPELL_SUMMON_PURE_ENERGY2, false); + DoCast(me, H_SPELL_SUMMON_PURE_ENERGY1); + DoCast(me, H_SPELL_SUMMON_PURE_ENERGY2); } else - DoCast(me, SPELL_SUMMON_PURE_ENERGY, false); - - //below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in the core - me->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); - - if (IsHeroic()) - me->SummonCreature(NPC_PURE_ENERGY, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0); + DoCast(me, SPELL_SUMMON_PURE_ENERGY); } + } - if (ChainLightningTimer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_CHAIN_LIGHTNING); + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - ChainLightningTimer = 8000; - } else ChainLightningTimer -= diff; + events.Update(diff); - if (ArcaneShockTimer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - if (target) - DoCast(target, SPELL_ARCANE_SHOCK); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - ArcaneShockTimer = 8000; - } else ArcaneShockTimer -= diff; - } - else - { - if (OverloadTimer <= diff) + while (uint32 eventId = events.ExecuteEvent()) { - DoCastVictim(SPELL_OVERLOAD); + switch (eventId) + { + case EVENT_CHAIN_LIGHTNING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + DoCast(target, SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 8000); + break; + case EVENT_ARCANE_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true)) + DoCast(target, SPELL_ARCANE_SHOCK); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, 8000); + break; + case EVENT_OVERLOAD: + DoCastVictim(SPELL_OVERLOAD); + events.ScheduleEvent(EVENT_OVERLOAD, 2000); + break; + default: + break; + } + } - OverloadTimer = 2000; - } else OverloadTimer -= diff; + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - }; + private: + uint32 _intervalHealthAmount; + bool _enraged; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_vexallusAI>(creature); + }; }; -class npc_pure_energy : public CreatureScript +enum NpcPureEnergy { -public: - npc_pure_energy() : CreatureScript("npc_pure_energy") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_pure_energyAI(creature); - }; - - struct npc_pure_energyAI : public ScriptedAI - { - npc_pure_energyAI(Creature* creature) : ScriptedAI(creature) - { - me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); - } + SPELL_ENERGY_BOLT = 46156, + SPELL_ENERGY_FEEDBACK = 44335, + SPELL_PURE_ENERGY_PASSIVE = 44326 +}; - void Reset() OVERRIDE { } +class npc_pure_energy : public CreatureScript +{ + public: + npc_pure_energy() : CreatureScript("npc_pure_energy") { } - void JustDied(Unit* slayer) OVERRIDE + struct npc_pure_energyAI : public ScriptedAI { - if (Unit* temp = me->GetOwner()) + npc_pure_energyAI(Creature* creature) : ScriptedAI(creature) { - if (temp && temp->IsAlive()) - slayer->CastSpell(slayer, SPELL_ENERGY_FEEDBACK, true, 0, 0, temp->GetGUID()); + me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); } - } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void JustDied(Unit* killer) override + { + killer->CastSpell(killer, SPELL_ENERGY_FEEDBACK, true); + me->RemoveAurasDueToSpell(SPELL_PURE_ENERGY_PASSIVE); + } + }; - void AttackStart(Unit* /*who*/) OVERRIDE { } - }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_pure_energyAI(creature); + }; }; void AddSC_boss_vexallus() diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 5183efea521..1f8ccfbd5d8 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -16,19 +15,10 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Instance_Magisters_Terrace -SD%Complete: 60 -SDComment: Designed only for Selin Fireheart -SDCategory: Magister's Terrace -EndScriptData */ - #include "ScriptMgr.h" #include "InstanceScript.h" #include "magisters_terrace.h" -#define MAX_ENCOUNTER 4 - /* 0 - Selin Fireheart 1 - Vexallus @@ -36,281 +26,239 @@ EndScriptData */ 3 - Kael'thas Sunstrider */ -enum Creatures +DoorData const doorData[] = { - NPC_SELIN = 24723, - NPC_DELRISSA = 24560, - NPC_FELCRYSTALS = 24722 -}; - -enum GameObjects -{ - GO_VEXALLUS_DOOR = 187896, - GO_SELIN_DOOR = 187979, - GO_SELIN_ENCOUNTER_DOOR = 188065, - GO_DELRISSA_DOOR = 187770, - GO_KAEL_DOOR = 188064, - GO_KAEL_STATUE_1 = 188165, - GO_KAEL_STATUE_2 = 188166, - GO_ESCAPE_ORB = 188173 + { GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM, BOUNDARY_NONE }, + { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END }; class instance_magisters_terrace : public InstanceMapScript { -public: - instance_magisters_terrace() : InstanceMapScript("instance_magisters_terrace", 585) { } - - struct instance_magisters_terrace_InstanceMapScript : public InstanceScript - { - instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) { } - - uint32 Encounter[MAX_ENCOUNTER]; - uint32 DelrissaDeathCount; + public: + instance_magisters_terrace() : InstanceMapScript("instance_magisters_terrace", 585) { } - std::vector<uint64> FelCrystals; - - uint64 SelinGUID; - uint64 DelrissaGUID; - uint64 VexallusDoorGUID; - uint64 SelinDoorGUID; - uint64 SelinEncounterDoorGUID; - uint64 DelrissaDoorGUID; - uint64 KaelDoorGUID; - uint64 KaelStatue[2]; - uint64 EscapeOrbGUID; - uint32 StatuesState; - uint8 felCristalIndex; - - void Initialize() OVERRIDE + struct instance_magisters_terrace_InstanceMapScript : public InstanceScript { - memset(&Encounter, 0, sizeof(Encounter)); - - FelCrystals.clear(); + instance_magisters_terrace_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); + LoadDoorData(doorData); - DelrissaDeathCount = 0; + FelCrystals.clear(); + DelrissaDeathCount = 0; - SelinGUID = 0; - DelrissaGUID = 0; - VexallusDoorGUID = 0; - SelinDoorGUID = 0; - SelinEncounterDoorGUID = 0; - DelrissaDoorGUID = 0; - KaelDoorGUID = 0; - KaelStatue[0] = 0; - KaelStatue[1] = 0; - EscapeOrbGUID = 0; - StatuesState = 0; - felCristalIndex = 0; - } + SelinGUID = 0; + DelrissaGUID = 0; + EscapeOrbGUID = 0; + FelCristalIndex = 0; - bool IsEncounterInProgress() const OVERRIDE - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (Encounter[i] == IN_PROGRESS) - return true; - return false; - } + memset(KaelStatue, 0, 2 * sizeof(uint64)); + } - uint32 GetData(uint32 identifier) const - { - switch (identifier) + uint32 GetData(uint32 type) const override { - case DATA_SELIN_EVENT: - return Encounter[0]; - case DATA_VEXALLUS_EVENT: - return Encounter[1]; - case DATA_DELRISSA_EVENT: - return Encounter[2]; - case DATA_KAELTHAS_EVENT: - return Encounter[3]; - case DATA_DELRISSA_DEATH_COUNT: - return DelrissaDeathCount; - case DATA_FEL_CRYSTAL_SIZE: - return FelCrystals.size(); + switch (type) + { + case DATA_DELRISSA_DEATH_COUNT: + return DelrissaDeathCount; + case DATA_FEL_CRYSTAL_SIZE: + return uint32(FelCrystals.size()); + default: + break; + } + return 0; } - return 0; - } - void SetData(uint32 identifier, uint32 data) - { - switch (identifier) + void SetData(uint32 type, uint32 data) override { - case DATA_SELIN_EVENT: - if (data == DONE) - { - HandleGameObject(SelinEncounterDoorGUID, true); - HandleGameObject(SelinDoorGUID, true); - } - else if (data == IN_PROGRESS) - HandleGameObject(SelinEncounterDoorGUID, false); - else if (data == NOT_STARTED) - HandleGameObject(SelinEncounterDoorGUID, true); - - Encounter[0] = data; - break; - case DATA_VEXALLUS_EVENT: - if (data == DONE) - HandleGameObject(VexallusDoorGUID, true); - Encounter[1] = data; - break; - case DATA_DELRISSA_EVENT: - if (data == DONE) - HandleGameObject(DelrissaDoorGUID, true); - if (data == IN_PROGRESS) - DelrissaDeathCount = 0; - Encounter[2] = data; - break; - case DATA_KAELTHAS_EVENT: - if (data == NOT_STARTED || data == DONE) - HandleGameObject(KaelDoorGUID, true); - else if (data == IN_PROGRESS) - HandleGameObject(KaelDoorGUID, false); - Encounter[3] = data; - break; - case DATA_DELRISSA_DEATH_COUNT: - if (data == SPECIAL) - ++DelrissaDeathCount; - else - DelrissaDeathCount = 0; - break; - case DATA_KAELTHAS_STATUES: - HandleGameObject(KaelStatue[0], data); - HandleGameObject(KaelStatue[1], data); - StatuesState = data; - break; + switch (type) + { + case DATA_DELRISSA_DEATH_COUNT: + if (data == SPECIAL) + ++DelrissaDeathCount; + else + DelrissaDeathCount = 0; + break; + case DATA_KAELTHAS_STATUES: + HandleGameObject(KaelStatue[0], data); + HandleGameObject(KaelStatue[1], data); + break; + default: + break; + } } - SaveToDB(); - } - - void OnCreatureCreate(Creature* creature) OVERRIDE - { - switch (creature->GetEntry()) + void OnCreatureCreate(Creature* creature) override { - case NPC_SELIN: - SelinGUID = creature->GetGUID(); - break; - case NPC_DELRISSA: - DelrissaGUID = creature->GetGUID(); - break; - case NPC_FELCRYSTALS: - FelCrystals.push_back(creature->GetGUID()); - break; + switch (creature->GetEntry()) + { + case NPC_SELIN: + SelinGUID = creature->GetGUID(); + break; + case NPC_DELRISSA: + DelrissaGUID = creature->GetGUID(); + break; + case NPC_FELCRYSTALS: + FelCrystals.push_back(creature->GetGUID()); + break; + default: + break; + } } - } - void OnGameObjectCreate(GameObject* go) OVERRIDE - { - switch (go->GetEntry()) + void OnGameObjectCreate(GameObject* go) override { - case GO_VEXALLUS_DOOR: - VexallusDoorGUID = go->GetGUID(); - break; - case GO_SELIN_DOOR: - SelinDoorGUID = go->GetGUID(); - break; - case GO_SELIN_ENCOUNTER_DOOR: - SelinEncounterDoorGUID = go->GetGUID(); - break; - case GO_DELRISSA_DOOR: - DelrissaDoorGUID = go->GetGUID(); - break; - case GO_KAEL_DOOR: - KaelDoorGUID = go->GetGUID(); - break; - case GO_KAEL_STATUE_1: - KaelStatue[0] = go->GetGUID(); - break; - case GO_KAEL_STATUE_2: - KaelStatue[1] = go->GetGUID(); - break; - case GO_ESCAPE_ORB: - EscapeOrbGUID = go->GetGUID(); - break; + switch (go->GetEntry()) + { + case GO_VEXALLUS_DOOR: + case GO_SELIN_DOOR: + case GO_SELIN_ENCOUNTER_DOOR: + case GO_DELRISSA_DOOR: + case GO_KAEL_DOOR: + AddDoor(go, true); + break; + case GO_KAEL_STATUE_1: + KaelStatue[0] = go->GetGUID(); + break; + case GO_KAEL_STATUE_2: + KaelStatue[1] = go->GetGUID(); + break; + case GO_ESCAPE_ORB: + EscapeOrbGUID = go->GetGUID(); + break; + default: + break; + } } - } - - std::string GetSaveData() OVERRIDE - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3] << ' ' << StatuesState; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } + void OnGameObjectRemove(GameObject* go) override + { + switch (go->GetEntry()) + { + case GO_VEXALLUS_DOOR: + case GO_SELIN_DOOR: + case GO_SELIN_ENCOUNTER_DOOR: + case GO_DELRISSA_DOOR: + case GO_KAEL_DOOR: + AddDoor(go, false); + break; + default: + break; + } + } - void Load(const char* str) OVERRIDE - { - if (!str) + bool SetBossState(uint32 type, EncounterState state) override { - OUT_LOAD_INST_DATA_FAIL; - return; + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_DELRISSA: + if (state == IN_PROGRESS) + DelrissaDeathCount = 0; + break; + default: + break; + } + return true; } - OUT_LOAD_INST_DATA(str); + std::string GetSaveData() override + { + OUT_SAVE_INST_DATA; - std::istringstream loadStream(str); + std::ostringstream saveStream; + saveStream << "M T " << GetBossSaveData(); - for (uint32 i = 0; i < MAX_ENCOUNTER; ++i) - { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; - SetData(i, tmpState); + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); } - loadStream >> StatuesState; - SetData(DATA_KAELTHAS_STATUES, StatuesState); + void Load(const char* str) override + { + if (!str) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } - OUT_LOAD_INST_DATA_COMPLETE; - } + OUT_LOAD_INST_DATA(str); - uint64 GetData64(uint32 identifier) const - { - switch (identifier) - { - case DATA_SELIN: - return SelinGUID; - case DATA_DELRISSA: - return DelrissaGUID; - case DATA_VEXALLUS_DOOR: - return VexallusDoorGUID; - case DATA_DELRISSA_DOOR: - return DelrissaDoorGUID; - case DATA_KAEL_DOOR: - return KaelDoorGUID; - case DATA_KAEL_STATUE_LEFT: - return KaelStatue[0]; - case DATA_KAEL_STATUE_RIGHT: - return KaelStatue[1]; - case DATA_ESCAPE_ORB: - return EscapeOrbGUID; - case DATA_FEL_CRYSTAL: - if (FelCrystals.size() < felCristalIndex) + char dataHead1, dataHead2; + + std::istringstream loadStream(str); + loadStream >> dataHead1 >> dataHead2; + if (dataHead1 == 'M' && dataHead2 == 'T') + { + for (uint32 i = 0; i < EncounterCount; ++i) { - TC_LOG_ERROR("scripts", "Magisters Terrace: No Fel Crystals loaded in Inst Data"); - return 0; + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState > SPECIAL) + tmpState = NOT_STARTED; + SetBossState(i, EncounterState(tmpState)); } + } + else + OUT_LOAD_INST_DATA_FAIL; - return FelCrystals.at(felCristalIndex); + OUT_LOAD_INST_DATA_COMPLETE; + } + + uint64 GetData64(uint32 type) const override + { + switch (type) + { + case DATA_SELIN: + return SelinGUID; + case DATA_DELRISSA: + return DelrissaGUID; + case DATA_KAEL_STATUE_LEFT: + return KaelStatue[0]; + case DATA_KAEL_STATUE_RIGHT: + return KaelStatue[1]; + case DATA_ESCAPE_ORB: + return EscapeOrbGUID; + case DATA_FEL_CRYSTAL: + if (FelCrystals.size() < FelCristalIndex) + { + TC_LOG_ERROR("scripts", "Magisters Terrace: No Fel Crystals loaded in Inst Data"); + return 0; + } + + return FelCrystals.at(FelCristalIndex); + default: + break; + } + return 0; } - return 0; - } - void SetData64(uint32 identifier, uint64 value) + void SetData64(uint32 type, uint64 value) override + { + if (type == DATA_FEL_CRYSTAL) + FelCristalIndex = value; + } + + protected: + std::vector<uint64> FelCrystals; + + uint64 SelinGUID; + uint64 DelrissaGUID; + uint64 KaelStatue[2]; + uint64 EscapeOrbGUID; + uint32 DelrissaDeathCount; + uint8 FelCristalIndex; + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override { - if (identifier == DATA_FEL_CRYSTAL) - felCristalIndex = value; + return new instance_magisters_terrace_InstanceMapScript(map); } - }; - - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE - { - return new instance_magisters_terrace_InstanceMapScript(map); - } }; void AddSC_instance_magisters_terrace() diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp index ed5d9d4ec6f..28f4800b6cf 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp @@ -68,7 +68,7 @@ class npc_kalecgos : public CreatureScript public: npc_kalecgos() : CreatureScript("npc_kalecgos") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -97,7 +97,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -108,7 +108,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kalecgosAI(creature); } @@ -119,7 +119,7 @@ public: uint32 m_uiTransformTimer; - void Reset() OVERRIDE + void Reset() override { m_uiTransformTimer = 0; @@ -128,7 +128,7 @@ public: me->GetMotionMaster()->MovePoint(POINT_ID_LAND, afKaelLandPoint[0], afKaelLandPoint[1], afKaelLandPoint[2]); } - void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiPointId) override { if (uiType != POINT_MOTION_TYPE) return; @@ -162,7 +162,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (m_uiTransformTimer) { diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index ddfaa91bc98..d3517dfccf6 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -19,24 +19,17 @@ #ifndef DEF_MAGISTERS_TERRACE_H #define DEF_MAGISTERS_TERRACE_H -#define ERROR_INST_DATA "TSCR Error: Instance Data not set properly for Magister's Terrace instance (map 585). Encounters will be buggy." +uint32 const EncounterCount = 4; -enum Data +enum DataTypes { - DATA_SELIN_EVENT, - DATA_VEXALLUS_EVENT, - DATA_DELRISSA_EVENT, - DATA_KAELTHAS_EVENT, - DATA_SELIN, - DATA_FEL_CRYSTAL, - DATA_FEL_CRYSTAL_SIZE, - - DATA_VEXALLUS_DOOR, + DATA_VEXALLUS, DATA_DELRISSA, - DATA_DELRISSA_DOOR, + DATA_KAELTHAS, - DATA_KAEL_DOOR, + DATA_FEL_CRYSTAL, + DATA_FEL_CRYSTAL_SIZE, DATA_KAEL_STATUE_LEFT, DATA_KAEL_STATUE_RIGHT, @@ -45,4 +38,23 @@ enum Data DATA_ESCAPE_ORB }; +enum CreatureIds +{ + NPC_SELIN = 24723, + NPC_DELRISSA = 24560, + NPC_FELCRYSTALS = 24722 +}; + +enum GameObjectIds +{ + GO_VEXALLUS_DOOR = 187896, + GO_SELIN_DOOR = 187979, + GO_SELIN_ENCOUNTER_DOOR = 188065, + GO_DELRISSA_DOOR = 187770, + GO_KAEL_DOOR = 188064, + GO_KAEL_STATUE_1 = 188165, + GO_KAEL_STATUE_2 = 188166, + GO_ESCAPE_ORB = 188173 +}; + #endif diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index a3d4d6669a3..46c566f62bd 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -92,7 +92,7 @@ class npc_unworthy_initiate : public CreatureScript public: npc_unworthy_initiate() : CreatureScript("npc_unworthy_initiate") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unworthy_initiateAI(creature); } @@ -114,7 +114,7 @@ public: EventMap events; - void Reset() OVERRIDE + void Reset() override { anchorGUID = 0; phase = PHASE_CHAINED; @@ -125,7 +125,7 @@ public: me->LoadEquipment(0, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_ICY_TOUCH, 1000, GCD_CAST); events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 3000, GCD_CAST); @@ -133,7 +133,7 @@ public: events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -166,7 +166,7 @@ public: Talk(SAY_EVENT_START); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { switch (phase) { @@ -281,7 +281,7 @@ class npc_unworthy_initiate_anchor : public CreatureScript public: npc_unworthy_initiate_anchor() : CreatureScript("npc_unworthy_initiate_anchor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unworthy_initiate_anchorAI(creature); } @@ -292,13 +292,13 @@ public: uint64 prisonerGUID; - void SetGUID(uint64 guid, int32 /*id*/) OVERRIDE + void SetGUID(uint64 guid, int32 /*id*/) override { if (!prisonerGUID) prisonerGUID = guid; } - uint64 GetGUID(int32 /*id*/) const OVERRIDE + uint64 GetGUID(int32 /*id*/) const override { return prisonerGUID; } @@ -310,11 +310,11 @@ class go_acherus_soul_prison : public GameObjectScript public: go_acherus_soul_prison() : GameObjectScript("go_acherus_soul_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (Creature* anchor = go->FindNearestCreature(29521, 15)) if (uint64 prisonerGUID = anchor->AI()->GetGUID()) - if (Creature* prisoner = Creature::GetCreature(*player, prisonerGUID)) + if (Creature* prisoner = ObjectAccessor::GetCreature(*player, prisonerGUID)) CAST_AI(npc_unworthy_initiate::npc_unworthy_initiateAI, prisoner->AI())->EventStart(anchor, player); return false; @@ -352,7 +352,7 @@ class npc_death_knight_initiate : public CreatureScript public: npc_death_knight_initiate() : CreatureScript("npc_death_knight_initiate") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -379,7 +379,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE && creature->IsFullHealth()) { @@ -395,7 +395,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_death_knight_initiateAI(creature); } @@ -412,7 +412,7 @@ public: uint32 m_uiDuelTimer; bool m_bIsDuelInProgress; - void Reset() OVERRIDE + void Reset() override { lose = false; me->RestoreFaction(); @@ -425,7 +425,7 @@ public: m_bIsDuelInProgress = false; } - void SpellHit(Unit* pCaster, const SpellInfo* pSpell) OVERRIDE + void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override { if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL) { @@ -434,7 +434,7 @@ public: } } - void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override { if (m_bIsDuelInProgress && pDoneBy->IsControlledByPlayer()) { @@ -457,7 +457,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) { @@ -467,7 +467,7 @@ public: { me->setFaction(FACTION_HOSTILE); - if (Unit* unit = Unit::GetUnit(*me, m_uiDuelerGUID)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, m_uiDuelerGUID)) AttackStart(unit); } else @@ -484,10 +484,10 @@ public: EnterEvadeMode(); return; } - else if (me->GetVictim()->GetTypeId() == TYPEID_PLAYER && me->GetVictim()->HealthBelowPct(10)) + else if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER && me->EnsureVictim()->HealthBelowPct(10)) { - me->GetVictim()->CastSpell(me->GetVictim(), 7267, true); // beg - me->GetVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); + me->EnsureVictim()->CastSpell(me->GetVictim(), 7267, true); // beg + me->EnsureVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); EnterEvadeMode(); return; } @@ -520,7 +520,7 @@ class npc_dark_rider_of_acherus : public CreatureScript { npc_dark_rider_of_acherusAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { PhaseTimer = 4000; Phase = 0; @@ -528,7 +528,7 @@ class npc_dark_rider_of_acherus : public CreatureScript TargetGUID = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Intro || !TargetGUID) return; @@ -584,7 +584,7 @@ class npc_dark_rider_of_acherus : public CreatureScript uint64 TargetGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dark_rider_of_acherusAI(creature); } @@ -608,7 +608,7 @@ class npc_salanar_the_horseman : public CreatureScript public: npc_salanar_the_horseman() : CreatureScript("npc_salanar_the_horseman") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_salanar_the_horsemanAI(creature); } @@ -617,7 +617,7 @@ public: { npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) { } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_DELIVER_STOLEN_HORSE) { @@ -639,7 +639,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); @@ -680,7 +680,7 @@ class npc_ros_dark_rider : public CreatureScript public: npc_ros_dark_rider() : CreatureScript("npc_ros_dark_rider") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ros_dark_riderAI(creature); } @@ -689,12 +689,12 @@ public: { npc_ros_dark_riderAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->ExitVehicle(); } - void Reset() OVERRIDE + void Reset() override { Creature* deathcharger = me->FindNearestCreature(28782, 30); if (!deathcharger) @@ -707,7 +707,7 @@ public: me->EnterVehicle(deathcharger); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Creature* deathcharger = me->FindNearestCreature(28782, 30); if (!deathcharger) @@ -735,7 +735,7 @@ class npc_dkc1_gothik : public CreatureScript public: npc_dkc1_gothik() : CreatureScript("npc_dkc1_gothik") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dkc1_gothikAI(creature); } @@ -744,7 +744,7 @@ public: { npc_dkc1_gothikAI(Creature* creature) : ScriptedAI(creature) { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); @@ -779,7 +779,7 @@ class npc_scarlet_ghoul : public CreatureScript public: npc_scarlet_ghoul() : CreatureScript("npc_scarlet_ghoul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_scarlet_ghoulAI(creature); } @@ -815,7 +815,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->IsInCombat()) { @@ -832,12 +832,12 @@ public: } } - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) return; //ScriptedAI::UpdateAI(diff); //Check if we have a current target - if (me->GetVictim()->GetEntry() == NPC_GHOSTS) + if (me->EnsureVictim()->GetEntry() == NPC_GHOSTS) { if (me->isAttackReady()) { @@ -881,7 +881,7 @@ class npc_scarlet_miner_cart : public CreatureScript me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); // Modelid2 is a horse. } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_MINER) { @@ -890,13 +890,13 @@ class npc_scarlet_miner_cart : public CreatureScript } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { if (summon->GetEntry() == NPC_MINER) _minerGUID = 0; } - void DoAction(int32 /*param*/) OVERRIDE + void DoAction(int32 /*param*/) override { if (Creature* miner = ObjectAccessor::GetCreature(*me, _minerGUID)) { @@ -910,7 +910,7 @@ class npc_scarlet_miner_cart : public CreatureScript } } - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { if (apply) { @@ -930,7 +930,7 @@ class npc_scarlet_miner_cart : public CreatureScript uint64 _playerGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_scarlet_miner_cartAI(creature); } @@ -962,14 +962,14 @@ class npc_scarlet_miner : public CreatureScript uint32 IntroPhase; uint64 carGUID; - void Reset() OVERRIDE + void Reset() override { carGUID = 0; IntroTimer = 0; IntroPhase = 0; } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { carGUID = summoner->GetGUID(); } @@ -1007,14 +1007,14 @@ class npc_scarlet_miner : public CreatureScript } } - void SetGUID(uint64 guid, int32 /*id = 0*/) OVERRIDE + void SetGUID(uint64 guid, int32 /*id = 0*/) override { InitWaypoint(); Start(false, false, guid); SetDespawnAtFar(false); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -1039,7 +1039,7 @@ class npc_scarlet_miner : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IntroPhase) { @@ -1047,14 +1047,14 @@ class npc_scarlet_miner : public CreatureScript { if (IntroPhase == 1) { - if (Creature* car = Unit::GetCreature(*me, carGUID)) + if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID)) DoCast(car, SPELL_CART_DRAG); IntroTimer = 800; IntroPhase = 2; } else { - if (Creature* car = Unit::GetCreature(*me, carGUID)) + if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID)) car->AI()->DoAction(0); IntroPhase = 0; } @@ -1066,7 +1066,7 @@ class npc_scarlet_miner : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_scarlet_minerAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 153e995e590..09377f20bed 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -44,7 +44,7 @@ class npc_crusade_persuaded : public CreatureScript public: npc_crusade_persuaded() : CreatureScript("npc_crusade_persuaded") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_crusade_persuadedAI(creature); } @@ -57,7 +57,7 @@ public: uint32 speechCounter; uint64 playerGUID; - void Reset() OVERRIDE + void Reset() override { speechTimer = 0; speechCounter = 0; @@ -66,7 +66,7 @@ public: me->RestoreFaction(); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_PERSUASIVE_STRIKE && caster->GetTypeId() == TYPEID_PLAYER && me->IsAlive() && !speechCounter) { @@ -90,7 +90,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (speechCounter) { @@ -191,7 +191,7 @@ class npc_koltira_deathweaver : public CreatureScript public: npc_koltira_deathweaver() : CreatureScript("npc_koltira_deathweaver") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_BREAKOUT) { @@ -210,7 +210,7 @@ public: me->SetReactState(REACT_DEFENSIVE); } - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -224,7 +224,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -258,7 +258,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Player* player = GetPlayerForEscort()) summoned->AI()->AttackStart(player); @@ -275,7 +275,7 @@ public: me->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.329f, -6045.818f, 127.583f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -307,7 +307,7 @@ public: break; case 4: { - Creature* temp = Unit::GetCreature(*me, valrothGUID); + Creature* temp = ObjectAccessor::GetCreature(*me, valrothGUID); if (!temp || !temp->IsAlive()) { @@ -347,7 +347,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_koltira_deathweaverAI(creature); } @@ -368,7 +368,7 @@ class npc_scarlet_courier : public CreatureScript public: npc_scarlet_courier() : CreatureScript("npc_scarlet_courier") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_scarlet_courierAI(creature); } @@ -380,21 +380,21 @@ public: uint32 uiStage; uint32 uiStage_timer; - void Reset() OVERRIDE + void Reset() override { me->Mount(14338); // not sure about this id uiStage = 1; uiStage_timer = 3000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_TREE2); me->Dismount(); uiStage = 0; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -403,7 +403,7 @@ public: uiStage = 2; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiStage && !me->IsInCombat()) { @@ -460,7 +460,7 @@ class npc_high_inquisitor_valroth : public CreatureScript public: npc_high_inquisitor_valroth() : CreatureScript("npc_high_inquisitor_valroth") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_high_inquisitor_valrothAI(creature); } @@ -473,20 +473,20 @@ public: uint32 uiInquisitor_Penance_timer; uint32 uiValroth_Smite_timer; - void Reset() OVERRIDE + void Reset() override { uiRenew_timer = 1000; uiInquisitor_Penance_timer = 2000; uiValroth_Smite_timer = 1000; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_VALROTH_AGGRO); DoCast(who, SPELL_VALROTH_SMITE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiRenew_timer <= diff) { @@ -518,7 +518,7 @@ public: Talk(SAY_VALROTH_RAND); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Talk(SAY_VALROTH_DEATH); killer->CastSpell(me, SPELL_SUMMON_VALROTH_REMAINS, true); @@ -596,7 +596,7 @@ class npc_a_special_surprise : public CreatureScript public: npc_a_special_surprise() : CreatureScript("npc_a_special_surprise") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_a_special_surpriseAI(creature); } @@ -609,7 +609,7 @@ public: uint32 ExecuteSpeech_Counter; uint64 PlayerGUID; - void Reset() OVERRIDE + void Reset() override { ExecuteSpeech_Timer = 0; ExecuteSpeech_Counter = 0; @@ -667,7 +667,7 @@ public: return false; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (PlayerGUID || who->GetTypeId() != TYPEID_PLAYER || !who->IsWithinDist(me, INTERACTION_DISTANCE)) @@ -677,7 +677,7 @@ public: PlayerGUID = who->GetGUID(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (PlayerGUID && !me->GetVictim() && me->IsAlive()) { diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 75ed7b82406..40773c87b68 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -275,7 +275,7 @@ class npc_highlord_darion_mograine : public CreatureScript public: npc_highlord_darion_mograine() : CreatureScript("npc_highlord_darion_mograine") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -289,7 +289,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -302,7 +302,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_highlord_darion_mograineAI(creature); } @@ -370,7 +370,7 @@ public: uint64 uiGhoulGUID[ENCOUNTER_GHOUL_NUMBER]; uint64 uiWarriorGUID[ENCOUNTER_WARRIOR_NUMBER]; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -400,15 +400,15 @@ public: //UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0); UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 0); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->setDeathState(JUST_DIED); - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) temp->setDeathState(JUST_DIED); - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) temp->setDeathState(JUST_DIED); - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) temp->setDeathState(JUST_DIED); - if (Creature* temp = Unit::GetCreature(*me, uiRayneGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiRayneGUID)) temp->setDeathState(JUST_DIED); uiTirionGUID = 0; @@ -419,24 +419,24 @@ public: for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i])) temp->setDeathState(JUST_DIED); uiDefenderGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i])) temp->setDeathState(JUST_DIED); uiEarthshatterGUID[i] = 0; } - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) temp->Respawn(); - if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID)) temp->Respawn(); - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) temp->Respawn(); - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->Respawn(); uiKoltiraGUID = 0; @@ -445,32 +445,32 @@ public: uiLichKingGUID = 0; for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i])) temp->setDeathState(JUST_DIED); uiAbominationGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i])) temp->setDeathState(JUST_DIED); uiBehemothGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i])) temp->setDeathState(JUST_DIED); uiGhoulGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) { - if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i])) temp->setDeathState(JUST_DIED); uiWarriorGUID[i] = 0; } } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -487,7 +487,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) @@ -503,7 +503,7 @@ public: SetEscortPaused(bOnHold); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -514,9 +514,9 @@ public: case 1: SetHoldState(true); SpawnNPC(); - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN07); - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN08); for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) @@ -534,9 +534,9 @@ public: me->Dismount(); me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true); // need to fix, on player only - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) temp->Dismount(); - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) temp->Dismount(); bIsBattle = true; @@ -547,37 +547,37 @@ public: break; case 3: { - //Unit* pTirion = Unit::GetCreature(*me, uiTirionGUID); + //Unit* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID); Talk(EMOTE_LIGHT_OF_DAWN05); if (me->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) me->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) { if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); temp->SetWalk(true); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[19].x, LightofDawnLoc[19].y, LightofDawnLoc[19].z); } - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) { if (temp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) temp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); temp->SetWalk(true); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[21].x, LightofDawnLoc[21].y, LightofDawnLoc[21].z); } - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { temp->SetWalk(true); temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10].x, LightofDawnLoc[10].y, LightofDawnLoc[10].z); } - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { temp->SetWalk(true); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[13].x, LightofDawnLoc[13].y, LightofDawnLoc[13].z); } - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { temp->SetWalk(true); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[16].x, LightofDawnLoc[16].y, LightofDawnLoc[16].z); @@ -589,9 +589,9 @@ public: Talk(SAY_LIGHT_OF_DAWN27); me->SetStandState(UNIT_STAND_STATE_KNEEL); - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) temp->SetStandState(UNIT_STAND_STATE_KNEEL); - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) temp->SetStandState(UNIT_STAND_STATE_KNEEL); SetHoldState(true); break; @@ -610,7 +610,7 @@ public: break; case 8: me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP)); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) me->CastSpell(temp, SPELL_ASHBRINGER, true); Talk(EMOTE_LIGHT_OF_DAWN14); SetHoldState(true); @@ -618,13 +618,13 @@ public: } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!bIsBattle)//do not reset self if we are in battle npc_escortAI::EnterEvadeMode(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -743,51 +743,51 @@ public: case 9: // charge begins SetHoldState(false); - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) { temp->SetWalk(false); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } - if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID)) { temp->SetWalk(false); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) { temp->SetWalk(false); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) - if (Creature* temp = Unit::GetCreature(*me, uiAbominationGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i])) temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) - if (Creature* temp = Unit::GetCreature(*me, uiBehemothGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i])) temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) - if (Creature* temp = Unit::GetCreature(*me, uiGhoulGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i])) temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) - if (Creature* temp = Unit::GetCreature(*me, uiWarriorGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i])) temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); JumpToNextStep(5000); break; // ******* After battle ***************************************************************** case 11: // Tirion starts to speak - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN28); JumpToNextStep(21000); break; case 12: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN29); JumpToNextStep(13000); break; case 13: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN30); JumpToNextStep(13000); break; @@ -810,7 +810,7 @@ public: break; case 16: // Alexandros out - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) { temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23].x, LightofDawnLoc[23].y, LightofDawnLoc[23].z); @@ -837,7 +837,7 @@ public: break; case 19: // runs to father - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN07); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[25].x, LightofDawnLoc[25].y, LightofDawnLoc[25].z); @@ -846,59 +846,59 @@ public: break; case 20: - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN36); JumpToNextStep(4000); break; case 21: - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN08); JumpToNextStep(4000); break; case 22: - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN37); JumpToNextStep(8000); break; case 23: - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN38); JumpToNextStep(8000); break; case 24: - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN39); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[1].x, LightofDawnLoc[1].y, LightofDawnLoc[1].z); JumpToNextStep(15000); break; case 25: - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN40); JumpToNextStep(11000); break; case 26: - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN41); JumpToNextStep(5000); break; case 27: - if (Creature* temp = Unit::GetCreature(*me, uiDarionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDarionGUID)) temp->setDeathState(JUST_DIED); JumpToNextStep(24000); break; case 28: - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN42); JumpToNextStep(6000); break; @@ -908,19 +908,19 @@ public: { temp->AI()->Talk(SAY_LIGHT_OF_DAWN43); uiLichKingGUID = temp->GetGUID(); - if (Unit* pAlex = Unit::GetCreature(*me, uiAlexandrosGUID)) + if (Unit* pAlex = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) temp->CastSpell(pAlex, SPELL_SOUL_FEAST_ALEX, false); } JumpToNextStep(2000); break; case 30: - if (Creature* temp = Unit::GetCreature(*me, uiAlexandrosGUID)) // just hide him + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) // just hide him { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN09); temp->SetVisible(false); } - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) { temp->InterruptNonMeleeSpells(false); temp->AI()->Talk(SAY_LIGHT_OF_DAWN45); @@ -936,13 +936,13 @@ public: break; case 32: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[27].x, LightofDawnLoc[27].y, LightofDawnLoc[27].z); JumpToNextStep(6000); break; case 33: // Darion supports to jump to lich king here - if (Unit::GetCreature(*me, uiLichKingGUID)) + if (ObjectAccessor::GetCreature(*me, uiLichKingGUID)) DoCast(me, SPELL_MOGRAINE_CHARGE); // jumping charge // doesn't make it looks well, so workarounds, Darion charges, looks better me->SetSpeed(MOVE_RUN, 3.0f); @@ -952,7 +952,7 @@ public: break; case 35: // Lich king counterattacks - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) { temp->HandleEmoteCommand(EMOTE_ONESHOT_KICK); temp->AI()->Talk(SAY_LIGHT_OF_DAWN46); @@ -969,29 +969,29 @@ public: break; case 38: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN47); JumpToNextStep(8000); break; case 39: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN48); JumpToNextStep(15000); break; case 40: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN49); JumpToNextStep(17000); break; case 41: // Lich king - Apocalypse - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN11); temp->AI()->Talk(SAY_LIGHT_OF_DAWN51); - if (Creature* pTirion = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* pTirion = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { pTirion->SetStandState(UNIT_STAND_STATE_KNEEL); //temp->CastSpell(pTirion, SPELL_APOCALYPSE, false); // not working @@ -1007,7 +1007,7 @@ public: float fLichPositionX = 0, fLichPositionY = 0, fLichPositionZ = 0; - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) { fLichPositionX = temp->GetPositionX(); fLichPositionY = temp->GetPositionY(); @@ -1032,7 +1032,7 @@ public: temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); uiEarthshatterGUID[0] = temp->GetGUID(); } - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); @@ -1040,7 +1040,7 @@ public: temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); temp->AI()->Talk(SAY_LIGHT_OF_DAWN50); } - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); @@ -1048,7 +1048,7 @@ public: temp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED); temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); } - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); @@ -1060,37 +1060,37 @@ public: break; case 43: // They all got kicked - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN13); - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); temp->SetSpeed(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14].x, LightofDawnLoc[14].y, LightofDawnLoc[14].z); } - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); temp->SetSpeed(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11].x, LightofDawnLoc[11].y, LightofDawnLoc[11].z); } - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); temp->SetSpeed(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17].x, LightofDawnLoc[17].y, LightofDawnLoc[17].z); } - if (Creature* temp = Unit::GetCreature(*me, uiDefenderGUID[0])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[0])) { temp->SetSpeed(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z); } - if (Creature* temp = Unit::GetCreature(*me, uiEarthshatterGUID[0])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[0])) { temp->SetSpeed(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); @@ -1100,11 +1100,11 @@ public: break; case 44: // make them stand up - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) temp->SetStandState(UNIT_STAND_STATE_STAND); - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) temp->SetStandState(UNIT_STAND_STATE_STAND); - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) temp->SetStandState(UNIT_STAND_STATE_STAND); JumpToNextStep(1000); break; @@ -1126,7 +1126,7 @@ public: case 47: // Ashbringer rebirth me->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(EMOTE_LIGHT_OF_DAWN15); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { temp->SetStandState(UNIT_STAND_STATE_STAND); temp->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_HIGHLORD_TIRION_FORDRING)); @@ -1139,38 +1139,38 @@ public: //if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // go->SetPhaseMask(128, true); me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30000); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { if (temp->HasAura(SPELL_REBIRTH_OF_THE_ASHBRINGER, 0)) temp->RemoveAurasDueToSpell(SPELL_REBIRTH_OF_THE_ASHBRINGER); temp->CastSpell(temp, 41542, false); // workarounds, light expoded, makes it cool temp->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); } - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->InterruptNonMeleeSpells(false); JumpToNextStep(2500); break; case 49: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN54); JumpToNextStep(4000); break; case 50: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN55); JumpToNextStep(5000); break; case 51: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN56); JumpToNextStep(1000); break; case 52: // Tiron charges - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN16); temp->CastSpell(temp, SPELL_TIRION_CHARGE, false); // jumping charge @@ -1178,20 +1178,20 @@ public: temp->SetSpeed(MOVE_RUN, 3.0f); // workarounds, make Tirion still running temp->SetWalk(false); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2].x, LightofDawnLoc[2].y, LightofDawnLoc[2].z); - if (Creature* lktemp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* lktemp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) lktemp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him } JumpToNextStep(1500); break; case 53: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN57); JumpToNextStep(1000); break; case 54: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) { temp->SetSpeed(MOVE_RUN, 1.0f); me->SetWalk(true); @@ -1201,33 +1201,33 @@ public: break; case 55: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->SetStandState(UNIT_STAND_STATE_KNEEL); JumpToNextStep(2000); break; case 56: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->SetStandState(UNIT_STAND_STATE_STAND); JumpToNextStep(1500); break; case 57: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN58); JumpToNextStep(10000); break; case 58: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN59); JumpToNextStep(10000); break; case 59: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->CastSpell(temp, SPELL_TELEPORT_VISUAL, false); - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion { temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); temp->SetSpeed(MOVE_RUN, 1.0f); @@ -1237,7 +1237,7 @@ public: break; case 60: - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN17); temp->Kill(temp); @@ -1246,13 +1246,13 @@ public: break; case 61: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN60); JumpToNextStep(3000); break; case 62: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { temp->SetWalk(true); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[7].x, LightofDawnLoc[7].y, LightofDawnLoc[7].z); @@ -1261,7 +1261,7 @@ public: break; case 63: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) { temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[8].x, LightofDawnLoc[8].y, LightofDawnLoc[8].z); temp->AI()->Talk(SAY_LIGHT_OF_DAWN61); @@ -1270,37 +1270,37 @@ public: break; case 64: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN62); JumpToNextStep(7000); break; case 65: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN63); JumpToNextStep(10000); break; case 66: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN64); JumpToNextStep(11000); break; case 67: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN65); JumpToNextStep(10000); break; case 68: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN66); JumpToNextStep(8000); break; case 69: - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN67); JumpToNextStep(10000); break; @@ -1335,13 +1335,13 @@ public: break; case 73: - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) temp->DespawnOrUnsummon(); - if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID)) temp->DespawnOrUnsummon(); - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) temp->DespawnOrUnsummon(); - if (Creature* temp = Unit::GetCreature(*me, uiLichKingGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) temp->DespawnOrUnsummon(); me->DespawnOrUnsummon(); break; @@ -1452,7 +1452,7 @@ public: for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) DespawnNPC(uiWarriorGUID[i]); - if (Creature* temp = Unit::GetCreature(*me, uiKorfaxGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { temp->RemoveAllAuras(); temp->DeleteThreatList(); @@ -1463,7 +1463,7 @@ public: temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[9].x, LightofDawnLoc[9].y, LightofDawnLoc[9].z); } - if (Creature* temp = Unit::GetCreature(*me, uiMaxwellGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { temp->RemoveAllAuras(); temp->DeleteThreatList(); @@ -1474,7 +1474,7 @@ public: temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[12].x, LightofDawnLoc[12].y, LightofDawnLoc[12].z); } - if (Creature* temp = Unit::GetCreature(*me, uiEligorGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { temp->RemoveAllAuras(); temp->DeleteThreatList(); @@ -1486,7 +1486,7 @@ public: } DespawnNPC(uiRayneGUID); - if (Creature* temp = Unit::GetCreature(*me, uiKoltiraGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKoltiraGUID)) { temp->RemoveAllAuras(); temp->DeleteThreatList(); @@ -1498,10 +1498,10 @@ public: temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false); } - if (Creature* temp = Unit::GetCreature(*me, uiOrbazGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiOrbazGUID)) temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN04); - if (Creature* temp = Unit::GetCreature(*me, uiThassarianGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiThassarianGUID)) { temp->RemoveAllAuras(); temp->DeleteThreatList(); @@ -1513,7 +1513,7 @@ public: temp->CastSpell(temp, SPELL_THE_LIGHT_OF_DAWN, false); } - if (Creature* temp = Unit::GetCreature(*me, uiTirionGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) temp->AI()->Talk(SAY_LIGHT_OF_DAWN26); SetHoldState(false); @@ -1532,7 +1532,7 @@ public: void NPCChangeTarget(uint64 ui_GUID) { - if (Creature* temp = Unit::GetCreature(*me, ui_GUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, ui_GUID)) if (temp->IsAlive()) if (Unit* pTarger = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (pTarger->IsAlive()) @@ -1553,7 +1553,7 @@ public: // Death for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiGhoulGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiGhoulGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_ACHERUS_GHOUL, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1563,7 +1563,7 @@ public: } for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiAbominationGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiAbominationGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1573,7 +1573,7 @@ public: } for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiWarriorGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiWarriorGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1583,7 +1583,7 @@ public: } for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiBehemothGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiBehemothGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_FLESH_BEHEMOTH, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1595,7 +1595,7 @@ public: // Dawn for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiDefenderGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiDefenderGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1606,7 +1606,7 @@ public: } for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i) { - temp = Unit::GetCreature(*me, uiEarthshatterGUID[i]); + temp = ObjectAccessor::GetCreature(*me, uiEarthshatterGUID[i]); if (!temp) { temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1615,7 +1615,7 @@ public: uiEarthshatterGUID[i] = temp->GetGUID(); } } - temp = Unit::GetCreature(*me, uiKorfaxGUID); + temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID); if (!temp) { temp = me->SummonCreature(NPC_KORFAX_CHAMPION_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); @@ -1623,7 +1623,7 @@ public: me->AddThreat(temp, 0.0f); uiKorfaxGUID = temp->GetGUID(); } - temp = Unit::GetCreature(*me, uiMaxwellGUID); + temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID); if (!temp) { temp = me->SummonCreature(NPC_LORD_MAXWELL_TYROSUS, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); @@ -1631,7 +1631,7 @@ public: me->AddThreat(temp, 0.0f); uiMaxwellGUID = temp->GetGUID(); } - temp = Unit::GetCreature(*me, uiEligorGUID); + temp = ObjectAccessor::GetCreature(*me, uiEligorGUID); if (!temp) { temp = me->SummonCreature(NPC_COMMANDER_ELIGOR_DAWNBRINGER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); @@ -1639,7 +1639,7 @@ public: me->AddThreat(temp, 0.0f); uiEligorGUID = temp->GetGUID(); } - temp = Unit::GetCreature(*me, uiRayneGUID); + temp = ObjectAccessor::GetCreature(*me, uiRayneGUID); if (!temp) { temp = me->SummonCreature(NPC_RAYNE, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); @@ -1651,7 +1651,7 @@ public: void DespawnNPC(uint64 pGUID) { - if (Creature* temp = Unit::GetCreature(*me, pGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, pGUID)) if (temp->IsAlive()) { temp->SetVisible(false); @@ -1670,7 +1670,7 @@ class npc_the_lich_king_tirion_dawn : public CreatureScript public: npc_the_lich_king_tirion_dawn() : CreatureScript("npc_the_lich_king_tirion_dawn") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_the_lich_king_tirion_dawnAI(creature); } @@ -1678,10 +1678,10 @@ public: struct npc_the_lich_king_tirion_dawnAI : public ScriptedAI { npc_the_lich_king_tirion_dawnAI(Creature* creature) : ScriptedAI(creature) { Reset(); } - void Reset() OVERRIDE { } - void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive OVERRIDE - void UpdateAI(uint32 /*diff*/) OVERRIDE { } - void JustDied(Unit* /*killer*/) OVERRIDE { } + void Reset() override { } + void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive override + void UpdateAI(uint32 /*diff*/) override { } + void JustDied(Unit* /*killer*/) override { } }; }; diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index cdc37b40521..43dee1338ef 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -39,7 +39,7 @@ class npc_valkyr_battle_maiden : public CreatureScript public: npc_valkyr_battle_maiden() : CreatureScript("npc_valkyr_battle_maiden") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_valkyr_battle_maidenAI(creature); } @@ -52,7 +52,7 @@ public: float x, y, z; uint32 phase; - void Reset() OVERRIDE + void Reset() override { me->setActive(true); me->SetVisible(false); @@ -69,7 +69,7 @@ public: me->SetPosition(x, y, z, 0.0f); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (FlyBackTimer <= diff) { @@ -99,7 +99,7 @@ public: FlyBackTimer = 4500; break; case 2: - if (!player->isRessurectRequested()) + if (!player->isResurrectRequested()) { me->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_01); DoCast(player, SPELL_REVIVE, true); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp index 5370adf8384..f18c0aac8bb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -16,15 +15,9 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Arcanist_Doan -SD%Complete: 100 -SDComment: -SDCategory: Scarlet Monastery -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "scarlet_monastery.h" enum Yells { @@ -34,103 +27,100 @@ enum Yells enum Spells { - SPELL_POLYMORPH = 13323, - SPELL_AOESILENCE = 8988, - SPELL_ARCANEEXPLOSION = 9433, - SPELL_FIREAOE = 9435, - SPELL_ARCANEBUBBLE = 9438 + SPELL_SILENCE = 8988, + SPELL_ARCANE_EXPLOSION = 9433, + SPELL_DETONATION = 9435, + SPELL_ARCANE_BUBBLE = 9438, + SPELL_POLYMORPH = 13323 }; -class boss_arcanist_doan : public CreatureScript +enum Events { -public: - boss_arcanist_doan() : CreatureScript("boss_arcanist_doan") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_arcanist_doanAI(creature); - } - - struct boss_arcanist_doanAI : public ScriptedAI - { - boss_arcanist_doanAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 Polymorph_Timer; - uint32 AoESilence_Timer; - uint32 ArcaneExplosion_Timer; - bool bCanDetonate; - bool bShielded; - - void Reset() OVERRIDE - { - Polymorph_Timer = 20000; - AoESilence_Timer = 15000; - ArcaneExplosion_Timer = 3000; - bCanDetonate = false; - bShielded = false; - } + EVENT_SILENCE = 1, + EVENT_ARCANE_EXPLOSION = 2, + EVENT_ARCANE_BUBBLE = 3, + EVENT_POLYMORPH = 4 +}; - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); - } +class boss_arcanist_doan : public CreatureScript +{ + public: + boss_arcanist_doan() : CreatureScript("boss_arcanist_doan") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_arcanist_doanAI : public BossAI { - if (!UpdateVictim()) - return; - - if (bShielded && bCanDetonate) + boss_arcanist_doanAI(Creature* creature) : BossAI(creature, DATA_ARCANIST_DOAN) { - DoCast(me, SPELL_FIREAOE); - bCanDetonate = false; + _healthAbove50Pct = true; } - if (me->HasAura(SPELL_ARCANEBUBBLE)) - return; - - //If we are <50% hp cast Arcane Bubble - if (!bShielded && !HealthAbovePct(50)) + void Reset() override { - //wait if we already casting - if (me->IsNonMeleeSpellCast(false)) - return; - - Talk(SAY_SPECIALAE); - DoCast(me, SPELL_ARCANEBUBBLE); - - bCanDetonate = true; - bShielded = true; + _Reset(); + _healthAbove50Pct = true; } - if (Polymorph_Timer <= diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)) - DoCast(target, SPELL_POLYMORPH); + _EnterCombat(); + Talk(SAY_AGGRO); - Polymorph_Timer = 20000; + events.ScheduleEvent(EVENT_SILENCE, 15 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 3 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_POLYMORPH, 30 * IN_MILLISECONDS); } - else Polymorph_Timer -= diff; - //AoESilence_Timer - if (AoESilence_Timer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_AOESILENCE); - AoESilence_Timer = urand(15000, 20000); - } - else AoESilence_Timer -= diff; + if (!UpdateVictim()) + return; - //ArcaneExplosion_Timer - if (ArcaneExplosion_Timer <= diff) - { - DoCastVictim(SPELL_ARCANEEXPLOSION); - ArcaneExplosion_Timer = 8000; + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SILENCE: + DoCastVictim(SPELL_SILENCE); + events.ScheduleEvent(EVENT_SILENCE, urand(15, 20) * IN_MILLISECONDS); + break; + case EVENT_ARCANE_EXPLOSION: + DoCastVictim(SPELL_ARCANE_EXPLOSION); + events.ScheduleEvent(EVENT_SILENCE, 8 * IN_MILLISECONDS); + break; + case EVENT_POLYMORPH: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 30.0f, true)) + DoCast(target, SPELL_POLYMORPH); + events.ScheduleEvent(EVENT_POLYMORPH, 20 * IN_MILLISECONDS); + break; + default: + break; + } + } + + if (_healthAbove50Pct && HealthBelowPct(50)) + { + _healthAbove50Pct = false; + Talk(SAY_SPECIALAE); + DoCast(me, SPELL_ARCANE_BUBBLE); + DoCastAOE(SPELL_DETONATION); + } + + DoMeleeAttackIfReady(); } - else ArcaneExplosion_Timer -= diff; - DoMeleeAttackIfReady(); + private: + bool _healthAbove50Pct; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_arcanist_doanAI(creature); } - }; }; void AddSC_boss_arcanist_doan() diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp index edcc78ca8fe..dd173c75232 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp @@ -38,7 +38,7 @@ class boss_azshir_the_sleepless : public CreatureScript public: boss_azshir_the_sleepless() : CreatureScript("boss_azshir_the_sleepless") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_azshir_the_sleeplessAI(creature); } @@ -51,16 +51,16 @@ public: uint32 CallOftheGrave_Timer; uint32 Terrify_Timer; - void Reset() OVERRIDE + void Reset() override { SoulSiphon_Timer = 1; CallOftheGrave_Timer = 30000; Terrify_Timer = 20000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp index a7db667ecfd..207c12f608a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp @@ -46,7 +46,7 @@ class boss_bloodmage_thalnos : public CreatureScript public: boss_bloodmage_thalnos() : CreatureScript("boss_bloodmage_thalnos") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_bloodmage_thalnosAI(creature); } @@ -61,7 +61,7 @@ public: uint32 FlameSpike_Timer; uint32 FireNova_Timer; - void Reset() OVERRIDE + void Reset() override { HpYell = false; FlameShock_Timer = 10000; @@ -70,17 +70,17 @@ public: FireNova_Timer = 40000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*Victim*/) OVERRIDE + void KilledUnit(Unit* /*Victim*/) override { Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 31219e18121..0be681af915 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -146,7 +146,7 @@ class npc_wisp_invis : public CreatureScript public: npc_wisp_invis() : CreatureScript("npc_wisp_invis") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wisp_invisAI(creature); } @@ -162,8 +162,8 @@ public: uint32 delay; uint32 spell; uint32 spell2; - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } void SetType(uint32 _type) { switch (Creaturetype = _type) @@ -189,13 +189,13 @@ public: DoCast(me, spell); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_WISP_FLIGHT_PORT && Creaturetype == 4) me->SetDisplayId(2027); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || Creaturetype != 1 || !who->isTargetableForAttack()) @@ -205,7 +205,7 @@ public: DoCast(who, SPELL_SQUASH_SOUL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (delay) { @@ -226,7 +226,7 @@ class npc_head : public CreatureScript public: npc_head() : CreatureScript("npc_head") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_headAI(creature); } @@ -244,7 +244,7 @@ public: bool withbody; bool die; - void Reset() OVERRIDE + void Reset() override { Phase = 0; bodyGUID = 0; @@ -254,7 +254,7 @@ public: laugh = urand(15000, 30000); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void SaySound(uint8 textEntry, Unit* target = 0) { @@ -266,7 +266,7 @@ public: laugh += 3000; } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (withbody) return; @@ -297,7 +297,7 @@ public: } } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (!withbody) return; @@ -323,7 +323,7 @@ public: } void Disappear(); - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!withbody) { @@ -356,7 +356,7 @@ public: if (wait <= diff) { die = false; - if (Unit* body = Unit::GetUnit(*me, bodyGUID)) + if (Unit* body = ObjectAccessor::GetUnit(*me, bodyGUID)) body->Kill(body); me->Kill(me); } @@ -372,7 +372,7 @@ class boss_headless_horseman : public CreatureScript public: boss_headless_horseman() : CreatureScript("boss_headless_horseman") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_headless_horsemanAI>(creature); } @@ -409,7 +409,7 @@ public: bool wp_reached; bool burned; - void Reset() OVERRIDE + void Reset() override { Phase = 1; conflagrate = 15000; @@ -428,7 +428,7 @@ public: DoCast(me, SPELL_HEAD); if (headGUID) { - if (Creature* Head = Unit::GetCreature((*me), headGUID)) + if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID)) Head->DisappearAndDie(); headGUID = 0; @@ -451,7 +451,7 @@ public: Phase = 0; } - void MovementInform(uint32 type, uint32 i) OVERRIDE + void MovementInform(uint32 type, uint32 i) override { if (type != POINT_MOTION_TYPE || !IsFlying || i != id) return; @@ -483,7 +483,7 @@ public: wp_reached = false; me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); SaySound(SAY_ENTRANCE); - if (Unit* player = Unit::GetUnit(*me, PlayerGUID)) + if (Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID)) DoStartMovement(player); break; } @@ -491,32 +491,32 @@ public: ++id; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_HORSEMAN_EVENT, IN_PROGRESS); DoZoneInCombat(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (withhead && Phase != 0) ScriptedAI::MoveInLineOfSight(who); } - void KilledUnit(Unit* player) OVERRIDE + void KilledUnit(Unit* player) override { if (player->GetTypeId() == TYPEID_PLAYER) { if (withhead) SaySound(SAY_PLAYER_DEATH); //maybe possible when player dies from conflagration - else if (Creature* Head = Unit::GetCreature((*me), headGUID)) + else if (Creature* Head = ObjectAccessor::GetCreature((*me), headGUID)) CAST_AI(npc_head::npc_headAI, Head->AI())->SaySound(SAY_PLAYER_DEATH); } } @@ -552,13 +552,13 @@ public: return NULL; } - void SpellHitTarget(Unit* unit, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* unit, const SpellInfo* spell) override { if (spell->Id == SPELL_CONFLAGRATION && unit->HasAura(SPELL_CONFLAGRATION)) SaySound(SAY_CONFLAGRATION, unit); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->StopMoving(); //me->GetMotionMaster()->MoveIdle(); @@ -578,7 +578,7 @@ public: } } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (withhead) return; @@ -601,14 +601,14 @@ public: ThreatContainer::StorageType threatlist = caster->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && unit->IsAlive() && unit != caster) me->AddThreat(unit, caster->getThreatManager().getThreat(unit)); } } } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth() && withhead) { @@ -621,7 +621,7 @@ public: if (!headGUID) headGUID = DoSpawnCreature(HEAD, float(rand()%6), float(rand()%6), 0, 0, TEMPSUMMON_DEAD_DESPAWN, 0)->GetGUID(); - Unit* Head = Unit::GetUnit(*me, headGUID); + Unit* Head = ObjectAccessor::GetUnit(*me, headGUID); if (Head && Head->IsAlive()) { Head->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -637,7 +637,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (withhead) { @@ -746,7 +746,7 @@ public: --Phase; else Phase = 1; - Creature* Head = Unit::GetCreature((*me), headGUID); + Creature* Head = ObjectAccessor::GetCreature((*me), headGUID); if (Head && Head->IsAlive()) { CAST_AI(npc_head::npc_headAI, Head->AI())->Phase = Phase; @@ -780,19 +780,23 @@ class npc_pulsing_pumpkin : public CreatureScript public: npc_pulsing_pumpkin() : CreatureScript("npc_pulsing_pumpkin") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pulsing_pumpkinAI(creature); } struct npc_pulsing_pumpkinAI : public ScriptedAI { - npc_pulsing_pumpkinAI(Creature* creature) : ScriptedAI(creature) { } + npc_pulsing_pumpkinAI(Creature* creature) : ScriptedAI(creature) + { + sprouted = false; + debuffGUID = 0; + } bool sprouted; uint64 debuffGUID; - void Reset() OVERRIDE + void Reset() override { float x, y, z; me->GetPosition(x, y, z); //this visual aura some under ground @@ -813,9 +817,9 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_SPROUTING) { @@ -833,7 +837,7 @@ public: if (!debuffGUID) return; - Unit* debuff = Unit::GetUnit(*me, debuffGUID); + Unit* debuff = ObjectAccessor::GetUnit(*me, debuffGUID); if (debuff) { debuff->SetVisible(false); @@ -841,13 +845,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!sprouted) Despawn(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || !me->IsValidAttackTarget(who) || me->GetVictim()) @@ -858,7 +862,7 @@ public: DoStartMovement(who); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (sprouted && UpdateVictim()) DoMeleeAttackIfReady(); @@ -871,7 +875,7 @@ class go_loosely_turned_soil : public GameObjectScript public: go_loosely_turned_soil() : GameObjectScript("go_loosely_turned_soil") { } - bool OnGossipHello(Player* player, GameObject* soil) OVERRIDE + bool OnGossipHello(Player* player, GameObject* soil) override { InstanceScript* instance = player->GetInstanceScript(); if (instance) @@ -905,7 +909,7 @@ void npc_head::npc_headAI::Disappear() if (bodyGUID) { - Creature* body = Unit::GetCreature((*me), bodyGUID); + Creature* body = ObjectAccessor::GetCreature((*me), bodyGUID); if (body && body->IsAlive()) { withbody = true; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index da9d8345e77..480b354fe29 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -55,7 +55,7 @@ class boss_herod : public CreatureScript public: boss_herod() : CreatureScript("boss_herod") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_herodAI(creature); } @@ -69,31 +69,31 @@ public: uint32 Cleave_Timer; uint32 Whirlwind_Timer; - void Reset() OVERRIDE + void Reset() override { Enrage = false; Cleave_Timer = 12000; Whirlwind_Timer = 60000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoCast(me, SPELL_RUSHINGCHARGE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (uint8 i = 0; i < 20; ++i) me->SummonCreature(ENTRY_SCARLET_TRAINEE, 1939.18f, -431.58f, 17.09f, 6.22f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -134,7 +134,7 @@ class npc_scarlet_trainee : public CreatureScript public: npc_scarlet_trainee() : CreatureScript("npc_scarlet_trainee") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_scarlet_traineeAI(creature); } @@ -148,11 +148,11 @@ public: uint32 Start_Timer; - void Reset() OVERRIDE { } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void WaypointReached(uint32 /*waypointId*/) override { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Start_Timer) { diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp index ee5ac9b0620..f58ab1519e4 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp @@ -41,7 +41,7 @@ class boss_high_inquisitor_fairbanks : public CreatureScript public: boss_high_inquisitor_fairbanks() : CreatureScript("boss_high_inquisitor_fairbanks") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_high_inquisitor_fairbanksAI(creature); } @@ -58,7 +58,7 @@ public: uint32 Dispel_Timer; bool PowerWordShield; - void Reset() OVERRIDE + void Reset() override { CurseOfBlood_Timer = 10000; DispelMagic_Timer = 30000; @@ -71,13 +71,13 @@ public: me->SetUInt32Value(UNIT_FIELD_BYTES_1, 7); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->SetStandState(UNIT_STAND_STATE_STAND); me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp index c8afa26ca4f..5aa9729a7e8 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp @@ -42,7 +42,7 @@ class boss_houndmaster_loksey : public CreatureScript public: boss_houndmaster_loksey() : CreatureScript("boss_houndmaster_loksey") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_houndmaster_lokseyAI(creature); } @@ -53,17 +53,17 @@ public: uint32 BloodLust_Timer; - void Reset() OVERRIDE + void Reset() override { BloodLust_Timer = 20000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp index 60164977735..a7c795a81f6 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp @@ -46,7 +46,7 @@ class boss_interrogator_vishas : public CreatureScript public: boss_interrogator_vishas() : CreatureScript("boss_interrogator_vishas") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_interrogator_vishasAI>(creature); } @@ -64,31 +64,31 @@ public: bool Yell60; uint32 ShadowWordPain_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowWordPain_Timer = 5000; Yell60 = false; Yell30 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*Victim*/) OVERRIDE + void KilledUnit(Unit* /*Victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { //Any other Actions to do with vorrel? setStandState? - if (Creature* vorrel = Creature::GetCreature(*me, instance->GetData64(DATA_VORREL))) + if (Creature* vorrel = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VORREL))) vorrel->AI()->Talk(SAY_TRIGGER_VORREL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index a78dce47784..25bb08620a1 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -33,12 +33,12 @@ enum Says //Mograine says SAY_MO_AGGRO = 0, SAY_MO_KILL = 1, - SAY_MO_RESSURECTED = 2, + SAY_MO_RESURRECTED = 2, //Whitemane says SAY_WH_INTRO = 0, SAY_WH_KILL = 1, - SAY_WH_RESSURECT = 2, + SAY_WH_RESURRECT = 2, }; enum Spells @@ -63,7 +63,7 @@ class boss_scarlet_commander_mograine : public CreatureScript public: boss_scarlet_commander_mograine() : CreatureScript("boss_scarlet_commander_mograine") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_scarlet_commander_mograineAI>(creature); } @@ -84,7 +84,7 @@ public: bool _bHeal; bool _bFakeDeath; - void Reset() OVERRIDE + void Reset() override { CrusaderStrike_Timer = 10000; HammerOfJustice_Timer = 10000; @@ -102,13 +102,13 @@ public: _bFakeDeath = false; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { if (instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) != NOT_STARTED) instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, FAIL); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_MO_AGGRO); DoCast(me, SPELL_RETRIBUTIONAURA); @@ -116,18 +116,18 @@ public: me->CallForHelp(VISIBLE_RANGE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_MO_KILL); } - void DamageTaken(Unit* /*doneBy*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*doneBy*/, uint32 &damage) override { if (damage < me->GetHealth() || _bHasDied || _bFakeDeath) return; //On first death, fake death and open door, as well as initiate whitemane if exist - if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE))) + if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE))) { instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, IN_PROGRESS); @@ -155,27 +155,27 @@ public: } } - void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*who*/, const SpellInfo* spell) override { - //When hit with ressurection say text + //When hit with resurrection say text if (spell->Id == SPELL_SCARLETRESURRECTION) { - Talk(SAY_MO_RESSURECTED); + Talk(SAY_MO_RESURRECTED); _bFakeDeath = false; instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, SPECIAL); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; if (_bHasDied && !_bHeal && instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == SPECIAL) { - //On ressurection, stop fake death and heal whitemane and resume fight - if (Unit* Whitemane = Unit::GetUnit(*me, instance->GetData64(DATA_WHITEMANE))) + //On resurrection, stop fake death and heal whitemane and resume fight + if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_WHITEMANE))) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -221,7 +221,7 @@ class boss_high_inquisitor_whitemane : public CreatureScript public: boss_high_inquisitor_whitemane() : CreatureScript("boss_high_inquisitor_whitemane") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_high_inquisitor_whitemaneAI>(creature); } @@ -243,7 +243,7 @@ public: bool _bCanResurrectCheck; bool _bCanResurrect; - void Reset() OVERRIDE + void Reset() override { Wait_Timer = 7000; Heal_Timer = 10000; @@ -257,7 +257,7 @@ public: instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, NOT_STARTED); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) == NOT_STARTED) return; @@ -265,23 +265,23 @@ public: ScriptedAI::AttackStart(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_WH_INTRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_WH_KILL); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (!_bCanResurrectCheck && damage >= me->GetHealth()) damage = me->GetHealth() - 1; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -294,7 +294,7 @@ public: if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE))) { DoCast(mograine, SPELL_SCARLETRESURRECTION); - Talk(SAY_WH_RESSURECT); + Talk(SAY_WH_RESURRECT); _bCanResurrect = false; } } @@ -325,7 +325,7 @@ public: if (!HealthAbovePct(75)) target = me; - if (Creature* mograine = Unit::GetCreature(*me, instance->GetData64(DATA_MOGRAINE))) + if (Creature* mograine = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOGRAINE))) { // checking _bCanResurrectCheck prevents her healing Mograine while he is "faking death" if (_bCanResurrectCheck && mograine->IsAlive() && !mograine->HealthAbovePct(75)) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp index 5215fbda633..3ed32b71cbb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp @@ -39,7 +39,7 @@ class boss_scorn : public CreatureScript public: boss_scorn() : CreatureScript("boss_scorn") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_scornAI(creature); } @@ -53,7 +53,7 @@ public: uint32 MindFlay_Timer; uint32 FrostNova_Timer; - void Reset() OVERRIDE + void Reset() override { LichSlap_Timer = 45000; FrostboltVolley_Timer = 30000; @@ -61,9 +61,9 @@ public: FrostNova_Timer = 30000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index 4de9c2c80bf..dc564e43af5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -42,7 +42,7 @@ class instance_scarlet_monastery : public InstanceMapScript public: instance_scarlet_monastery() : InstanceMapScript("instance_scarlet_monastery", 189) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_scarlet_monastery_InstanceMapScript(map); } @@ -63,7 +63,7 @@ public: uint32 encounter[MAX_ENCOUNTER]; - void Initialize() OVERRIDE + void Initialize() override { memset(&encounter, 0, sizeof(encounter)); @@ -78,7 +78,7 @@ public: DoorHighInquisitorGUID = 0; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -87,7 +87,7 @@ public: } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -100,7 +100,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -132,7 +132,7 @@ public: } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -147,7 +147,7 @@ public: return 0; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == TYPE_MOGRAINE_AND_WHITE_EVENT) return encounter[0]; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h index cd5a74ee478..bdac6b089fd 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h @@ -30,7 +30,8 @@ enum DataTypes DATA_HORSEMAN_EVENT = 5, GAMEOBJECT_PUMPKIN_SHRINE = 6, - DATA_VORREL = 7 + DATA_VORREL = 7, + DATA_ARCANIST_DOAN = 8 }; #endif // SCARLET_M_ diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp index 37484f1c210..9a1f8f14557 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp @@ -56,21 +56,21 @@ class boss_darkmaster_gandling : public CreatureScript { boss_darkmaster_gandlingAI(Creature* creature) : BossAI(creature, DATA_DARKMASTERGANDLING) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING))) gate->SetGoState(GO_STATE_ACTIVE); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_GANDLING))) gate->SetGoState(GO_STATE_ACTIVE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_ARCANEMISSILES, 4500); @@ -82,13 +82,13 @@ class boss_darkmaster_gandling : public CreatureScript gate->SetGoState(GO_STATE_READY); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { Talk(YELL_SUMMONED); me->GetMotionMaster()->MoveRandom(5); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -126,7 +126,7 @@ class boss_darkmaster_gandling : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_darkmaster_gandlingAI>(creature); } @@ -211,13 +211,13 @@ class spell_shadow_portal : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_shadow_portal_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_shadow_portal_SpellScript(); } @@ -341,13 +341,13 @@ class spell_shadow_portal_rooms : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_shadow_portal_rooms_SpellScript::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_shadow_portal_rooms_SpellScript(); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp index d2e4601c244..a4f53b9e082 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp @@ -31,7 +31,7 @@ class boss_death_knight_darkreaver : public CreatureScript public: boss_death_knight_darkreaver() : CreatureScript("boss_death_knight_darkreaver") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_death_knight_darkreaverAI(creature); } @@ -40,17 +40,17 @@ public: { boss_death_knight_darkreaverAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (me->GetHealth() <= damage) DoCast(me, 23261, true); //Summon Darkreaver's Fallen Charger } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } }; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp index 931e21f98bf..82c7e6cea78 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp @@ -53,7 +53,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript { boss_theolenkrastinovAI(Creature* creature) : BossAI(creature, DATA_DOCTORTHEOLENKRASTINOV) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_REND, 8000); @@ -61,7 +61,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript events.ScheduleEvent(EVENT_FRENZY, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -97,7 +97,7 @@ class boss_doctor_theolen_krastinov : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_theolenkrastinovAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp index 9d3c862a3ad..e8e69c5c8b1 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp @@ -50,7 +50,7 @@ class boss_illucia_barov : public CreatureScript { boss_illuciabarovAI(Creature* creature) : BossAI(creature, DATA_LADYILLUCIABAROV) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_CURSEOFAGONY, 18000); @@ -59,7 +59,7 @@ class boss_illucia_barov : public CreatureScript events.ScheduleEvent(EVENT_FEAR, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -98,7 +98,7 @@ class boss_illucia_barov : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_illuciabarovAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp index 6e0c2aab115..84ada04a989 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp @@ -55,14 +55,14 @@ class boss_instructor_malicia : public CreatureScript uint32 FlashCounter; uint32 TouchCounter; - void Reset() OVERRIDE + void Reset() override { _Reset(); FlashCounter = 0; TouchCounter = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_CALLOFGRAVES, 4000); @@ -72,7 +72,7 @@ class boss_instructor_malicia : public CreatureScript events.ScheduleEvent(EVENT_HEALINGTOUCH, 45000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -135,7 +135,7 @@ class boss_instructor_malicia : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_instructormaliciaAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index 448ceaa3371..57331d84b82 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -40,7 +40,7 @@ class boss_jandice_barov : public CreatureScript public: boss_jandice_barov() : CreatureScript("boss_jandice_barov") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_jandicebarovAI(creature); } @@ -55,7 +55,7 @@ public: uint32 Invisible_Timer; bool Invisible; - void Reset() OVERRIDE + void Reset() override { CurseOfBlood_Timer = 15000; Illusion_Timer = 30000; @@ -63,7 +63,7 @@ public: Invisible = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } @@ -73,7 +73,7 @@ public: Illusion->AI()->AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Invisible && Invisible_Timer <= diff) { @@ -162,7 +162,7 @@ class npc_illusionofjandicebarov : public CreatureScript public: npc_illusionofjandicebarov() : CreatureScript("npc_illusionofjandicebarov") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_illusionofjandicebarovAI(creature); } @@ -173,17 +173,17 @@ public: uint32 Cleave_Timer; - void Reset() OVERRIDE + void Reset() override { Cleave_Timer = urand(2000, 8000); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 369ee3842d9..3b423134f2a 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -78,12 +78,12 @@ class boss_kirtonos_the_herald : public CreatureScript { boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, DATA_KIRTONOS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_SWOOP, urand(8000, 8000)); events.ScheduleEvent(EVENT_WING_FLAP, urand(15000, 15000)); @@ -96,7 +96,7 @@ class boss_kirtonos_the_herald : public CreatureScript _EnterCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS))) gate->SetGoState(GO_STATE_ACTIVE); @@ -108,7 +108,7 @@ class boss_kirtonos_the_herald : public CreatureScript _JustDied(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS))) gate->SetGoState(GO_STATE_ACTIVE); @@ -120,7 +120,7 @@ class boss_kirtonos_the_herald : public CreatureScript me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { events.ScheduleEvent(INTRO_1, 500); me->SetDisableGravity(true); @@ -129,12 +129,12 @@ class boss_kirtonos_the_herald : public CreatureScript Talk(EMOTE_SUMMONED); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { BossAI::JustSummoned(summon); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE && id == POINT_KIRTONOS_LAND) { @@ -142,7 +142,7 @@ class boss_kirtonos_the_herald : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -251,7 +251,7 @@ class boss_kirtonos_the_herald : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kirtonos_the_heraldAI>(creature); } @@ -277,7 +277,7 @@ class go_brazier_of_the_herald : public GameObjectScript public: go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); go->PlayDirectSound(SOUND_SCREECH, 0); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp index 334e7935183..b88954bd1b7 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp @@ -37,7 +37,7 @@ class boss_kormok : public CreatureScript public: boss_kormok() : CreatureScript("boss_kormok") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_kormokAI(creature); } @@ -52,7 +52,7 @@ public: uint32 Mage_Timer; bool Mages; - void Reset() OVERRIDE + void Reset() override { ShadowVolley_Timer = 10000; BoneShield_Timer = 2000; @@ -61,7 +61,7 @@ public: Mages = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } @@ -77,7 +77,7 @@ public: SummonedMage->AI()->AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp index c167f7d8641..cbe707a353e 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp @@ -47,7 +47,7 @@ class boss_lord_alexei_barov : public CreatureScript { boss_lordalexeibarovAI(Creature* creature) : BossAI(creature, DATA_LORDALEXEIBAROV) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -55,14 +55,14 @@ class boss_lord_alexei_barov : public CreatureScript DoCast(me, SPELL_UNHOLY_AURA); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_IMMOLATE, 7000); events.ScheduleEvent(EVENT_VEILOFSHADOW, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -93,7 +93,7 @@ class boss_lord_alexei_barov : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lordalexeibarovAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp index 2005ac58446..7c82520959b 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp @@ -50,7 +50,7 @@ class boss_lorekeeper_polkelt : public CreatureScript { boss_lorekeeperpolkeltAI(Creature* creature) : BossAI(creature, DATA_LOREKEEPERPOLKELT) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_VOLATILEINFECTION, 38000); @@ -59,7 +59,7 @@ class boss_lorekeeper_polkelt : public CreatureScript events.ScheduleEvent(EVENT_NOXIOUSCATALYST, 35000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -98,7 +98,7 @@ class boss_lorekeeper_polkelt : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lorekeeperpolkeltAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp index 68d70e63ca6..2aecc8bd491 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp @@ -41,7 +41,7 @@ class boss_boss_ras_frostwhisper : public CreatureScript public: boss_boss_ras_frostwhisper() : CreatureScript("boss_boss_ras_frostwhisper") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_rasfrostAI(creature); } @@ -57,7 +57,7 @@ public: uint32 ChillNova_Timer; uint32 FrostVolley_Timer; - void Reset() OVERRIDE + void Reset() override { IceArmor_Timer = 2000; Frostbolt_Timer = 8000; @@ -69,9 +69,9 @@ public: DoCast(me, SPELL_ICEARMOR, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp index 3df675edd3e..51eb42cd7ab 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp @@ -50,7 +50,7 @@ class boss_the_ravenian : public CreatureScript { boss_theravenianAI(Creature* creature) : BossAI(creature, DATA_THERAVENIAN) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_TRAMPLE, 24000); @@ -59,7 +59,7 @@ class boss_the_ravenian : public CreatureScript events.ScheduleEvent(EVENT_KNOCKAWAY, 32000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -98,7 +98,7 @@ class boss_the_ravenian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_theravenianAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp index a91b1aef13c..c111eb103b4 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp @@ -44,7 +44,7 @@ class boss_vectus : public CreatureScript public: boss_vectus() : CreatureScript("boss_vectus") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_vectusAI(creature); } @@ -57,14 +57,14 @@ public: uint32 m_uiBlastWave_Timer; uint32 m_uiFrenzy_Timer; - void Reset() OVERRIDE + void Reset() override { m_uiFireShield_Timer = 2000; m_uiBlastWave_Timer = 14000; m_uiFrenzy_Timer = 0; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index a3d9ff4bb22..6bb8e301e86 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -27,7 +27,7 @@ class instance_scholomance : public InstanceMapScript public: instance_scholomance() : InstanceMapScript("instance_scholomance", 289) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_scholomance_InstanceMapScript(map); } @@ -48,7 +48,7 @@ class instance_scholomance : public InstanceMapScript BrazierOfTheHeraldGUID = 0; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -84,7 +84,7 @@ class instance_scholomance : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -106,7 +106,7 @@ class instance_scholomance : public InstanceMapScript return true; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -168,7 +168,7 @@ class instance_scholomance : public InstanceMapScript instance->SummonCreature(NPC_DARKMASTER_GANDLING, GandlingLoc); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -179,7 +179,7 @@ class instance_scholomance : public InstanceMapScript return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 6f0ea518fd2..c76637224ae 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -71,7 +71,7 @@ class instance_shadowfang_keep : public InstanceMapScript public: instance_shadowfang_keep() : InstanceMapScript("instance_shadowfang_keep", 33) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_shadowfang_keep_InstanceMapScript(map); } @@ -94,7 +94,7 @@ public: uint8 uiPhase; uint16 uiTimer; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -110,7 +110,7 @@ public: uiTimer = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -120,7 +120,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -154,7 +154,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -202,7 +202,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -218,12 +218,12 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 76ae6b06058..fb839650b86 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -70,12 +70,12 @@ class npc_shadowfang_prisoner : public CreatureScript public: npc_shadowfang_prisoner() : CreatureScript("npc_shadowfang_prisoner") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_shadowfang_prisonerAI>(creature); } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -88,7 +88,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); @@ -109,7 +109,7 @@ public: InstanceScript* instance; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -144,8 +144,8 @@ public: } } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } }; }; @@ -155,7 +155,7 @@ class npc_arugal_voidwalker : public CreatureScript public: npc_arugal_voidwalker() : CreatureScript("npc_arugal_voidwalker") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_arugal_voidwalkerAI>(creature); } @@ -171,12 +171,12 @@ public: uint32 uiDarkOffering; - void Reset() OVERRIDE + void Reset() override { uiDarkOffering = urand(200, 1000); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -193,7 +193,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_FENRUS, instance->GetData(TYPE_FENRUS) + 1); } @@ -226,7 +226,7 @@ class spell_shadowfang_keep_haunting_spirits : public SpellScriptLoader aurEff->CalculatePeriodic(GetCaster()); } - void Register() OVERRIDE + void Register() override { DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_shadowfang_keep_haunting_spirits_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY); OnEffectPeriodic += AuraEffectPeriodicFn(spell_shadowfang_keep_haunting_spirits_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_DUMMY); @@ -234,7 +234,7 @@ class spell_shadowfang_keep_haunting_spirits : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_shadowfang_keep_haunting_spirits_AuraScript(); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index f4663c0f8ec..916d321a7f0 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -66,7 +66,7 @@ class boss_baron_rivendare : public CreatureScript public: boss_baron_rivendare() : CreatureScript("boss_baron_rivendare") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_baron_rivendareAI>(creature); } @@ -86,7 +86,7 @@ public: // uint32 RaiseDead_Timer; uint32 SummonSkeletons_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowBolt_Timer = 5000; Cleave_Timer = 8000; @@ -97,25 +97,25 @@ public: instance->SetData(TYPE_BARON, NOT_STARTED); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { //can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door instance->SetData(TYPE_BARON, IN_PROGRESS); ScriptedAI::AttackStart(who); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summoned->AI()->AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_BARON, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp index 6a0794ec586..5f9c5075250 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp @@ -40,7 +40,7 @@ class boss_baroness_anastari : public CreatureScript public: boss_baroness_anastari() : CreatureScript("boss_baroness_anastari") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_baroness_anastariAI>(creature); } @@ -59,7 +59,7 @@ public: uint32 Silence_Timer; //uint32 Possess_Timer; - void Reset() OVERRIDE + void Reset() override { BansheeWail_Timer = 1000; BansheeCurse_Timer = 11000; @@ -67,16 +67,16 @@ public: //Possess_Timer = 35000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_BARONESS, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp index dd5d2f7347c..65b2fb25525 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp @@ -85,7 +85,7 @@ class boss_cannon_master_willey : public CreatureScript public: boss_cannon_master_willey() : CreatureScript("boss_cannon_master_willey") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_cannon_master_willeyAI(creature); } @@ -99,7 +99,7 @@ public: uint32 Shoot_Timer; uint32 SummonRifleman_Timer; - void Reset() OVERRIDE + void Reset() override { Shoot_Timer = 1000; Pummel_Timer = 7000; @@ -107,7 +107,7 @@ public: SummonRifleman_Timer = 15000; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TEMPSUMMON_TIMED_DESPAWN, 240000); me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TEMPSUMMON_TIMED_DESPAWN, 240000); @@ -118,11 +118,11 @@ public: me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TEMPSUMMON_TIMED_DESPAWN, 240000); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp index 44e641bc9b8..f0a8c5c418f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp @@ -74,7 +74,7 @@ class boss_dathrohan_balnazzar : public CreatureScript public: boss_dathrohan_balnazzar() : CreatureScript("boss_dathrohan_balnazzar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_dathrohan_balnazzarAI(creature); } @@ -93,7 +93,7 @@ public: uint32 m_uiMindControl_Timer; bool m_bTransformed; - void Reset() OVERRIDE + void Reset() override { m_uiCrusadersHammer_Timer = 8000; m_uiCrusaderStrike_Timer = 12000; @@ -109,7 +109,7 @@ public: me->UpdateEntry(NPC_DATHROHAN); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { static uint32 uiCount = sizeof(m_aSummonPoint)/sizeof(SummonDef); @@ -119,11 +119,11 @@ public: TEMPSUMMON_TIMED_DESPAWN, HOUR*IN_MILLISECONDS); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp index eb552c503eb..8b6f2da87e4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp @@ -46,7 +46,7 @@ class boss_magistrate_barthilas : public CreatureScript public: boss_magistrate_barthilas() : CreatureScript("boss_magistrate_barthilas") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_magistrate_barthilasAI(creature); } @@ -61,7 +61,7 @@ public: uint32 FuriousAnger_Timer; uint32 AngerCount; - void Reset() OVERRIDE + void Reset() override { DrainingBlow_Timer = 20000; CrowdPummel_Timer = 15000; @@ -75,7 +75,7 @@ public: me->SetDisplayId(MODEL_HUMAN); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { //nothing to see here yet @@ -83,16 +83,16 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SetDisplayId(MODEL_HUMAN); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp index ae07d5347b9..5910905b6b5 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp @@ -41,7 +41,7 @@ class boss_maleki_the_pallid : public CreatureScript public: boss_maleki_the_pallid() : CreatureScript("boss_maleki_the_pallid") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_maleki_the_pallidAI>(creature); } @@ -59,23 +59,23 @@ public: uint32 IceTomb_Timer; uint32 DrainLife_Timer; - void Reset() OVERRIDE + void Reset() override { Frostbolt_Timer = 1000; IceTomb_Timer = 16000; DrainLife_Timer = 31000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_PALLID, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp index 9bc263f36e7..1b5127a5e1c 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp @@ -40,7 +40,7 @@ class boss_nerubenkan : public CreatureScript public: boss_nerubenkan() : CreatureScript("boss_nerubenkan") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_nerubenkanAI>(creature); } @@ -59,7 +59,7 @@ public: uint32 CryptScarabs_Timer; uint32 RaiseUndeadScarab_Timer; - void Reset() OVERRIDE + void Reset() override { CryptScarabs_Timer = 3000; EncasingWebs_Timer = 7000; @@ -67,11 +67,11 @@ public: RaiseUndeadScarab_Timer = 3000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_NERUB, IN_PROGRESS); } @@ -83,7 +83,7 @@ public: pUndeadScarab->AI()->AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp index c26754c483b..dfc3e570e1b 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp @@ -56,7 +56,7 @@ class boss_silver_hand_bosses : public CreatureScript public: boss_silver_hand_bosses() : CreatureScript("boss_silver_hand_bosses") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_silver_hand_bossesAI>(creature); } @@ -73,7 +73,7 @@ public: uint32 HolyLight_Timer; uint32 DivineShield_Timer; - void Reset() OVERRIDE + void Reset() override { HolyLight_Timer = 20000; DivineShield_Timer = 20000; @@ -98,11 +98,11 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { switch (me->GetEntry()) { @@ -130,7 +130,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp index 1f6b823de70..9c129984ae4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp @@ -61,9 +61,9 @@ class boss_postmaster_malown : public CreatureScript { boss_postmaster_malownAI(Creature* creature) : BossAI(creature, TYPE_MALOWN) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_WAILINGDEAD, 19000); // lasts 6 sec events.ScheduleEvent(EVENT_BACKHAND, 8000); // 2 sec stun @@ -72,12 +72,12 @@ class boss_postmaster_malown : public CreatureScript events.ScheduleEvent(EVENT_CALLOFTHEGRAVE, 25000); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -124,7 +124,7 @@ class boss_postmaster_malown : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_postmaster_malownAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp index ad4d8787f01..df9b6a04af4 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp @@ -43,7 +43,7 @@ class boss_ramstein_the_gorger : public CreatureScript public: boss_ramstein_the_gorger() : CreatureScript("boss_ramstein_the_gorger") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ramstein_the_gorgerAI>(creature); } @@ -60,17 +60,17 @@ public: uint32 Trample_Timer; uint32 Knockout_Timer; - void Reset() OVERRIDE + void Reset() override { Trample_Timer = 3000; Knockout_Timer = 12000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (uint8 i = 0; i < 30; ++i) { @@ -81,7 +81,7 @@ public: instance->SetData(TYPE_RAMSTEIN, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp index f0e3bdf7668..a45b3594da0 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp @@ -41,7 +41,7 @@ class boss_timmy_the_cruel : public CreatureScript public: boss_timmy_the_cruel() : CreatureScript("boss_timmy_the_cruel") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_timmy_the_cruelAI(creature); } @@ -53,13 +53,13 @@ public: uint32 RavenousClaw_Timer; bool HasYelled; - void Reset() OVERRIDE + void Reset() override { RavenousClaw_Timer = 10000; HasYelled = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!HasYelled) { @@ -68,7 +68,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index d8518085b26..ecdc66d3e0f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -72,7 +72,7 @@ class instance_stratholme : public InstanceMapScript std::set<uint64> abomnationGUID; EventMap events; - void Initialize() OVERRIDE + void Initialize() override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) EncounterState[i] = NOT_STARTED; @@ -126,7 +126,7 @@ class instance_stratholme : public InstanceMapScript } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -146,7 +146,7 @@ class instance_stratholme : public InstanceMapScript } } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { switch (creature->GetEntry()) { @@ -160,7 +160,7 @@ class instance_stratholme : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -213,7 +213,7 @@ class instance_stratholme : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -235,8 +235,7 @@ class instance_stratholme : public InstanceMapScript EncounterState[0] = data; if (Creature* ysidaTrigger = instance->GetCreature(ysidaTriggerGUID)) { - Position ysidaPos; - ysidaTrigger->GetPosition(&ysidaPos); + Position ysidaPos = ysidaTrigger->GetPosition(); ysidaTrigger->SummonCreature(NPC_YSIDA, ysidaPos, TEMPSUMMON_TIMED_DESPAWN, 1800000); } events.CancelEvent(EVENT_BARON_RUN); @@ -310,6 +309,15 @@ class instance_stratholme : public InstanceMapScript { HandleGameObject(ziggurat4GUID, false); HandleGameObject(ziggurat5GUID, false); + } + if (data == DONE || data == NOT_STARTED) + { + HandleGameObject(ziggurat4GUID, true); + HandleGameObject(ziggurat5GUID, true); + } + if (data == DONE) + { + HandleGameObject(portGauntletGUID, true); if (GetData(TYPE_BARON_RUN) == IN_PROGRESS) { DoRemoveAurasDueToSpellOnPlayers(SPELL_BARON_ULTIMATUM); @@ -318,18 +326,13 @@ class instance_stratholme : public InstanceMapScript for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) if (Player* player = itr->GetSource()) if (player->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE) + { player->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA); - + player->KilledMonsterCredit(NPC_YSIDA); + } SetData(TYPE_BARON_RUN, DONE); } } - if (data == DONE || data == NOT_STARTED) - { - HandleGameObject(ziggurat4GUID, true); - HandleGameObject(ziggurat5GUID, true); - } - if (data == DONE) - HandleGameObject(portGauntletGUID, true); EncounterState[5] = data; break; case TYPE_SH_AELMAR: @@ -353,7 +356,7 @@ class instance_stratholme : public InstanceMapScript SaveToDB(); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -365,7 +368,7 @@ class instance_stratholme : public InstanceMapScript return saveStream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -390,7 +393,7 @@ class instance_stratholme : public InstanceMapScript OUT_LOAD_INST_DATA_COMPLETE; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -414,7 +417,7 @@ class instance_stratholme : public InstanceMapScript return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -426,7 +429,7 @@ class instance_stratholme : public InstanceMapScript return 0; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { events.Update(diff); @@ -457,7 +460,7 @@ class instance_stratholme : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_stratholme_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index 3b622885ce7..4109328afda 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -46,7 +46,7 @@ class go_gauntlet_gate : public GameObjectScript public: go_gauntlet_gate() : GameObjectScript("go_gauntlet_gate") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); @@ -93,7 +93,7 @@ class npc_freed_soul : public CreatureScript public: npc_freed_soul() : CreatureScript("npc_freed_soul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_freed_soulAI(creature); } @@ -102,12 +102,12 @@ public: { npc_freed_soulAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { Talk(SAY_ZAPPED); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; }; @@ -135,7 +135,7 @@ class npc_restless_soul : public CreatureScript public: npc_restless_soul() : CreatureScript("npc_restless_soul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_restless_soulAI(creature); } @@ -148,16 +148,16 @@ public: uint32 Die_Timer; bool Tagged; - void Reset() OVERRIDE + void Reset() override { Tagger = 0; Die_Timer = 5000; Tagged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (Tagged || spell->Id != SPELL_EGAN_BLASTER) return; @@ -170,24 +170,24 @@ public: Tagger = caster->GetGUID(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->CastSpell(summoned, SPELL_SOUL_FREED, false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Tagged) me->SummonCreature(NPC_FREED, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 300000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Tagged) { if (Die_Timer <= diff) { - if (Unit* temp = Unit::GetUnit(*me, Tagger)) + if (Unit* temp = ObjectAccessor::GetUnit(*me, Tagger)) { if (Player* player = temp->ToPlayer()) player->KilledMonsterCredit(NPC_RESTLESS, me->GetGUID()); @@ -217,7 +217,7 @@ class npc_spectral_ghostly_citizen : public CreatureScript public: npc_spectral_ghostly_citizen() : CreatureScript("npc_spectral_ghostly_citizen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spectral_ghostly_citizenAI(creature); } @@ -229,21 +229,21 @@ public: uint32 Die_Timer; bool Tagged; - void Reset() OVERRIDE + void Reset() override { Die_Timer = 5000; Tagged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (!Tagged && spell->Id == SPELL_EGAN_BLASTER) Tagged = true; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Tagged) { @@ -256,7 +256,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Tagged) { @@ -271,7 +271,7 @@ public: DoMeleeAttackIfReady(); } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { switch (emote) { diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index d395bfd6e0c..0f33103fc2c 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -51,7 +51,7 @@ class instance_sunken_temple : public InstanceMapScript public: instance_sunken_temple() : InstanceMapScript("instance_sunken_temple", 109) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_sunken_temple_InstanceMapScript(map); } @@ -79,7 +79,7 @@ public: bool s5; bool s6; - void Initialize() OVERRIDE + void Initialize() override { GOAtalaiStatue1 = 0; GOAtalaiStatue2 = 0; @@ -99,7 +99,7 @@ public: s6 = false; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -193,13 +193,13 @@ public: } */ - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == EVENT_STATE) State = data; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == EVENT_STATE) return State; diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp index 80a9f1600b6..327fc0cace3 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp @@ -41,7 +41,7 @@ class at_malfurion_stormrage : public AreaTriggerScript public: at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { if (player->GetInstanceScript() && !player->FindNearestCreature(15362, 15)) player->SummonCreature(15362, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000); @@ -58,7 +58,7 @@ class go_atalai_statue : public GameObjectScript public: go_atalai_statue() : GameObjectScript("go_atalai_statue") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (InstanceScript* instance = player->GetInstanceScript()) instance->SetData(EVENT_STATE, go->GetEntry()); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 9dcbed211bb..eb9b6c2a1df 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -89,7 +89,7 @@ public: bool IsIntro; bool Enraged; - void Reset() OVERRIDE + void Reset() override { SlashTimer = 11000; StompTimer = 30000; @@ -108,19 +108,19 @@ public: instance->SetBossState(DATA_BRUTALLUS, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_AGGRO); instance->SetBossState(DATA_BRUTALLUS, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(YELL_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(YELL_DEATH); @@ -130,7 +130,7 @@ public: me->SummonCreature(NPC_FELMYST, x, y, z + 30, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 0); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!Intro) ScriptedAI::EnterEvadeMode(); @@ -167,7 +167,7 @@ public: IsIntro = false; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || Intro || IsIntro) return; @@ -252,7 +252,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->IsValidAttackTarget(who)) return; @@ -267,7 +267,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsIntro) { @@ -335,7 +335,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_brutallusAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 73e218a6e35..8fc749dc43b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -97,7 +97,7 @@ public: uint32 ConflagrationTimer; uint32 EnrageTimer; - void Reset() OVERRIDE + void Reset() override { Enraged = false; @@ -123,7 +123,7 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoZoneInCombat(); @@ -134,13 +134,13 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (rand()%4 == 0) Talk(YELL_SAC_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // only if ALY death if (SisterDeath) @@ -153,7 +153,7 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { switch (spell->Id) { @@ -196,7 +196,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!SisterDeath) { @@ -304,7 +304,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_sacrolashAI>(creature); }; @@ -340,7 +340,7 @@ public: uint32 FlamesearTimer; uint32 EnrageTimer; - void Reset() OVERRIDE + void Reset() override { Enraged = false; @@ -368,7 +368,7 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, NOT_STARTED); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoZoneInCombat(); @@ -379,13 +379,13 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!me->IsInCombat()) ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || me->GetVictim()) return; @@ -405,13 +405,13 @@ public: IntroStepCounter = 0; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (rand()%4 == 0) Talk(YELL_ALY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (SisterDeath) { @@ -422,7 +422,7 @@ public: me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { switch (spell->Id) { @@ -509,7 +509,7 @@ public: return 10000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IntroStepCounter < 9) { @@ -617,7 +617,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_alythessAI>(creature); }; @@ -628,7 +628,7 @@ class npc_shadow_image : public CreatureScript public: npc_shadow_image() : CreatureScript("npc_shadow_image") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_shadow_imageAI(creature); }; @@ -641,7 +641,7 @@ public: uint32 KillTimer; uint32 DarkstrikeTimer; - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); ShadowfuryTimer = 5000 + (rand()%15000); @@ -649,9 +649,9 @@ public: KillTimer = 15000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { switch (spell->Id) { @@ -669,7 +669,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->HasAura(SPELL_IMAGE_VISUAL)) DoCast(me, SPELL_IMAGE_VISUAL); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 02913f361e5..8a9699ed1be 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -128,7 +128,7 @@ public: float breathX, breathY; - void Reset() OVERRIDE + void Reset() override { phase = PHASE_NONE; @@ -146,7 +146,7 @@ public: instance->SetBossState(DATA_FELMYST, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_BERSERK, 600000); @@ -159,36 +159,36 @@ public: instance->SetBossState(DATA_FELMYST, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (phase != PHASE_FLIGHT) ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (phase != PHASE_FLIGHT) ScriptedAI::MoveInLineOfSight(who); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(YELL_KILL); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Talk(YELL_BIRTH); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(YELL_DEATH); instance->SetBossState(DATA_FELMYST, DONE); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { // workaround for linked aura /*if (spell->Id == SPELL_VAPOR_FORCE) @@ -211,7 +211,7 @@ public: } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_DEAD) { @@ -221,13 +221,13 @@ public: } } - void MovementInform(uint32, uint32) OVERRIDE + void MovementInform(uint32, uint32) override { if (phase == PHASE_FLIGHT) events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 1); } - void DamageTaken(Unit*, uint32 &damage) OVERRIDE + void DamageTaken(Unit*, uint32 &damage) override { if (phase != PHASE_GROUND && damage >= me->GetHealth()) damage = 0; @@ -280,7 +280,7 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) - target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); + target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); if (!target) { @@ -306,7 +306,7 @@ public: Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) - target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); + target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); if (!target) { @@ -335,7 +335,7 @@ public: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) - target = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); + target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); if (!target) { @@ -393,7 +393,7 @@ public: ++uiFlightCount; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -501,7 +501,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_felmystAI>(creature); } @@ -512,7 +512,7 @@ class npc_felmyst_vapor : public CreatureScript public: npc_felmyst_vapor() : CreatureScript("npc_felmyst_vapor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_felmyst_vaporAI(creature); } @@ -525,14 +525,14 @@ public: me->SetSpeed(MOVE_RUN, 0.8f); } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); //DoCast(me, SPELL_VAPOR_FORCE, true); core bug } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->GetVictim()) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) @@ -546,7 +546,7 @@ class npc_felmyst_trail : public CreatureScript public: npc_felmyst_trail() : CreatureScript("npc_felmyst_trail") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_felmyst_trailAI(creature); } @@ -561,12 +561,12 @@ public: me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 0.01f); // core bug } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; }; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 294443da0e7..d300703152c 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -134,7 +134,7 @@ public: uint64 SathGUID; uint64 DoorGUID; - void Reset() OVERRIDE + void Reset() override { SathGUID = instance->GetData64(DATA_SATHROVARR); instance->SetBossState(DATA_KALECGOS, NOT_STARTED); @@ -166,7 +166,7 @@ public: isBanished = false; } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { bJustReset = true; me->SetVisible(false); @@ -174,7 +174,7 @@ public: ScriptedAI::EnterEvadeMode(); } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { switch (param) { @@ -189,7 +189,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (TalkTimer) { @@ -234,7 +234,7 @@ public: { if (me->GetDistance(CENTER_X, CENTER_Y, DRAGON_REALM_Z) >= 75) { - me->AI()->EnterEvadeMode(); + EnterEvadeMode(); return; } if (HealthBelowPct(10) && !isEnraged) @@ -298,7 +298,7 @@ public: Unit* target = (*itr)->getTarget(); if (target && target->GetTypeId() == TYPEID_PLAYER - && target->GetGUID() != me->GetVictim()->GetGUID() + && (!target->GetVictim() || target->GetGUID() != me->EnsureVictim()->GetGUID()) && target->GetPositionZ() > me->GetPositionZ() - 5 && !target->HasAura(AURA_SPECTRAL_EXHAUSTION)) { @@ -324,7 +324,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (bJustReset)//boss is invisible, don't attack return; @@ -337,13 +337,13 @@ public: } } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (damage >= me->GetHealth() && done_by != me) damage = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->SetStandState(UNIT_STAND_STATE_STAND); Talk(SAY_EVIL_AGGRO); @@ -352,12 +352,12 @@ public: instance->SetBossState(DATA_KALECGOS, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_EVIL_SLAY); } - void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE + void MovementInform(uint32 type, uint32 /*id*/) override { if (type != POINT_MOTION_TYPE) return; @@ -428,7 +428,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_kalecgosAI>(creature); } @@ -439,7 +439,7 @@ class boss_kalec : public CreatureScript public: boss_kalec() : CreatureScript("boss_kalec") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kalecAI>(creature); } @@ -462,7 +462,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { SathGUID = instance->GetData64(DATA_SATHROVARR); @@ -474,7 +474,7 @@ public: isEnraged = false; } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != SathGUID) damage = 0; @@ -482,7 +482,7 @@ public: damage *= 3; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->HasAura(AURA_SPECTRAL_INVISIBILITY)) me->CastSpell(me, AURA_SPECTRAL_INVISIBILITY, true); @@ -540,7 +540,7 @@ class kalecgos_teleporter : public GameObjectScript public: kalecgos_teleporter() : GameObjectScript("kalecgos_teleporter") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { Map* map = go->GetMap(); if (!map->IsDungeon()) @@ -572,7 +572,7 @@ class boss_sathrovarr : public CreatureScript public: boss_sathrovarr() : CreatureScript("boss_sathrovarr") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_sathrovarrAI>(creature); } @@ -600,7 +600,7 @@ public: bool isEnraged; bool isBanished; - void Reset() OVERRIDE + void Reset() override { me->SetFullHealth();//dunno why it does not resets health at evade.. me->setActive(true); @@ -625,7 +625,7 @@ public: TeleportAllPlayersBack(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Creature* Kalec = me->SummonCreature(NPC_KALEC, me->GetPositionX() + 10, me->GetPositionY() + 5, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0)) { @@ -637,13 +637,13 @@ public: Talk(SAY_SATH_AGGRO); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (damage >= me->GetHealth() && done_by != me) damage = 0; } - void KilledUnit(Unit* target) OVERRIDE + void KilledUnit(Unit* target) override { if (target->GetGUID() == KalecGUID) { @@ -659,7 +659,7 @@ public: Talk(SAY_SATH_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_SATH_DEATH); me->SetPosition(me->GetPositionX(), me->GetPositionY(), DRAGON_REALM_Z, me->GetOrientation()); @@ -679,18 +679,21 @@ public: if (!map->IsDungeon()) return; - Map::PlayerList const &PlayerList = map->GetPlayers(); - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + Map::PlayerList const &playerList = map->GetPlayers(); + Position homePos = me->GetHomePosition(); + for (Map::PlayerList::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) { - if (i->GetSource()->GetPositionZ() <= DRAGON_REALM_Z-5) + Player* player = itr->GetSource(); + if (player->IsInDist(&homePos, 50.0f) && player->GetPositionZ() <= DEMON_REALM_Z + 10.f) { - i->GetSource()->RemoveAura(AURA_SPECTRAL_REALM); - i->GetSource()->TeleportTo(me->GetMap()->GetId(), i->GetSource()->GetPositionX(), i->GetSource()->GetPositionY(), DRAGON_REALM_Z+5, i->GetSource()->GetOrientation()); + player->RemoveAura(AURA_SPECTRAL_REALM); + player->TeleportTo(me->GetMap()->GetId(), player->GetPositionX(), + player->GetPositionY(), DRAGON_REALM_Z + 5, player->GetOrientation()); } } } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { switch (param) { @@ -705,7 +708,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->HasAura(AURA_SPECTRAL_INVISIBILITY)) me->CastSpell(me, AURA_SPECTRAL_INVISIBILITY, true); @@ -733,7 +736,7 @@ public: Creature* Kalecgos = ObjectAccessor::GetCreature(*me, KalecgosGUID); if (Kalecgos && !Kalecgos->IsInCombat()) { - me->AI()->EnterEvadeMode(); + EnterEvadeMode(); return; } @@ -763,7 +766,7 @@ public: ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (unit->GetPositionZ() > me->GetPositionZ() + 5) me->getThreatManager().modifyThreatPercent(unit, -100); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index e8b112aa1cd..565d40a802e 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -234,7 +234,7 @@ class boss_kalecgos_kj : public CreatureScript public: boss_kalecgos_kj() : CreatureScript("boss_kalecgos_kj") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kalecgos_kjAI>(creature); } @@ -250,7 +250,7 @@ public: uint8 OrbsEmpowered; uint8 EmpowerCount; - void Reset() OVERRIDE + void Reset() override { OrbsEmpowered = 0; EmpowerCount = 0; @@ -332,7 +332,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { } @@ -360,7 +360,7 @@ class go_orb_of_the_blue_flight : public GameObjectScript public: go_orb_of_the_blue_flight() : GameObjectScript("go_orb_of_the_blue_flight") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetUInt32Value(GAMEOBJECT_FACTION) == 35) { @@ -384,7 +384,7 @@ class npc_kiljaeden_controller : public CreatureScript public: npc_kiljaeden_controller() : CreatureScript("npc_kiljaeden_controller") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_kiljaeden_controllerAI>(creature); } @@ -408,7 +408,7 @@ public: uint32 phase; uint8 deceiverDeathCount; - void InitializeAI() OVERRIDE + void InitializeAI() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -417,7 +417,7 @@ public: ScriptedAI::InitializeAI(); } - void Reset() OVERRIDE + void Reset() override { phase = PHASE_DECEIVERS; @@ -430,7 +430,7 @@ public: summons.DespawnAll(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -450,7 +450,7 @@ public: summons.Summon(summoned); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiRandomSayTimer < diff) { @@ -513,12 +513,12 @@ public: bool OrbActivated; bool SpeechBegins; - void InitializeAI() OVERRIDE + void InitializeAI() override { // Scripted_NoMovementAI::InitializeAI(); } - void Reset() OVERRIDE + void Reset() override { TimerIsDeactivated[TIMER_SPEECH] = false; Timer[TIMER_SPEECH] = 0; @@ -577,7 +577,7 @@ public: TimerIsDeactivated[TIMER_SUMMON_SHILEDORB] = true; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_ARMAGEDDON_TARGET) { @@ -592,19 +592,19 @@ public: summons.Summon(summoned); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_KJ_DEATH); summons.DespawnAll(); instance->SetBossState(DATA_KILJAEDEN, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KJ_SLAY); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); @@ -615,7 +615,7 @@ public: CAST_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } @@ -650,7 +650,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || Phase < PHASE_NORMAL) return; @@ -874,7 +874,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_kiljaedenAI>(creature); } @@ -898,7 +898,7 @@ public: uint32 ShadowBoltVolleyTimer; uint32 FelfirePortalTimer; - void Reset() OVERRIDE + void Reset() override { /// @todo Timers! ShadowBoltVolleyTimer = urand(8000, 14000); // So they don't all cast it in the same moment. @@ -906,13 +906,13 @@ public: instance->SetBossState(DATA_KILJAEDEN, NOT_STARTED); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->setFaction(me->getFaction()); summoned->SetLevel(me->getLevel()); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { instance->SetBossState(DATA_KILJAEDEN, IN_PROGRESS); if (Creature* pControl = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KILJAEDEN_CONTROLLER))) @@ -921,13 +921,13 @@ public: me->InterruptNonMeleeSpells(true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* pControl = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KILJAEDEN_CONTROLLER))) ++(CAST_AI(npc_kiljaeden_controller::npc_kiljaeden_controllerAI, pControl->AI())->deceiverDeathCount); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) DoCast(me, SPELL_SHADOW_CHANNELING); @@ -956,7 +956,7 @@ public: ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit) pPortal->AddThreat(unit, 1.0f); } @@ -968,7 +968,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<npc_hand_of_the_deceiverAI>(creature); } @@ -980,7 +980,7 @@ class npc_felfire_portal : public CreatureScript public: npc_felfire_portal() : CreatureScript("npc_felfire_portal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_felfire_portalAI(creature); } @@ -994,19 +994,19 @@ public: uint32 uiSpawnFiendTimer; - void Reset() OVERRIDE + void Reset() override { uiSpawnFiendTimer = 5000; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->setFaction(me->getFaction()); summoned->SetLevel(me->getLevel()); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1027,7 +1027,7 @@ class npc_volatile_felfire_fiend : public CreatureScript public: npc_volatile_felfire_fiend() : CreatureScript("npc_volatile_felfire_fiend") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_volatile_felfire_fiendAI(creature); } @@ -1040,19 +1040,19 @@ public: bool bLockedTarget; - void Reset() OVERRIDE + void Reset() override { uiExplodeTimer = 2000; bLockedTarget = false; } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage > me->GetHealth()) DoCast(me, SPELL_FELFIRE_FISSION, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1084,7 +1084,7 @@ class npc_armageddon : public CreatureScript public: npc_armageddon() : CreatureScript("npc_armageddon") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_armageddonAI(creature); } @@ -1099,13 +1099,13 @@ public: uint8 spell; uint32 uiTimer; - void Reset() OVERRIDE + void Reset() override { spell = 0; uiTimer = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiTimer <= diff) { @@ -1141,7 +1141,7 @@ class npc_shield_orb : public CreatureScript public: npc_shield_orb() : CreatureScript("npc_shield_orb") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_shield_orbAI>(creature); } @@ -1161,7 +1161,7 @@ public: uint32 uiCheckTimer; float x, y, r, c, mx, my; - void Reset() OVERRIDE + void Reset() override { me->SetDisableGravity(true); bPointReached = true; @@ -1174,7 +1174,7 @@ public: bClockwise = urand(0, 1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bPointReached) { @@ -1212,7 +1212,7 @@ public: } else uiTimer -= diff; } - void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE + void MovementInform(uint32 type, uint32 /*id*/) override { if (type != POINT_MOTION_TYPE) return; @@ -1228,7 +1228,7 @@ class npc_sinster_reflection : public CreatureScript public: npc_sinster_reflection() : CreatureScript("npc_sinster_reflection") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_sinster_reflectionAI(creature); } @@ -1240,7 +1240,7 @@ public: uint8 victimClass; uint32 uiTimer[3]; - void Reset() OVERRIDE + void Reset() override { uiTimer[0] = 0; uiTimer[1] = 0; @@ -1248,14 +1248,14 @@ public: victimClass = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; if ((victimClass == 0) && me->GetVictim()) { - victimClass = me->GetVictim()->getClass(); + victimClass = me->EnsureVictim()->getClass(); switch (victimClass) { case CLASS_DRUID: diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 6980dbfb9c2..faecb2ca2f0 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -123,7 +123,7 @@ public: uint32 BlackHoleSummonTimer; - void Reset() OVERRIDE + void Reset() override { BlackHoleSummonTimer = 15000; DoCastAOE(SPELL_NEGATIVE_ENERGY_E, false); @@ -133,7 +133,7 @@ public: instance->SetBossState(DATA_MURU, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCastAOE(SPELL_NEGATIVE_ENERGY_E, true); DoCast(me, SPELL_ENTROPIUS_SPAWN, false); @@ -141,7 +141,7 @@ public: instance->SetBossState(DATA_MURU, IN_PROGRESS); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -159,13 +159,13 @@ public: Summons.Summon(summoned); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Summons.DespawnAll(); instance->SetBossState(DATA_MURU, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -195,7 +195,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_entropiusAI>(creature); } @@ -222,7 +222,7 @@ public: bool DarkFiend; - void Reset() OVERRIDE + void Reset() override { DarkFiend = false; Phase = 1; @@ -240,13 +240,13 @@ public: instance->SetBossState(DATA_MURU, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCastAOE(SPELL_NEGATIVE_ENERGY, false); instance->SetBossState(DATA_MURU, IN_PROGRESS); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage > me->GetHealth() && Phase == 1) { @@ -260,7 +260,7 @@ public: damage = 0; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -275,7 +275,7 @@ public: Summons.Summon(summoned); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -358,7 +358,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSunwellPlateauAI<boss_muruAI>(creature); } @@ -369,7 +369,7 @@ class npc_muru_portal : public CreatureScript public: npc_muru_portal() : CreatureScript("npc_muru_portal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_muru_portalAI>(creature); } @@ -391,7 +391,7 @@ public: uint32 SummonTimer; - void Reset() OVERRIDE + void Reset() override { SummonTimer = 5000; @@ -403,7 +403,7 @@ public: Summons.DespawnAll(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Player* Target = ObjectAccessor::GetPlayer(*me, instance->GetData64(DATA_PLAYER_GUID))) summoned->AI()->AttackStart(Target); @@ -411,7 +411,7 @@ public: Summons.Summon(summoned); } - void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override { float x, y, z, o; me->GetHomePosition(x, y, z, o); @@ -429,7 +429,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!SummonSentinel) { @@ -453,7 +453,7 @@ class npc_dark_fiend : public CreatureScript public: npc_dark_fiend() : CreatureScript("npc_dark_fiend") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dark_fiendAI(creature); } @@ -465,7 +465,7 @@ public: uint32 WaitTimer; bool InAction; - void Reset() OVERRIDE + void Reset() override { WaitTimer = 2000; InAction = false; @@ -473,14 +473,14 @@ public: me->AddUnitState(UNIT_STATE_STUNNED); } - void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* Spell) override { for (uint8 i = 0; i < 3; ++i) if (Spell->Effects[i].Effect == 38) me->DisappearAndDie(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -514,7 +514,7 @@ class npc_void_sentinel : public CreatureScript public: npc_void_sentinel() : CreatureScript("npc_void_sentinel") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_void_sentinelAI(creature); } @@ -526,7 +526,7 @@ public: uint32 PulseTimer; uint32 VoidBlastTimer; - void Reset() OVERRIDE + void Reset() override { PulseTimer = 3000; VoidBlastTimer = 45000; //is this a correct timer? @@ -536,13 +536,13 @@ public: DoTeleportTo(x, y, 71); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (uint8 i = 0; i < 8; ++i) me->SummonCreature(NPC_VOID_SPAWN, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand()%6), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -569,7 +569,7 @@ class npc_blackhole : public CreatureScript public: npc_blackhole() : CreatureScript("npc_blackhole") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_blackholeAI>(creature); } @@ -588,7 +588,7 @@ public: uint8 Phase; uint8 NeedForAHack; - void Reset() OVERRIDE + void Reset() override { DespawnTimer = 15000; SpellTimer = 5000; @@ -599,11 +599,11 @@ public: DoCastAOE(SPELL_BLACKHOLE_SPAWN, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (SpellTimer <= diff) { - Unit* Victim = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); + Unit* Victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID)); switch (NeedForAHack) { case 0: diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 38f63d106ee..5a411d504aa 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -89,7 +89,7 @@ class instance_sunwell_plateau : public InstanceMapScript return NULL; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -137,7 +137,7 @@ class instance_sunwell_plateau : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -154,7 +154,7 @@ class instance_sunwell_plateau : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -171,7 +171,7 @@ class instance_sunwell_plateau : public InstanceMapScript } } - uint64 GetData64(uint32 id) const OVERRIDE + uint64 GetData64(uint32 id) const override { switch (id) { @@ -212,7 +212,7 @@ class instance_sunwell_plateau : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -223,7 +223,7 @@ class instance_sunwell_plateau : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -275,7 +275,7 @@ class instance_sunwell_plateau : public InstanceMapScript std::vector<uint64> SpectralRealmList; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_sunwell_plateau_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp index 6d5d9ab4939..53602e866ad 100644 --- a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp +++ b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp @@ -30,7 +30,7 @@ class instance_the_stockade : public InstanceMapScript public: instance_the_stockade() : InstanceMapScript("instance_the_stockade", 34) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_stockade_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index 496be57932e..f06dc247883 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -76,7 +76,7 @@ class boss_archaedas : public CreatureScript bool bVaultWalkersAwake; InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiTremorTimer = 60000; iAwakenTimer = 0; @@ -94,7 +94,7 @@ class boss_archaedas : public CreatureScript void ActivateMinion(uint64 uiGuid, bool flag) { - Unit* minion = Unit::GetUnit(*me, uiGuid); + Unit* minion = ObjectAccessor::GetUnit(*me, uiGuid); if (minion && minion->IsAlive()) { @@ -106,14 +106,14 @@ class boss_archaedas : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->setFaction(14); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { // Being woken up from the altar, start the awaken sequence if (spell == sSpellMgr->GetSpellInfo(SPELL_ARCHAEDAS_AWAKEN)) @@ -124,12 +124,12 @@ class boss_archaedas : public CreatureScript } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { // we're still doing awaken animation if (bWakingUp && iAwakenTimer >= 0) @@ -139,7 +139,7 @@ class boss_archaedas : public CreatureScript } else if (bWakingUp && iAwakenTimer <= 0) { bWakingUp = false; - AttackStart(Unit::GetUnit(*me, instance->GetData64(0))); + AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0))); return; // dont want to continue until we finish the AttackStart method } @@ -198,7 +198,7 @@ class boss_archaedas : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_archaedasAI>(creature); } @@ -234,7 +234,7 @@ class npc_archaedas_minions : public CreatureScript bool bAmIAwake; InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiArcing_Timer = 3000; iAwakenTimer = 0; @@ -248,7 +248,7 @@ class npc_archaedas_minions : public CreatureScript me->RemoveAllAuras(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->setFaction (14); me->RemoveAllAuras(); @@ -257,7 +257,7 @@ class npc_archaedas_minions : public CreatureScript bAmIAwake = true; } - void SpellHit(Unit * /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit * /*caster*/, const SpellInfo* spell) override { // time to wake up, start animation if (spell == sSpellMgr->GetSpellInfo(SPELL_ARCHAEDAS_AWAKEN)) @@ -267,14 +267,14 @@ class npc_archaedas_minions : public CreatureScript } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (bAmIAwake) ScriptedAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { // we're still in the awaken animation if (bWakingUp && iAwakenTimer >= 0) @@ -285,7 +285,7 @@ class npc_archaedas_minions : public CreatureScript { bWakingUp = false; bAmIAwake = true; - // AttackStart(Unit::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID + // AttackStart(ObjectAccessor::GetUnit(*me, instance->GetData64(0))); // whoWokeArchaedasGUID return; // dont want to continue until we finish the AttackStart method } @@ -297,7 +297,7 @@ class npc_archaedas_minions : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_archaedas_minionsAI>(creature); } @@ -328,7 +328,7 @@ class npc_stonekeepers : public CreatureScript InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { me->setFaction(35); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -336,14 +336,14 @@ class npc_stonekeepers : public CreatureScript me->RemoveAllAuras(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->setFaction(14); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //Return since we have no target if (!UpdateVictim()) @@ -352,14 +352,14 @@ class npc_stonekeepers : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*attacker*/) OVERRIDE + void JustDied(Unit* /*attacker*/) override { DoCast (me, SPELL_SELF_DESTRUCT, true); instance->SetData(DATA_STONE_KEEPERS, IN_PROGRESS); // activate next stonekeeper } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_stonekeepersAI>(creature); } @@ -381,7 +381,7 @@ class go_altar_of_archaedas : public GameObjectScript { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance) diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index d883cc136eb..13a475604a7 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -51,19 +51,19 @@ class boss_ironaya : public CreatureScript bool bHasCastWstomp; bool bHasCastKnockaway; - void Reset() OVERRIDE + void Reset() override { uiArcingTimer = 3000; bHasCastKnockaway = false; bHasCastWstomp = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -104,7 +104,7 @@ class boss_ironaya : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_ironayaAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index 39e47d109c6..56c84677181 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -47,7 +47,7 @@ class instance_uldaman : public InstanceMapScript { instance_uldaman_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -67,7 +67,7 @@ class instance_uldaman : public InstanceMapScript keystoneCheck = false; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -99,7 +99,7 @@ class instance_uldaman : public InstanceMapScript uint32 m_auiEncounter[MAX_ENCOUNTER]; std::string str_data; - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -252,7 +252,7 @@ class instance_uldaman : public InstanceMapScript if (!archaedas) return; - if (Unit::GetUnit(*archaedas, target)) + if (ObjectAccessor::GetUnit(*archaedas, target)) { archaedas->CastSpell(archaedas, SPELL_ARCHAEDAS_AWAKEN, false); whoWokeuiArchaedasGUID = target; @@ -308,7 +308,7 @@ class instance_uldaman : public InstanceMapScript } } } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (!keystoneCheck) return; @@ -327,7 +327,7 @@ class instance_uldaman : public InstanceMapScript ironayaSealDoorTimer -= diff; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -393,7 +393,7 @@ class instance_uldaman : public InstanceMapScript } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { // Archaedas if (type == 0) @@ -403,12 +403,12 @@ class instance_uldaman : public InstanceMapScript } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -430,7 +430,7 @@ class instance_uldaman : public InstanceMapScript OUT_LOAD_INST_DATA_COMPLETE; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -469,7 +469,7 @@ class instance_uldaman : public InstanceMapScript } } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -494,7 +494,7 @@ class instance_uldaman : public InstanceMapScript return 0; } // end GetData64 - void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override { switch (eventId) { @@ -507,7 +507,7 @@ class instance_uldaman : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_uldaman_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp index cd79f90cf58..fdb71cbbf83 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp @@ -58,16 +58,16 @@ class npc_jadespine_basilisk : public CreatureScript uint32 uiCslumberTimer; - void Reset() OVERRIDE + void Reset() override { uiCslumberTimer = 2000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -96,7 +96,7 @@ class npc_jadespine_basilisk : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_jadespine_basiliskAI(creature); } @@ -111,7 +111,7 @@ class go_keystone_chamber : public GameObjectScript public: go_keystone_chamber() : GameObjectScript("go_keystone_chamber") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) instance->SetData(DATA_IRONAYA_SEAL, IN_PROGRESS); //door animation and save state. @@ -135,7 +135,7 @@ class AreaTrigger_at_map_chamber : public AreaTriggerScript { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (player->GetQuestStatus(QUEST_HIDDEN_CHAMBER) == QUEST_STATUS_INCOMPLETE) player->AreaExploredOrEventHappens(QUEST_HIDDEN_CHAMBER); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index eca840dbeb2..9810c42bdfb 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -91,7 +91,7 @@ class boss_akilzon : public CreatureScript memset(BirdGUIDs, 0, sizeof(BirdGUIDs)); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -105,7 +105,7 @@ class boss_akilzon : public CreatureScript SetWeather(WEATHER_STATE_FINE, 0.0f); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_STATIC_DISRUPTION, urand(10000, 20000)); // 10 to 20 seconds (bosskillers) events.ScheduleEvent(EVENT_GUST_OF_WIND, urand(20000, 30000)); // 20 to 30 seconds(bosskillers) @@ -119,13 +119,13 @@ class boss_akilzon : public CreatureScript instance->SetData(DATA_AKILZONEVENT, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); @@ -214,7 +214,7 @@ class boss_akilzon : public CreatureScript events.ScheduleEvent(EVENT_STORM_SEQUENCE, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -304,13 +304,13 @@ class boss_akilzon : public CreatureScript break; case EVENT_STORM_SEQUENCE: { - Unit* target = Unit::GetUnit(*me, CloudGUID); + Unit* target = ObjectAccessor::GetUnit(*me, CloudGUID); if (!target || !target->IsAlive()) { EnterEvadeMode(); return; } - else if (Unit* Cyclone = Unit::GetUnit(*me, CycloneGUID)) + else if (Unit* Cyclone = ObjectAccessor::GetUnit(*me, CycloneGUID)) Cyclone->CastSpell(target, SPELL_SAND_STORM, true); // keep casting or... HandleStormSequence(target); break; @@ -323,7 +323,7 @@ class boss_akilzon : public CreatureScript for (uint8 i = 0; i < 8; ++i) { - Unit* bird = Unit::GetUnit(*me, BirdGUIDs[i]); + Unit* bird = ObjectAccessor::GetUnit(*me, BirdGUIDs[i]); if (!bird) //they despawned on die { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) @@ -366,7 +366,7 @@ class boss_akilzon : public CreatureScript bool isRaining; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_akilzonAI>(creature); } @@ -385,7 +385,7 @@ class npc_akilzon_eagle : public CreatureScript bool arrived; uint64 TargetGUID; - void Reset() OVERRIDE + void Reset() override { EagleSwoop_Timer = urand(5000, 10000); arrived = true; @@ -393,20 +393,20 @@ class npc_akilzon_eagle : public CreatureScript me->SetDisableGravity(true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void MovementInform(uint32, uint32) OVERRIDE + void MovementInform(uint32, uint32) override { arrived = true; if (TargetGUID) { - if (Unit* target = Unit::GetUnit(*me, TargetGUID)) + if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID)) DoCast(target, SPELL_EAGLE_SWOOP, true); TargetGUID = 0; me->SetSpeed(MOVE_RUN, 1.2f); @@ -414,7 +414,7 @@ class npc_akilzon_eagle : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (EagleSwoop_Timer <= diff) EagleSwoop_Timer = 0; @@ -448,7 +448,7 @@ class npc_akilzon_eagle : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_akilzon_eagleAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index 4e354b47be5..74ce267441f 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -16,35 +16,11 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: boss_Halazzi -SD%Complete: 80 -SDComment: -SDCategory: Zul'Aman -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "zulaman.h" #include "SpellInfo.h" -#define YELL_AGGRO "Get on your knees and bow to da fang and claw!" -#define SOUND_AGGRO 12020 -#define YELL_SABER_ONE "You gonna leave in pieces!" -#define YELL_SABER_TWO "Me gonna carve ya now!" -#define YELL_SPLIT "Me gonna carve ya now!" -#define SOUND_SPLIT 12021 -#define YELL_MERGE "Spirit, come back to me!" -#define SOUND_MERGE 12022 -#define YELL_KILL_ONE "You cant fight the power!" -#define SOUND_KILL_ONE 12026 -#define YELL_KILL_TWO "You gonna fail!" -#define SOUND_KILL_TWO 12027 -#define YELL_DEATH "Chaga... choka'jinn." -#define SOUND_DEATH 12028 -#define YELL_BERSERK "Whatch you be doing? Pissin' yourselves..." -#define SOUND_BERSERK 12025 - enum Spells { SPELL_DUAL_WIELD = 29651, @@ -78,23 +54,32 @@ enum PhaseHalazzi PHASE_ENRAGE = 5 }; +enum Yells +{ + SAY_AGGRO = 0, + SAY_SABER = 1, + SAY_SPLIT = 2, + SAY_MERGE = 3, + SAY_KILL = 4, + SAY_DEATH = 5, + SAY_BERSERK = 6 +}; + class boss_halazzi : public CreatureScript { public: - - boss_halazzi() - : CreatureScript("boss_halazzi") - { - } + boss_halazzi() : CreatureScript("boss_halazzi") { } struct boss_halazziAI : public ScriptedAI { - boss_halazziAI(Creature* creature) : ScriptedAI(creature) + boss_halazziAI(Creature* creature) : ScriptedAI(creature), summons(me) { instance = creature->GetInstanceScript(); } InstanceScript* instance; + SummonList summons; + PhaseHalazzi Phase; uint32 FrenzyTimer; uint32 SaberlashTimer; @@ -102,16 +87,14 @@ class boss_halazzi : public CreatureScript uint32 TotemTimer; uint32 CheckTimer; uint32 BerserkTimer; - uint32 TransformCount; - PhaseHalazzi Phase; - uint64 LynxGUID; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_HALAZZIEVENT, NOT_STARTED); + summons.DespawnAll(); LynxGUID = 0; TransformCount = 0; @@ -124,38 +107,37 @@ class boss_halazzi : public CreatureScript EnterPhase(PHASE_LYNX); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS); - - me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_AGGRO); - + Talk(SAY_AGGRO); EnterPhase(PHASE_LYNX); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->AI()->AttackStart(me->GetVictim()); if (summon->GetEntry() == NPC_SPIRIT_LYNX) LynxGUID = summon->GetGUID(); + summons.Summon(summon); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth() && Phase != PHASE_ENRAGE) damage = 0; } - void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit*, const SpellInfo* spell) override { if (spell->Id == SPELL_TRANSFORM_SPLIT2) EnterPhase(PHASE_HUMAN); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { - if (Phase != PHASE_MERGE) ScriptedAI::AttackStart(who); + if (Phase != PHASE_MERGE) + ScriptedAI::AttackStart(who); } void EnterPhase(PhaseHalazzi NextPhase) @@ -170,7 +152,7 @@ class boss_halazzi : public CreatureScript me->Attack(me->GetVictim(), true); me->GetMotionMaster()->MoveChase(me->GetVictim()); } - if (Creature* Lynx = Unit::GetCreature(*me, LynxGUID)) + if (Creature* Lynx = ObjectAccessor::GetCreature(*me, LynxGUID)) Lynx->DisappearAndDie(); me->SetMaxHealth(600000); me->SetHealth(600000 - 150000 * TransformCount); @@ -180,8 +162,7 @@ class boss_halazzi : public CreatureScript TotemTimer = 12000; break; case PHASE_SPLIT: - me->MonsterYell(YELL_SPLIT, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_SPLIT); + Talk(SAY_SPLIT); DoCast(me, SPELL_TRANSFORM_SPLIT, true); break; case PHASE_HUMAN: @@ -193,10 +174,9 @@ class boss_halazzi : public CreatureScript TotemTimer = 12000; break; case PHASE_MERGE: - if (Unit* pLynx = Unit::GetUnit(*me, LynxGUID)) + if (Unit* pLynx = ObjectAccessor::GetUnit(*me, LynxGUID)) { - me->MonsterYell(YELL_MERGE, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_MERGE); + Talk(SAY_MERGE); pLynx->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pLynx->GetMotionMaster()->Clear(); pLynx->GetMotionMaster()->MoveFollow(me, 0, 0); @@ -211,15 +191,14 @@ class boss_halazzi : public CreatureScript Phase = NextPhase; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; if (BerserkTimer <= diff) { - me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_BERSERK); + Talk(SAY_BERSERK); DoCast(me, SPELL_BERSERK, true); BerserkTimer = 60000; } else BerserkTimer -= diff; @@ -280,7 +259,7 @@ class boss_halazzi : public CreatureScript EnterPhase(PHASE_MERGE); else { - Unit* Lynx = Unit::GetUnit(*me, LynxGUID); + Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID); if (Lynx && !Lynx->HealthAbovePct(20) /*Lynx->HealthBelowPct(10)*/) EnterPhase(PHASE_MERGE); } @@ -293,7 +272,7 @@ class boss_halazzi : public CreatureScript { if (CheckTimer <= diff) { - Unit* Lynx = Unit::GetUnit(*me, LynxGUID); + Unit* Lynx = ObjectAccessor::GetUnit(*me, LynxGUID); if (Lynx) { Lynx->GetMotionMaster()->MoveFollow(me, 0, 0); @@ -313,32 +292,22 @@ class boss_halazzi : public CreatureScript DoMeleeAttackIfReady(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* victim) override { - switch (urand(0, 1)) - { - case 0: - me->MonsterYell(YELL_KILL_ONE, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_KILL_ONE); - break; - - case 1: - me->MonsterYell(YELL_KILL_TWO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_KILL_TWO); - break; - } + if (victim->GetTypeId() != TYPEID_PLAYER) + return; + + Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_HALAZZIEVENT, DONE); - - me->MonsterYell(YELL_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(me, SOUND_DEATH); + Talk(SAY_DEATH); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_halazziAI>(creature); } @@ -348,11 +317,7 @@ class boss_halazzi : public CreatureScript class npc_halazzi_lynx : public CreatureScript { public: - - npc_halazzi_lynx() - : CreatureScript("npc_halazzi_lynx") - { - } + npc_halazzi_lynx() : CreatureScript("npc_halazzi_lynx") { } struct npc_halazzi_lynxAI : public ScriptedAI { @@ -361,27 +326,27 @@ class npc_halazzi_lynx : public CreatureScript uint32 FrenzyTimer; uint32 shredder_timer; - void Reset() OVERRIDE + void Reset() override { FrenzyTimer = urand(30000, 50000); //frenzy every 30-50 seconds shredder_timer = 4000; } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth()) damage = 0; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) ScriptedAI::AttackStart(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE {/*DoZoneInCombat();*/ } + void EnterCombat(Unit* /*who*/) override {/*DoZoneInCombat();*/ } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -403,7 +368,7 @@ class npc_halazzi_lynx : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_halazzi_lynxAI(creature); } @@ -414,5 +379,3 @@ void AddSC_boss_halazzi() new boss_halazzi(); new npc_halazzi_lynx(); } - - diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index d6657ac0986..6e5517e82a6 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -222,14 +222,14 @@ struct boss_hexlord_addAI : public ScriptedAI instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (instance->GetData(DATA_HEXLORDEVENT) != IN_PROGRESS) { @@ -276,7 +276,7 @@ class boss_hexlord_malacrass : public CreatureScript uint32 PlayerClass; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_HEXLORDEVENT, NOT_STARTED); @@ -293,7 +293,7 @@ class boss_hexlord_malacrass : public CreatureScript me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_HEXLORDEVENT, IN_PROGRESS); @@ -303,7 +303,7 @@ class boss_hexlord_malacrass : public CreatureScript for (uint8 i = 0; i < 4; ++i) { - Creature* creature = Unit::GetCreature(*me, AddGUID[i]); + Creature* creature = ObjectAccessor::GetCreature(*me, AddGUID[i]); if (creature && creature->IsAlive()) creature->AI()->AttackStart(me->GetVictim()); else @@ -314,7 +314,7 @@ class boss_hexlord_malacrass : public CreatureScript } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { switch (urand(0, 1)) { @@ -329,7 +329,7 @@ class boss_hexlord_malacrass : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_HEXLORDEVENT, DONE); @@ -338,7 +338,7 @@ class boss_hexlord_malacrass : public CreatureScript for (uint8 i = 0; i < 4; ++i) { - Unit* Temp = Unit::GetUnit(*me, AddGUID[i]); + Unit* Temp = ObjectAccessor::GetUnit(*me, AddGUID[i]); if (Temp && Temp->IsAlive()) Temp->DealDamage(Temp, Temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } @@ -363,7 +363,7 @@ class boss_hexlord_malacrass : public CreatureScript { for (uint8 i = 0; i < 4; ++i) { - Creature* creature = (Unit::GetCreature((*me), AddGUID[i])); + Creature* creature = (ObjectAccessor::GetCreature((*me), AddGUID[i])); if (!creature || !creature->IsAlive()) { if (creature) creature->setDeathState(DEAD); @@ -379,7 +379,7 @@ class boss_hexlord_malacrass : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -397,7 +397,7 @@ class boss_hexlord_malacrass : public CreatureScript if (CheckAddState_Timer <= diff) { for (uint8 i = 0; i < 4; ++i) - if (Creature* temp = Unit::GetCreature(*me, AddGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, AddGUID[i])) if (temp->IsAlive() && !temp->GetVictim()) temp->AI()->AttackStart(me->GetVictim()); @@ -462,7 +462,7 @@ class boss_hexlord_malacrass : public CreatureScript if (PlayerAbility_Timer <= diff) { - //Unit* target = Unit::GetUnit(*me, PlayerGUID); + //Unit* target = ObjectAccessor::GetUnit(*me, PlayerGUID); //if (target && target->IsAlive()) //{ UseAbility(); @@ -505,7 +505,7 @@ class boss_hexlord_malacrass : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_hex_lord_malacrassAI>(creature); } @@ -528,7 +528,7 @@ class boss_thurg : public CreatureScript uint32 bloodlust_timer; uint32 cleave_timer; - void Reset() OVERRIDE + void Reset() override { bloodlust_timer = 15000; cleave_timer = 10000; @@ -536,7 +536,7 @@ class boss_thurg : public CreatureScript boss_hexlord_addAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -562,7 +562,7 @@ class boss_thurg : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_thurgAI>(creature); } @@ -585,7 +585,7 @@ class boss_alyson_antille : public CreatureScript uint32 flashheal_timer; uint32 dispelmagic_timer; - void Reset() OVERRIDE + void Reset() override { flashheal_timer = 2500; dispelmagic_timer = 10000; @@ -595,7 +595,7 @@ class boss_alyson_antille : public CreatureScript boss_hexlord_addAI::Reset(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -610,7 +610,7 @@ class boss_alyson_antille : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -659,7 +659,7 @@ class boss_alyson_antille : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_alyson_antilleAI>(creature); } @@ -671,13 +671,13 @@ struct boss_gazakrothAI : public boss_hexlord_addAI uint32 firebolt_timer; - void Reset() OVERRIDE + void Reset() override { firebolt_timer = 2000; boss_hexlord_addAI::Reset(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -692,7 +692,7 @@ struct boss_gazakrothAI : public boss_hexlord_addAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -723,7 +723,7 @@ class boss_lord_raadan : public CreatureScript uint32 flamebreath_timer; uint32 thunderclap_timer; - void Reset() OVERRIDE + void Reset() override { flamebreath_timer = 8000; thunderclap_timer = 13000; @@ -731,7 +731,7 @@ class boss_lord_raadan : public CreatureScript boss_hexlord_addAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -752,7 +752,7 @@ class boss_lord_raadan : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lord_raadanAI>(creature); } @@ -773,12 +773,12 @@ class boss_darkheart : public CreatureScript uint32 psychicwail_timer; - void Reset() OVERRIDE + void Reset() override { psychicwail_timer = 8000; boss_hexlord_addAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -793,7 +793,7 @@ class boss_darkheart : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_darkheartAI>(creature); } @@ -815,13 +815,13 @@ class boss_slither : public CreatureScript uint32 venomspit_timer; - void Reset() OVERRIDE + void Reset() override { venomspit_timer = 5000; boss_hexlord_addAI::Reset(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -836,7 +836,7 @@ class boss_slither : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -852,7 +852,7 @@ class boss_slither : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_slitherAI>(creature); } @@ -873,13 +873,13 @@ class boss_fenstalker : public CreatureScript uint32 volatileinf_timer; - void Reset() OVERRIDE + void Reset() override { volatileinf_timer = 15000; boss_hexlord_addAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -887,7 +887,8 @@ class boss_fenstalker : public CreatureScript if (volatileinf_timer <= diff) { // core bug - me->GetVictim()->CastSpell(me->GetVictim(), SPELL_VOLATILE_INFECTION, false); + if (me->GetVictim()) + me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_VOLATILE_INFECTION, false); volatileinf_timer = 12000; } else volatileinf_timer -= diff; @@ -895,7 +896,7 @@ class boss_fenstalker : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fenstalkerAI>(creature); } @@ -917,14 +918,14 @@ class boss_koragg : public CreatureScript uint32 coldstare_timer; uint32 mightyblow_timer; - void Reset() OVERRIDE + void Reset() override { coldstare_timer = 15000; mightyblow_timer = 10000; boss_hexlord_addAI::Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -945,7 +946,7 @@ class boss_koragg : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_koraggAI>(creature); } @@ -960,7 +961,7 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader { PrepareAuraScript(spell_hexlord_unstable_affliction_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WL_UNSTABLE_AFFL_DISPEL)) return false; @@ -973,13 +974,13 @@ class spell_hexlord_unstable_affliction : public SpellScriptLoader caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, true, NULL, GetEffect(EFFECT_0)); } - void Register() OVERRIDE + void Register() override { AfterDispel += AuraDispelFn(spell_hexlord_unstable_affliction_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hexlord_unstable_affliction_AuraScript(); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index caf54313fe7..f264b12ca23 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -141,7 +141,7 @@ class boss_janalai : public CreatureScript uint64 FireBombGUIDs[40]; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_JANALAIEVENT, NOT_STARTED); @@ -164,19 +164,19 @@ class boss_janalai : public CreatureScript HatchAllEggs(1); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_JANALAIEVENT, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_JANALAIEVENT, IN_PROGRESS); @@ -184,7 +184,7 @@ class boss_janalai : public CreatureScript // DoZoneInCombat(); } - void DamageDealt(Unit* target, uint32 &damage, DamageEffectType /*damagetype*/) OVERRIDE + void DamageDealt(Unit* target, uint32 &damage, DamageEffectType /*damagetype*/) override { if (isFlameBreathing) { @@ -292,7 +292,7 @@ class boss_janalai : public CreatureScript { if (BombCount < 40) { - if (Unit* FireBomb = Unit::GetUnit(*me, FireBombGUIDs[BombCount])) + if (Unit* FireBomb = ObjectAccessor::GetUnit(*me, FireBombGUIDs[BombCount])) { FireBomb->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); DoCast(FireBomb, SPELL_FIRE_BOMB_THROW, true); @@ -317,7 +317,7 @@ class boss_janalai : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (isFlameBreathing) { @@ -437,7 +437,7 @@ class boss_janalai : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_janalaiAI>(creature); } @@ -456,25 +456,25 @@ class npc_janalai_firebomb : public CreatureScript { npc_janalai_firebombAI(Creature* creature) : ScriptedAI(creature){ } - void Reset() OVERRIDE { } + void Reset() override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_FIRE_BOMB_THROW) DoCast(me, SPELL_FIRE_BOMB_DUMMY, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_janalai_firebombAI(creature); } @@ -506,7 +506,7 @@ class npc_janalai_hatcher : public CreatureScript bool hasChangedSide; bool isHatching; - void Reset() OVERRIDE + void Reset() override { me->SetWalk(true); side =(me->GetPositionY() < 1150); @@ -548,11 +548,11 @@ class npc_janalai_hatcher : public CreatureScript return num == 0; // if num == 0, no more templist } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void MovementInform(uint32, uint32) OVERRIDE + void MovementInform(uint32, uint32) override { if (waypoint == 5) { @@ -564,7 +564,7 @@ class npc_janalai_hatcher : public CreatureScript WaitTimer = 1; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!instance || !(instance->GetData(DATA_JANALAIEVENT) == IN_PROGRESS)) { @@ -607,7 +607,7 @@ class npc_janalai_hatcher : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_janalai_hatcherAI>(creature); } @@ -632,7 +632,7 @@ class npc_janalai_hatchling : public CreatureScript InstanceScript* instance; uint32 BuffetTimer; - void Reset() OVERRIDE + void Reset() override { BuffetTimer = 7000; if (me->GetPositionY() > 1150) @@ -643,9 +643,9 @@ class npc_janalai_hatchling : public CreatureScript me->SetDisableGravity(true); } - void EnterCombat(Unit* /*who*/) OVERRIDE {/*DoZoneInCombat();*/ } + void EnterCombat(Unit* /*who*/) override {/*DoZoneInCombat();*/ } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!instance || !(instance->GetData(DATA_JANALAIEVENT) == IN_PROGRESS)) { @@ -666,7 +666,7 @@ class npc_janalai_hatchling : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_janalai_hatchlingAI>(creature); } @@ -677,7 +677,7 @@ class npc_janalai_egg : public CreatureScript public: npc_janalai_egg(): CreatureScript("npc_janalai_egg") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_janalai_eggAI(creature); } @@ -686,11 +686,11 @@ public: { npc_janalai_eggAI(Creature* creature) : ScriptedAI(creature){ } - void Reset() OVERRIDE { } + void Reset() override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_HATCH_EGG) { diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 5bd78006f95..4909074b059 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -133,7 +133,7 @@ class boss_nalorakk : public CreatureScript uint32 MovePhase; uint32 waitTimer; - void Reset() OVERRIDE + void Reset() override { if (MoveEvent) { @@ -192,13 +192,13 @@ class boss_nalorakk : public CreatureScript } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!MoveEvent) ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!MoveEvent) @@ -272,7 +272,7 @@ class boss_nalorakk : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_NALORAKKEVENT, IN_PROGRESS); @@ -281,7 +281,7 @@ class boss_nalorakk : public CreatureScript DoZoneInCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_NALORAKKEVENT, DONE); @@ -289,7 +289,7 @@ class boss_nalorakk : public CreatureScript DoPlaySoundToSet(me, SOUND_YELL_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { switch (urand(0, 1)) { @@ -304,7 +304,7 @@ class boss_nalorakk : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (MoveEvent) { @@ -344,7 +344,7 @@ class boss_nalorakk : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (waitTimer && inMove) { @@ -405,7 +405,7 @@ class boss_nalorakk : public CreatureScript if (Mangle_Timer <= diff) { - if (me->GetVictim() && !me->GetVictim()->HasAura(SPELL_MANGLEEFFECT)) + if (me->GetVictim() && !me->EnsureVictim()->HasAura(SPELL_MANGLEEFFECT)) { DoCastVictim(SPELL_MANGLE); Mangle_Timer = 1000; @@ -448,7 +448,7 @@ class boss_nalorakk : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_nalorakkAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index dbdc0b8e5c7..6b0fc05ba3d 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -167,7 +167,7 @@ class boss_zuljin : public CreatureScript SummonList Summons; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_ZULJINEVENT, NOT_STARTED); @@ -203,7 +203,7 @@ class boss_zuljin : public CreatureScript //me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_ZULJINEVENT, IN_PROGRESS); @@ -214,7 +214,7 @@ class boss_zuljin : public CreatureScript EnterPhase(0); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (Intro_Timer) return; @@ -222,18 +222,18 @@ class boss_zuljin : public CreatureScript Talk(YELL_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ZULJINEVENT, DONE); Talk(YELL_DEATH); Summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE); - if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[3])) + if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[3])) Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (Phase == 2) AttackStartNoMove(who); @@ -249,9 +249,9 @@ class boss_zuljin : public CreatureScript { if (Phase == 1 && !Overpower_Timer) { - uint32 health = me->GetVictim()->GetHealth(); + uint32 health = me->EnsureVictim()->GetHealth(); me->AttackerStateUpdate(me->GetVictim()); - if (me->GetVictim() && health == me->GetVictim()->GetHealth()) + if (me->GetVictim() && health == me->EnsureVictim()->GetHealth()) { DoCastVictim(SPELL_OVERPOWER, false); Overpower_Timer = 5000; @@ -284,7 +284,7 @@ class boss_zuljin : public CreatureScript { if (SpiritGUID[i]) { - if (Unit* temp = Unit::GetUnit(*me, SpiritGUID[i])) + if (Unit* temp = ObjectAccessor::GetUnit(*me, SpiritGUID[i])) { temp->SetVisible(false); temp->setDeathState(DEAD); @@ -294,12 +294,12 @@ class boss_zuljin : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { Summons.Summon(summon); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { Summons.Despawn(summon); } @@ -322,10 +322,10 @@ class boss_zuljin : public CreatureScript Talk(Transform[Phase].text); if (Phase > 0) { - if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[Phase - 1])) + if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[Phase - 1])) Temp->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); } - if (Unit* Temp = Unit::GetUnit(*me, SpiritGUID[NextPhase - 1])) + if (Unit* Temp = ObjectAccessor::GetUnit(*me, SpiritGUID[NextPhase - 1])) Temp->CastSpell(me, SPELL_SIPHON_SOUL, false); // should m cast on temp if (NextPhase == 2) { @@ -346,7 +346,7 @@ class boss_zuljin : public CreatureScript } } else - me->AI()->AttackStart(me->GetVictim()); + AttackStart(me->GetVictim()); if (NextPhase == 3) { me->RemoveAurasDueToSpell(SPELL_ENERGY_STORM); @@ -360,7 +360,7 @@ class boss_zuljin : public CreatureScript Phase = NextPhase; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!TankGUID) { @@ -428,7 +428,8 @@ class boss_zuljin : public CreatureScript { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - TankGUID = me->GetVictim()->GetGUID(); + if (me->GetVictim()) + TankGUID = me->EnsureVictim()->GetGUID(); me->SetSpeed(MOVE_RUN, 5.0f); AttackStart(target); // change victim Claw_Rage_Timer = 0; @@ -441,7 +442,7 @@ class boss_zuljin : public CreatureScript if (Claw_Loop_Timer <= diff) { Unit* target = me->GetVictim(); - if (!target || !target->isTargetableForAttack()) target = Unit::GetUnit(*me, TankGUID); + if (!target || !target->isTargetableForAttack()) target = ObjectAccessor::GetUnit(*me, TankGUID); if (!target || !target->isTargetableForAttack()) target = SelectTarget(SELECT_TARGET_RANDOM, 0); if (target) { @@ -454,7 +455,7 @@ class boss_zuljin : public CreatureScript { Claw_Rage_Timer = urand(15000, 20000); me->SetSpeed(MOVE_RUN, 1.2f); - AttackStart(Unit::GetUnit(*me, TankGUID)); + AttackStart(ObjectAccessor::GetUnit(*me, TankGUID)); TankGUID = 0; return; } @@ -477,7 +478,7 @@ class boss_zuljin : public CreatureScript { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - TankGUID = me->GetVictim()->GetGUID(); + TankGUID = me->EnsureVictim()->GetGUID(); me->SetSpeed(MOVE_RUN, 5.0f); AttackStart(target); // change victim Lynx_Rush_Timer = 0; @@ -502,7 +503,7 @@ class boss_zuljin : public CreatureScript { Lynx_Rush_Timer = urand(15000, 20000); me->SetSpeed(MOVE_RUN, 1.2f); - AttackStart(Unit::GetUnit(*me, TankGUID)); + AttackStart(ObjectAccessor::GetUnit(*me, TankGUID)); TankGUID = 0; } else @@ -550,7 +551,7 @@ class boss_zuljin : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_zuljinAI>(creature); } @@ -569,17 +570,17 @@ class npc_zuljin_vortex : public CreatureScript { npc_zuljin_vortexAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*target*/) OVERRIDE { } + void EnterCombat(Unit* /*target*/) override { } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_ZAP_INFORM) DoCast(caster, SPELL_ZAP_DAMAGE, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //if the vortex reach the target, it change his target to another player if (me->IsWithinMeleeRange(me->GetVictim())) @@ -587,7 +588,7 @@ class npc_zuljin_vortex : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_zuljin_vortexAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index 2347de4fa66..64ffddbbb6e 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -90,7 +90,7 @@ class instance_zulaman : public InstanceMapScript uint32 m_auiEncounter[MAX_ENCOUNTER]; uint32 RandVendor[RAND_VENDOR]; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -119,7 +119,7 @@ class instance_zulaman : public InstanceMapScript m_auiEncounter[DATA_GONGEVENT] = NOT_STARTED; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -134,7 +134,7 @@ class instance_zulaman : public InstanceMapScript instance->SummonCreature(NPC_HARRISON_JONES, HarrisonJonesLoc); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -151,7 +151,7 @@ class instance_zulaman : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -201,7 +201,7 @@ class instance_zulaman : public InstanceMapScript HandleGameObject(ZulJinGateGUID, true); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -231,7 +231,7 @@ class instance_zulaman : public InstanceMapScript } else TC_LOG_ERROR("scripts", "Zul'aman: corrupted save data."); } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -313,7 +313,7 @@ class instance_zulaman : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -331,7 +331,7 @@ class instance_zulaman : public InstanceMapScript } } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (QuestMinute) { @@ -350,7 +350,7 @@ class instance_zulaman : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -365,7 +365,7 @@ class instance_zulaman : public InstanceMapScript }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_zulaman_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index e51bcfc70ba..b2eec0574f3 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -68,9 +68,9 @@ class npc_forest_frog : public CreatureScript InstanceScript* instance; - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void DoSpawnRandom() { @@ -100,7 +100,7 @@ class npc_forest_frog : public CreatureScript if (cEntry == 24409) instance->SetData(TYPE_RAND_VENDOR_2, DONE); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_REMOVE_AMANI_CURSE && caster->GetTypeId() == TYPEID_PLAYER && me->GetEntry() == NPC_FOREST_FROG) { @@ -111,7 +111,7 @@ class npc_forest_frog : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_forest_frogAI>(creature); } @@ -141,36 +141,36 @@ class npc_zulaman_hostage : public CreatureScript bool IsLoot; uint64 PlayerGUID; - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) player->SendLoot(me->GetGUID(), LOOT_CORPSE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (IsLoot) DoCast(me, 7, false); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_zulaman_hostageAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HOSTAGE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); @@ -285,16 +285,16 @@ class npc_harrison_jones : public CreatureScript uint32 _gongTimer; uint64 uiTargetGUID; - void Reset() OVERRIDE + void Reset() override { _gongEvent = 0; _gongTimer = 0; uiTargetGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 action) override { if (me->GetCreatureTemplate()->GossipMenuId == sender && !action) { @@ -307,7 +307,7 @@ class npc_harrison_jones : public CreatureScript } } - void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit*, const SpellInfo* spell) override { if (spell->Id == SPELL_COSMETIC_SPEAR_THROW) { @@ -321,7 +321,7 @@ class npc_harrison_jones : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_gongEvent) { @@ -451,7 +451,7 @@ class npc_harrison_jones : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_harrison_jonesAI>(creature); } @@ -472,13 +472,13 @@ class spell_banging_the_gong : public SpellScriptLoader GetHitGObj()->SendCustomAnim(0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_banging_the_gong_SpellScript::Activate, EFFECT_1, SPELL_EFFECT_ACTIVATE_OBJECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_banging_the_gong_SpellScript(); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index e542b3c4895..4ac34615498 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -94,7 +94,7 @@ class boss_arlokk : public CreatureScript { boss_arlokkAI(Creature* creature) : BossAI(creature, DATA_ARLOKK) { } - void Reset() OVERRIDE + void Reset() override { if (events.IsInPhase(PHASE_TWO)) me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack @@ -107,13 +107,13 @@ class boss_arlokk : public CreatureScript me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); @@ -139,7 +139,7 @@ class boss_arlokk : public CreatureScript _triggersSideAGUID[sideA] = trigger->GetGUID(); ++sideA; } - else + else { _triggersSideBGUID[sideB] = trigger->GetGUID(); ++sideB; @@ -149,7 +149,7 @@ class boss_arlokk : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { BossAI::EnterEvadeMode(); if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetData64(GO_GONG_OF_BETHEKK))) @@ -157,7 +157,7 @@ class boss_arlokk : public CreatureScript me->DespawnOrUnsummon(4000); } - void SetData(uint32 id, uint32 /*value*/) OVERRIDE + void SetData(uint32 id, uint32 /*value*/) override { if (id == 1) --_summonCountA; @@ -165,7 +165,7 @@ class boss_arlokk : public CreatureScript --_summonCountB; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -299,7 +299,7 @@ class boss_arlokk : public CreatureScript uint64 _triggersSideBGUID[5]; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetZulGurubAI<boss_arlokkAI>(creature); } @@ -334,7 +334,7 @@ class npc_zulian_prowler : public CreatureScript { npc_zulian_prowlerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void Reset() OVERRIDE + void Reset() override { if (me->GetPositionY() < -1625.0f) _sideData = 1; @@ -344,27 +344,27 @@ class npc_zulian_prowler : public CreatureScript DoCast(me, SPELL_SNEAK_RANK_1_1); DoCast(me, SPELL_SNEAK_RANK_1_2); - if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) + if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ()); _events.ScheduleEvent(EVENT_ATTACK, 6000); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->GetMotionMaster()->Clear(false); me->RemoveAura(SPELL_SNEAK_RANK_1_1); me->RemoveAura(SPELL_SNEAK_RANK_1_2); } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight me->Attack(caster, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) + if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) { if (arlokk->IsAlive()) arlokk->GetAI()->SetData(_sideData, 0); @@ -372,7 +372,7 @@ class npc_zulian_prowler : public CreatureScript me->DespawnOrUnsummon(4000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (UpdateVictim()) { @@ -402,7 +402,7 @@ class npc_zulian_prowler : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetZulGurubAI<npc_zulian_prowlerAI>(creature); } @@ -421,7 +421,7 @@ class go_gong_of_bethekk : public GameObjectScript { public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (go->GetInstanceScript()) { diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index ef188dd9261..51b00e39fed 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -43,23 +43,24 @@ enum Events class boss_gahzranka : public CreatureScript // gahzranka { - public: boss_gahzranka() : CreatureScript("boss_gahzranka") { } + public: + boss_gahzranka() : CreatureScript("boss_gahzranka") { } struct boss_gahzrankaAI : public BossAI { boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FROSTBREATH, 8000); @@ -67,7 +68,7 @@ class boss_gahzranka : public CreatureScript // gahzranka events.ScheduleEvent(EVENT_SLAM, 17000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -102,7 +103,7 @@ class boss_gahzranka : public CreatureScript // gahzranka } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gahzrankaAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp index 120961a087e..4ffe7b35240 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp @@ -41,30 +41,31 @@ enum Events class boss_grilek : public CreatureScript // grilek { - public: boss_grilek() : CreatureScript("boss_grilek") { } + public: + boss_grilek() : CreatureScript("boss_grilek") { } struct boss_grilekAI : public BossAI { boss_grilekAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_AVATAR, urand(15000, 25000)); events.ScheduleEvent(EVENT_GROUND_TREMOR, urand(15000, 25000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -103,7 +104,7 @@ class boss_grilek : public CreatureScript // grilek } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_grilekAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp index 84ebc313b12..2d4a424476d 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp @@ -66,23 +66,24 @@ enum Events class boss_hakkar : public CreatureScript { - public: boss_hakkar() : CreatureScript("boss_hakkar") { } + public: + boss_hakkar() : CreatureScript("boss_hakkar") { } struct boss_hakkarAI : public BossAI { boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90000); @@ -103,7 +104,7 @@ class boss_hakkar : public CreatureScript Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -167,7 +168,7 @@ class boss_hakkar : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_hakkarAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index 232c9059b47..6b964d8825f 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -42,23 +42,24 @@ enum Events class boss_hazzarah : public CreatureScript { - public: boss_hazzarah() : CreatureScript("boss_hazzarah") { } + public: + boss_hazzarah() : CreatureScript("boss_hazzarah") { } struct boss_hazzarahAI : public BossAI { boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_MANABURN, urand(4000, 10000)); @@ -66,7 +67,7 @@ class boss_hazzarah : public CreatureScript events.ScheduleEvent(EVENT_ILLUSIONS, urand(10000, 18000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -94,11 +95,8 @@ class boss_hazzarah : public CreatureScript for (uint8 i = 0; i < 3; ++i) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - { - Creature* Illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); - if (Illusion) + if (Creature* Illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)) Illusion->AI()->AttackStart(target); - } } events.ScheduleEvent(EVENT_ILLUSIONS, urand(15000, 25000)); break; @@ -111,7 +109,7 @@ class boss_hazzarah : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_hazzarahAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp index 336599f2cc5..7a16f670afe 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp @@ -84,18 +84,18 @@ class boss_jeklik : public CreatureScript { boss_jeklikAI(Creature* creature) : BossAI(creature, DATA_JEKLIK) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -110,7 +110,7 @@ class boss_jeklik : public CreatureScript DoCast(me, SPELL_BAT_FORM); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(50)) { @@ -127,7 +127,7 @@ class boss_jeklik : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -152,9 +152,11 @@ class boss_jeklik : public CreatureScript case EVENT_SONIC_BURST: DoCastVictim(SPELL_SONICBURST); events.ScheduleEvent(EVENT_SONIC_BURST, urand(8000, 13000), 0, PHASE_ONE); + break; case EVENT_SCREECH: DoCastVictim(SPELL_SCREECH); events.ScheduleEvent(EVENT_SCREECH, urand(18000, 26000), 0, PHASE_ONE); + break; case EVENT_SPAWN_BATS: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) for (uint8 i = 0; i < 6; ++i) @@ -196,7 +198,7 @@ class boss_jeklik : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetZulGurubAI<boss_jeklikAI>(creature); } @@ -214,15 +216,15 @@ class npc_batrider : public CreatureScript uint32 Bomb_Timer; - void Reset() OVERRIDE + void Reset() override { Bomb_Timer = 2000; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -242,7 +244,7 @@ class npc_batrider : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_batriderAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index b4ba1ef71fb..f766a795658 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -16,13 +16,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Jin'do the Hexxer -SD%Complete: 85 -SDComment: Mind Control not working because of core bug. Shades visible for all. -SDCategory: Zul'Gurub -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "zulgurub.h" @@ -34,59 +27,75 @@ enum Say enum Spells { - SPELL_BRAINWASHTOTEM = 24262, - SPELL_POWERFULLHEALINGWARD = 24309, // HACKED Totem summoned by script because the spell totems will not cast. + SPELL_BRAIN_WASH_TOTEM = 24262, + SPELL_POWERFULL_HEALING_WARD = 24309, SPELL_HEX = 24053, - SPELL_DELUSIONSOFJINDO = 24306, - SPELL_SHADEOFJINDO = 24308, // HACKED - //Healing Ward Spell - SPELL_HEAL = 38588, // HACKED Totems are not working right. Right heal spell ID is 24311 but this spell is not casting... - //Shade of Jindo Spell + SPELL_DELUSIONS_OF_JINDO = 24306, + SPELL_SHADE_OF_JINDO = 24308, + // Healing Ward Spell + SPELL_HEAL = 24311, + // Shade of Jindo Spell SPELL_SHADOWSHOCK = 19460, - SPELL_INVISIBLE = 24699 + SPELL_INVISIBLE = 24307 }; enum Events { - EVENT_BRAINWASHTOTEM = 1, - EVENT_POWERFULLHEALINGWARD = 2, + EVENT_BRAIN_WASH_TOTEM = 1, + EVENT_POWERFULL_HEALING_WARD = 2, EVENT_HEX = 3, - EVENT_DELUSIONSOFJINDO = 4, + EVENT_DELUSIONS_OF_JINDO = 4, EVENT_TELEPORT = 5 }; -Position const TeleportLoc = {-11583.7783f, -1249.4278f, 77.5471f, 4.745f}; +Position const TeleportLoc = { -11583.7783f, -1249.4278f, 77.5471f, 4.745f }; + +// Formation of summoned trolls +Position const Formation[] = +{ + { -11582.2998f, -1247.8599f, 77.6298f, 0.0f }, + { -11585.0996f, -1248.7600f, 77.6298f, 0.0f }, + { -11586.5996f, -1250.7199f, 77.6298f, 0.0f }, + { -11586.4003f, -1253.9200f, 77.6298f, 0.0f }, + { -11584.2001f, -1252.2099f, 77.6298f, 0.0f }, + { -11582.5000f, -1250.3199f, 77.6298f, 0.0f }, + { -11583.2001f, -1254.8299f, 77.6298f, 0.0f }, + { -11581.5000f, -1252.5400f, 77.6298f, 0.0f }, + { -11580.2001f, -1250.5999f, 77.6298f, 0.0f }, + { -11580.5996f, -1254.7900f, 77.6298f, 0.0f } +}; class boss_jindo : public CreatureScript { - public: boss_jindo() : CreatureScript("boss_jindo") { } + public: + boss_jindo() : CreatureScript("boss_jindo") { } struct boss_jindoAI : public BossAI { boss_jindoAI(Creature* creature) : BossAI(creature, DATA_JINDO) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - events.ScheduleEvent(EVENT_BRAINWASHTOTEM, 20000); - events.ScheduleEvent(EVENT_POWERFULLHEALINGWARD, 16000); + events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, 20000); + events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, 16000); events.ScheduleEvent(EVENT_HEX, 8000); - events.ScheduleEvent(EVENT_DELUSIONSOFJINDO, 10000); + events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, 10000); events.ScheduleEvent(EVENT_TELEPORT, 5000); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -100,14 +109,13 @@ class boss_jindo : public CreatureScript { switch (eventId) { - case EVENT_BRAINWASHTOTEM: - DoCast(me, SPELL_BRAINWASHTOTEM); - events.ScheduleEvent(EVENT_BRAINWASHTOTEM, urand(18000, 26000)); + case EVENT_BRAIN_WASH_TOTEM: + DoCast(me, SPELL_BRAIN_WASH_TOTEM); + events.ScheduleEvent(EVENT_BRAIN_WASH_TOTEM, urand(18000, 26000)); break; - case EVENT_POWERFULLHEALINGWARD: // HACK - //DoCast(me, SPELL_POWERFULLHEALINGWARD); - me->SummonCreature(14987, me->GetPositionX()+3, me->GetPositionY()-2, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 30000); - events.ScheduleEvent(EVENT_POWERFULLHEALINGWARD, urand(14000, 20000)); + case EVENT_POWERFULL_HEALING_WARD: + DoCast(me, SPELL_POWERFULL_HEALING_WARD); + events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, urand(14000, 20000)); break; case EVENT_HEX: if (Unit* target = me->GetVictim()) @@ -118,52 +126,27 @@ class boss_jindo : public CreatureScript } events.ScheduleEvent(EVENT_HEX, urand(12000, 20000)); break; - case EVENT_DELUSIONSOFJINDO: // HACK + case EVENT_DELUSIONS_OF_JINDO: // Casting the delusion curse with a shade so shade will attack the same target with the curse. - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) { - DoCast(target, SPELL_DELUSIONSOFJINDO); - Creature* Shade = me->SummonCreature(NPC_SHADE_OF_JINDO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Shade) - Shade->AI()->AttackStart(target); + DoCast(target, SPELL_SHADE_OF_JINDO, true); + DoCast(target, SPELL_DELUSIONS_OF_JINDO); } - events.ScheduleEvent(EVENT_DELUSIONSOFJINDO, urand(4000, 12000)); + events.ScheduleEvent(EVENT_DELUSIONS_OF_JINDO, urand(4000, 12000)); break; - case EVENT_TELEPORT: // Possible HACK + case EVENT_TELEPORT: // Teleports a random player and spawns 9 Sacrificed Trolls to attack player - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) { - DoTeleportPlayer(target, TeleportLoc.m_positionX, TeleportLoc.m_positionY, TeleportLoc.m_positionZ, TeleportLoc.m_orientation); + DoTeleportPlayer(target, TeleportLoc.GetPositionX(), TeleportLoc.GetPositionY(), TeleportLoc.GetPositionZ(), TeleportLoc.GetOrientation()); if (DoGetThreat(me->GetVictim())) DoModifyThreatPercent(target, -100); - Creature* SacrificedTroll; - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); - SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (SacrificedTroll) - SacrificedTroll->AI()->AttackStart(target); + + // Summon a formation of trolls + for (uint8 i = 0; i < 10; ++i) + if (Creature* SacrificedTroll = me->SummonCreature(NPC_SACRIFICED_TROLL, Formation[i].GetPositionX(), Formation[i].GetPositionY(), Formation[i].GetPositionZ(), Formation[i].GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000)) + SacrificedTroll->AI()->AttackStart(target); } events.ScheduleEvent(EVENT_TELEPORT, urand(15000, 23000)); break; @@ -176,21 +159,17 @@ class boss_jindo : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_jindoAI(creature); } }; -//Healing Ward +// Healing Ward class npc_healing_ward : public CreatureScript { public: - - npc_healing_ward() - : CreatureScript("npc_healing_ward") - { - } + npc_healing_ward() : CreatureScript("npc_healing_ward") { } struct npc_healing_wardAI : public ScriptedAI { @@ -200,26 +179,22 @@ class npc_healing_ward : public CreatureScript } uint32 Heal_Timer; - InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { Heal_Timer = 2000; } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - //Heal_Timer + // Heal_Timer if (Heal_Timer <= diff) { - Unit* pJindo = Unit::GetUnit(*me, instance->GetData64(DATA_JINDO)); - if (pJindo) - DoCast(pJindo, SPELL_HEAL); + if (Unit* jindo = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JINDO))) + DoCast(jindo, SPELL_HEAL); Heal_Timer = 3000; } else Heal_Timer -= diff; @@ -227,7 +202,7 @@ class npc_healing_ward : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_healing_wardAI>(creature); } @@ -237,11 +212,7 @@ class npc_healing_ward : public CreatureScript class npc_shade_of_jindo : public CreatureScript { public: - - npc_shade_of_jindo() - : CreatureScript("npc_shade_of_jindo") - { - } + npc_shade_of_jindo() : CreatureScript("npc_shade_of_jindo") { } struct npc_shade_of_jindoAI : public ScriptedAI { @@ -249,18 +220,17 @@ class npc_shade_of_jindo : public CreatureScript uint32 ShadowShock_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowShock_Timer = 1000; DoCast(me, SPELL_INVISIBLE, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - - //ShadowShock_Timer + // ShadowShock_Timer if (ShadowShock_Timer <= diff) { DoCastVictim(SPELL_SHADOWSHOCK); @@ -271,7 +241,7 @@ class npc_shade_of_jindo : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_shade_of_jindoAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index d307303f4f4..72ba9db3637 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -37,7 +37,8 @@ enum Says SAY_WATCH = 2, SAY_WATCH_WHISPER = 3, SAY_OHGAN_DEAD = 4, - SAY_GRATS_JINDO = 0, + + SAY_GRATS_JINDO = 0 }; enum Spells @@ -106,21 +107,22 @@ Position const PosMandokir[2] = class boss_mandokir : public CreatureScript { - public: boss_mandokir() : CreatureScript("boss_mandokir") { } + public: + boss_mandokir() : CreatureScript("boss_mandokir") { } struct boss_mandokirAI : public BossAI { boss_mandokirAI(Creature* creature) : BossAI(creature, DATA_MANDOKIR) { } - void Reset() OVERRIDE + void Reset() override { if (me->GetPositionZ() > 140.0f) { _Reset(); killCount = 0; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); events.ScheduleEvent(EVENT_CHECK_START, 1000); - if (Creature* speaker = Creature::GetCreature(*me, instance->GetData64(NPC_VILEBRANCH_SPEAKER))) + if (Creature* speaker = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_VILEBRANCH_SPEAKER))) if (!speaker->IsAlive()) speaker->Respawn(true); } @@ -128,17 +130,17 @@ class boss_mandokir : public CreatureScript me->Mount(MODEL_OHGAN_MOUNT); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // Do not want to unsummon Ohgan for (int i = 0; i < CHAINED_SPIRT_COUNT; ++i) - if (Creature* unsummon = Creature::GetCreature(*me, chainedSpirtGUIDs[i])) + if (Creature* unsummon = ObjectAccessor::GetCreature(*me, chainedSpirtGUIDs[i])) unsummon->DespawnOrUnsummon(); instance->SetBossState(DATA_MANDOKIR, DONE); instance->SaveToDB(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_OVERPOWER, urand(7000, 9000)); @@ -161,7 +163,7 @@ class boss_mandokir : public CreatureScript DoZoneInCombat(); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -169,7 +171,7 @@ class boss_mandokir : public CreatureScript if (++killCount == 3) { Talk(SAY_DING_KILL); - if (Creature* jindo = Creature::GetCreature(*me, instance->GetData64(DATA_JINDO))) + if (Creature* jindo = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_JINDO))) if (jindo->IsAlive()) jindo->AI()->Talk(SAY_GRATS_JINDO); DoCast(me, SPELL_LEVEL_UP, true); @@ -177,7 +179,7 @@ class boss_mandokir : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE) { @@ -191,7 +193,7 @@ class boss_mandokir : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -213,7 +215,7 @@ class boss_mandokir : public CreatureScript events.ScheduleEvent(EVENT_CHECK_START, 1000); break; case EVENT_STARTED: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->GetMotionMaster()->MovePath(PATH_MANDOKIR, false); break; default: @@ -236,7 +238,7 @@ class boss_mandokir : public CreatureScript events.ScheduleEvent(EVENT_OVERPOWER, urand(6000, 12000)); break; case EVENT_MORTAL_STRIKE: - if (me->GetVictim() && me->GetVictim()->HealthBelowPct(50)) + if (me->GetVictim() && me->EnsureVictim()->HealthBelowPct(50)) DoCastVictim(SPELL_MORTAL_STRIKE, true); events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(12000, 18000)); break; @@ -278,7 +280,7 @@ class boss_mandokir : public CreatureScript uint64 chainedSpirtGUIDs[CHAINED_SPIRT_COUNT]; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetZulGurubAI<boss_mandokirAI>(creature); } @@ -293,25 +295,26 @@ enum OhganSpells class npc_ohgan : public CreatureScript { - public: npc_ohgan() : CreatureScript("npc_ohgan") { } + public: + npc_ohgan() : CreatureScript("npc_ohgan") { } struct npc_ohganAI : public ScriptedAI { npc_ohganAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { } - void Reset() OVERRIDE + void Reset() override { SunderArmor_Timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_OHGAN, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Return since we have no target if (!UpdateVictim()) @@ -331,7 +334,7 @@ class npc_ohgan : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetZulGurubAI<npc_ohganAI>(creature); } @@ -345,26 +348,27 @@ enum VilebranchSpells class npc_vilebranch_speaker : public CreatureScript { - public: npc_vilebranch_speaker() : CreatureScript("npc_vilebranch_speaker") { } + public: + npc_vilebranch_speaker() : CreatureScript("npc_vilebranch_speaker") { } struct npc_vilebranch_speakerAI : public ScriptedAI { npc_vilebranch_speakerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { } - void Reset() OVERRIDE + void Reset() override { demoralizing_Shout_Timer = urand(2000, 4000); cleave_Timer = urand(5000, 8000); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_MANDOKIR, SPECIAL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Return since we have no target if (!UpdateVictim()) @@ -391,7 +395,7 @@ class npc_vilebranch_speaker : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_vilebranch_speakerAI>(creature); } @@ -414,13 +418,13 @@ class spell_threatening_gaze : public SpellScriptLoader caster->CastSpell(target, SPELL_WATCH_CHARGE); } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_threatening_gaze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_threatening_gaze_AuraScript(); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp index efd79d89a2b..bbc1fb6c90e 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp @@ -29,10 +29,10 @@ EndScriptData */ enum Says { - SAY_AGGRO = 0, - SAY_TRANSFORM = 1, - SAY_SPIDER_SPAWN = 2, - SAY_DEATH = 3 + SAY_AGGRO = 0, + SAY_TRANSFORM = 1, + SAY_SPIDER_SPAWN = 2, + SAY_DEATH = 3 }; enum Spells @@ -64,6 +64,11 @@ enum Phases PHASE_THREE = 3 }; +enum Misc +{ + NPC_SPIDER = 15041 +}; + class boss_marli : public CreatureScript { public: boss_marli() : CreatureScript("boss_marli") { } @@ -72,27 +77,27 @@ class boss_marli : public CreatureScript { boss_marliAI(Creature* creature) : BossAI(creature, DATA_MARLI) { } - void Reset() OVERRIDE + void Reset() override { if (events.IsInPhase(PHASE_THREE)) me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SPAWN_START_SPIDERS, 1000, 0, PHASE_ONE); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -107,23 +112,12 @@ class boss_marli : public CreatureScript switch (eventId) { case EVENT_SPAWN_START_SPIDERS: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { Talk(SAY_SPIDER_SPAWN); - Creature* Spider = NULL; - Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Spider) - Spider->AI()->AttackStart(target); - Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Spider) - Spider->AI()->AttackStart(target); - Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Spider) - Spider->AI()->AttackStart(target); - Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Spider) - Spider->AI()->AttackStart(target); + for (uint8 i = 0; i < 4; ++i) + if (Creature* spider = me->SummonCreature(NPC_SPIDER, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000)) + spider->AI()->AttackStart(target); } events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000, 0, PHASE_TWO); events.ScheduleEvent(EVENT_TRANSFORM, 45000, 0, PHASE_TWO); @@ -142,11 +136,8 @@ class boss_marli : public CreatureScript break; case EVENT_SPAWN_SPIDER: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - { - Creature* Spider = me->SummonCreature(15041, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - if (Spider) - Spider->AI()->AttackStart(target); - } + if (Creature* spider = me->SummonCreature(NPC_SPIDER, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000)) + spider->AI()->AttackStart(target); events.ScheduleEvent(EVENT_SPAWN_SPIDER, urand(12000, 17000)); break; case EVENT_TRANSFORM: @@ -213,7 +204,7 @@ class boss_marli : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_marliAI(creature); } @@ -230,16 +221,14 @@ class npc_spawn_of_marli : public CreatureScript uint32 LevelUp_Timer; - void Reset() OVERRIDE + void Reset() override { LevelUp_Timer = 3000; } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -256,7 +245,7 @@ class npc_spawn_of_marli : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spawn_of_marliAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp index 87a8e647f53..015a2840a9c 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp @@ -40,7 +40,8 @@ enum Misc class boss_renataki : public CreatureScript { - public: boss_renataki() : CreatureScript("boss_renataki") { } + public: + boss_renataki() : CreatureScript("boss_renataki") { } struct boss_renatakiAI : public BossAI { @@ -55,7 +56,7 @@ class boss_renataki : public CreatureScript bool Invisible; bool Ambushed; - void Reset() OVERRIDE + void Reset() override { _Reset(); Invisible_Timer = urand(8000, 18000); @@ -68,17 +69,17 @@ class boss_renataki : public CreatureScript Ambushed = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -101,9 +102,7 @@ class boss_renataki : public CreatureScript { if (Ambush_Timer <= diff) { - Unit* target = NULL; - target = SelectTarget(SELECT_TARGET_RANDOM, 0); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) { DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); DoCast(target, SPELL_AMBUSH); @@ -135,14 +134,12 @@ class boss_renataki : public CreatureScript { if (Aggro_Timer <= diff) { - Unit* target = NULL; - target = SelectTarget(SELECT_TARGET_RANDOM, 1); - - if (DoGetThreat(me->GetVictim())) - DoModifyThreatPercent(me->GetVictim(), -50); - - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + { + if (DoGetThreat(me->GetVictim())) + DoModifyThreatPercent(me->GetVictim(), -50); AttackStart(target); + } Aggro_Timer = urand(7000, 20000); } else Aggro_Timer -= diff; @@ -158,7 +155,7 @@ class boss_renataki : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_renatakiAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index a70dd5e0a30..52fbcaba003 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -78,7 +78,8 @@ enum Phases class boss_thekal : public CreatureScript { - public: boss_thekal() : CreatureScript("boss_thekal") { } + public: + boss_thekal() : CreatureScript("boss_thekal") { } struct boss_thekalAI : public BossAI { @@ -87,7 +88,7 @@ class boss_thekal : public CreatureScript bool Enraged; bool WasDead; - void Reset() OVERRIDE + void Reset() override { if (events.IsInPhase(PHASE_TWO)) me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack @@ -96,13 +97,13 @@ class boss_thekal : public CreatureScript WasDead = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_MORTALCLEAVE, 4000, 0, PHASE_ONE); // Phase 1 @@ -112,12 +113,12 @@ class boss_thekal : public CreatureScript Talk(SAY_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SetBossState(DATA_THEKAL, NOT_STARTED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -171,7 +172,7 @@ class boss_thekal : public CreatureScript if (instance->GetBossState(DATA_LORKHAN) == SPECIAL) { //Resurrect LorKhan - if (Unit* pLorKhan = Unit::GetUnit(*me, instance->GetData64(DATA_LORKHAN))) + if (Unit* pLorKhan = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LORKHAN))) { pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pLorKhan->setFaction(14); @@ -184,7 +185,7 @@ class boss_thekal : public CreatureScript if (instance->GetBossState(DATA_ZATH) == SPECIAL) { //Resurrect Zath - if (Unit* pZath = Unit::GetUnit(*me, instance->GetData64(DATA_ZATH))) + if (Unit* pZath = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ZATH))) { pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pZath->setFaction(14); @@ -248,7 +249,7 @@ class boss_thekal : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_thekalAI>(creature); } @@ -276,7 +277,7 @@ class npc_zealot_lorkhan : public CreatureScript InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { Shield_Timer = 1000; BloodLust_Timer = 16000; @@ -292,11 +293,11 @@ class npc_zealot_lorkhan : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -318,8 +319,8 @@ class npc_zealot_lorkhan : public CreatureScript //Casting Greaterheal to Thekal or Zath if they are in meele range. if (GreaterHeal_Timer <= diff) { - Unit* pThekal = Unit::GetUnit(*me, instance->GetData64(DATA_THEKAL)); - Unit* pZath = Unit::GetUnit(*me, instance->GetData64(DATA_ZATH)); + Unit* pThekal = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THEKAL)); + Unit* pZath = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ZATH)); if (!pThekal || !pZath) return; @@ -352,7 +353,7 @@ class npc_zealot_lorkhan : public CreatureScript if (instance->GetBossState(DATA_THEKAL) == SPECIAL) { //Resurrect Thekal - if (Unit* pThekal = Unit::GetUnit(*me, instance->GetData64(DATA_THEKAL))) + if (Unit* pThekal = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THEKAL))) { pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -364,7 +365,7 @@ class npc_zealot_lorkhan : public CreatureScript if (instance->GetBossState(DATA_ZATH) == SPECIAL) { //Resurrect Zath - if (Unit* pZath = Unit::GetUnit(*me, instance->GetData64(DATA_ZATH))) + if (Unit* pZath = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ZATH))) { pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -395,7 +396,7 @@ class npc_zealot_lorkhan : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_zealot_lorkhanAI>(creature); } @@ -405,11 +406,7 @@ class npc_zealot_lorkhan : public CreatureScript class npc_zealot_zath : public CreatureScript { public: - - npc_zealot_zath() - : CreatureScript("npc_zealot_zath") - { - } + npc_zealot_zath() : CreatureScript("npc_zealot_zath") { } struct npc_zealot_zathAI : public ScriptedAI { @@ -429,7 +426,7 @@ class npc_zealot_zath : public CreatureScript InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { SweepingStrikes_Timer = 13000; SinisterStrike_Timer = 8000; @@ -446,11 +443,11 @@ class npc_zealot_zath : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -500,7 +497,7 @@ class npc_zealot_zath : public CreatureScript if (instance->GetBossState(DATA_LORKHAN) == SPECIAL) { //Resurrect LorKhan - if (Unit* pLorKhan = Unit::GetUnit(*me, instance->GetData64(DATA_LORKHAN))) + if (Unit* pLorKhan = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LORKHAN))) { pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -512,7 +509,7 @@ class npc_zealot_zath : public CreatureScript if (instance->GetBossState(DATA_THEKAL) == SPECIAL) { //Resurrect Thekal - if (Unit* pThekal = Unit::GetUnit(*me, instance->GetData64(DATA_THEKAL))) + if (Unit* pThekal = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THEKAL))) { pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -543,7 +540,7 @@ class npc_zealot_zath : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_zealot_zathAI>(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp index e131ed7ad12..7047d22c970 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp @@ -85,13 +85,14 @@ enum NPCs class boss_venoxis : public CreatureScript { - public: boss_venoxis() : CreatureScript("boss_venoxis") { } + public: + boss_venoxis() : CreatureScript("boss_venoxis") { } struct boss_venoxisAI : public BossAI { boss_venoxisAI(Creature* creature) : BossAI(creature, DATA_VENOXIS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); // remove all spells and auras from previous attempts @@ -104,14 +105,14 @@ class boss_venoxis : public CreatureScript events.SetPhase(PHASE_ONE); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_VENOXIS_DEATH); me->RemoveAllAuras(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); me->SetReactState(REACT_AGGRESSIVE); @@ -130,7 +131,7 @@ class boss_venoxis : public CreatureScript DoZoneInCombat(); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { // check if venoxis is ready to transform if (!_transformed && !HealthAbovePct(50)) @@ -147,7 +148,7 @@ class boss_venoxis : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -167,7 +168,6 @@ class boss_venoxis : public CreatureScript DoCast(me, SPELL_THRASH, true); events.ScheduleEvent(EVENT_THRASH, urand(10000, 20000)); break; - // troll form spells and Actions (first part) case EVENT_DISPEL_MAGIC: DoCast(me, SPELL_DISPEL_MAGIC); @@ -262,7 +262,7 @@ class boss_venoxis : public CreatureScript bool _frenzied; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_venoxisAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp index a4bd38b8fa7..6644724a430 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp @@ -41,30 +41,31 @@ enum Events class boss_wushoolay : public CreatureScript { - public: boss_wushoolay() : CreatureScript("boss_wushoolay") { } + public: + boss_wushoolay() : CreatureScript("boss_wushoolay") { } struct boss_wushoolayAI : public BossAI { boss_wushoolayAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_LIGHTNINGCLOUD, urand(5000, 10000)); events.ScheduleEvent(EVENT_LIGHTNINGWAVE, urand(8000, 16000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -95,7 +96,7 @@ class boss_wushoolay : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_wushoolayAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 67d40abaea3..de1ed629a34 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -45,7 +45,7 @@ class instance_zulgurub : public InstanceMapScript LoadDoorData(doorData); } - void Initialize() OVERRIDE + void Initialize() override { _zealotLorkhanGUID = 0; _zealotZathGUID = 0; @@ -56,13 +56,13 @@ class instance_zulgurub : public InstanceMapScript _goGongOfBethekkGUID = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { // not active in Zul'Gurub return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -87,7 +87,7 @@ class instance_zulgurub : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -106,7 +106,7 @@ class instance_zulgurub : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -118,7 +118,7 @@ class instance_zulgurub : public InstanceMapScript } } - uint64 GetData64(uint32 uiData) const OVERRIDE + uint64 GetData64(uint32 uiData) const override { switch (uiData) { @@ -144,7 +144,7 @@ class instance_zulgurub : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -155,7 +155,7 @@ class instance_zulgurub : public InstanceMapScript return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -199,7 +199,7 @@ class instance_zulgurub : public InstanceMapScript uint64 _goGongOfBethekkGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_zulgurub_InstanceMapScript(map); } diff --git a/src/server/scripts/EasternKingdoms/boss_kruul.cpp b/src/server/scripts/EasternKingdoms/boss_kruul.cpp index faed1a3cc34..13f9f76532e 100644 --- a/src/server/scripts/EasternKingdoms/boss_kruul.cpp +++ b/src/server/scripts/EasternKingdoms/boss_kruul.cpp @@ -42,7 +42,7 @@ class boss_kruul : public CreatureScript public: boss_kruul() : CreatureScript("boss_kruul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_kruulAI(creature); } @@ -59,7 +59,7 @@ public: uint32 Rage_Timer; uint32 Hound_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowVolley_Timer = 10000; Cleave_Timer = 14000; @@ -70,11 +70,11 @@ public: Hound_Timer = 8000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { // When a player, pet or totem gets killed, Lord Kazzak casts this spell to instantly regenerate 70, 000 health. DoCast(me, SPELL_CAPTURESOUL); @@ -86,7 +86,7 @@ public: Hound->AI()->AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index 7a2c1cb09db..0480b99b912 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -65,7 +65,7 @@ class npc_professor_phizzlethorpe : public CreatureScript { npc_professor_phizzlethorpeAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -104,12 +104,12 @@ class npc_professor_phizzlethorpe : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } @@ -124,13 +124,13 @@ class npc_professor_phizzlethorpe : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_professor_phizzlethorpeAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp index 3fcd3c093b7..293a6b90915 100644 --- a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp @@ -17,11 +17,7 @@ /* Blasted_Lands -Quest support: 3628. Teleporter to Rise of the Defiler. -*/ - -/* -npc_deathly_usher +Quest support: 3628. */ #include "ScriptMgr.h" @@ -31,10 +27,6 @@ npc_deathly_usher #include "Player.h" #include "Group.h" -/*###### -## npc_deathly_usher -######*/ - enum DeathlyUsher { SPELL_TELEPORT_SINGLE = 12885, @@ -42,28 +34,6 @@ enum DeathlyUsher SPELL_TELEPORT_GROUP = 27686 }; -class npc_deathly_usher : public CreatureScript -{ -public: - npc_deathly_usher() : CreatureScript("npc_deathly_usher") { } - - struct npc_deathly_usherAI : public ScriptedAI - { - npc_deathly_usherAI(Creature* creature) : ScriptedAI(creature) { } - - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE - { - player->CLOSE_GOSSIP_MENU(); - me->CastSpell(player, SPELL_TELEPORT_GROUP, true); - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_deathly_usherAI(creature); - } -}; - /*##### # spell_razelikh_teleport_group #####*/ @@ -76,7 +46,7 @@ class spell_razelikh_teleport_group : public SpellScriptLoader { PrepareSpellScript(spell_razelikh_teleport_group_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE) && !sSpellMgr->GetSpellInfo(SPELL_TELEPORT_SINGLE_IN_GROUP)) return false; @@ -99,13 +69,13 @@ class spell_razelikh_teleport_group : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_razelikh_teleport_group_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_razelikh_teleport_group_SpellScript(); } @@ -113,6 +83,5 @@ class spell_razelikh_teleport_group : public SpellScriptLoader void AddSC_blasted_lands() { - new npc_deathly_usher(); new spell_razelikh_teleport_group(); } diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp index b991ab3c7a2..9d046ff16d8 100644 --- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp +++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp @@ -66,9 +66,9 @@ public: { npc_ragged_johnAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->HasAura(SPELL_MOTHERS_MILK)) { @@ -83,10 +83,10 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -143,7 +143,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -155,7 +155,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ragged_johnAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 0332727fa4c..4eaf98d0a0e 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -29,18 +29,19 @@ EndScriptData */ enum TwilightCorrupter { - ITEM_FRAGMENT = 21149, NPC_TWILIGHT_CORRUPTER = 15625, - YELL_TWILIGHTCORRUPTOR_RESPAWN = 0, - YELL_TWILIGHTCORRUPTOR_AGGRO = 1, - YELL_TWILIGHTCORRUPTOR_KILL = 2, + YELL_TWILIGHT_CORRUPTOR_RESPAWN = 0, + YELL_TWILIGHT_CORRUPTOR_AGGRO = 1, + YELL_TWILIGHT_CORRUPTOR_KILL = 2, + SPELL_SOUL_CORRUPTION = 25805, SPELL_CREATURE_OF_NIGHTMARE = 25806, SPELL_LEVEL_UP = 24312, EVENT_SOUL_CORRUPTION = 1, EVENT_CREATURE_OF_NIGHTMARE = 2, - FACTION_HOSTILE = 14 + + QUEST_NIGHTMARES_CORRUPTION = 8735 }; /*###### @@ -56,24 +57,25 @@ public: { boss_twilight_corrupterAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { - KillCount = 0; + _events.Reset(); + KillCount = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { - Talk(YELL_TWILIGHTCORRUPTOR_AGGRO); + Talk(YELL_TWILIGHT_CORRUPTOR_AGGRO); _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000); _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) { ++KillCount; - Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim); + Talk(YELL_TWILIGHT_CORRUPTOR_KILL, victim); if (KillCount == 3) { @@ -83,29 +85,34 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_SOUL_CORRUPTION: - DoCastVictim(SPELL_SOUL_CORRUPTION); - _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000); + DoCastAOE(SPELL_SOUL_CORRUPTION); + _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, urand(15000, 19000)); break; case EVENT_CREATURE_OF_NIGHTMARE: - DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + DoCast(target, SPELL_CREATURE_OF_NIGHTMARE); _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000); break; default: break; } } + DoMeleeAttackIfReady(); } @@ -114,7 +121,7 @@ public: uint8 KillCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_twilight_corrupterAI(creature); } @@ -124,27 +131,22 @@ public: # at_twilight_grove ######*/ +Position const TwillightCorrupter = { -10328.16f, -489.57f, 49.95f, 0.0f }; + class at_twilight_grove : public AreaTriggerScript { -public: - at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } + public: + at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE - { - if (player->HasQuestForItem(ITEM_FRAGMENT)) + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { - if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000)) - corrupter->setFaction(FACTION_HOSTILE); + if (player->GetQuestStatus(QUEST_NIGHTMARES_CORRUPTION) == QUEST_STATUS_INCOMPLETE) + if (!player->FindNearestCreature(NPC_TWILIGHT_CORRUPTER, 500.0f, true)) + if (Creature* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, TwillightCorrupter, TEMPSUMMON_MANUAL_DESPAWN, 60000)) + corrupter->AI()->Talk(YELL_TWILIGHT_CORRUPTOR_RESPAWN, player); - if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000)) - { - CorrupterSpeaker->SetName("Twilight Corrupter"); - CorrupterSpeaker->SetVisible(true); - CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player); - } - } - return false; - }; + return false; + }; }; void AddSC_duskwood() diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index 23b218897b7..81b0491f48d 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -45,18 +45,18 @@ public: { npc_ghoul_flayerAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer->GetTypeId() == TYPEID_PLAYER) me->SummonCreature(11064, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ghoul_flayerAI(creature); } @@ -71,7 +71,7 @@ class npc_augustus_the_touched : public CreatureScript public: npc_augustus_the_touched() : CreatureScript("npc_augustus_the_touched") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -79,7 +79,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -106,7 +106,7 @@ class npc_darrowshire_spirit : public CreatureScript public: npc_darrowshire_spirit() : CreatureScript("npc_darrowshire_spirit") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->SEND_GOSSIP_MENU(3873, creature->GetGUID()); player->TalkedToCreature(creature->GetEntry(), creature->GetGUID()); @@ -114,7 +114,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_darrowshire_spiritAI(creature); } @@ -123,13 +123,13 @@ public: { npc_darrowshire_spiritAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_SPIRIT_SPAWNIN); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; }; @@ -147,7 +147,7 @@ class npc_tirion_fordring : public CreatureScript public: npc_tirion_fordring() : CreatureScript("npc_tirion_fordring") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -172,7 +172,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp index dcfa576e7fe..bc4fff4da7b 100644 --- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp @@ -76,7 +76,7 @@ public: SummonList Summons; EventMap events; - void Reset() OVERRIDE + void Reset() override { SetCombatMovement(false); KillCount = 0; @@ -84,7 +84,7 @@ public: Summons.DespawnAll(); } - void sQuestReward(Player* /*player*/, Quest const* quest, uint32 /*opt*/) OVERRIDE + void sQuestReward(Player* /*player*/, Quest const* quest, uint32 /*opt*/) override { if (quest->GetQuestId() == QUEST_CORRUPTED_SOIL) { @@ -93,7 +93,7 @@ public: } } - void sQuestAccept(Player* player, Quest const* quest) OVERRIDE + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_UNEXPECTED_RESULT) { @@ -104,12 +104,12 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_FIREBALL, 1000); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { // This is the best I can do because AttackStart does nothing summoned->GetMotionMaster()->MovePoint(1, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); @@ -117,13 +117,13 @@ public: Summons.Summon(summoned); } - void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override { Summons.Despawn(summoned); ++KillCount; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->setFaction(FACTION_NORMAL); @@ -132,7 +132,7 @@ public: player->FailQuest(QUEST_UNEXPECTED_RESULT); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (KillCount >= 3 && PlayerGUID) if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) @@ -175,7 +175,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_apprentice_mirvedaAI(creature); } @@ -190,6 +190,9 @@ enum InfusedCrystal // Quest QUEST_POWERING_OUR_DEFENSES = 8490, + // Quest Credit + QUEST_POD_CREDIT = 16364, + // Says EMOTE = 0, @@ -219,7 +222,7 @@ class npc_infused_crystal : public CreatureScript public: npc_infused_crystal() : CreatureScript("npc_infused_crystal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_infused_crystalAI(creature); } @@ -237,7 +240,7 @@ public: bool Progress; uint64 PlayerGUID; - void Reset() OVERRIDE + void Reset() override { EndTimer = 0; Completed = false; @@ -246,7 +249,7 @@ public: WaveTimer = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Progress && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 10.0f)) @@ -261,29 +264,22 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (PlayerGUID && !Completed) - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - player->FailQuest(QUEST_POWERING_OUR_DEFENSES); - } - - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (EndTimer < diff && Progress) { - Talk(EMOTE); Completed = true; if (PlayerGUID) if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - player->CompleteQuest(QUEST_POWERING_OUR_DEFENSES); - - me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + { + Talk(EMOTE, player); + player->KilledMonsterCredit(QUEST_POD_CREDIT); + } me->RemoveCorpse(); } else EndTimer -= diff; diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index a4f75ea23d4..68f41ce6588 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -64,7 +64,7 @@ public: { npc_ranger_lilathaAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -95,7 +95,7 @@ public: Summ1->Attack(me, true); Summ2->Attack(player, true); } - me->AI()->AttackStart(Summ1); + AttackStart(Summ1); } break; case 19: @@ -121,14 +121,14 @@ public: } } - void Reset() OVERRIDE + void Reset() override { if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) Cage->SetGoState(GO_STATE_READY); } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS) { @@ -140,7 +140,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ranger_lilathaAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index 9db6a6b4d19..390a64fb21c 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -60,9 +60,9 @@ public: { npc_oox09hlAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (who->GetEntry() == NPC_MARAUDING_OWL || who->GetEntry() == NPC_VILE_AMBUSHER) return; @@ -70,7 +70,7 @@ public: Talk(SAY_OOX_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); } @@ -86,7 +86,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -104,7 +104,7 @@ public: } } - void WaypointStart(uint32 pointId) OVERRIDE + void WaypointStart(uint32 pointId) override { switch (pointId) { @@ -112,8 +112,7 @@ public: for (uint8 i = 0; i < 3; ++i) { const Position src = {147.927444f, -3851.513428f, 130.893f, 0}; - Position dst; - me->GetRandomPoint(src, 7.0f, dst); + Position dst = me->GetRandomPoint(src, 7.0f); DoSummon(NPC_MARAUDING_OWL, dst, 25000, TEMPSUMMON_CORPSE_TIMED_DESPAWN); } break; @@ -121,8 +120,7 @@ public: for (uint8 i = 0; i < 3; ++i) { const Position src = {-141.151581f, -4291.213867f, 120.130f, 0}; - Position dst; - me->GetRandomPoint(src, 7.0f, dst); + Position dst = me->GetRandomPoint(src, 7.0f); me->SummonCreature(NPC_VILE_AMBUSHER, dst, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 25000); } break; @@ -130,7 +128,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_oox09hlAI(creature); } @@ -184,13 +182,13 @@ public: spawnId = 0; } - void Reset() OVERRIDE + void Reset() override { postEventCount = 0; postEventTimer = 3000; } - void JustRespawned() OVERRIDE + void JustRespawned() override { _IsByOutrunner = false; spawnId = 0; @@ -198,7 +196,7 @@ public: npc_escortAI::JustRespawned(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -232,7 +230,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->SetWalk(false); summoned->GetMotionMaster()->MovePoint(0, AmbushMoveTo[spawnId].posX, AmbushMoveTo[spawnId].posY, AmbushMoveTo[spawnId].posZ); @@ -249,7 +247,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -275,7 +273,7 @@ public: } } - void UpdateEscortAI(const uint32 diff) OVERRIDE + void UpdateEscortAI(const uint32 diff) override { //Check if we have a current target if (!UpdateVictim()) @@ -321,7 +319,7 @@ public: bool _IsByOutrunner; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_rinjiAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 65c070ffcf1..fc8fdf41f51 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -50,7 +50,7 @@ class npc_converted_sentry : public CreatureScript public: npc_converted_sentry() : CreatureScript("npc_converted_sentry") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_converted_sentryAI(creature); } @@ -62,17 +62,17 @@ public: bool Credit; uint32 Timer; - void Reset() OVERRIDE + void Reset() override { Credit = false; Timer = 2500; } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Credit) { @@ -104,7 +104,7 @@ class npc_greengill_slave : public CreatureScript public: npc_greengill_slave() : CreatureScript("npc_greengill_slave") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_greengill_slaveAI(creature); } @@ -113,9 +113,9 @@ public: { npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spellInfo) override { Player* player = caster->ToPlayer(); if (!player) @@ -136,7 +136,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { DoMeleeAttackIfReady(); } diff --git a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp index af0ec5aa4f5..1926a032aeb 100644 --- a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp +++ b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp @@ -50,7 +50,7 @@ class npc_mountaineer_pebblebitty : public CreatureScript public: npc_mountaineer_pebblebitty() : CreatureScript("npc_mountaineer_pebblebitty") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -86,7 +86,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index 08028cc5872..342bba3b729 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -47,7 +47,7 @@ public: { npc_corporal_keeshanAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { timer = 0; phase = 0; @@ -64,7 +64,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -91,7 +91,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (HasEscortState(STATE_ESCORT_NONE)) return; @@ -160,7 +160,7 @@ public: uint32 shieldBashTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_corporal_keeshanAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index b7ab4227e5e..68d34f109a5 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -67,7 +67,7 @@ public: { npc_deathstalker_erlandAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -108,15 +108,15 @@ public: } } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_AGGRO, who); } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCORTING) { @@ -129,7 +129,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_deathstalker_erlandAI(creature); } @@ -166,7 +166,7 @@ class pyrewood_ambush : public CreatureScript public: pyrewood_ambush() : CreatureScript("pyrewood_ambush") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest *quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest *quest) override { if (quest->GetQuestId() == QUEST_PYREWOOD_AMBUSH && !CAST_AI(pyrewood_ambush::pyrewood_ambushAI, creature->AI())->QuestInProgress) { @@ -179,7 +179,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new pyrewood_ambushAI(creature); } @@ -199,7 +199,7 @@ public: bool QuestInProgress; - void Reset() OVERRIDE + void Reset() override { WaitTimer = WAIT_SECS; @@ -212,15 +212,15 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { Summons.Summon(summoned); ++KillCount; } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { Summons.Despawn(summoned); --KillCount; @@ -245,7 +245,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (PlayerGUID) if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) @@ -253,7 +253,7 @@ public: player->FailQuest(QUEST_PYREWOOD_AMBUSH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //TC_LOG_INFO("scripts", "DEBUG: p(%i) k(%i) d(%u) W(%i)", Phase, KillCount, diff, WaitTimer); diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index 0cd1403d48a..e7e374ea26e 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -50,7 +50,7 @@ class npc_archmage_malin : public CreatureScript public: npc_archmage_malin() : CreatureScript("npc_archmage_malin") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -62,7 +62,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -91,7 +91,7 @@ class npc_bartleby : public CreatureScript public: npc_bartleby() : CreatureScript("npc_bartleby") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_BEAT) { @@ -101,7 +101,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bartlebyAI(creature); } @@ -115,13 +115,13 @@ public: uint32 m_uiNormalFaction; - void Reset() OVERRIDE + void Reset() override { if (me->getFaction() != m_uiNormalFaction) me->setFaction(m_uiNormalFaction); } - void AttackedBy(Unit* pAttacker) OVERRIDE + void AttackedBy(Unit* pAttacker) override { if (me->GetVictim()) return; @@ -132,7 +132,7 @@ public: AttackStart(pAttacker); } - void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override { if (uiDamage > me->GetHealth() || me->HealthBelowPctDamaged(15, uiDamage)) { @@ -161,7 +161,7 @@ class npc_lady_katrana_prestor : public CreatureScript public: npc_lady_katrana_prestor() : CreatureScript("npc_lady_katrana_prestor") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -186,7 +186,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -226,7 +226,7 @@ class npc_lord_gregor_lescovar : public CreatureScript public: npc_lord_gregor_lescovar() : CreatureScript("npc_lord_gregor_lescovar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lord_gregor_lescovarAI(creature); } @@ -240,7 +240,7 @@ public: uint64 MarzonGUID; - void Reset() OVERRIDE + void Reset() override { uiTimer = 0; uiPhase = 0; @@ -248,27 +248,27 @@ public: MarzonGUID = 0; } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->DisappearAndDie(); - if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID)) + if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID)) { if (pMarzon->IsAlive()) pMarzon->DisappearAndDie(); } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { - if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID)) + if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID)) { if (pMarzon->IsAlive() && !pMarzon->IsInCombat()) pMarzon->AI()->AttackStart(who); } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -305,7 +305,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (uiPhase) { @@ -335,7 +335,7 @@ public: uiPhase = 0; break; case 5: - if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID)) + if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID)) pMarzon->AI()->Talk(SAY_MARZON_1); uiTimer = 3000; uiPhase = 6; @@ -350,7 +350,7 @@ public: case 7: if (Creature* pTyrion = me->FindNearestCreature(NPC_TYRION, 20.0f, true)) pTyrion->AI()->Talk(SAY_TYRION_2); - if (Creature* pMarzon = Unit::GetCreature(*me, MarzonGUID)) + if (Creature* pMarzon = ObjectAccessor::GetCreature(*me, MarzonGUID)) pMarzon->setFaction(14); me->setFaction(14); uiTimer = 0; @@ -378,7 +378,7 @@ class npc_marzon_silent_blade : public CreatureScript public: npc_marzon_silent_blade() : CreatureScript("npc_marzon_silent_blade") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_marzon_silent_bladeAI(creature); } @@ -390,12 +390,12 @@ public: me->SetWalk(true); } - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_MARZON_2); @@ -409,7 +409,7 @@ public: } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->DisappearAndDie(); @@ -423,7 +423,7 @@ public: } } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -445,7 +445,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -479,7 +479,7 @@ class npc_tyrion_spybot : public CreatureScript public: npc_tyrion_spybot() : CreatureScript("npc_tyrion_spybot") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tyrion_spybotAI(creature); } @@ -491,13 +491,13 @@ public: uint32 uiTimer; uint32 uiPhase; - void Reset() OVERRIDE + void Reset() override { uiTimer = 0; uiPhase = 0; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -521,7 +521,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (uiPhase) { @@ -541,7 +541,7 @@ public: uiPhase = 3; break; case 3: - me->UpdateEntry(NPC_PRIESTESS_TYRIONA, ALLIANCE); + me->UpdateEntry(NPC_PRIESTESS_TYRIONA); uiTimer = 2000; uiPhase = 4; break; @@ -617,7 +617,7 @@ class npc_tyrion : public CreatureScript public: npc_tyrion() : CreatureScript("npc_tyrion") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_THE_ATTACK) { diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp index 6cfef015450..b52cb9fa1bf 100644 --- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp @@ -41,7 +41,7 @@ class npc_yenniku : public CreatureScript public: npc_yenniku() : CreatureScript("npc_yenniku") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_yennikuAI(creature); } @@ -56,13 +56,13 @@ public: uint32 Reset_Timer; bool bReset; - void Reset() OVERRIDE + void Reset() override { Reset_Timer = 0; me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (bReset || spell->Id != 3607) return; @@ -82,9 +82,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bReset) { @@ -100,7 +100,7 @@ public: if (me->IsInCombat() && me->GetVictim()) { - if (Player* player = me->GetVictim()->ToPlayer()) + if (Player* player = me->EnsureVictim()->ToPlayer()) { if (player->GetTeam() == HORDE) { diff --git a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp index 9232a7962e3..20e9f28e0b7 100644 --- a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp +++ b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp @@ -50,12 +50,12 @@ public: Reset(); } - void Reset() OVERRIDE + void Reset() override { periodicSay = 6000; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) Talk(SAY_ATTACKED, who); @@ -70,7 +70,7 @@ public: } } - void WaypointStart(uint32 uiPointId) OVERRIDE + void WaypointStart(uint32 uiPointId) override { switch (uiPointId) { @@ -94,7 +94,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -115,7 +115,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -139,7 +139,7 @@ public: uint32 periodicSay; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_galen_goodwardAI(creature); } diff --git a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp index 925d0d73a70..6a4cb1e0196 100644 --- a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp +++ b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp @@ -50,7 +50,7 @@ class npc_calvin_montague : public CreatureScript public: npc_calvin_montague() : CreatureScript("npc_calvin_montague") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_590) { @@ -61,7 +61,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_calvin_montagueAI(creature); } @@ -74,7 +74,7 @@ public: uint32 m_uiPhaseTimer; uint64 m_uiPlayerGUID; - void Reset() OVERRIDE + void Reset() override { m_uiPhase = 0; m_uiPhaseTimer = 5000; @@ -86,9 +86,9 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackedBy(Unit* pAttacker) OVERRIDE + void AttackedBy(Unit* pAttacker) override { if (me->GetVictim() || me->IsFriendlyTo(pAttacker)) return; @@ -96,7 +96,7 @@ public: AttackStart(pAttacker); } - void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override { if (uiDamage > me->GetHealth() || me->HealthBelowPctDamaged(15, uiDamage)) { @@ -113,7 +113,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (m_uiPhase) { @@ -172,17 +172,18 @@ class go_mausoleum_door : public GameObjectScript public: go_mausoleum_door() : GameObjectScript("go_mausoleum_door") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE) return false; - if (GameObject* pTrigger = player->FindNearestGameObject(GO_TRIGGER, 30.0f)) - { - pTrigger->SetGoState(GO_STATE_READY); - player->SummonCreature(NPC_ULAG, 2390.26f, 336.47f, 40.01f, 2.26f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300000); - return false; - } + if (!player->FindNearestCreature(NPC_ULAG, 50.0f)) + if (GameObject* pTrigger = player->FindNearestGameObject(GO_TRIGGER, 30.0f)) + { + pTrigger->SetGoState(GO_STATE_READY); + player->SummonCreature(NPC_ULAG, 2390.26f, 336.47f, 40.01f, 2.26f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300000); + return false; + } return false; } @@ -193,7 +194,7 @@ class go_mausoleum_trigger : public GameObjectScript public: go_mausoleum_trigger() : GameObjectScript("go_mausoleum_trigger") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_ULAG) != QUEST_STATUS_INCOMPLETE) return false; diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 652189a8eea..0958a9141f0 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -77,7 +77,7 @@ class npc_lady_sylvanas_windrunner : public CreatureScript public: npc_lady_sylvanas_windrunner() : CreatureScript("npc_lady_sylvanas_windrunner") { } - bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) OVERRIDE + bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override { if (_Quest->GetQuestId() == QUEST_JOURNEY_TO_UNDERCITY) { @@ -92,7 +92,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lady_sylvanas_windrunnerAI(creature); } @@ -111,7 +111,7 @@ public: uint32 ShotTimer; uint32 MultiShotTimer; - void Reset() OVERRIDE + void Reset() override { LamentEventTimer = 5000; LamentEvent = false; @@ -124,13 +124,13 @@ public: MultiShotTimer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == ENTRY_HIGHBORNE_BUNNY) { - if (Creature* target = Unit::GetCreature(*summoned, targetGUID)) + if (Creature* target = ObjectAccessor::GetCreature(*summoned, targetGUID)) { target->MonsterMoveWithSpeed(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0); target->SetPosition(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0.0f); @@ -142,7 +142,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (LamentEvent) { @@ -224,7 +224,7 @@ class npc_highborne_lamenter : public CreatureScript public: npc_highborne_lamenter() : CreatureScript("npc_highborne_lamenter") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_highborne_lamenterAI(creature); } @@ -238,7 +238,7 @@ public: bool EventMove; bool EventCast; - void Reset() OVERRIDE + void Reset() override { EventMoveTimer = 10000; EventCastTimer = 17500; @@ -246,9 +246,9 @@ public: EventCast = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (EventMove) { @@ -290,7 +290,7 @@ class npc_parqual_fintallas : public CreatureScript public: npc_parqual_fintallas() : CreatureScript("npc_parqual_fintallas") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -306,7 +306,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 56961d2fb02..43a66c813a3 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -53,7 +53,7 @@ class npcs_dithers_and_arbington : public CreatureScript public: npcs_dithers_and_arbington() : CreatureScript("npcs_dithers_and_arbington") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -85,7 +85,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -126,7 +126,7 @@ class npc_myranda_the_hag : public CreatureScript public: npc_myranda_the_hag() : CreatureScript("npc_myranda_the_hag") { } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -137,7 +137,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -165,7 +165,7 @@ class npc_the_scourge_cauldron : public CreatureScript public: npc_the_scourge_cauldron() : CreatureScript("npc_the_scourge_cauldron") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_the_scourge_cauldronAI(creature); } @@ -174,9 +174,9 @@ public: { npc_the_scourge_cauldronAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void DoDie() { @@ -188,7 +188,7 @@ public: me->SetRespawnDelay(600); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) return; @@ -250,7 +250,7 @@ class npc_andorhal_tower : public CreatureScript public: npc_andorhal_tower() : CreatureScript("npc_andorhal_tower") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_andorhal_towerAI(creature); } @@ -262,7 +262,7 @@ public: SetCombatMovement(false); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || who->GetTypeId() != TYPEID_PLAYER) @@ -301,7 +301,7 @@ class npc_anchorite_truuen : public CreatureScript public: npc_anchorite_truuen() : CreatureScript("npc_anchorite_truuen") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { npc_escortAI* pEscortAI = CAST_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI()); @@ -310,7 +310,7 @@ public: return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_anchorite_truuenAI(creature); } @@ -327,18 +327,18 @@ public: Creature* Ughost; Creature* Theldanis; - void Reset() OVERRIDE + void Reset() override { m_uiChatTimer = 7000; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_GHOUL) summoned->AI()->AttackStart(me); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); @@ -392,15 +392,15 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_TOMB_LIGHTBRINGER); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); DoMeleeAttackIfReady(); diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp index 350ceead706..7f0fbd8f97b 100644 --- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp +++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp @@ -19,13 +19,12 @@ /* ScriptData SDName: Westfall SD%Complete: 90 -SDComment: Quest support: 155, 1651 +SDComment: Quest support: 1651 SDCategory: Westfall EndScriptData */ /* ContentData npc_daphne_stilwell -npc_defias_traitor EndContentData */ #include "ScriptMgr.h" @@ -64,7 +63,7 @@ class npc_daphne_stilwell : public CreatureScript public: npc_daphne_stilwell() : CreatureScript("npc_daphne_stilwell") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_TOME_VALOR) { @@ -77,7 +76,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_daphne_stilwellAI(creature); } @@ -89,7 +88,7 @@ public: uint32 uiWPHolder; uint32 uiShootTimer; - void Reset() OVERRIDE + void Reset() override { if (HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -112,7 +111,7 @@ public: uiShootTimer = 0; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -164,7 +163,7 @@ public: } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -179,7 +178,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -202,79 +201,7 @@ public: }; }; -/*###### -## npc_defias_traitor -######*/ -enum DefiasSays -{ - SAY_START = 0, - SAY_PROGRESS = 1, - SAY_END = 2, - SAY_AGGRO = 3 -}; - - -#define QUEST_DEFIAS_BROTHERHOOD 155 - -class npc_defias_traitor : public CreatureScript -{ -public: - npc_defias_traitor() : CreatureScript("npc_defias_traitor") { } - - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE - { - if (quest->GetQuestId() == QUEST_DEFIAS_BROTHERHOOD) - { - if (npc_escortAI* pEscortAI = CAST_AI(npc_defias_traitor::npc_defias_traitorAI, creature->AI())) - pEscortAI->Start(true, true, player->GetGUID()); - - creature->AI()->Talk(SAY_START, player); - } - - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_defias_traitorAI(creature); - } - - struct npc_defias_traitorAI : public npc_escortAI - { - npc_defias_traitorAI(Creature* creature) : npc_escortAI(creature) { Reset(); } - - void WaypointReached(uint32 waypointId) OVERRIDE - { - Player* player = GetPlayerForEscort(); - if (!player) - return; - - switch (waypointId) - { - case 35: - SetRun(false); - break; - case 36: - Talk(SAY_PROGRESS, player); - break; - case 44: - Talk(SAY_END, player); - player->GroupEventHappens(QUEST_DEFIAS_BROTHERHOOD, me); - break; - } - } - - void EnterCombat(Unit* who) OVERRIDE - { - Talk(SAY_AGGRO, who); - } - - void Reset() OVERRIDE { } - }; -}; - void AddSC_westfall() { new npc_daphne_stilwell(); - new npc_defias_traitor(); } diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp index a7feb2b7c43..e6c844b1b1e 100644 --- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp @@ -52,7 +52,7 @@ class npc_tapoke_slim_jahn : public CreatureScript public: npc_tapoke_slim_jahn() : CreatureScript("npc_tapoke_slim_jahn") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tapoke_slim_jahnAI(creature); } @@ -63,13 +63,13 @@ public: bool IsFriendSummoned; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) IsFriendSummoned = false; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -82,7 +82,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (HasEscortState(STATE_ESCORT_ESCORTING) && !IsFriendSummoned && GetPlayerForEscort()) { @@ -93,13 +93,13 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Player* player = GetPlayerForEscort()) summoned->AI()->AttackStart(player); } - void AttackedBy(Unit* pAttacker) OVERRIDE + void AttackedBy(Unit* pAttacker) override { if (me->GetVictim()) return; @@ -110,7 +110,7 @@ public: AttackStart(pAttacker); } - void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) override { if (HealthBelowPct(20)) { @@ -141,7 +141,7 @@ class npc_mikhail : public CreatureScript public: npc_mikhail() : CreatureScript("npc_mikhail") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT11) { diff --git a/src/server/scripts/Events/CMakeLists.txt b/src/server/scripts/Events/CMakeLists.txt index e45bc585007..3bdb6e6eac2 100644 --- a/src/server/scripts/Events/CMakeLists.txt +++ b/src/server/scripts/Events/CMakeLists.txt @@ -8,9 +8,11 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +file(GLOB_RECURSE sources_Events Events/*.cpp Events/*.h) + set(scripts_STAT_SRCS ${scripts_STAT_SRCS} - Events/childrens_week.cpp + ${sources_Events} ) message(" -> Prepared: Events") diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp index 92e70cd028b..353b5ab9501 100644 --- a/src/server/scripts/Events/childrens_week.cpp +++ b/src/server/scripts/Events/childrens_week.cpp @@ -160,7 +160,7 @@ class npc_winterfin_playmate : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -259,7 +259,7 @@ class npc_snowfall_glade_playmate : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -308,7 +308,7 @@ class npc_snowfall_glade_playmate : public CreatureScript break; case 4: orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_2); - orphan->AI()->DoCast(me, SPELL_SNOWBALL); + orphan->CastSpell(me, SPELL_SNOWBALL); timer = 5000; break; case 5: @@ -360,7 +360,7 @@ class npc_the_biggest_tree : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -447,7 +447,7 @@ class npc_high_oracle_soo_roo : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -536,7 +536,7 @@ class npc_elder_kekek : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -625,7 +625,7 @@ class npc_the_etymidian : public CreatureScript orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -721,7 +721,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript orphanGUID = 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { // Existing SmartAI if (type == 0) @@ -738,7 +738,7 @@ class npc_alexstraza_the_lifebinder : public CreatureScript } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) @@ -933,7 +933,7 @@ class npc_cw_area_trigger : public CreatureScript me->SetDisplayId(DISPLAY_INVISIBLE); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who && me->GetDistance2d(who) < 20.0f) @@ -1030,13 +1030,13 @@ class npc_grizzlemaw_cw_trigger : public CreatureScript me->SetDisplayId(DISPLAY_INVISIBLE); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who && who->GetDistance2d(me) < 10.0f) if (Player* player = who->ToPlayer()) if (player->GetQuestStatus(QUEST_HOME_OF_THE_BEAR_MEN) == QUEST_STATUS_INCOMPLETE) - if (Creature* orphan = Creature::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR))) + if (Creature* orphan = ObjectAccessor::GetCreature(*me, getOrphanGUID(player, ORPHAN_WOLVAR))) { player->AreaExploredOrEventHappens(QUEST_HOME_OF_THE_BEAR_MEN); orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_10); diff --git a/src/server/scripts/Examples/example_commandscript.cpp b/src/server/scripts/Examples/example_commandscript.cpp index eb87a58be77..8b7003c6666 100644 --- a/src/server/scripts/Examples/example_commandscript.cpp +++ b/src/server/scripts/Examples/example_commandscript.cpp @@ -43,7 +43,7 @@ class example_commandscript : public CommandScript return true; } - ChatCommand* GetCommands() const OVERRIDE + ChatCommand* GetCommands() const override { static ChatCommand HelloWorldCommandTable[] = { diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp index 1ef0290af53..d573241137f 100644 --- a/src/server/scripts/Examples/example_creature.cpp +++ b/src/server/scripts/Examples/example_creature.cpp @@ -111,7 +111,7 @@ class example_creature : public CreatureScript // *** HANDLED FUNCTION *** //This is called after spawn and whenever the core decides we need to evade - void Reset() OVERRIDE + void Reset() override { m_uiPhase = 1; // Start in phase 1 m_uiPhaseTimer = 60000; // 60 seconds @@ -125,7 +125,7 @@ class example_creature : public CreatureScript // *** HANDLED FUNCTION *** // Enter Combat called once per combat - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { //Say some stuff Talk(SAY_AGGRO, who); @@ -134,21 +134,21 @@ class example_creature : public CreatureScript // *** HANDLED FUNCTION *** // Attack Start is called when victim change (including at start of combat) // By default, attack who and start movement toward the victim. - //void AttackStart(Unit* who) OVERRIDE + //void AttackStart(Unit* who) override //{ // ScriptedAI::AttackStart(who); //} // *** HANDLED FUNCTION *** // Called when going out of combat. Reset is called just after. - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { Talk(SAY_EVADE); } // *** HANDLED FUNCTION *** //Our Receive emote function - void ReceiveEmote(Player* /*player*/, uint32 uiTextEmote) OVERRIDE + void ReceiveEmote(Player* /*player*/, uint32 uiTextEmote) override { me->HandleEmoteCommand(uiTextEmote); @@ -165,7 +165,7 @@ class example_creature : public CreatureScript // *** HANDLED FUNCTION *** //Update AI is called Every single map update (roughly once every 50ms if a player is within the grid) - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Out of combat timers if (!me->GetVictim()) @@ -262,12 +262,12 @@ class example_creature : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new example_creatureAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->SEND_GOSSIP_MENU(907, creature->GetGUID()); @@ -275,7 +275,7 @@ class example_creature : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) diff --git a/src/server/scripts/Examples/example_escort.cpp b/src/server/scripts/Examples/example_escort.cpp index 57fe27ad041..88188a45296 100644 --- a/src/server/scripts/Examples/example_escort.cpp +++ b/src/server/scripts/Examples/example_escort.cpp @@ -79,13 +79,13 @@ class example_escort : public CreatureScript uint32 m_uiDeathCoilTimer; uint32 m_uiChatTimer; - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } // Pure Virtual Functions (Have to be implemented) - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -108,7 +108,7 @@ class example_escort : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -119,13 +119,13 @@ class example_escort : public CreatureScript Talk(SAY_AGGRO2); } - void Reset() OVERRIDE + void Reset() override { m_uiDeathCoilTimer = 4000; m_uiChatTimer = 4000; } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -142,7 +142,7 @@ class example_escort : public CreatureScript Talk(SAY_DEATH_3); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Must update npc_escortAI npc_escortAI::UpdateAI(uiDiff); @@ -186,12 +186,12 @@ class example_escort : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new example_escortAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->TalkedToCreature(creature->GetEntry(), creature->GetGUID()); player->PrepareGossipMenu(creature, 0); @@ -205,7 +205,7 @@ class example_escort : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); npc_escortAI* pEscortAI = CAST_AI(example_escort::example_escortAI, creature->AI()); diff --git a/src/server/scripts/Examples/example_gossip_codebox.cpp b/src/server/scripts/Examples/example_gossip_codebox.cpp index 4ab39f429b1..801159ff6ae 100644 --- a/src/server/scripts/Examples/example_gossip_codebox.cpp +++ b/src/server/scripts/Examples/example_gossip_codebox.cpp @@ -55,7 +55,7 @@ class example_gossip_codebox : public CreatureScript { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); @@ -65,7 +65,7 @@ class example_gossip_codebox : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+2) @@ -78,7 +78,7 @@ class example_gossip_codebox : public CreatureScript return true; } - bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) OVERRIDE + bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) override { player->PlayerTalkClass->ClearMenus(); if (sender == GOSSIP_SENDER_MAIN) diff --git a/src/server/scripts/Examples/example_misc.cpp b/src/server/scripts/Examples/example_misc.cpp index 938a5f9e623..1cf0d1375be 100644 --- a/src/server/scripts/Examples/example_misc.cpp +++ b/src/server/scripts/Examples/example_misc.cpp @@ -35,7 +35,7 @@ class AT_example_areatrigger : public AreaTriggerScript { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { player->Kill(player); return true; @@ -51,7 +51,7 @@ class ItemUse_example_item : public ItemScript { } - bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) OVERRIDE + bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) override { sScriptMgr->LoadDatabase(); return true; @@ -67,7 +67,7 @@ class GOHello_example_go_teleporter : public GameObjectScript { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { player->TeleportTo(0, 1807.07f, 336.105f, 70.3975f, 0.0f); return false; diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp index 9bf91d08ac0..9097f7cd650 100644 --- a/src/server/scripts/Examples/example_spell.cpp +++ b/src/server/scripts/Examples/example_spell.cpp @@ -50,7 +50,7 @@ class spell_ex_5581 : public SpellScriptLoader // function called on server startup // checks if script has data required for it to work - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { // check if spellid 70522 exists in dbc, we will trigger it later if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED)) @@ -60,7 +60,7 @@ class spell_ex_5581 : public SpellScriptLoader // function called just after script is added to spell // we initialize local variables if needed - bool Load() OVERRIDE + bool Load() override { localVariable = "we're using local variable"; localVariable2 = new char(); @@ -73,7 +73,7 @@ class spell_ex_5581 : public SpellScriptLoader // function called just before script delete // we free allocated memory - void Unload() OVERRIDE + void Unload() override { delete localVariable2; } @@ -159,7 +159,7 @@ class spell_ex_5581 : public SpellScriptLoader } // register functions used in spell script - names of these functions do not matter - void Register() OVERRIDE + void Register() override { // we're registering our functions here BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast); @@ -192,7 +192,7 @@ class spell_ex_5581 : public SpellScriptLoader }; // function which creates SpellScript - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ex_5581SpellScript(); } @@ -208,7 +208,7 @@ class spell_ex_66244 : public SpellScriptLoader PrepareAuraScript(spell_ex_66244AuraScript); // function called on server startup // checks if script has data required for it to work - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { // check if spellid exists in dbc, we will trigger it later if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED)) @@ -218,7 +218,7 @@ class spell_ex_66244 : public SpellScriptLoader // function called in aura constructor // we initialize local variables if needed - bool Load() OVERRIDE + bool Load() override { // do not load script if aura is cast by player or caster not avalible if (Unit* caster = GetCaster()) @@ -316,7 +316,7 @@ class spell_ex_66244 : public SpellScriptLoader } // function registering - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -347,7 +347,7 @@ class spell_ex_66244 : public SpellScriptLoader }; // function which creates AuraScript - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ex_66244AuraScript(); } @@ -379,7 +379,7 @@ class spell_ex_absorb_aura : public SpellScriptLoader } // function registering - void Register() OVERRIDE + void Register() override { OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0); AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0); @@ -387,7 +387,7 @@ class spell_ex_absorb_aura : public SpellScriptLoader }; // function which creates AuraScript - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ex_absorb_auraAuraScript(); } @@ -408,14 +408,14 @@ class spell_ex_463 : public SpellScriptLoader // in our script we allow only players to be affected return target->GetTypeId() == TYPEID_PLAYER; } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget); } }; // function which creates AuraScript - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ex_463AuraScript(); } @@ -440,18 +440,18 @@ class spell_ex : public SpellScriptLoader { PrepareSpellScript(spell_ex_SpellScript); - //bool Validate(SpellInfo const* spellEntry){return true;} OVERRIDE + //bool Validate(SpellInfo const* spellEntry){return true;} override //bool Load(){return true;} //void Unload(){ } //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY); //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function); - void Register() OVERRIDE + void Register() override { } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ex_SpellScript(); } @@ -467,7 +467,7 @@ class spell_ex : public SpellScriptLoader class spell_ex_AuraScript : public AuraScript { PrepareAuraScript(spell_ex) - //bool Validate(SpellInfo const* spellEntry){return true;} OVERRIDE + //bool Validate(SpellInfo const* spellEntry){return true;} override //bool Load(){return true;} //void Unload(){ } @@ -478,12 +478,12 @@ class spell_ex : public SpellScriptLoader //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY); //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY); //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY); - void Register() OVERRIDE + void Register() override { } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ex_AuraScript(); } diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index c7ef191cf8f..e7beb4cf454 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -38,7 +38,7 @@ class go_blackfathom_altar : public GameObjectScript public: go_blackfathom_altar() : GameObjectScript("go_blackfathom_altar") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM)) player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player); @@ -51,7 +51,7 @@ class go_blackfathom_fire : public GameObjectScript public: go_blackfathom_fire() : GameObjectScript("go_blackfathom_fire") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); @@ -71,7 +71,7 @@ class npc_blackfathom_deeps_event : public CreatureScript public: npc_blackfathom_deeps_event() : CreatureScript("npc_blackfathom_deeps_event") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_blackfathom_deeps_eventAI>(creature); } @@ -97,7 +97,7 @@ public: bool Flee; - void Reset() OVERRIDE + void Reset() override { Flee = false; @@ -130,7 +130,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -179,7 +179,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->IsSummon()) //we are not a normal spawn. instance->SetData(DATA_EVENT, instance->GetData(DATA_EVENT) + 1); @@ -207,7 +207,7 @@ public: Start(false, false, 0); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -220,13 +220,13 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { DoCast(player, SPELL_TELEPORT_DARNASSUS); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_morriduneAI(creature); } diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp index dfff92b8f05..f6c34c6b555 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp @@ -40,24 +40,24 @@ public: { boss_aku_maiAI(Creature* creature) : BossAI(creature, TYPE_AKU_MAI) { } - void Reset() OVERRIDE + void Reset() override { IsEnraged = false; _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_POISON_CLOUD, urand(5000, 9000)); _EnterCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -90,7 +90,7 @@ public: bool IsEnraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_aku_maiAI(creature); } diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp index 8d2ced59276..9e25de817fa 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp @@ -29,7 +29,7 @@ class boss_gelihast : public CreatureScript public: boss_gelihast() : CreatureScript("boss_gelihast") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gelihastAI>(creature); } @@ -45,23 +45,23 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { netTimer = urand(2000, 4000); instance->SetData(TYPE_GELIHAST, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(TYPE_GELIHAST, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_GELIHAST, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp index 3ded27bd42a..37fac0fa7de 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp @@ -34,7 +34,7 @@ class boss_kelris : public CreatureScript public: boss_kelris() : CreatureScript("boss_kelris") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kelrisAI>(creature); } @@ -51,26 +51,26 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { mindBlastTimer = urand(2000, 5000); sleepTimer = urand(9000, 12000); instance->SetData(TYPE_KELRIS, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(TYPE_KELRIS, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(TYPE_KELRIS, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 2c9c94d9724..940da4fcf52 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -57,7 +57,7 @@ class instance_blackfathom_deeps : public InstanceMapScript public: instance_blackfathom_deeps() : InstanceMapScript("instance_blackfathom_deeps", 48) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blackfathom_deeps_InstanceMapScript(map); } @@ -79,7 +79,7 @@ public: uint8 countFires; uint8 deathTimes; - void Initialize() OVERRIDE + void Initialize() override { memset(&encounter, 0, sizeof(encounter)); @@ -95,7 +95,7 @@ public: deathTimes = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -108,7 +108,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -142,7 +142,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -212,7 +212,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -233,7 +233,7 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index c7803f23e1b..7aaa2239745 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -45,7 +45,7 @@ class boss_anetheron : public CreatureScript public: boss_anetheron() : CreatureScript("boss_anetheron") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_anetheronAI>(creature); } @@ -64,7 +64,7 @@ public: uint32 InfernoTimer; bool go; - void Reset() OVERRIDE + void Reset() override { damageTaken = 0; SwarmTimer = 45000; @@ -76,7 +76,7 @@ public: instance->SetData(DATA_ANETHERONEVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (IsEvent) instance->SetData(DATA_ANETHERONEVENT, IN_PROGRESS); @@ -84,23 +84,23 @@ public: Talk(SAY_ONAGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_ONSLAY); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { hyjal_trashAI::JustDied(killer); if (IsEvent) @@ -108,7 +108,7 @@ public: Talk(SAY_ONDEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsEvent) { @@ -176,7 +176,7 @@ class npc_towering_infernal : public CreatureScript public: npc_towering_infernal() : CreatureScript("npc_towering_infernal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_towering_infernalAI>(creature); } @@ -185,6 +185,8 @@ public: { npc_towering_infernalAI(Creature* creature) : ScriptedAI(creature) { + ImmolationTimer = 5000; + CheckTimer = 5000; instance = creature->GetInstanceScript(); AnetheronGUID = instance->GetData64(DATA_ANETHERON); } @@ -194,33 +196,33 @@ public: uint64 AnetheronGUID; InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_INFERNO_EFFECT); ImmolationTimer = 5000; CheckTimer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->IsWithinDist(who, 50) && !me->IsInCombat() && me->IsValidAttackTarget(who)) AttackStart(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckTimer <= diff) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 4fa9af466b1..d86e3342cf0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -81,7 +81,7 @@ class npc_ancient_wisp : public CreatureScript public: npc_ancient_wisp() : CreatureScript("npc_ancient_wisp") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ancient_wispAI>(creature); } @@ -98,7 +98,7 @@ public: uint64 ArchimondeGUID; uint32 CheckTimer; - void Reset() OVERRIDE + void Reset() override { CheckTimer = 1000; @@ -107,18 +107,18 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { damage = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckTimer <= diff) { - if (Unit* Archimonde = Unit::GetUnit(*me, ArchimondeGUID)) + if (Unit* Archimonde = ObjectAccessor::GetUnit(*me, ArchimondeGUID)) { if (Archimonde->HealthBelowPct(2) || !Archimonde->IsAlive()) DoCast(me, SPELL_DENOUEMENT_WISP); @@ -138,7 +138,7 @@ class npc_doomfire : public CreatureScript public: npc_doomfire() : CreatureScript("npc_doomfire") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_doomfireAI(creature); } @@ -147,13 +147,13 @@ public: { npc_doomfireAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { damage = 0; } @@ -167,7 +167,7 @@ class npc_doomfire_targetting : public CreatureScript public: npc_doomfire_targetting() : CreatureScript("npc_doomfire_targetting") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_doomfire_targettingAI(creature); } @@ -179,13 +179,13 @@ public: uint64 TargetGUID; uint32 ChangeTargetTimer; - void Reset() OVERRIDE + void Reset() override { TargetGUID = 0; ChangeTargetTimer = 5000; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { //will update once TargetGUID is 0. In case noone actually moves(not likely) and this is 0 @@ -194,26 +194,25 @@ public: TargetGUID = who->GetGUID(); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { damage = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (ChangeTargetTimer <= diff) { - if (Unit* temp = Unit::GetUnit(*me, TargetGUID)) + if (Unit* temp = ObjectAccessor::GetUnit(*me, TargetGUID)) { me->GetMotionMaster()->MoveFollow(temp, 0.0f, 0.0f); TargetGUID = 0; } else { - Position pos; - me->GetRandomNearPosition(pos, 40); + Position pos = me->GetRandomNearPosition(40); me->GetMotionMaster()->MovePoint(0, pos.m_positionX, pos.m_positionY, pos.m_positionZ); } @@ -236,7 +235,7 @@ class boss_archimonde : public CreatureScript public: boss_archimonde() : CreatureScript("boss_archimonde") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_archimondeAI>(creature); } @@ -272,7 +271,7 @@ public: bool HasProtected; bool IsChanneling; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_ARCHIMONDEEVENT, NOT_STARTED); @@ -300,7 +299,7 @@ public: IsChanneling = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->InterruptSpell(CURRENT_CHANNELED_SPELL); Talk(SAY_AGGRO); @@ -309,7 +308,7 @@ public: instance->SetData(DATA_ARCHIMONDEEVENT, IN_PROGRESS); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { Talk(SAY_SLAY); @@ -342,7 +341,7 @@ public: ++SoulChargeCount; } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { hyjal_trashAI::JustDied(killer); Talk(SAY_DEATH); @@ -365,7 +364,7 @@ public: ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); for (; itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && unit->IsAlive()) targets.push_back(unit); } @@ -386,7 +385,7 @@ public: return false; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == CREATURE_ANCIENT_WISP) summoned->AI()->AttackStart(me); @@ -407,7 +406,7 @@ public: summoned->CastSpell(summoned, SPELL_DOOMFIRE_SPAWN, false); summoned->CastSpell(summoned, SPELL_DOOMFIRE, true, 0, 0, me->GetGUID()); - if (Unit* DoomfireSpirit = Unit::GetUnit(*me, DoomfireSpiritGUID)) + if (Unit* DoomfireSpirit = ObjectAccessor::GetUnit(*me, DoomfireSpiritGUID)) { summoned->GetMotionMaster()->MoveFollow(DoomfireSpirit, 0.0f, 0.0f); DoomfireSpiritGUID = 0; @@ -463,7 +462,7 @@ public: SoulChargeTimer = urand(2000, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) { @@ -488,7 +487,7 @@ public: if (temp) WorldTreeGUID = temp->GetGUID(); - if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID)) + if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID)) { Nordrassil->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Nordrassil->SetDisplayId(11686); @@ -497,7 +496,7 @@ public: } } - if (Unit* Nordrassil = Unit::GetUnit(*me, WorldTreeGUID)) + if (Unit* Nordrassil = ObjectAccessor::GetUnit(*me, WorldTreeGUID)) { Nordrassil->CastSpell(me, SPELL_DRAIN_WORLD_TREE_2, true); DrainNordrassilTimer = 1000; @@ -631,7 +630,7 @@ public: DoMeleeAttackIfReady(); } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE { } + void WaypointReached(uint32 /*waypointId*/) override { } }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 4decce7482f..c9e010e4159 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -46,7 +46,7 @@ class boss_azgalor : public CreatureScript public: boss_azgalor() : CreatureScript("boss_azgalor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_azgalorAI>(creature); } @@ -68,7 +68,7 @@ public: bool go; - void Reset() OVERRIDE + void Reset() override { damageTaken = 0; RainTimer = 20000; @@ -82,7 +82,7 @@ public: instance->SetData(DATA_AZGALOREVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (IsEvent) instance->SetData(DATA_AZGALOREVENT, IN_PROGRESS); @@ -90,22 +90,22 @@ public: Talk(SAY_ONAGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ONSLAY); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && instance) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { hyjal_trashAI::JustDied(killer); if (IsEvent) @@ -113,7 +113,7 @@ public: Talk(SAY_ONDEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsEvent) { @@ -182,7 +182,7 @@ class npc_lesser_doomguard : public CreatureScript public: npc_lesser_doomguard() : CreatureScript("npc_lesser_doomguard") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_lesser_doomguardAI>(creature); } @@ -191,6 +191,9 @@ public: { npc_lesser_doomguardAI(Creature* creature) : hyjal_trashAI(creature) { + CrippleTimer = 50000; + WarstompTimer = 10000; + CheckTimer = 5000; instance = creature->GetInstanceScript(); AzgalorGUID = instance->GetData64(DATA_AZGALOR); } @@ -201,7 +204,7 @@ public: uint64 AzgalorGUID; InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { CrippleTimer = 50000; WarstompTimer = 10000; @@ -209,30 +212,30 @@ public: CheckTimer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE + void WaypointReached(uint32 /*waypointId*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->IsWithinDist(who, 50) && !me->IsInCombat() && me->IsValidAttackTarget(who)) AttackStart(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckTimer <= diff) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index af7b0c1d899..5266f2b22c5 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -47,7 +47,7 @@ class boss_kazrogal : public CreatureScript public: boss_kazrogal() : CreatureScript("boss_kazrogal") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kazrogalAI>(creature); } @@ -66,7 +66,7 @@ public: uint32 MarkTimerBase; bool go; - void Reset() OVERRIDE + void Reset() override { damageTaken = 0; CleaveTimer = 5000; @@ -78,29 +78,29 @@ public: instance->SetData(DATA_KAZROGALEVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (IsEvent) instance->SetData(DATA_KAZROGALEVENT, IN_PROGRESS); Talk(SAY_ONAGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ONSLAY); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && instance) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { hyjal_trashAI::JustDied(killer); if (IsEvent) @@ -108,7 +108,7 @@ public: DoPlaySoundToSet(me, SOUND_ONDEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsEvent) { @@ -188,7 +188,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader targets.remove_if(MarkTargetFilter()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_kazrogal_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } @@ -198,7 +198,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader { PrepareAuraScript(spell_mark_of_kazrogal_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MARK_DAMAGE)) return false; @@ -217,7 +217,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazrogal_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH); } @@ -228,7 +228,7 @@ class spell_mark_of_kazrogal : public SpellScriptLoader return new spell_mark_of_kazrogal_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mark_of_kazrogal_AuraScript(); } 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 691207a4682..9ac5034d954 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp @@ -42,7 +42,7 @@ class boss_rage_winterchill : public CreatureScript public: boss_rage_winterchill() : CreatureScript("boss_rage_winterchill") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_rage_winterchillAI>(creature); } @@ -61,7 +61,7 @@ public: uint32 IceboltTimer; bool go; - void Reset() OVERRIDE + void Reset() override { damageTaken = 0; FrostArmorTimer = 37000; @@ -73,29 +73,29 @@ public: instance->SetData(DATA_RAGEWINTERCHILLEVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (IsEvent) instance->SetData(DATA_RAGEWINTERCHILLEVENT, IN_PROGRESS); Talk(SAY_ONAGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ONSLAY); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && instance) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { hyjal_trashAI::JustDied(killer); if (IsEvent) @@ -103,7 +103,7 @@ public: Talk(SAY_ONDEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsEvent) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index 4419973902a..ede038863fc 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -53,7 +53,7 @@ class npc_jaina_proudmoore : public CreatureScript public: npc_jaina_proudmoore() : CreatureScript("npc_jaina_proudmoore") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); @@ -78,7 +78,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); if (ai->EventBegun) @@ -100,7 +100,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { if (!creature->GetInstanceScript()) return NULL; @@ -132,7 +132,7 @@ class npc_thrall : public CreatureScript public: npc_thrall() : CreatureScript("npc_thrall") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); @@ -158,7 +158,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); if (ai->EventBegun) @@ -185,7 +185,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { if (!creature->GetInstanceScript()) return NULL; @@ -213,7 +213,7 @@ class npc_tyrande_whisperwind : public CreatureScript public: npc_tyrande_whisperwind() : CreatureScript("npc_tyrande_whisperwind") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { if (!creature->GetInstanceScript()) return NULL; @@ -224,7 +224,7 @@ public: return ai; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -240,7 +240,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index c8006158ef1..4e6da7dcac2 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -665,7 +665,7 @@ void hyjalAI::DeSpawnVeins() { if (Faction == 1) { - Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE)); + Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_JAINAPROUDMOORE)); if (!unit)return; hyjalAI* ai = CAST_AI(hyjalAI, unit->AI()); if (!ai)return; @@ -676,7 +676,7 @@ void hyjalAI::DeSpawnVeins() } } else if (Faction) { - Creature* unit=Unit::GetCreature((*me), instance->GetData64(DATA_THRALL)); + Creature* unit=ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_THRALL)); if (!unit)return; hyjalAI* ai = CAST_AI(hyjalAI, unit->AI()); if (!ai)return; @@ -804,7 +804,7 @@ void hyjalAI::UpdateAI(uint32 diff) { if (BossGUID[i]) { - Unit* unit = Unit::GetUnit(*me, BossGUID[i]); + Unit* unit = ObjectAccessor::GetUnit(*me, BossGUID[i]); if (unit && (!unit->IsAlive())) { if (BossGUID[i] == BossGUID[0]) @@ -937,7 +937,7 @@ void hyjalAI::WaypointReached(uint32 waypointId) DoCast(me, SPELL_MASS_TELEPORT, false); if (me->GetEntry() == THRALL && DummyGuid) { - if (Creature* creature = Unit::GetCreature(*me, DummyGuid)) + if (Creature* creature = ObjectAccessor::GetCreature(*me, DummyGuid)) { hyjalAI* ai = CAST_AI(hyjalAI, creature->AI()); ai->DoMassTeleport = true; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index cbace6df028..85de43cb4c4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -432,29 +432,29 @@ public: uint32 FlameBuffetTimer; bool imol; - void Reset() OVERRIDE + void Reset() override { spawnTimer = 2000; FlameBuffetTimer= 2000; imol = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 0 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Delay <= diff) { @@ -486,7 +486,7 @@ public: CanMove = true; if (instance->GetData(DATA_ALLIANCE_RETREAT) && !instance->GetData(DATA_HORDE_RETREAT)) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else if (instance->GetData(DATA_ALLIANCE_RETREAT) && instance->GetData(DATA_HORDE_RETREAT)){ @@ -525,7 +525,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_giant_infernalAI>(creature); } @@ -536,7 +536,7 @@ class npc_abomination : public CreatureScript public: npc_abomination() : CreatureScript("npc_abomination") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_abominationAI>(creature); } @@ -552,24 +552,24 @@ public: bool go; uint32 KnockDownTimer; - void Reset() OVERRIDE + void Reset() override { KnockDownTimer = 10000; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } @@ -584,9 +584,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); if (IsEvent || IsOverrun) @@ -631,7 +631,7 @@ class npc_ghoul : public CreatureScript public: npc_ghoul() : CreatureScript("npc_ghoul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ghoulAI>(creature); } @@ -649,26 +649,26 @@ public: uint32 FrenzyTimer; uint32 MoveTimer; bool RandomMove; - void Reset() OVERRIDE + void Reset() override { FrenzyTimer = 5000+rand()%5000; MoveTimer = 2000; RandomMove = false; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } @@ -684,9 +684,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); if (IsEvent || IsOverrun) @@ -730,7 +730,7 @@ class npc_necromancer : public CreatureScript public: npc_necromancer() : CreatureScript("npc_necromancer") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_necromancerAI>(creature); } @@ -748,13 +748,13 @@ public: bool go; uint32 ShadowBoltTimer; - void Reset() OVERRIDE + void Reset() override { ShadowBoltTimer = 1000+rand()%5000; summons.DespawnAll(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30, true); if (target) @@ -762,31 +762,31 @@ public: summons.Summon(summon); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { summons.Despawn(summon); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { switch (urand(0, 2)) { @@ -804,9 +804,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); @@ -854,7 +854,7 @@ class npc_banshee : public CreatureScript public: npc_banshee() : CreatureScript("npc_banshee") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_bansheeAI>(creature); } @@ -873,35 +873,35 @@ public: uint32 WailTimer; uint32 ShellTimer; - void Reset() OVERRIDE + void Reset() override { CourseTimer = 20000+rand()%5000; WailTimer = 15000+rand()%5000; ShellTimer = 50000+rand()%10000; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); if (IsEvent || IsOverrun) @@ -954,7 +954,7 @@ class npc_crypt_fiend : public CreatureScript public: npc_crypt_fiend() : CreatureScript("npc_crypt_fiend") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_crypt_fiendAI>(creature); } @@ -971,33 +971,33 @@ public: bool go; uint32 WebTimer; - void Reset() OVERRIDE + void Reset() override { WebTimer = 20000+rand()%5000; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); if (IsEvent || IsOverrun) @@ -1040,7 +1040,7 @@ class npc_fel_stalker : public CreatureScript public: npc_fel_stalker() : CreatureScript("npc_fel_stalker") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_fel_stalkerAI>(creature); } @@ -1057,33 +1057,33 @@ public: bool go; uint32 ManaBurnTimer; - void Reset() OVERRIDE + void Reset() override { ManaBurnTimer = 9000+rand()%5000; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 7 && !IsOverrun) { if (instance->GetData(DATA_ALLIANCE_RETREAT))//2.alliance boss down, attack thrall { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } else { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_JAINAPROUDMOORE)); if (target && target->IsAlive()) me->AddThreat(target, 0.0f); } } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); if (IsEvent || IsOverrun) @@ -1126,7 +1126,7 @@ class npc_frost_wyrm : public CreatureScript public: npc_frost_wyrm() : CreatureScript("npc_frost_wyrm") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_frost_wyrmAI>(creature); } @@ -1144,18 +1144,18 @@ public: uint32 FrostBreathTimer; uint32 MoveTimer; - void Reset() OVERRIDE + void Reset() override { FrostBreathTimer = 5000; MoveTimer = 0; me->SetDisableGravity(true); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 2 && !IsOverrun) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) { me->AddThreat(target, 0.0f); @@ -1164,7 +1164,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (IsEvent) instance->SetData(DATA_TRASH, 0);//signal trash is dead @@ -1176,9 +1176,9 @@ public: me->SetPosition(x, y, z, 0); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); @@ -1241,7 +1241,7 @@ class npc_gargoyle : public CreatureScript public: npc_gargoyle() : CreatureScript("npc_gargoyle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_gargoyleAI>(creature); } @@ -1263,7 +1263,7 @@ public: float Zpos; bool forcemove; - void Reset() OVERRIDE + void Reset() override { forcemove = true; Zpos = 10.0f; @@ -1272,11 +1272,11 @@ public: me->SetDisableGravity(true); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 2 && !IsOverrun) { - Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_THRALL)); + Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_THRALL)); if (target && target->IsAlive()) { me->AddThreat(target, 0.0f); @@ -1285,7 +1285,7 @@ public: } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { float x, y, z; me->GetPosition(x, y, z); @@ -1295,7 +1295,7 @@ public: hyjal_trashAI::JustDied(killer); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { hyjal_trashAI::UpdateAI(diff); @@ -1351,7 +1351,7 @@ public: if (MoveTimer <= diff) { float x, y, z; - me->GetVictim()->GetPosition(x, y, z); + me->EnsureVictim()->GetPosition(x, y, z); me->GetMotionMaster()->MovePoint(0, x, y, z+Zpos); Zpos -= 1.0f; if (Zpos <= 0) @@ -1379,7 +1379,7 @@ class alliance_rifleman : public CreatureScript public: alliance_rifleman() : CreatureScript("alliance_rifleman") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new alliance_riflemanAI(creature); } @@ -1393,16 +1393,16 @@ public: uint32 ExplodeTimer; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { } - void Reset() OVERRIDE + void Reset() override { ExplodeTimer = 5000+rand()%5000; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || me->GetVictim()) @@ -1416,11 +1416,11 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 0c3f33dea55..b228cb91382 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -48,7 +48,7 @@ class instance_hyjal : public InstanceMapScript public: instance_hyjal() : InstanceMapScript("instance_hyjal", 534) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_mount_hyjal_InstanceMapScript(map); } @@ -57,7 +57,7 @@ public: { instance_mount_hyjal_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -81,7 +81,7 @@ public: ArchiYell = false; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < EncounterCount; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -90,7 +90,7 @@ public: return false; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -114,7 +114,7 @@ public: } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -129,7 +129,7 @@ public: } } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -146,7 +146,7 @@ public: return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -266,7 +266,7 @@ public: } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -283,12 +283,12 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index a03bfb3082b..44e1067498d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -50,7 +50,7 @@ class boss_epoch : public CreatureScript public: boss_epoch() : CreatureScript("boss_epoch") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_epochAI>(creature); } @@ -72,7 +72,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiStep = 1; uiStepTimer = 26000; @@ -84,14 +84,14 @@ public: instance->SetData(DATA_EPOCH_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_EPOCH_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -126,14 +126,14 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_EPOCH_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index c3427c99fbb..f3333c0b0b6 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -37,7 +37,7 @@ class boss_infinite_corruptor : public CreatureScript public: boss_infinite_corruptor() : CreatureScript("boss_infinite_corruptor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_infinite_corruptorAI>(creature); } @@ -51,18 +51,18 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_INFINITE_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_INFINITE_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //Return since we have no target if (!UpdateVictim()) @@ -71,7 +71,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_INFINITE_EVENT, DONE); 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 7c0169cda95..6d36a933687 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -64,7 +64,7 @@ class boss_mal_ganis : public CreatureScript public: boss_mal_ganis() : CreatureScript("boss_mal_ganis") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_mal_ganisAI>(creature); } @@ -91,7 +91,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { bYelled = false; bYelled2 = false; @@ -105,19 +105,19 @@ public: instance->SetData(DATA_MAL_GANIS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_MAL_GANIS_EVENT, IN_PROGRESS); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (damage >= me->GetHealth() && done_by != me) damage = me->GetHealth()-1; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { switch (Phase) { @@ -223,7 +223,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_MAL_GANIS_EVENT, DONE); DoCastAOE(SPELL_MAL_GANIS_KILL_CREDIT); @@ -231,7 +231,7 @@ public: DoCastAOE(SPELL_KILL_CREDIT); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index b4bf6a30140..4c26b30947f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -49,7 +49,7 @@ class boss_meathook : public CreatureScript public: boss_meathook() : CreatureScript("boss_meathook") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_meathookAI>(creature); } @@ -68,7 +68,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiChainTimer = urand(12000, 17000); //seen on video 13, 17, 15, 12, 16 uiDiseaseTimer = urand(2000, 4000); //approx 3s @@ -77,14 +77,14 @@ public: instance->SetData(DATA_MEATHOOK_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_MEATHOOK_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -112,14 +112,14 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_MEATHOOK_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp index 5d9477a1b45..7c299b1feaa 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp @@ -54,7 +54,7 @@ class boss_salramm : public CreatureScript public: boss_salramm() : CreatureScript("boss_salramm") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_salrammAI>(creature); } @@ -75,7 +75,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiCurseFleshTimer = 30000; //30s DBM uiExplodeGhoulTimer = urand(25000, 28000); //approx 6 sec after summon ghouls @@ -86,14 +86,14 @@ public: instance->SetData(DATA_SALRAMM_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_SALRAMM_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -135,14 +135,14 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_SALRAMM_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 60352f7d55c..fd832051421 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -255,7 +255,7 @@ class npc_arthas : public CreatureScript public: npc_arthas() : CreatureScript("npc_arthas") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI()); @@ -298,7 +298,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI()); @@ -342,7 +342,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_arthasAI>(creature); } @@ -379,7 +379,7 @@ public: uint32 exorcismTimer; - void Reset() OVERRIDE + void Reset() override { utherGUID = 0; jainaGUID = 0; @@ -415,12 +415,12 @@ public: wave = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_ARTHAS_AURA); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ARTHAS_EVENT, FAIL); } @@ -467,7 +467,7 @@ public: ++step; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -585,7 +585,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -627,7 +627,7 @@ public: JumpToNextStep(2000); break; case 3: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) { uther->AI()->Talk(SAY_PHASE102); } @@ -642,13 +642,13 @@ public: break; //After waypoint 1 case 5: - if (Creature* jaina = Unit::GetCreature(*me, jainaGUID)) + if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) jaina->SetTarget(me->GetGUID()); Talk(SAY_PHASE104); JumpToNextStep(10000); break; case 6: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->AI()->Talk(SAY_PHASE105); JumpToNextStep(1000); break; @@ -657,7 +657,7 @@ public: JumpToNextStep(4000); break; case 8: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->AI()->Talk(SAY_PHASE107); JumpToNextStep(6000); break; @@ -666,7 +666,7 @@ public: JumpToNextStep(4000); break; case 10: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->AI()->Talk(SAY_PHASE109); JumpToNextStep(8000); break; @@ -675,7 +675,7 @@ public: JumpToNextStep(4000); break; case 12: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->AI()->Talk(SAY_PHASE111); JumpToNextStep(4000); break; @@ -684,7 +684,7 @@ public: JumpToNextStep(11000); break; case 14: - if (Creature* jaina = Unit::GetCreature(*me, jainaGUID)) + if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) jaina->AI()->Talk(SAY_PHASE113); JumpToNextStep(3000); break; @@ -693,12 +693,12 @@ public: JumpToNextStep(9000); break; case 16: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->AI()->Talk(SAY_PHASE115); JumpToNextStep(4000); break; case 17: - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) { uther->SetWalk(true); uther->GetMotionMaster()->MovePoint(0, 1794.357f, 1272.183f, 140.558f); @@ -706,7 +706,7 @@ public: JumpToNextStep(1000); break; case 18: - if (Creature* jaina = Unit::GetCreature(*me, jainaGUID)) + if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) { me->SetTarget(jainaGUID); jaina->SetWalk(true); @@ -719,7 +719,7 @@ public: JumpToNextStep(1000); break; case 20: - if (Creature* jaina = Unit::GetCreature(*me, jainaGUID)) + if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) jaina->AI()->Talk(SAY_PHASE117); JumpToNextStep(3000); break; @@ -740,10 +740,10 @@ public: bStepping = false; SetRun(true); - if (Creature* jaina = Unit::GetCreature(*me, jainaGUID)) + if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) jaina->DisappearAndDie(); - if (Creature* uther = Unit::GetCreature(*me, utherGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, utherGUID)) uther->DisappearAndDie(); me->SetTarget(0); @@ -772,7 +772,7 @@ public: //After waypoint 9 case 27: me->SetTarget(citymenGUID[0]); - if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0])) + if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0])) { cityman->SetTarget(me->GetGUID()); cityman->SetWalk(true); @@ -781,7 +781,7 @@ public: JumpToNextStep(2000); break; case 28: - if (Creature* cityman = Unit::GetCreature(*me, citymenGUID[0])) + if (Creature* cityman = ObjectAccessor::GetCreature(*me, citymenGUID[0])) cityman->AI()->Talk(SAY_PHASE202); JumpToNextStep(4000); break; @@ -799,11 +799,11 @@ public: case 31: SetEscortPaused(false); bStepping = false; - if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1])) + if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1])) { cityman1->AI()->Talk(SAY_PHASE204); cityman1->SetTarget(me->GetGUID()); - if (Creature* cityman0 = Unit::GetCreature(*me, citymenGUID[0])) + if (Creature* cityman0 = ObjectAccessor::GetCreature(*me, citymenGUID[0])) cityman0->Kill(cityman0); me->SetTarget(citymenGUID[1]); } @@ -815,7 +815,7 @@ public: JumpToNextStep(1000); break; case 33: - if (Creature* cityman1 = Unit::GetCreature(*me, citymenGUID[1])) + if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1])) cityman1->Kill(cityman1); JumpToNextStep(1000); break; @@ -839,7 +839,7 @@ public: case 36: if (Creature* malganis = me->SummonCreature(NPC_MAL_GANIS, 2117.349f, 1288.624f, 136.271f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 60000)) { - if (Creature* pStalkerM = Unit::GetCreature(*me, stalkerGUID)) + if (Creature* pStalkerM = ObjectAccessor::GetCreature(*me, stalkerGUID)) malganis->CastSpell(pStalkerM, 63793, false); malganisGUID = malganis->GetGUID(); @@ -850,13 +850,13 @@ public: JumpToNextStep(11000); break; case 37: - if (Creature* malganis = Unit::GetCreature(*me, malganisGUID)) + if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID)) { Creature* pZombie = GetClosestCreatureWithEntry(malganis, NPC_CITY_MAN, 100.0f); if (!pZombie) pZombie = GetClosestCreatureWithEntry(malganis, NPC_CITY_MAN2, 100.0f); if (pZombie) - pZombie->UpdateEntry(NPC_ZOMBIE, 0); + pZombie->UpdateEntry(NPC_ZOMBIE); else //There's no one else to transform step++; } @@ -865,12 +865,12 @@ public: phaseTimer = 500; break; case 38: - if (Creature* malganis = Unit::GetCreature(*me, malganisGUID)) + if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID)) malganis->AI()->Talk(SAY_PHASE207); JumpToNextStep(17000); break; case 39: - if (Creature* malganis = Unit::GetCreature(*me, malganisGUID)) + if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID)) malganis->SetVisible(false); Talk(SAY_PHASE208); JumpToNextStep(7000); @@ -922,7 +922,7 @@ public: if (waveGUID[i] == 0) break; ++mobCounter; - Unit* temp = Unit::GetCreature(*me, waveGUID[i]); + Unit* temp = ObjectAccessor::GetCreature(*me, waveGUID[i]); if (!temp || temp->isDead()) ++deadCounter; } @@ -976,16 +976,16 @@ public: //After Gossip 2 (waypoint 22) case 61: me->SetReactState(REACT_AGGRESSIVE); - if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0])) + if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0])) disguised0->SetTarget(me->GetGUID()); - if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1])) + if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1])) disguised1->SetTarget(me->GetGUID()); - if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2])) + if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2])) disguised2->SetTarget(me->GetGUID()); JumpToNextStep(1000); break; case 62: - if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0])) + if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0])) disguised0->AI()->Talk(SAY_PHASE302); JumpToNextStep(7000); break; @@ -1001,7 +1001,7 @@ public: JumpToNextStep(1000); break; case 65: - if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0])) + if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0])) disguised0->HandleEmoteCommand(11); JumpToNextStep(1000); break; @@ -1010,14 +1010,14 @@ public: JumpToNextStep(2000); break; case 67: - if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0])) + if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0])) disguised0->AI()->Talk(SAY_PHASE305); JumpToNextStep(1000); break; case 68: - if (Creature* disguised2 = Unit::GetCreature(*me, infiniteDraconianGUID[2])) + if (Creature* disguised2 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[2])) { - disguised2->UpdateEntry(NPC_INFINITE_HUNTER, 0); + disguised2->UpdateEntry(NPC_INFINITE_HUNTER); //Make them unattackable disguised2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); disguised2->SetReactState(REACT_PASSIVE); @@ -1025,9 +1025,9 @@ public: JumpToNextStep(2000); break; case 69: - if (Creature* disguised1 = Unit::GetCreature(*me, infiniteDraconianGUID[1])) + if (Creature* disguised1 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[1])) { - disguised1->UpdateEntry(NPC_INFINITE_AGENT, 0); + disguised1->UpdateEntry(NPC_INFINITE_AGENT); //Make them unattackable disguised1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); disguised1->SetReactState(REACT_PASSIVE); @@ -1035,9 +1035,9 @@ public: JumpToNextStep(2000); break; case 70: - if (Creature* disguised0 = Unit::GetCreature(*me, infiniteDraconianGUID[0])) + if (Creature* disguised0 = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[0])) { - disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY, 0); + disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY); //Make them unattackable disguised0->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); disguised0->SetReactState(REACT_PASSIVE); @@ -1051,7 +1051,7 @@ public: case 77: //Make cratures attackable for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i) - if (Creature* temp = Unit::GetCreature(*me, infiniteDraconianGUID[i])) + if (Creature* temp = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[i])) { temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); temp->SetReactState(REACT_AGGRESSIVE); @@ -1091,7 +1091,7 @@ public: if (instance->GetData(DATA_EPOCH_EVENT) != DONE) { SpawnTimeRift(17, &epochGUID); - if (Creature* epoch = Unit::GetCreature(*me, epochGUID)) + if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID)) epoch->AI()->Talk(SAY_PHASE314); me->SetTarget(epochGUID); } @@ -1105,7 +1105,7 @@ public: case 82: if (instance->GetData(DATA_EPOCH_EVENT) != DONE) { - if (Creature* epoch = Unit::GetCreature(*me, epochGUID)) + if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID)) { //Make Epoch attackable epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); @@ -1157,7 +1157,7 @@ public: me->SetTarget(malganisGUID); break; case 87: - if (Creature* malganis = Unit::GetCreature(*me, malganisGUID)) + if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID)) { malganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15); malganis->SetReactState(REACT_AGGRESSIVE); @@ -1222,7 +1222,7 @@ class npc_crate_helper : public CreatureScript _marked = false; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ARCANE_DISRUPTION && !_marked) { @@ -1241,7 +1241,7 @@ class npc_crate_helper : public CreatureScript bool _marked; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_crate_helperAI(creature); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 9e192d2e1a2..503166e0b12 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -45,7 +45,7 @@ class instance_culling_of_stratholme : public InstanceMapScript public: instance_culling_of_stratholme() : InstanceMapScript("instance_culling_of_stratholme", 595) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_culling_of_stratholme_InstanceMapScript(map); } @@ -70,7 +70,7 @@ class instance_culling_of_stratholme : public InstanceMapScript _crateCount = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (_encounterState[i] == IN_PROGRESS) @@ -79,7 +79,7 @@ class instance_culling_of_stratholme : public InstanceMapScript return false; } - void FillInitialWorldStates(WorldPacket& data) OVERRIDE + void FillInitialWorldStates(WorldPacket& data) override { data << uint32(WORLDSTATE_SHOW_CRATES) << uint32(1); data << uint32(WORLDSTATE_CRATES_REVEALED) << uint32(_crateCount); @@ -88,7 +88,7 @@ class instance_culling_of_stratholme : public InstanceMapScript data << uint32(WORLDSTATE_TIME_GUARDIAN_SHOW) << uint32(0); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -116,7 +116,7 @@ class instance_culling_of_stratholme : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -143,7 +143,7 @@ class instance_culling_of_stratholme : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -187,7 +187,7 @@ class instance_culling_of_stratholme : public InstanceMapScript // Summon Chromie and global whisper if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos)) if (!instance->GetPlayers().isEmpty()) - sCreatureTextMgr->SendChat(chromie, SAY_CRATES_COMPLETED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + chromie->AI()->TalkToMap(SAY_CRATES_COMPLETED); } DoUpdateWorldState(WORLDSTATE_CRATES_REVEALED, _crateCount); break; @@ -197,7 +197,7 @@ class instance_culling_of_stratholme : public InstanceMapScript SaveToDB(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -217,7 +217,7 @@ class instance_culling_of_stratholme : public InstanceMapScript return 0; } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -247,7 +247,7 @@ class instance_culling_of_stratholme : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -259,7 +259,7 @@ class instance_culling_of_stratholme : public InstanceMapScript return saveStream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp index 5b1db051a56..b63075b681a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -52,7 +52,7 @@ class boss_captain_skarloc : public CreatureScript public: boss_captain_skarloc() : CreatureScript("boss_captain_skarloc") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_captain_skarlocAI>(creature); } @@ -73,7 +73,7 @@ public: uint32 DevotionAura_Timer; uint32 Consecration_Timer; - void Reset() OVERRIDE + void Reset() override { Holy_Light_Timer = urand(20000, 30000); Cleanse_Timer = 10000; @@ -83,19 +83,19 @@ public: Consecration_Timer = 8000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { //This is not correct. Should taunt Thrall before engage in combat Talk(SAY_TAUNT1); Talk(SAY_TAUNT2); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -103,7 +103,7 @@ public: instance->SetData(TYPE_THRALL_PART1, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp index 4d75bc0545c..4192feb52a7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp @@ -50,7 +50,7 @@ class boss_epoch_hunter : public CreatureScript public: boss_epoch_hunter() : CreatureScript("boss_epoch_hunter") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_epoch_hunterAI>(creature); } @@ -69,7 +69,7 @@ public: uint32 WingBuffet_Timer; uint32 Mda_Timer; - void Reset() OVERRIDE + void Reset() override { SandBreath_Timer = urand(8000, 16000); ImpendingDeath_Timer = urand(25000, 30000); @@ -77,17 +77,17 @@ public: Mda_Timer = 40000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -95,7 +95,7 @@ public: instance->SetData(TYPE_THRALL_PART4, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp index 7ca850e8754..a6f1cdd5b0b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp @@ -37,7 +37,7 @@ class go_barrel_old_hillsbrad : public GameObjectScript public: go_barrel_old_hillsbrad() : GameObjectScript("go_barrel_old_hillsbrad") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) { @@ -107,7 +107,7 @@ class boss_lieutenant_drake : public CreatureScript public: boss_lieutenant_drake() : CreatureScript("boss_lieutenant_drake") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lieutenant_drakeAI(creature); } @@ -124,7 +124,7 @@ public: uint32 MortalStrike_Timer; uint32 ExplodingShout_Timer; - void Reset() OVERRIDE + void Reset() override { CanPatrol = true; wpId = 0; @@ -135,22 +135,22 @@ public: ExplodingShout_Timer = 25000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { /// @todo make this work if (CanPatrol && wpId == 0) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index 47317b0a13e..6fc36663c2a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -45,7 +45,7 @@ class instance_old_hillsbrad : public InstanceMapScript public: instance_old_hillsbrad() : InstanceMapScript("instance_old_hillsbrad", 560) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_old_hillsbrad_InstanceMapScript(map); } @@ -62,7 +62,7 @@ public: uint64 TarethaGUID; uint64 EpochGUID; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -104,7 +104,7 @@ public: } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -120,7 +120,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { Player* player = GetPlayerInMap(); @@ -203,7 +203,7 @@ public: } } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { switch (data) { @@ -223,7 +223,7 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index bf902ba403c..14f9bfb2e2f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -56,7 +56,7 @@ class npc_erozion : public CreatureScript public: npc_erozion() : CreatureScript("npc_erozion") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -76,7 +76,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -185,12 +185,12 @@ class npc_thrall_old_hillsbrad : public CreatureScript public: npc_thrall_old_hillsbrad() : CreatureScript("npc_thrall_old_hillsbrad") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_thrall_old_hillsbradAI>(creature); } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); InstanceScript* instance = creature->GetInstanceScript(); @@ -240,7 +240,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) { @@ -288,7 +288,7 @@ public: bool LowHp; bool HadMount; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -402,7 +402,7 @@ public: case 94: if (uint64 TarethaGUID = instance->GetData64(DATA_TARETHA)) { - if (Creature* Taretha = Creature::GetCreature(*me, TarethaGUID)) + if (Creature* Taretha = ObjectAccessor::GetCreature(*me, TarethaGUID)) Taretha->AI()->Talk(SAY_TA_ESCAPED, me); } break; @@ -454,7 +454,7 @@ public: } } - void Reset() OVERRIDE + void Reset() override { LowHp = false; @@ -489,7 +489,7 @@ public: me->Dismount(); me->SetSpeed(MOVE_RUN, SPEED_RUN); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_TH_RANDOM_AGGRO); if (me->IsMounted()) @@ -499,7 +499,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -516,11 +516,11 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_TH_RANDOM_KILL); } - void JustDied(Unit* slayer) OVERRIDE + void JustDied(Unit* slayer) override { instance->SetData(TYPE_THRALL_EVENT, FAIL); @@ -531,7 +531,7 @@ public: Talk(SAY_TH_RANDOM_DIE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -566,12 +566,12 @@ class npc_taretha : public CreatureScript public: npc_taretha() : CreatureScript("npc_taretha") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_tarethaAI>(creature); } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); InstanceScript* instance = creature->GetInstanceScript(); @@ -590,14 +590,14 @@ public: if (instance->GetData64(DATA_EPOCH) == 0) creature->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); - if (Creature* thrall = (Unit::GetCreature(*creature, instance->GetData64(DATA_THRALL)))) + if (Creature* thrall = (ObjectAccessor::GetCreature(*creature, instance->GetData64(DATA_THRALL)))) CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP(); } } return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (instance->GetData(TYPE_THRALL_PART3) == DONE && instance->GetData(TYPE_THRALL_PART4) == NOT_STARTED) @@ -617,7 +617,7 @@ public: InstanceScript* instance; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -630,10 +630,10 @@ public: } } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index bf11d781a0c..4a2b3d650d6 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -59,9 +59,9 @@ public: { boss_aeonusAI(Creature* creature) : BossAI(creature, TYPE_AEONUS) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_SANDBREATH, urand(15000, 30000)); events.ScheduleEvent(EVENT_TIMESTOP, urand(10000, 15000)); @@ -70,7 +70,7 @@ public: Talk(SAY_AGGRO); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { //Despawn Time Keeper @@ -86,7 +86,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -94,13 +94,13 @@ public: instance->SetData(TYPE_MEDIVH, DONE); // FIXME: later should be removed } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -136,7 +136,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_aeonusAI>(creature); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index 251c1b14e9b..4c69efa6ca7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -60,9 +60,9 @@ public: { boss_chrono_lord_dejaAI(Creature* creature) : BossAI(creature, TYPE_CRONO_LORD_DEJA) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(18000, 23000)); events.ScheduleEvent(EVENT_TIME_LAPSE, urand(10000, 15000)); @@ -73,7 +73,7 @@ public: Talk(SAY_AGGRO); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { //Despawn Time Keeper @@ -89,19 +89,19 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(TYPE_RIFT, SPECIAL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -142,7 +142,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_chrono_lord_dejaAI>(creature); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index fcd3cc92604..e83c290e010 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -59,9 +59,9 @@ public: { boss_temporusAI(Creature* creature) : BossAI(creature, TYPE_TEMPORUS) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_HASTE, urand(15000, 23000)); events.ScheduleEvent(EVENT_MORTAL_WOUND, 8000); @@ -72,19 +72,19 @@ public: Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(TYPE_RIFT, SPECIAL); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { //Despawn Time Keeper @@ -101,7 +101,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -140,7 +140,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_temporusAI>(creature); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index e5920084033..cf3eff4732c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -73,7 +73,7 @@ class instance_the_black_morass : public InstanceMapScript public: instance_the_black_morass() : InstanceMapScript("instance_the_black_morass", 269) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_black_morass_InstanceMapScript(map); } @@ -92,7 +92,7 @@ public: uint64 _medivhGUID; uint8 _currentRiftId; - void Initialize() OVERRIDE + void Initialize() override { _medivhGUID = 0; Clear(); @@ -117,7 +117,7 @@ public: DoUpdateWorldState(WORLD_STATE_BM_RIFT, 0); } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { if (GetData(TYPE_MEDIVH) == IN_PROGRESS) return true; @@ -125,7 +125,7 @@ public: return false; } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (GetData(TYPE_MEDIVH) == IN_PROGRESS) return; @@ -133,7 +133,7 @@ public: player->SendUpdateWorldState(WORLD_STATE_BM, 0); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (creature->GetEntry() == NPC_MEDIVH) _medivhGUID = creature->GetGUID(); @@ -165,7 +165,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -236,7 +236,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -252,7 +252,7 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { if (data == DATA_MEDIVH) return _medivhGUID; @@ -269,8 +269,7 @@ public: TC_LOG_DEBUG("scripts", "Instance The Black Morass: Summoning rift boss entry %u.", entry); - Position pos; - me->GetRandomNearPosition(pos, 10.0f); + Position pos = me->GetRandomNearPosition(10.0f); //normalize Z-level if we can, if rift is not at ground level. 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)); @@ -317,7 +316,7 @@ public: } } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (m_auiEncounter[1] != IN_PROGRESS) return; 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 58bda23fb36..a1c4f057161 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -68,7 +68,7 @@ class npc_medivh_bm : public CreatureScript public: npc_medivh_bm() : CreatureScript("npc_medivh_bm") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_medivh_bmAI>(creature); } @@ -89,7 +89,7 @@ public: bool Life50; bool Life25; - void Reset() OVERRIDE + void Reset() override { SpellCorrupt_Timer = 0; Check_Timer = 0; @@ -105,7 +105,7 @@ public: DoCast(me, SPELL_PORTAL_RUNE, true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 10.0f)) { @@ -136,7 +136,7 @@ public: } } - void AttackStart(Unit* /*who*/) OVERRIDE + void AttackStart(Unit* /*who*/) override { //if (instance->GetData(TYPE_MEDIVH) == IN_PROGRESS) // return; @@ -144,9 +144,9 @@ public: //ScriptedAI::AttackStart(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (SpellCorrupt_Timer) return; @@ -158,7 +158,7 @@ public: SpellCorrupt_Timer = 3000; } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer->GetEntry() == me->GetEntry()) return; @@ -166,7 +166,7 @@ public: Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (SpellCorrupt_Timer) { @@ -256,7 +256,7 @@ class npc_time_rift : public CreatureScript public: npc_time_rift() : CreatureScript("npc_time_rift") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_time_riftAI>(creature); } @@ -275,7 +275,7 @@ public: uint8 mPortalCount; uint8 mWaveId; - void Reset() OVERRIDE + void Reset() override { TimeRiftWave_Timer = 15000; @@ -290,7 +290,7 @@ public: else mWaveId = 1; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void DoSummonAtRift(uint32 creature_entry) { @@ -304,8 +304,7 @@ public: return; } - Position pos; - me->GetRandomNearPosition(pos, 10.0f); + Position pos = me->GetRandomNearPosition(10.0f); //normalize Z-level if we can, if rift is not at ground level. 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)); @@ -334,7 +333,7 @@ public: } else DoSummonAtRift(entry); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (TimeRiftWave_Timer <= diff) { @@ -368,7 +367,7 @@ class npc_saat : public CreatureScript public: npc_saat() : CreatureScript("npc_saat") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -379,7 +378,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp index 160495a8dc2..ff4c0e7578b 100644 --- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp +++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp @@ -30,7 +30,7 @@ class instance_dire_maul : public InstanceMapScript public: instance_dire_maul() : InstanceMapScript("instance_dire_maul", 429) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_dire_maul_InstanceMapScript(map); } diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp index ec8596e4fc0..15330643bd3 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp @@ -38,7 +38,7 @@ class celebras_the_cursed : public CreatureScript public: celebras_the_cursed() : CreatureScript("celebras_the_cursed") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new celebras_the_cursedAI(creature); } @@ -51,21 +51,21 @@ public: uint32 EntanglingRootsTimer; uint32 CorruptForcesTimer; - void Reset() OVERRIDE + void Reset() override { WrathTimer = 8000; EntanglingRootsTimer = 2000; CorruptForcesTimer = 30000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SummonCreature(13716, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 600000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp index 3b9ad0bfb79..12016d2223a 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp @@ -38,7 +38,7 @@ class boss_landslide : public CreatureScript public: boss_landslide() : CreatureScript("boss_landslide") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_landslideAI(creature); } @@ -51,18 +51,18 @@ public: uint32 TrampleTimer; uint32 LandslideTimer; - void Reset() OVERRIDE + void Reset() override { KnockAwayTimer = 8000; TrampleTimer = 2000; LandslideTimer = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp index 6b425c4c0fe..8c7197b2942 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp @@ -37,7 +37,7 @@ class boss_noxxion : public CreatureScript public: boss_noxxion() : CreatureScript("boss_noxxion") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_noxxionAI(creature); } @@ -52,7 +52,7 @@ public: uint32 InvisibleTimer; bool Invisible; - void Reset() OVERRIDE + void Reset() override { ToxicVolleyTimer = 7000; UppercutTimer = 16000; @@ -61,7 +61,7 @@ public: Invisible = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void SummonAdds(Unit* victim) { @@ -69,7 +69,7 @@ public: Add->AI()->AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Invisible && InvisibleTimer <= diff) { diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp index 035ababd3b9..0d48d8f43c6 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp @@ -40,7 +40,7 @@ class boss_princess_theradras : public CreatureScript public: boss_princess_theradras() : CreatureScript("boss_princess_theradras") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_ptheradrasAI(creature); } @@ -54,7 +54,7 @@ public: uint32 ThrashTimer; uint32 RepulsiveGazeTimer; - void Reset() OVERRIDE + void Reset() override { DustfieldTimer = 8000; BoulderTimer = 2000; @@ -62,14 +62,14 @@ public: RepulsiveGazeTimer = 23000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SummonCreature(12238, 28.067f, 61.875f, -123.405f, 4.67f, TEMPSUMMON_TIMED_DESPAWN, 600000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp index e5653df8f64..be71fdebe3e 100644 --- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp @@ -30,7 +30,7 @@ class instance_maraudon : public InstanceMapScript public: instance_maraudon() : InstanceMapScript("instance_maraudon", 349) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_maraudon_InstanceMapScript(map); } diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 29e08699a0f..f04b5634616 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -133,7 +133,7 @@ public: Reset(); } - void Reset() OVERRIDE + void Reset() override { if (!IsCombatMovementAllowed()) SetCombatMovement(true); @@ -150,7 +150,7 @@ public: instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); me->SetInCombatWithZone(); @@ -164,14 +164,14 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_ONYXIA, DONE); Summons.DespawnAll(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->SetInCombatWithZone(); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) @@ -189,17 +189,17 @@ public: Summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { Summons.Despawn(summon); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void SpellHit(Unit* /*pCaster*/, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* /*pCaster*/, const SpellInfo* Spell) override { if (Spell->Id == SPELL_BREATH_EAST_TO_WEST || Spell->Id == SPELL_BREATH_WEST_TO_EAST || @@ -216,7 +216,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE) { @@ -256,7 +256,7 @@ public: } } - void SpellHitTarget(Unit* target, const SpellInfo* Spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* Spell) override { //Workaround - Couldn't find a way to group this spells (All Eruption) if (((Spell->Id >= 17086 && Spell->Id <= 17095) || @@ -301,7 +301,7 @@ public: MovePoint = iTemp; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -455,7 +455,7 @@ public: bool IsMoving; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_onyxiaAI>(creature); } diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index e028fab67e5..e6a08ade87f 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -36,7 +36,7 @@ class instance_onyxias_lair : public InstanceMapScript public: instance_onyxias_lair() : InstanceMapScript("instance_onyxias_lair", 249) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_onyxias_lair_InstanceMapScript(map); } @@ -48,7 +48,7 @@ public: //Eruption is a BFS graph problem //One map to remember all floor, one map to keep floor that still need to erupt and one queue to know what needs to be removed - void Initialize() OVERRIDE + void Initialize() override { SetBossNumber(EncounterCount); @@ -61,7 +61,7 @@ public: achievSheDeepBreathMore = true; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -71,7 +71,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { if ((go->GetGOInfo()->displayId == 4392 || go->GetGOInfo()->displayId == 4472) && go->GetGOInfo()->trap.spellId == 17731) { @@ -82,8 +82,7 @@ public: switch (go->GetEntry()) { case GO_WHELP_SPAWNER: - Position goPos; - go->GetPosition(&goPos); + Position goPos = go->GetPosition(); if (Creature* temp = go->SummonCreature(NPC_WHELP, goPos, TEMPSUMMON_CORPSE_DESPAWN)) { temp->SetInCombatWithZone(); @@ -93,7 +92,7 @@ public: } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { if ((go->GetGOInfo()->displayId == 4392 || go->GetGOInfo()->displayId == 4472) && go->GetGOInfo()->trap.spellId == 17731) { @@ -133,7 +132,7 @@ public: FloorEruptionGUID[1].erase(floorEruptedGUID); } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -148,7 +147,7 @@ public: return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -173,7 +172,7 @@ public: } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { switch (type) { @@ -185,7 +184,7 @@ public: } } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -196,7 +195,7 @@ public: return 0; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (GetBossState(DATA_ONYXIA) == IN_PROGRESS) { @@ -212,13 +211,24 @@ public: { if (eruptTimer <= diff) { - uint32 treeHeight = 0; - do + uint64 frontGuid = FloorEruptionGUIDQueue.front(); + std::map<uint64, uint32>::iterator itr = FloorEruptionGUID[1].find(frontGuid); + if (itr != FloorEruptionGUID[1].end()) { - treeHeight = (*FloorEruptionGUID[1].find(FloorEruptionGUIDQueue.front())).second; - FloorEruption(FloorEruptionGUIDQueue.front()); - FloorEruptionGUIDQueue.pop(); - } while (!FloorEruptionGUIDQueue.empty() && (*FloorEruptionGUID[1].find(FloorEruptionGUIDQueue.front())).second == treeHeight); + uint32 treeHeight = itr->second; + + do + { + FloorEruption(frontGuid); + FloorEruptionGUIDQueue.pop(); + if (FloorEruptionGUIDQueue.empty()) + break; + + frontGuid = FloorEruptionGUIDQueue.front(); + itr = FloorEruptionGUID[1].find(frontGuid); + } while (itr != FloorEruptionGUID[1].end() && itr->second == treeHeight); + } + eruptTimer = 1000; } else @@ -226,7 +236,7 @@ public: } } - bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscValue1 = 0*/) OVERRIDE + bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscValue1 = 0*/) override { switch (criteriaId) { @@ -240,7 +250,7 @@ public: return false; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -251,7 +261,7 @@ public: return saveStream.str(); } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { diff --git a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp index 8d5173ff266..f5f63910b1a 100644 --- a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp +++ b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp @@ -30,7 +30,7 @@ class instance_ragefire_chasm : public InstanceMapScript public: instance_ragefire_chasm() : InstanceMapScript("instance_ragefire_chasm", 389) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ragefire_chasm_InstanceMapScript(map); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp index bfc8c468af6..e0a30eba2c9 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp @@ -52,7 +52,7 @@ public: { boss_amnennar_the_coldbringerAI(Creature* creature) : BossAI(creature, DATA_AMNENNAR_THE_COLD_BRINGER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); hp60Spectrals = false; @@ -60,7 +60,7 @@ public: hp50 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_AMNENNARSWRATH, 8000); @@ -69,18 +69,18 @@ public: Talk(SAY_AGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -138,7 +138,7 @@ public: bool hp50; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_amnennar_the_coldbringerAI(creature); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp index 830c3fed382..b1bce6ff38c 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp @@ -42,33 +42,34 @@ public: { boss_gluttonAI(Creature* creature) : BossAI(creature, DATA_GLUTTON) { + hp50 = false; hp15 = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); hp50 = false; hp15 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -94,7 +95,7 @@ public: bool hp15; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gluttonAI(creature); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp index 6026991f253..c2b94b7c7ae 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp @@ -52,13 +52,13 @@ public: { boss_mordresh_fire_eyeAI(Creature* creature) : BossAI(creature, DATA_MORDRESH_FIRE_EYE) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_OOC_1, 10000); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.Reset(); @@ -67,12 +67,12 @@ public: events.ScheduleEvent(EVENT_FIRE_NOVA, urand(8000, 12000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -124,7 +124,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_mordresh_fire_eyeAI(creature); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp index 0c76da22625..8370d856524 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp @@ -42,7 +42,7 @@ public: { boss_tuten_kashAI(Creature* creature) : BossAI(creature, DATA_TUTEN_KASH) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (!me->HasAura(SPELL_THRASH)) @@ -51,19 +51,19 @@ public: DoCast(me, SPELL_VIRULENT_POISON); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_WEB_SPRAY, urand(3000, 5000)); events.ScheduleEvent(EVENT_CURSE_OF_TUTENKASH, urand(9000, 14000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -95,7 +95,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_tuten_kashAI(creature); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp index a4ab03d6611..f7f4b035614 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp @@ -56,7 +56,7 @@ public: SetBossNumber(EncounterCount); } - void Initialize() OVERRIDE + void Initialize() override { goGongGUID = 0; gongWave = 0; @@ -67,7 +67,7 @@ public: summonCreature = 0; } - void OnGameObjectCreate(GameObject* gameObject) OVERRIDE + void OnGameObjectCreate(GameObject* gameObject) override { switch (gameObject->GetEntry()) { @@ -87,7 +87,7 @@ public: } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -108,7 +108,7 @@ public: return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_WAVE) { @@ -172,7 +172,7 @@ public: } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -183,7 +183,7 @@ public: return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -225,7 +225,7 @@ public: uint32 summonCreature; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_razorfen_downs_InstanceMapScript(map); } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index b9605794074..a8df690f726 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -64,7 +64,7 @@ public: { npc_henry_sternAI(Creature* creature) : ScriptedAI(creature) { } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override { if (action == 0) { @@ -98,7 +98,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_henry_sternAI(creature); } @@ -158,10 +158,12 @@ public: { instance = creature->GetInstanceScript(); eventInProgress = false; + channeling = false; + eventProgress = 0; spawnerCount = 0; } - void Reset() OVERRIDE + void Reset() override { if (!eventInProgress) { @@ -175,7 +177,7 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (channeling) Talk(SAY_WATCH_OUT, who); @@ -188,13 +190,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_EXTINGUISHING_THE_IDOL, DONE); me->DespawnOrUnsummon(5000); } - void sQuestAccept(Player* /*player*/, Quest const* quest) OVERRIDE + void sQuestAccept(Player* /*player*/, Quest const* quest) override { if (quest->GetQuestId() == QUEST_EXTINGUISHING_THE_IDOL) { @@ -206,7 +208,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE && id == POINT_REACH_IDOL) { @@ -215,7 +217,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!eventInProgress) return; @@ -318,7 +320,7 @@ public: uint8 spawnerCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_belnistraszAI>(creature); } @@ -336,9 +338,9 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { if (data < 7) { @@ -356,7 +358,7 @@ public: InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_idol_room_spawnerAI>(creature); } @@ -382,7 +384,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { if (!me->HasAura(SPELL_POISON_PROC) && me->GetEntry() == NPC_TOMB_FIEND) DoCast(me, SPELL_POISON_PROC); @@ -391,17 +393,17 @@ public: DoCast(me, SPELL_VIRULENT_POISON_PROC); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_WAVE, me->GetEntry()); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_WEB, urand(5000, 8000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -426,7 +428,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_tomb_creatureAI>(creature); } @@ -441,7 +443,7 @@ class go_gong : public GameObjectScript public: go_gong() : GameObjectScript("go_gong") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index 9900ba9e3b3..705b0231e82 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -35,7 +35,7 @@ class instance_razorfen_kraul : public InstanceMapScript public: instance_razorfen_kraul() : InstanceMapScript("instance_razorfen_kraul", 47) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_razorfen_kraul_InstanceMapScript(map); } @@ -47,7 +47,7 @@ public: uint64 DoorWardGUID; int WardKeeperDeath; - void Initialize() OVERRIDE + void Initialize() override { WardKeeperDeath = 0; DoorWardGUID = 0; @@ -69,7 +69,7 @@ public: return NULL; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -88,7 +88,7 @@ public: } } - void SetData(uint32 type, uint32 /*data*/) OVERRIDE + void SetData(uint32 type, uint32 /*data*/) override { switch (type) { diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index f04b71d1da9..835fd6228e1 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -47,7 +47,7 @@ class npc_willix : public CreatureScript public: npc_willix() : CreatureScript("npc_willix") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER) { @@ -59,7 +59,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_willixAI(creature); } @@ -68,7 +68,7 @@ public: { npc_willixAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -118,19 +118,19 @@ public: } } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO1); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_WILLIX_THE_IMPORTER); @@ -164,22 +164,26 @@ struct npc_snufflenose_gopher : public CreatureScript public: npc_snufflenose_gopher() : CreatureScript("npc_snufflenose_gopher") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_snufflenose_gopherAI(creature); } struct npc_snufflenose_gopherAI : public PetAI { - npc_snufflenose_gopherAI(Creature* creature) : PetAI(creature) { } + npc_snufflenose_gopherAI(Creature* creature) : PetAI(creature) + { + IsMovementActive = false; + TargetTubberGUID = 0; + } - void Reset() OVERRIDE + void Reset() override { IsMovementActive = false; TargetTubberGUID = 0; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == POINT_TUBBER) { @@ -228,13 +232,13 @@ public: IsMovementActive = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!IsMovementActive) PetAI::UpdateAI(diff); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_FIND_NEW_TUBBER) DoFindNewTubber(); @@ -255,7 +259,7 @@ class spell_snufflenose_command : public SpellScriptLoader { PrepareSpellScript(spell_snufflenose_commandSpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -267,13 +271,13 @@ class spell_snufflenose_command : public SpellScriptLoader target->ToCreature()->AI()->DoAction(ACTION_FIND_NEW_TUBBER); } - void Register() OVERRIDE + void Register() override { AfterCast += SpellCastFn(spell_snufflenose_commandSpellScript::HandleAfterCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_snufflenose_commandSpellScript(); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp index e0771b0ebe2..162ce9b5359 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp @@ -82,7 +82,7 @@ class boss_ayamiss : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _phase = PHASE_AIR; @@ -90,7 +90,7 @@ class boss_ayamiss : public CreatureScript SetCombatMovement(false); } - void JustSummoned(Creature* who) OVERRIDE + void JustSummoned(Creature* who) override { switch (who->GetEntry()) { @@ -107,7 +107,7 @@ class boss_ayamiss : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE) { @@ -123,13 +123,13 @@ class boss_ayamiss : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->ClearUnitState(UNIT_STATE_ROOT); BossAI::EnterEvadeMode(); } - void EnterCombat(Unit* attacker) OVERRIDE + void EnterCombat(Unit* attacker) override { BossAI::EnterCombat(attacker); @@ -144,7 +144,7 @@ class boss_ayamiss : public CreatureScript me->GetMotionMaster()->MovePoint(POINT_AIR, AyamissAirPos); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -156,9 +156,11 @@ class boss_ayamiss : public CreatureScript _phase = PHASE_GROUND; SetCombatMovement(true); me->SetCanFly(false); - Position VictimPos; - me->GetVictim()->GetPosition(&VictimPos); - me->GetMotionMaster()->MovePoint(POINT_GROUND, VictimPos); + if (me->GetVictim()) + { + Position VictimPos = me->EnsureVictim()->GetPosition(); + me->GetMotionMaster()->MovePoint(POINT_GROUND, VictimPos); + } DoResetThreat(); events.ScheduleEvent(EVENT_LASH, urand(5000, 8000)); events.ScheduleEvent(EVENT_TRASH, urand(3000, 6000)); @@ -208,11 +210,12 @@ class boss_ayamiss : public CreatureScript events.ScheduleEvent(EVENT_SWARMER_ATTACK, 60000); break; case EVENT_SUMMON_SWARMER: - Position Pos; - me->GetRandomPoint(SwarmerPos, 80.0f, Pos); + { + Position Pos = me->GetRandomPoint(SwarmerPos, 80.0f); me->SummonCreature(NPC_SWARMER, Pos); events.ScheduleEvent(EVENT_SUMMON_SWARMER, 5000); break; + } case EVENT_TRASH: DoCastVictim(SPELL_TRASH); events.ScheduleEvent(EVENT_TRASH, urand(5000, 7000)); @@ -230,7 +233,7 @@ class boss_ayamiss : public CreatureScript bool _enraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ayamissAI>(creature); } @@ -248,7 +251,7 @@ class npc_hive_zara_larva : public CreatureScript _instance = me->GetInstanceScript(); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE) if (id == POINT_PARALYZE) @@ -256,7 +259,7 @@ class npc_hive_zara_larva : public CreatureScript DoCast(target, SPELL_FEED); // Omnomnom } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS) @@ -265,7 +268,7 @@ class npc_hive_zara_larva : public CreatureScript ScriptedAI::MoveInLineOfSight(who); } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS) return; @@ -273,7 +276,7 @@ class npc_hive_zara_larva : public CreatureScript ScriptedAI::AttackStart(victim); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_instance->GetBossState(DATA_AYAMISS) == IN_PROGRESS) return; @@ -284,7 +287,7 @@ class npc_hive_zara_larva : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_hive_zara_larvaAI>(creature); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp index e62f1781f13..ac490b1440d 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp @@ -71,7 +71,7 @@ class boss_buru : public CreatureScript { } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { BossAI::EnterEvadeMode(); @@ -82,7 +82,7 @@ class boss_buru : public CreatureScript Eggs.clear(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _EnterCombat(); Talk(EMOTE_TARGET, who); @@ -95,14 +95,14 @@ class boss_buru : public CreatureScript _phase = PHASE_EGG; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_EXPLODE) if (_phase == PHASE_EGG) me->DealDamage(me, 45000); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) ChaseNewVictim(); @@ -133,7 +133,7 @@ class boss_buru : public CreatureScript events.ScheduleEvent(EVENT_RESPAWN_EGG, 100000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -186,7 +186,7 @@ class boss_buru : public CreatureScript std::list<uint64> Eggs; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_buruAI(creature); } @@ -205,14 +205,14 @@ class npc_buru_egg : public CreatureScript SetCombatMovement(false); } - void EnterCombat(Unit* attacker) OVERRIDE + void EnterCombat(Unit* attacker) override { if (Creature* buru = me->GetMap()->GetCreature(_instance->GetData64(DATA_BURU))) if (!buru->IsInCombat()) buru->AI()->AttackStart(attacker); } - void JustSummoned(Creature* who) OVERRIDE + void JustSummoned(Creature* who) override { if (who->GetEntry() == NPC_HATCHLING) if (Creature* buru = me->GetMap()->GetCreature(_instance->GetData64(DATA_BURU))) @@ -220,7 +220,7 @@ class npc_buru_egg : public CreatureScript who->AI()->AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCastAOE(SPELL_EXPLODE, true); DoCastAOE(SPELL_EXPLODE_2, true); // Unknown purpose @@ -234,7 +234,7 @@ class npc_buru_egg : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_buru_eggAI>(creature); } @@ -261,14 +261,14 @@ class spell_egg_explosion : public SpellScriptLoader GetCaster()->DealDamage(target, -16 * GetCaster()->GetDistance(target) + 500); } - void Register() OVERRIDE + void Register() override { AfterCast += SpellCastFn(spell_egg_explosion_SpellScript::HandleAfterCast); OnEffectHitTarget += SpellEffectFn(spell_egg_explosion_SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_egg_explosion_SpellScript(); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp index 84003576a2a..f0e582dee95 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp @@ -55,7 +55,7 @@ class boss_kurinnaxx : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _enraged = false; @@ -65,7 +65,7 @@ class boss_kurinnaxx : public CreatureScript events.ScheduleEvent(EVENT_WIDE_SLASH, 11000); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!_enraged && HealthBelowPct(30)) { @@ -74,14 +74,14 @@ class boss_kurinnaxx : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); if (Creature* Ossirian = me->GetMap()->GetCreature(instance->GetData64(DATA_OSSIRIAN))) sCreatureTextMgr->SendChat(Ossirian, SAY_KURINAXX_DEATH, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_ZONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -125,7 +125,7 @@ class boss_kurinnaxx : public CreatureScript bool _enraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kurinnaxxAI>(creature); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp index 9dd82bf157e..e123a84f88e 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp @@ -62,7 +62,7 @@ class boss_moam : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetPower(POWER_MANA, 0); @@ -71,7 +71,7 @@ class boss_moam : public CreatureScript //events.ScheduleEvent(EVENT_WIDE_SLASH, 11000); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!_isStonePhase && HealthBelowPct(45)) { @@ -80,7 +80,7 @@ class boss_moam : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -105,7 +105,7 @@ class boss_moam : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -175,7 +175,7 @@ class boss_moam : public CreatureScript bool _isStonePhase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_moamAI(creature); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 3852802f43d..256f76337b4 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -96,7 +96,7 @@ class boss_ossirian : public CreatureScript uint8 CrystalIterator; bool SaidIntro; - void Reset() OVERRIDE + void Reset() override { _Reset(); CrystalIterator = 0; @@ -104,7 +104,7 @@ class boss_ossirian : public CreatureScript CrystalGUID = 0; } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { for (uint8 i = 0; i < NUM_WEAKNESS; ++i) { @@ -117,7 +117,7 @@ class boss_ossirian : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_TRIGGER_WEAKNESS) if (Creature* Trigger = me->GetMap()->GetCreature(TriggerGUID)) @@ -125,7 +125,7 @@ class boss_ossirian : public CreatureScript Trigger->CastSpell(Trigger, SpellWeakness[urand(0, 4)], false); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.Reset(); @@ -146,8 +146,7 @@ class boss_ossirian : public CreatureScript for (uint8 i = 0; i < NUM_TORNADOS; ++i) { - Position Point; - me->GetRandomPoint(RoomCenter, RoomRadius, Point); + Position Point = me->GetRandomPoint(RoomCenter, RoomRadius); if (Creature* Tornado = me->GetMap()->SummonCreature(NPC_SAND_VORTEX, Point)) Tornado->CastSpell(Tornado, SPELL_SAND_STORM, true); } @@ -155,19 +154,19 @@ class boss_ossirian : public CreatureScript SpawnNextCrystal(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { Cleanup(); summons.DespawnAll(); BossAI::EnterEvadeMode(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Cleanup(); _JustDied(); @@ -199,7 +198,7 @@ class boss_ossirian : public CreatureScript } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!SaidIntro) @@ -210,7 +209,7 @@ class boss_ossirian : public CreatureScript BossAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -268,7 +267,7 @@ class boss_ossirian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ossirianAI>(creature); } @@ -279,7 +278,7 @@ class go_ossirian_crystal : public GameObjectScript public: go_ossirian_crystal() : GameObjectScript("go_ossirian_crystal") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { InstanceScript* Instance = player->GetInstanceScript(); if (!Instance) diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp index b2aedfb5c99..0bb35f3842a 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp @@ -67,7 +67,7 @@ class boss_rajaxx : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); enraged = false; @@ -75,18 +75,18 @@ class boss_rajaxx : public CreatureScript events.ScheduleEvent(EVENT_THUNDERCRASH, 12000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { //SAY_DEATH _JustDied(); } - void EnterCombat(Unit* /*victim*/) OVERRIDE + void EnterCombat(Unit* /*victim*/) override { _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -119,7 +119,7 @@ class boss_rajaxx : public CreatureScript bool enraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_rajaxxAI(creature); } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp index 761ca60f714..3da7e5b833f 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp @@ -39,7 +39,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript _paralyzedGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -72,13 +72,13 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript return true; } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { if (type == DATA_PARALYZED) _paralyzedGUID = data; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -101,7 +101,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -154,7 +154,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript uint64 _paralyzedGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ruins_of_ahnqiraj_InstanceMapScript(map); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index 433193bd703..b904ed44b47 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -46,7 +46,7 @@ class boss_kri : public CreatureScript public: boss_kri() : CreatureScript("boss_kri") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kriAI>(creature); } @@ -67,7 +67,7 @@ public: bool VemDead; bool Death; - void Reset() OVERRIDE + void Reset() override { Cleave_Timer = urand(4000, 8000); ToxicVolley_Timer = urand(6000, 12000); @@ -77,18 +77,18 @@ public: Death = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); instance->SetData(DATA_BUG_TRIO_DEATH, 1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -139,7 +139,7 @@ class boss_vem : public CreatureScript public: boss_vem() : CreatureScript("boss_vem") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_vemAI>(creature); } @@ -159,7 +159,7 @@ public: bool Enraged; - void Reset() OVERRIDE + void Reset() override { Charge_Timer = urand(15000, 27000); KnockBack_Timer = urand(8000, 20000); @@ -168,7 +168,7 @@ public: Enraged = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_VEM_DEATH, 0); if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death @@ -176,11 +176,11 @@ public: instance->SetData(DATA_BUG_TRIO_DEATH, 1); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -228,7 +228,7 @@ class boss_yauj : public CreatureScript public: boss_yauj() : CreatureScript("boss_yauj") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_yaujAI>(creature); } @@ -248,7 +248,7 @@ public: bool VemDead; - void Reset() OVERRIDE + void Reset() override { Heal_Timer = urand(25000, 40000); Fear_Timer = urand(12000, 24000); @@ -257,7 +257,7 @@ public: VemDead = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); @@ -273,11 +273,11 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index 9e3244cccdb..21da920e4fd 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -151,7 +151,7 @@ class boss_eye_of_cthun : public CreatureScript public: boss_eye_of_cthun() : CreatureScript("boss_eye_of_cthun") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<eye_of_cthunAI>(creature); } @@ -181,7 +181,7 @@ public: float DarkGlareAngle; bool ClockWise; - void Reset() OVERRIDE + void Reset() override { //Phase information PhaseTimer = 50000; //First dark glare in 50 seconds @@ -212,7 +212,7 @@ public: pPortal->SetReactState(REACT_PASSIVE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetData(DATA_CTHUN_PHASE, PHASE_EYE_GREEN_BEAM); @@ -226,7 +226,7 @@ public: Spawned->AI()->AttackStart(target); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -394,7 +394,7 @@ public: } } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { switch (instance->GetData(DATA_CTHUN_PHASE)) { @@ -445,7 +445,7 @@ class boss_cthun : public CreatureScript public: boss_cthun() : CreatureScript("boss_cthun") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<cthunAI>(creature); } @@ -483,9 +483,9 @@ public: uint64 StomachEnterTarget; //Stomach map, bool = true then in stomach - UNORDERED_MAP<uint64, bool> Stomach_Map; + std::unordered_map<uint64, bool> Stomach_Map; - void Reset() OVERRIDE + void Reset() override { //One random wisper every 90 - 300 seconds WisperTimer = 90000; @@ -517,7 +517,7 @@ public: instance->SetData(DATA_CTHUN_PHASE, PHASE_NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } @@ -536,7 +536,7 @@ public: if (Stomach_Map.empty()) return NULL; - UNORDERED_MAP<uint64, bool>::const_iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::const_iterator i = Stomach_Map.begin(); std::list<Unit*> temp; std::list<Unit*>::const_iterator j; @@ -545,7 +545,7 @@ public: while (i != Stomach_Map.end()) { //Check for valid player - Unit* unit = Unit::GetUnit(*me, i->first); + Unit* unit = ObjectAccessor::GetUnit(*me, i->first); //Only units out of stomach if (unit && i->second == false) @@ -566,7 +566,7 @@ public: return (*j); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -640,7 +640,7 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); //Emerging phase - //AttackStart(Unit::GetUnit(*me, HoldpPlayer)); + //AttackStart(ObjectAccessor::GetUnit(*me, HoldpPlayer)); DoZoneInCombat(); //Place all units in threat list on outside of stomach @@ -680,13 +680,13 @@ public: DoCast(me, SPELL_PURPLE_COLORATION, true); - UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin(); //Kick all players out of stomach while (i != Stomach_Map.end()) { //Check for valid player - Unit* unit = Unit::GetUnit(*me, i->first); + Unit* unit = ObjectAccessor::GetUnit(*me, i->first); //Only move units in stomach if (unit && i->second == true) @@ -712,12 +712,12 @@ public: if (StomachAcidTimer <= diff) { //Apply aura to all players in stomach - UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin(); while (i != Stomach_Map.end()) { //Check for valid player - Unit* unit = Unit::GetUnit(*me, i->first); + Unit* unit = ObjectAccessor::GetUnit(*me, i->first); //Only apply to units in stomach if (unit && i->second == true) @@ -767,7 +767,7 @@ public: if (StomachEnterVisTimer <= diff) { //Check for valid player - Unit* unit = Unit::GetUnit(*me, StomachEnterTarget); + Unit* unit = ObjectAccessor::GetUnit(*me, StomachEnterTarget); if (unit) { @@ -840,12 +840,12 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_CTHUN_PHASE, PHASE_CTHUN_DONE); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { switch (instance->GetData(DATA_CTHUN_PHASE)) { @@ -871,7 +871,7 @@ public: } } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { switch (param) { @@ -889,7 +889,7 @@ class npc_eye_tentacle : public CreatureScript public: npc_eye_tentacle() : CreatureScript("npc_eye_tentacle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new eye_tentacleAI(creature); } @@ -898,6 +898,9 @@ public: { eye_tentacleAI(Creature* creature) : ScriptedAI(creature) { + MindflayTimer = 500; + KillSelfTimer = 35000; + Portal = 0; if (Creature* pPortal = me->SummonCreature(NPC_SMALL_PORTAL, *me, TEMPSUMMON_CORPSE_DESPAWN)) { @@ -912,13 +915,13 @@ public: uint32 KillSelfTimer; uint64 Portal; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); } - void Reset() OVERRIDE + void Reset() override { //Mind flay half a second after we spawn MindflayTimer = 500; @@ -927,12 +930,12 @@ public: KillSelfTimer = 35000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -965,7 +968,7 @@ class npc_claw_tentacle : public CreatureScript public: npc_claw_tentacle() : CreatureScript("npc_claw_tentacle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new claw_tentacleAI(creature); } @@ -974,6 +977,10 @@ public: { claw_tentacleAI(Creature* creature) : ScriptedAI(creature) { + GroundRuptureTimer = 500; + HamstringTimer = 2000; + EvadeTimer = 5000; + SetCombatMovement(false); Portal = 0; @@ -989,13 +996,13 @@ public: uint32 EvadeTimer; uint64 Portal; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); } - void Reset() OVERRIDE + void Reset() override { //First rupture should happen half a second after we spawn GroundRuptureTimer = 500; @@ -1003,12 +1010,12 @@ public: EvadeTimer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -1019,7 +1026,7 @@ public: { if (EvadeTimer <= diff) { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); //Dissapear and reappear at new position @@ -1076,7 +1083,7 @@ class npc_giant_claw_tentacle : public CreatureScript public: npc_giant_claw_tentacle() : CreatureScript("npc_giant_claw_tentacle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new giant_claw_tentacleAI(creature); } @@ -1085,6 +1092,11 @@ public: { giant_claw_tentacleAI(Creature* creature) : ScriptedAI(creature) { + GroundRuptureTimer = 500; + HamstringTimer = 2000; + ThrashTimer = 5000; + EvadeTimer = 5000; + SetCombatMovement(false); Portal = 0; @@ -1101,13 +1113,13 @@ public: uint32 EvadeTimer; uint64 Portal; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); } - void Reset() OVERRIDE + void Reset() override { //First rupture should happen half a second after we spawn GroundRuptureTimer = 500; @@ -1116,12 +1128,12 @@ public: EvadeTimer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -1132,7 +1144,7 @@ public: { if (EvadeTimer <= diff) { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); //Dissapear and reappear at new position @@ -1196,7 +1208,7 @@ class npc_giant_eye_tentacle : public CreatureScript public: npc_giant_eye_tentacle() : CreatureScript("npc_giant_eye_tentacle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new giant_eye_tentacleAI(creature); } @@ -1205,6 +1217,8 @@ public: { giant_eye_tentacleAI(Creature* creature) : ScriptedAI(creature) { + BeamTimer = 500; + SetCombatMovement(false); Portal = 0; @@ -1218,24 +1232,24 @@ public: uint32 BeamTimer; uint64 Portal; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* p = Unit::GetUnit(*me, Portal)) + if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) p->Kill(p); } - void Reset() OVERRIDE + void Reset() override { //Green Beam half a second after we spawn BeamTimer = 500; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check if we have a target if (!UpdateVictim()) @@ -1261,7 +1275,7 @@ class npc_giant_flesh_tentacle : public CreatureScript public: npc_giant_flesh_tentacle() : CreatureScript("npc_giant_flesh_tentacle") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new flesh_tentacleAI(creature); } @@ -1273,7 +1287,7 @@ public: SetCombatMovement(false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (TempSummon* summon = me->ToTempSummon()) if (Unit* summoner = summon->GetSummoner()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp index 910b09ec278..5eced848b47 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp @@ -46,7 +46,7 @@ class boss_fankriss : public CreatureScript public: boss_fankriss() : CreatureScript("boss_fankriss") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_fankrissAI(creature); } @@ -65,7 +65,7 @@ public: Creature* Hatchling; Creature* Spawn; - void Reset() OVERRIDE + void Reset() override { MortalWound_Timer = urand(10000, 15000); SpawnHatchlings_Timer = urand(6000, 12000); @@ -96,11 +96,11 @@ public: Spawn->AI()->AttackStart(victim); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp index 34dc224214e..5cc1670d8fb 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp @@ -44,7 +44,7 @@ class boss_huhuran : public CreatureScript public: boss_huhuran() : CreatureScript("boss_huhuran") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_huhuranAI(creature); } @@ -63,7 +63,7 @@ public: bool Frenzy; bool Berserk; - void Reset() OVERRIDE + void Reset() override { Frenzy_Timer = urand(25000, 35000); Wyvern_Timer = urand(18000, 28000); @@ -76,11 +76,11 @@ public: Berserk = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 233dc12de4f..26866de9aa8 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -41,7 +41,7 @@ class boss_ouro : public CreatureScript public: boss_ouro() : CreatureScript("boss_ouro") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_ouroAI(creature); } @@ -60,7 +60,7 @@ public: bool Enrage; bool Submerged; - void Reset() OVERRIDE + void Reset() override { Sweep_Timer = urand(5000, 10000); SandBlast_Timer = urand(20000, 35000); @@ -73,12 +73,12 @@ public: Submerged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCastVictim(SPELL_BIRTH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index b8042e8e106..e9eb9d58ca8 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -46,7 +46,7 @@ class boss_sartura : public CreatureScript public: boss_sartura() : CreatureScript("boss_sartura") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_sarturaAI(creature); } @@ -67,7 +67,7 @@ public: bool WhirlWind; bool AggroReset; - void Reset() OVERRIDE + void Reset() override { WhirlWind_Timer = 30000; WhirlWindRandom_Timer = urand(3000, 7000); @@ -83,22 +83,22 @@ public: } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -189,7 +189,7 @@ class npc_sartura_royal_guard : public CreatureScript public: npc_sartura_royal_guard() : CreatureScript("npc_sartura_royal_guard") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_sartura_royal_guardAI(creature); } @@ -208,7 +208,7 @@ public: bool WhirlWind; bool AggroReset; - void Reset() OVERRIDE + void Reset() override { WhirlWind_Timer = 30000; WhirlWindRandom_Timer = urand(3000, 7000); @@ -221,11 +221,11 @@ public: AggroReset = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp index 4708a563098..51384cc117d 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp @@ -57,26 +57,26 @@ class boss_skeram : public CreatureScript { boss_skeramAI(Creature* creature) : BossAI(creature, DATA_SKERAM) { } - void Reset() OVERRIDE + void Reset() override { _flag = 0; _hpct = 75.0f; me->SetVisible(true); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); if (me->IsSummon()) ((TempSummon*)me)->UnSummon(); } - void JustSummoned(Creature* creature) OVERRIDE + void JustSummoned(Creature* creature) override { // Shift the boss and images (Get it? *Shift*?) uint8 rand = 0; @@ -113,7 +113,7 @@ class boss_skeram : public CreatureScript creature->SetHealth(creature->GetMaxHealth() * (me->GetHealthPct() / 100.0f)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!me->IsSummon()) Talk(SAY_DEATH); @@ -121,7 +121,7 @@ class boss_skeram : public CreatureScript me->RemoveCorpse(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.Reset(); @@ -134,7 +134,7 @@ class boss_skeram : public CreatureScript Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -189,7 +189,7 @@ class boss_skeram : public CreatureScript uint8 _flag; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_skeramAI(creature); } @@ -222,13 +222,13 @@ class spell_skeram_arcane_explosion : public SpellScriptLoader targets.remove_if(PlayerOrPetCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_skeram_arcane_explosion_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_skeram_arcane_explosion_SpellScript(); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index d84279f1e8b..acf0215f9ff 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -103,10 +103,10 @@ struct boss_twinemperorsAI : public ScriptedAI Creature* GetOtherBoss() { - return Unit::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR)); + return ObjectAccessor::GetCreature(*me, instance->GetData64(IAmVeklor() ? DATA_VEKNILASH : DATA_VEKLOR)); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { Unit* pOtherBoss = GetOtherBoss(); if (pOtherBoss) @@ -123,7 +123,7 @@ struct boss_twinemperorsAI : public ScriptedAI } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Creature* pOtherBoss = GetOtherBoss(); if (pOtherBoss) @@ -137,12 +137,12 @@ struct boss_twinemperorsAI : public ScriptedAI DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_DEATH : SOUND_VN_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_KILL : SOUND_VN_KILL); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoZoneInCombat(); Creature* pOtherBoss = GetOtherBoss(); @@ -160,7 +160,7 @@ struct boss_twinemperorsAI : public ScriptedAI } } - void SpellHit(Unit* caster, const SpellInfo* entry) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* entry) override { if (caster == me) return; @@ -286,7 +286,7 @@ struct boss_twinemperorsAI : public ScriptedAI } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || me->GetVictim()) @@ -386,7 +386,7 @@ class boss_veknilash : public CreatureScript public: boss_veknilash() : CreatureScript("boss_veknilash") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_veknilashAI>(creature); } @@ -405,7 +405,7 @@ public: Creature* Summoned; - void Reset() OVERRIDE + void Reset() override { TwinReset(); UpperCut_Timer = urand(14000, 29000); @@ -424,7 +424,7 @@ public: target->SetFullHealth(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -472,7 +472,7 @@ class boss_veklor : public CreatureScript public: boss_veklor() : CreatureScript("boss_veklor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_veklorAI>(creature); } @@ -492,7 +492,7 @@ public: Creature* Summoned; - void Reset() OVERRIDE + void Reset() override { TwinReset(); ShadowBolt_Timer = 0; @@ -511,7 +511,7 @@ public: target->SetFullHealth(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -572,7 +572,7 @@ public: //DoMeleeAttackIfReady(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 44c70075a94..d49a6a312da 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -93,14 +93,14 @@ class boss_viscidus : public CreatureScript { boss_viscidusAI(Creature* creature) : BossAI(creature, DATA_VISCIDUS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _hitcounter = 0; _phase = PHASE_FROST; } - void DamageTaken(Unit* attacker, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* attacker, uint32& /*damage*/) override { if (_phase != PHASE_MELEE) return; @@ -139,7 +139,7 @@ class boss_viscidus : public CreatureScript Talk(EMOTE_CRACK); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if ((spell->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && _phase == PHASE_FROST && me->GetHealthPct() > 5.0f) { @@ -168,7 +168,7 @@ class boss_viscidus : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.Reset(); @@ -182,19 +182,19 @@ class boss_viscidus : public CreatureScript events.ScheduleEvent(EVENT_POISON_SHOCK, urand(7000, 12000)); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { summons.DespawnAll(); ScriptedAI::EnterEvadeMode(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_VISCIDUS_SUICIDE); summons.DespawnAll(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -245,7 +245,7 @@ class boss_viscidus : public CreatureScript Phases _phase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_viscidusAI(creature); } @@ -260,7 +260,7 @@ class npc_glob_of_viscidus : public CreatureScript { npc_glob_of_viscidusAI(Creature* creature) : ScriptedAI(creature) { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { InstanceScript* Instance = me->GetInstanceScript(); @@ -272,7 +272,8 @@ class npc_glob_of_viscidus : public CreatureScript if (Viscidus->IsAlive() && Viscidus->GetHealthPct() < 5.0f) { Viscidus->SetVisible(true); - Viscidus->GetVictim()->Kill(Viscidus); + if (Viscidus->GetVictim()) + Viscidus->EnsureVictim()->Kill(Viscidus); } else { @@ -282,7 +283,7 @@ class npc_glob_of_viscidus : public CreatureScript } } - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 id) override { if (id == ROOM_CENTER) { @@ -293,7 +294,7 @@ class npc_glob_of_viscidus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_glob_of_viscidusAI>(creature); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp index b1402f95135..5780da5e759 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp @@ -32,7 +32,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript public: instance_temple_of_ahnqiraj() : InstanceMapScript("instance_temple_of_ahnqiraj", 531) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_temple_of_ahnqiraj_InstanceMapScript(map); } @@ -56,7 +56,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript uint32 CthunPhase; - void Initialize() OVERRIDE + void Initialize() override { IsBossDied[0] = false; IsBossDied[1] = false; @@ -74,7 +74,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript CthunPhase = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -99,13 +99,13 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript } } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { //not active in AQ40 return false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -133,7 +133,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript return 0; } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -153,7 +153,7 @@ class instance_temple_of_ahnqiraj : public InstanceMapScript return 0; } // end GetData64 - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp index 7fc6af08d9d..0614303515c 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp @@ -64,7 +64,7 @@ class npc_anubisath_sentinel : public CreatureScript public: npc_anubisath_sentinel() : CreatureScript("npc_anubisath_sentinel") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new aqsentinelAI(creature); } @@ -132,7 +132,7 @@ public: void SendMyListToBuddies() { for (int i=0; i<3; ++i) - if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i])) + if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i])) GiveBuddyMyList(pNearby); } @@ -140,7 +140,7 @@ public: { for (int i=0; i<3; ++i) { - Creature* c = Unit::GetCreature(*me, NearbyGUID[i]); + Creature* c = ObjectAccessor::GetCreature(*me, NearbyGUID[i]); if (c) { if (!c->IsInCombat()) @@ -195,7 +195,7 @@ public: if (!NearbyGUID[bli]) break; - Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[bli]); + Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[bli]); if (!pNearby) break; @@ -213,7 +213,7 @@ public: bool gatherOthersWhenAggro; - void Reset() OVERRIDE + void Reset() override { if (!me->isDead()) { @@ -221,7 +221,7 @@ public: { if (!NearbyGUID[i]) continue; - if (Creature* pNearby = Unit::GetCreature(*me, NearbyGUID[i])) + if (Creature* pNearby = ObjectAccessor::GetCreature(*me, NearbyGUID[i])) { if (pNearby->isDead()) pNearby->Respawn(); @@ -237,7 +237,7 @@ public: me->AddAura(id, me); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (gatherOthersWhenAggro) GetOtherSentinels(who); @@ -246,11 +246,11 @@ public: DoZoneInCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (int ni=0; ni<3; ++ni) { - Creature* sent = Unit::GetCreature(*me, NearbyGUID[ni]); + Creature* sent = ObjectAccessor::GetCreature(*me, NearbyGUID[ni]); if (!sent) continue; if (sent->isDead()) diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index f903d1b6da8..9b8397ec6cd 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -34,7 +34,7 @@ class instance_wailing_caverns : public InstanceMapScript public: instance_wailing_caverns() : InstanceMapScript("instance_wailing_caverns", 43) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_wailing_caverns_InstanceMapScript(map); } @@ -48,7 +48,7 @@ public: bool yelled; uint64 NaralexGUID; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -56,13 +56,13 @@ public: NaralexGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (creature->GetEntry() == DATA_NARALEX) NaralexGUID = creature->GetGUID(); } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -80,7 +80,7 @@ public: if (data == DONE)SaveToDB(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -98,13 +98,13 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { if (data == DATA_NARALEX)return NaralexGUID; return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -117,7 +117,7 @@ public: return saveStream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp index 72ced3d3399..516da307bfd 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp @@ -79,12 +79,12 @@ class npc_disciple_of_naralex : public CreatureScript public: npc_disciple_of_naralex() : CreatureScript("npc_disciple_of_naralex") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_disciple_of_naralexAI>(creature); } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); InstanceScript* instance = creature->GetInstanceScript(); @@ -106,7 +106,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); @@ -150,7 +150,7 @@ public: uint32 eventProgress; InstanceScript* instance; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -179,17 +179,17 @@ public: } } - void Reset() OVERRIDE + void Reset() override { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_ATTACKED, who); } - void JustDied(Unit* /*slayer*/) OVERRIDE + void JustDied(Unit* /*slayer*/) override { instance->SetData(TYPE_NARALEX_EVENT, FAIL); instance->SetData(TYPE_NARALEX_PART1, FAIL); @@ -197,12 +197,12 @@ public: instance->SetData(TYPE_NARALEX_PART3, FAIL); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (currentEvent != TYPE_NARALEX_PART3) npc_escortAI::UpdateAI(diff); diff --git a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp index 2ddd60ca442..f0035cc921c 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp @@ -61,7 +61,7 @@ public: { boss_zum_rahAI(Creature* creature) : BossAI(creature, DATA_ZUM_RAH) { } - void Reset() OVERRIDE + void Reset() override { me->setFaction(ZUMRAH_FRIENDLY_FACTION); // areatrigger sets faction to enemy _ward80 = false; @@ -69,24 +69,24 @@ public: _heal30 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_SANCT_INVADE); events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000); events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, 10000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ZUM_RAH, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -147,7 +147,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_zum_rahAI>(creature); } diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index 8a7b5effa67..8139f45bf46 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -101,7 +101,7 @@ class instance_zulfarrak : public InstanceMapScript public: instance_zulfarrak() : InstanceMapScript("instance_zulfarrak", 209) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_zulfarrak_InstanceMapScript(map); } @@ -124,7 +124,7 @@ public: uint32 addGroupSize; uint32 waypoint; - void Initialize() OVERRIDE + void Initialize() override { GahzRillaEncounter = NOT_STARTED; ZumrahGUID = 0; @@ -141,7 +141,7 @@ public: waypoint = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -177,7 +177,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -187,7 +187,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -197,7 +197,7 @@ public: return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -219,7 +219,7 @@ public: return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp index 4b95d33a81e..ecb28a5b0cb 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp @@ -64,7 +64,7 @@ class npc_sergeant_bly : public CreatureScript public: npc_sergeant_bly() : CreatureScript("npc_sergeant_bly") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -76,7 +76,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (InstanceScript* instance = creature->GetInstanceScript()) { @@ -95,7 +95,7 @@ public: return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_sergeant_blyAI>(creature); } @@ -116,7 +116,7 @@ public: uint32 Revenge_Timer; //this is wrong, spell should never be used unless me->GetVictim() dodge, parry or block attack. Trinity support required. uint64 PlayerGUID; - void Reset() OVERRIDE + void Reset() override { ShieldBash_Timer = 5000; Revenge_Timer = 8000; @@ -124,7 +124,7 @@ public: me->setFaction(FACTION_FRIENDLY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (postGossipStep>0 && postGossipStep<4) { @@ -179,7 +179,7 @@ public: DoMeleeAttackIfReady(); } - void DoAction(int32 /*param*/) OVERRIDE + void DoAction(int32 /*param*/) override { postGossipStep=1; Text_Timer = 0; @@ -204,7 +204,7 @@ class go_troll_cage : public GameObjectScript public: go_troll_cage() : GameObjectScript("go_troll_cage") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) { @@ -258,7 +258,7 @@ class npc_weegli_blastfuse : public CreatureScript public: npc_weegli_blastfuse() : CreatureScript("npc_weegli_blastfuse") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -270,7 +270,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (InstanceScript* instance = creature->GetInstanceScript()) { @@ -291,7 +291,7 @@ public: return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_weegli_blastfuseAI>(creature); } @@ -311,22 +311,22 @@ public: bool destroyingDoor; InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { /*instance->SetData(0, NOT_STARTED);*/ } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { AttackStartCaster(victim, 10);//keep back & toss bombs/shoot } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { /*instance->SetData(0, DONE);*/ } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -351,7 +351,7 @@ public: } } - void MovementInform(uint32 /*type*/, uint32 /*id*/) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 /*id*/) override { if (instance->GetData(EVENT_PYRAMID) == PYRAMID_CAGES_OPEN) { @@ -368,7 +368,7 @@ public: }; } - void DoAction(int32 /*param*/) OVERRIDE + void DoAction(int32 /*param*/) override { DestroyDoor(); } @@ -405,7 +405,7 @@ class go_shallow_grave : public GameObjectScript public: go_shallow_grave() : GameObjectScript("go_shallow_grave") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { // randomly summon a zombie or dead hero the first time a grave is used if (go->GetUseCount() == 0) @@ -437,7 +437,7 @@ class at_zumrah : public AreaTriggerScript public: at_zumrah() : AreaTriggerScript("at_zumrah") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { Creature* pZumrah = player->FindNearestCreature(ZUMRAH_ID, 30.0f); diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp index 3eceb2adcf7..db41213e94e 100644 --- a/src/server/scripts/Kalimdor/boss_azuregos.cpp +++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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 @@ -16,151 +15,206 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Azuregos -SD%Complete: 90 -SDComment: Teleport not included, spell reflect not effecting dots (Core problem) -SDCategory: Azshara -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" +#include "Player.h" enum Say { - SAY_TELEPORT = 0 + SAY_TELEPORT = 0 }; enum Spells { - SPELL_MARKOFFROST = 23182, - SPELL_MANASTORM = 21097, - SPELL_CHILL = 21098, - SPELL_FROSTBREATH = 21099, - SPELL_REFLECT = 22067, - SPELL_CLEAVE = 8255, //Perhaps not right ID - SPELL_ENRAGE = 23537 + SPELL_MARK_OF_FROST = 23182, + SPELL_AURA_OF_FROST = 23186, + SPELL_MARK_OF_FROST_AURA = 23184, + SPELL_MANA_STORM = 21097, + SPELL_CHILL = 21098, + SPELL_FROST_BREATH = 21099, + SPELL_REFLECT = 22067, + SPELL_CLEAVE = 8255, // Perhaps not right ID + SPELL_ENRAGE = 23537 +}; + +enum Events +{ + EVENT_MARK_OF_FROST = 1, + EVENT_MANA_STORM, + EVENT_CHILL, + EVENT_BREATH, + EVENT_TELEPORT, + EVENT_REFLECT, + EVENT_CLEAVE, + EVENT_ENRAGE }; class boss_azuregos : public CreatureScript { -public: - boss_azuregos() : CreatureScript("boss_azuregos") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_azuregosAI(creature); - } - - struct boss_azuregosAI : public ScriptedAI - { - boss_azuregosAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 MarkOfFrostTimer; - uint32 ManaStormTimer; - uint32 ChillTimer; - uint32 BreathTimer; - uint32 TeleportTimer; - uint32 ReflectTimer; - uint32 CleaveTimer; - uint32 EnrageTimer; - bool Enraged; - - void Reset() OVERRIDE + public: + boss_azuregos() : CreatureScript("boss_azuregos") { } + + struct boss_azuregosAI : public WorldBossAI { - MarkOfFrostTimer = 35000; - ManaStormTimer = urand(5000, 17000); - ChillTimer = urand(10000, 30000); - BreathTimer = urand(2000, 8000); - TeleportTimer = 30000; - ReflectTimer = urand(15000, 30000); - CleaveTimer = 7000; - EnrageTimer = 0; - Enraged = false; - } + boss_azuregosAI(Creature* creature) : WorldBossAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override + { + _Reset(); + } - void UpdateAI(uint32 diff) OVERRIDE - { - //Return since we have no target - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + DoCast(me, SPELL_MARK_OF_FROST_AURA, true); + _enraged = false; + + events.ScheduleEvent(EVENT_MARK_OF_FROST, 35000); + events.ScheduleEvent(EVENT_MANA_STORM, urand(5000, 17000)); + events.ScheduleEvent(EVENT_CHILL, urand(10000, 30000)); + events.ScheduleEvent(EVENT_BREATH, urand(2000, 8000)); + events.ScheduleEvent(EVENT_TELEPORT, 30000); + events.ScheduleEvent(EVENT_REFLECT, urand(15000, 30000)); + events.ScheduleEvent(EVENT_CLEAVE, 7000); + } - if (TeleportTimer <= diff) + void KilledUnit(Unit* who) override { - Talk(SAY_TELEPORT); - ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); - ThreatContainer::StorageType::const_iterator i = threatlist.begin(); - for (i = threatlist.begin(); i != threatlist.end(); ++i) + if (who->GetTypeId() == TYPEID_PLAYER) + who->CastSpell(who, SPELL_MARK_OF_FROST, true); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); - if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) + switch (eventId) { - DoTeleportPlayer(unit, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, unit->GetOrientation()); + case EVENT_MANA_STORM: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, true)) + DoCast(target, SPELL_MANA_STORM); + events.ScheduleEvent(EVENT_MANA_STORM, urand(7500, 12500)); + break; + case EVENT_CHILL: + DoCastVictim(SPELL_CHILL); + events.ScheduleEvent(EVENT_CHILL, urand(13000, 25000)); + break; + case EVENT_BREATH: + DoCastVictim(SPELL_FROST_BREATH); + events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000)); + break; + case EVENT_TELEPORT: + { + Talk(SAY_TELEPORT); + ThreatContainer::StorageType const& threatlist = me->getThreatManager().getThreatList(); + for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) + { + if (Player* player = ObjectAccessor::GetPlayer(*me, (*i)->getUnitGuid())) + DoTeleportPlayer(player, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, player->GetOrientation()); + } + + DoResetThreat(); + events.ScheduleEvent(EVENT_TELEPORT, 30000); + break; + } + case EVENT_REFLECT: + DoCast(me, SPELL_REFLECT); + events.ScheduleEvent(EVENT_REFLECT, urand(20000, 35000)); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, 7000); + break; + default: + break; } } - DoResetThreat(); - TeleportTimer = 30000; - } else TeleportTimer -= diff; + if (HealthBelowPct(26) && !_enraged) + { + DoCast(me, SPELL_ENRAGE); + _enraged = true; + } - // //MarkOfFrostTimer - // if (MarkOfFrostTimer <= diff) - // { - // DoCastVictim(SPELL_MARKOFFROST); - // MarkOfFrostTimer = 25000; - // } else MarkOfFrostTimer -= diff; + DoMeleeAttackIfReady(); + } - //ChillTimer - if (ChillTimer <= diff) - { - DoCastVictim(SPELL_CHILL); - ChillTimer = urand(13000, 25000); - } else ChillTimer -= diff; + private: + bool _enraged; + }; - //BreathTimer - if (BreathTimer <= diff) - { - DoCastVictim(SPELL_FROSTBREATH); - BreathTimer = urand(10000, 15000); - } else BreathTimer -= diff; + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_azuregosAI(creature); + } +}; - //ManaStormTimer - if (ManaStormTimer <= diff) +class MarkOfFrostTargetSelector +{ + public: + MarkOfFrostTargetSelector() { } + + bool operator()(WorldObject* object) const + { + if (Unit* unit = object->ToUnit()) + return !(unit->HasAura(SPELL_MARK_OF_FROST) && !unit->HasAura(SPELL_AURA_OF_FROST)); + return true; + } +}; + +class spell_mark_of_frost : public SpellScriptLoader +{ + public: + spell_mark_of_frost() : SpellScriptLoader("spell_mark_of_frost") { } + + class spell_mark_of_frost_SpellScript : public SpellScript + { + PrepareSpellScript(spell_mark_of_frost_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_MANASTORM); - ManaStormTimer = urand(7500, 12500); - } else ManaStormTimer -= diff; + if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_FROST)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_AURA_OF_FROST)) + return false; + return true; + } - //ReflectTimer - if (ReflectTimer <= diff) + void FilterTargets(std::list<WorldObject*>& targets) { - DoCast(me, SPELL_REFLECT); - ReflectTimer = urand(20000, 35000); - } else ReflectTimer -= diff; + targets.remove_if(MarkOfFrostTargetSelector()); + } - //CleaveTimer - if (CleaveTimer <= diff) + void HandleEffect(SpellEffIndex effIndex) { - DoCastVictim(SPELL_CLEAVE); - CleaveTimer = 7000; - } else CleaveTimer -= diff; + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_FROST, true); + } - //EnrageTimer - if (HealthBelowPct(26) && !Enraged) + void Register() override { - DoCast(me, SPELL_ENRAGE); - Enraged = true; + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_frost_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_mark_of_frost_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); } + }; - DoMeleeAttackIfReady(); + SpellScript* GetSpellScript() const override + { + return new spell_mark_of_frost_SpellScript(); } - }; }; void AddSC_boss_azuregos() { new boss_azuregos(); + new spell_mark_of_frost(); } diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index ec28ee42625..2b8dbdaab6c 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -63,16 +63,16 @@ public: { npc_torekAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { rend_Timer = 5000; thunderclap_Timer = 8000; _completed = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -88,7 +88,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -118,7 +118,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -145,7 +145,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_torekAI(creature); } @@ -183,15 +183,15 @@ public: { npc_ruul_snowhoofAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) Cage->SetGoState(GO_STATE_READY); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -205,7 +205,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -234,13 +234,13 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ruul_snowhoofAI(creature); } @@ -300,14 +300,14 @@ public: { npc_muglashAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { eventTimer = 10000; waveId = 0; _isBrazierExtinguished = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Player* player = GetPlayerForEscort()) if (HasEscortState(STATE_ESCORT_PAUSED)) @@ -318,14 +318,14 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_VORSHA); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -340,7 +340,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -396,7 +396,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -426,7 +426,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_muglashAI(creature); } @@ -437,7 +437,7 @@ class go_naga_brazier : public GameObjectScript public: go_naga_brazier() : GameObjectScript("go_naga_brazier") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (Creature* creature = GetClosestCreatureWithEntry(go, NPC_MUGLASH, INTERACTION_DISTANCE*2)) { diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index edc13c8d446..e62e17593ba 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -63,15 +63,15 @@ public: uint32 morphtimer; bool spellhit; - void Reset() OVERRIDE + void Reset() override { morphtimer = 0; spellhit = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* unit, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* unit, const SpellInfo* spell) override { if (spellhit) return; @@ -94,7 +94,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // we mustn't remove the Creature in the same round in which we cast the summon spell, otherwise there will be no summons if (spellhit && morphtimer >= 5000) @@ -120,7 +120,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spitelashesAI(creature); } @@ -143,7 +143,7 @@ class npc_loramus_thalipedes : public CreatureScript public: npc_loramus_thalipedes() : CreatureScript("npc_loramus_thalipedes") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -181,7 +181,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -294,7 +294,7 @@ public: { npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { SpellEscapeTimer = 1300; TeleportTimer = 3500; @@ -311,9 +311,9 @@ public: Reached = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || PlayerGUID) return; @@ -329,7 +329,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true); @@ -337,7 +337,7 @@ public: MustDie = true; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -352,7 +352,7 @@ public: ContinueWP = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (MustDie) { @@ -450,7 +450,7 @@ public: bool Reached; }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE) return true; @@ -459,7 +459,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_rizzle_sprysprocketAI(creature); } @@ -480,7 +480,7 @@ public: bool WeMustDie; uint32 WeMustDieTimer; - void Reset() OVERRIDE + void Reset() override { me->SetHover(true); me->SetSwim(true); @@ -489,11 +489,11 @@ public: WeMustDieTimer = 1000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) return; @@ -506,7 +506,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (WeMustDie) { @@ -519,7 +519,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_depth_chargeAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 38bc321d2af..be70b2e9fa4 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -71,7 +71,7 @@ public: bool CanSayHelp; - void Reset() OVERRIDE + void Reset() override { pCaster = 0; @@ -89,9 +89,9 @@ public: me->SetStandState(UNIT_STAND_STATE_SLEEP); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (CanSayHelp && who->GetTypeId() == TYPEID_PLAYER && me->IsFriendlyTo(who) && me->IsWithinDistInMap(who, 25.0f)) { @@ -103,7 +103,7 @@ public: } } - void SpellHit(Unit* Caster, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* Caster, const SpellInfo* Spell) override { if (Spell->SpellFamilyFlags[2] & 0x080000000) { @@ -118,7 +118,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (SayThanksTimer) { @@ -161,7 +161,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_draenei_survivorAI(creature); } @@ -200,7 +200,7 @@ public: IsTreeEvent = true; } - void Reset() OVERRIDE + void Reset() override { DynamiteTimer = 8000; EmoteTimer = urand(120000, 150000); @@ -211,19 +211,19 @@ public: IsTreeEvent = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(ATTACK_YELL, who); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); me->setFaction(FACTION_HOSTILE); me->Attack(player, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat() && !IsTreeEvent) { @@ -257,7 +257,7 @@ public: bool IsTreeEvent; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_engineer_spark_overgrindAI(creature); } @@ -276,7 +276,7 @@ public: { npc_injured_draeneiAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); me->SetHealth(me->CountPctFromMaxHealth(15)); @@ -292,14 +292,14 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_injured_draeneiAI(creature); } @@ -330,9 +330,9 @@ public: { npc_magwinAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_AGGRO, who); } @@ -346,7 +346,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -371,7 +371,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_magwinAI(creature); } @@ -419,14 +419,14 @@ public: bool EventStarted; - void Reset() OVERRIDE + void Reset() override { SparkGUID = 0; Step = 0; StartEvent(); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void StartEvent() { @@ -443,7 +443,7 @@ public: uint32 NextStep(uint8 Step) { - Creature* Spark = Unit::GetCreature(*me, SparkGUID); + Creature* Spark = ObjectAccessor::GetCreature(*me, SparkGUID); if (!Spark) return 99999999; @@ -526,7 +526,7 @@ public: TC_LOG_ERROR("scripts", "SD2 ERROR: FlagList is empty!"); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (SayTimer <= diff) { @@ -538,7 +538,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_geezleAI(creature); } @@ -559,7 +559,7 @@ class go_ravager_cage : public GameObjectScript public: go_ravager_cage() : GameObjectScript("go_ravager_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_STRENGTH_ONE) == QUEST_STATUS_INCOMPLETE) @@ -587,7 +587,7 @@ public: uint32 RendTimer; uint32 EnragingBiteTimer; - void Reset() OVERRIDE + void Reset() override { RendTimer = 30000; EnragingBiteTimer = 20000; @@ -596,7 +596,7 @@ public: me->SetReactState(REACT_PASSIVE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -619,7 +619,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_death_ravagerAI(creature); } @@ -650,7 +650,7 @@ class npc_stillpine_capitive : public CreatureScript { npc_stillpine_capitiveAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { if (GameObject* cage = me->FindNearestGameObject(GO_BRISTELIMB_CAGE, 5.0f)) { @@ -669,12 +669,11 @@ class npc_stillpine_capitive : public CreatureScript Talk(CAPITIVE_SAY, owner); _player = owner; } - Position pos; - me->GetNearPosition(pos, 3.0f, 0.0f); + Position pos = me->GetNearPosition(3.0f, 0.0f); me->GetMotionMaster()->MovePoint(POINT_INIT, pos); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != POINT_INIT) return; @@ -686,7 +685,7 @@ class npc_stillpine_capitive : public CreatureScript _events.ScheduleEvent(EVENT_DESPAWN, 3500); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_movementComplete) return; @@ -703,7 +702,7 @@ class npc_stillpine_capitive : public CreatureScript bool _movementComplete; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_stillpine_capitiveAI(creature); } @@ -714,7 +713,7 @@ class go_bristlelimb_cage : public GameObjectScript public: go_bristlelimb_cage() : GameObjectScript("go_bristlelimb_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->SetGoState(GO_STATE_READY); if (player->GetQuestStatus(QUEST_THE_PROPHECY_OF_AKIDA) == QUEST_STATUS_INCOMPLETE) diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index c935a83b3ee..05aab1ef723 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -54,11 +54,11 @@ public: { npc_webbed_creatureAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { uint32 spawnCreatureID = 0; @@ -79,7 +79,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_webbed_creatureAI(creature); } @@ -103,7 +103,7 @@ class go_princess_stillpines_cage : public GameObjectScript public: go_princess_stillpines_cage() : GameObjectScript("go_princess_stillpines_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->SetGoState(GO_STATE_READY); if (Creature* stillpine = go->FindNearestCreature(NPC_PRINCESS_STILLPINE, 25, true)) @@ -124,7 +124,7 @@ public: { npc_princess_stillpineAI(Creature* creature) : ScriptedAI(creature) { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == 1) { @@ -134,7 +134,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_princess_stillpineAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index ae98fbc4072..688dada2fc5 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -69,12 +69,12 @@ public: uint32 FallAsleepTimer; - void Reset() OVERRIDE + void Reset() override { FallAsleepTimer = urand(10000, 45000); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -96,7 +96,7 @@ public: } } - void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE + void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override { if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_AWAKEN) ClearSleeping(); @@ -124,7 +124,7 @@ public: SetFollowPaused(false); } - void UpdateFollowerAI(uint32 diff) OVERRIDE + void UpdateFollowerAI(uint32 diff) override { if (!UpdateVictim()) { @@ -149,7 +149,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED) { @@ -164,7 +164,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kerlonianAI(creature); } @@ -206,21 +206,21 @@ public: { npc_prospector_remtravelAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (urand(0, 1)) Talk(SAY_REM_AGGRO, who); } - void JustSummoned(Creature* /*pSummoned*/) OVERRIDE + void JustSummoned(Creature* /*pSummoned*/) override { //unsure if it should be any //pSummoned->AI()->AttackStart(me); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -282,7 +282,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2) { @@ -295,7 +295,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_prospector_remtravelAI(creature); } @@ -325,9 +325,9 @@ public: { npc_threshwackonatorAI(Creature* creature) : FollowerAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -347,13 +347,13 @@ public: me->setFaction(FACTION_HOSTILE); if (Player* pHolder = GetLeaderForFollower()) - me->AI()->AttackStart(pHolder); + AttackStart(pHolder); SetFollowComplete(); } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -370,7 +370,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -379,7 +379,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_threshwackonatorAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 58322963c6e..0a56253cabd 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -65,7 +65,7 @@ public: { npc_aged_dying_ancient_kodoAI(Creature* creature) : ScriptedAI(creature) { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->GetEntry() == NPC_SMEED && me->IsWithinDistInMap(who, 10.0f) && !me->HasAura(SPELL_KODO_KOMBO_GOSSIP)) @@ -77,7 +77,7 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_KODO_KOMBO_ITEM) { @@ -99,7 +99,7 @@ public: } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF)) { @@ -111,7 +111,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_aged_dying_ancient_kodoAI(creature); } @@ -134,7 +134,7 @@ class go_iruxos : public GameObjectScript public: go_iruxos() : GameObjectScript("go_iruxos") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true)) player->SummonCreature(NPC_DEMON_SPIRIT, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); @@ -161,18 +161,18 @@ public: { npc_dalindaAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_RETURN_TO_VAHLARRIEL); return; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); @@ -188,7 +188,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -199,7 +199,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL) { @@ -212,7 +212,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dalindaAI(creature); } @@ -233,7 +233,7 @@ class go_demon_portal : public GameObjectScript public: go_demon_portal() : GameObjectScript("go_demon_portal") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_PORTAL_OF_THE_LEGION) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_GUARDIAN, 5.0f, true)) { diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index 08f4f2ebfdf..358814d440a 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -44,7 +44,7 @@ class npc_lazy_peon : public CreatureScript public: npc_lazy_peon() : CreatureScript("npc_lazy_peon") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lazy_peonAI(creature); } @@ -58,20 +58,20 @@ public: uint32 RebuffTimer; bool work; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; RebuffTimer = 0; work = false; } - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 id) override { if (id == 1) work = true; } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id != SPELL_AWAKEN_PEON) return; @@ -87,7 +87,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (work == true) me->HandleEmoteCommand(EMOTE_ONESHOT_WORK_CHOPWOOD); @@ -186,7 +186,7 @@ class npc_tiger_matriarch_credit : public CreatureScript events.ScheduleEvent(EVENT_CHECK_SUMMON_AURA, 2000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -221,7 +221,7 @@ class npc_tiger_matriarch_credit : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tiger_matriarch_creditAI(creature); } @@ -239,14 +239,14 @@ class npc_tiger_matriarch : public CreatureScript { } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { _events.Reset(); _events.ScheduleEvent(EVENT_POUNCE, 100); _events.ScheduleEvent(EVENT_NOSUMMON, 50000); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->GetTypeId() != TYPEID_PLAYER || !summoner->GetVehicle()) return; @@ -259,7 +259,7 @@ class npc_tiger_matriarch : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_UNIT || !victim->IsSummon()) return; @@ -274,7 +274,7 @@ class npc_tiger_matriarch : public CreatureScript me->DespawnOrUnsummon(); } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (!attacker->IsSummon()) return; @@ -298,7 +298,7 @@ class npc_tiger_matriarch : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -338,7 +338,7 @@ class npc_tiger_matriarch : public CreatureScript uint64 _tigerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tiger_matriarchAI(creature); } @@ -362,7 +362,7 @@ class npc_troll_volunteer : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (me->isDead() || !me->GetOwner()) return; @@ -389,7 +389,7 @@ class npc_troll_volunteer : public CreatureScript me->GetMotionMaster()->MoveFollow(player, 5.0f, float(rand_norm() + 1.0f) * M_PI / 3.0f * 4.0f); } - void Reset() OVERRIDE + void Reset() override { _complete = false; me->AddAura(SPELL_VOLUNTEER_AURA, me); @@ -405,7 +405,7 @@ class npc_troll_volunteer : public CreatureScript return _mountModel; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -413,7 +413,7 @@ class npc_troll_volunteer : public CreatureScript me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_AOE_TURNIN && caster->GetEntry() == NPC_URUZIN && !_complete) { @@ -432,7 +432,7 @@ class npc_troll_volunteer : public CreatureScript bool _complete; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_troll_volunteerAI(creature); } @@ -447,9 +447,9 @@ class spell_mount_check : public SpellScriptLoader class spell_mount_check_AuraScript : public AuraScript { - PrepareAuraScript(spell_mount_check_AuraScript) + PrepareAuraScript(spell_mount_check_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MOUNTING_CHECK)) return false; @@ -476,13 +476,13 @@ class spell_mount_check : public SpellScriptLoader target->SetSpeed(MOVE_WALK, owner->GetSpeedRate(MOVE_WALK)); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_mount_check_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mount_check_AuraScript(); } @@ -495,9 +495,9 @@ class spell_voljin_war_drums : public SpellScriptLoader class spell_voljin_war_drums_SpellScript : public SpellScript { - PrepareSpellScript(spell_voljin_war_drums_SpellScript) + PrepareSpellScript(spell_voljin_war_drums_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MOTIVATE_1)) return false; @@ -521,13 +521,13 @@ class spell_voljin_war_drums : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_voljin_war_drums_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_voljin_war_drums_SpellScript(); } @@ -552,9 +552,9 @@ class spell_voodoo : public SpellScriptLoader class spell_voodoo_SpellScript : public SpellScript { - PrepareSpellScript(spell_voodoo_SpellScript) + PrepareSpellScript(spell_voodoo_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BREW) || !sSpellMgr->GetSpellInfo(SPELL_GHOSTLY) || !sSpellMgr->GetSpellInfo(SPELL_HEX1) || !sSpellMgr->GetSpellInfo(SPELL_HEX2) || @@ -571,13 +571,13 @@ class spell_voodoo : public SpellScriptLoader GetCaster()->CastSpell(target, spellid, false); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_voodoo_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_voodoo_SpellScript(); } diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 6030ce9f8fc..ee244e51b09 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -74,7 +74,7 @@ class npc_risen_husk_spirit : public CreatureScript { npc_risen_husk_spiritAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); if (me->GetEntry() == NPC_RISEN_HUSK) @@ -83,7 +83,7 @@ class npc_risen_husk_spirit : public CreatureScript events.ScheduleEvent(EVENT_INTANGIBLE_PRESENCE, 5000); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer->GetTypeId() == TYPEID_PLAYER) { @@ -95,7 +95,7 @@ class npc_risen_husk_spirit : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -126,113 +126,13 @@ class npc_risen_husk_spirit : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_risen_husk_spiritAI(creature); } }; /*###### -## npc_theramor_guard -######*/ - -enum TheramoreGuard -{ - QUEST_DISCREDITING_THE_DESERTERS = 11133, - - NPC_THERAMORE_GUARD = 4979, - - SPELL_DOCTORED_LEAFLET = 42725, - SPELL_PROPAGANDIZED = 42246, - - SAY_QUEST1 = 0, - SAY_QUEST2 = 1, - SAY_QUEST3 = 2 -}; - -#define GOSSIP_ITEM_THERAMORE_GUARD "You look like an intelligent person. Why don't you read one of these leaflets and give it some thought?" - -class npc_theramore_guard : public CreatureScript -{ -public: - npc_theramore_guard() : CreatureScript("npc_theramore_guard") { } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (player->GetQuestStatus(QUEST_DISCREDITING_THE_DESERTERS) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_THERAMORE_GUARD, GOSSIP_SENDER_MAIN, GOSSIP_SENDER_INFO); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - - if (action == GOSSIP_SENDER_INFO) - { - player->CLOSE_GOSSIP_MENU(); - player->KilledMonsterCredit(NPC_THERAMORE_GUARD, 0); - creature->AI()->Talk(SAY_QUEST1); - creature->CastSpell(creature, SPELL_DOCTORED_LEAFLET, false); - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - CAST_AI(npc_theramore_guard::npc_theramore_guardAI, creature->AI())->YellTimer = 4000; - CAST_AI(npc_theramore_guard::npc_theramore_guardAI, creature->AI())->bYellTimer = true; - } - - return true; - } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_theramore_guardAI(creature); - } - - struct npc_theramore_guardAI : public ScriptedAI - { - npc_theramore_guardAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 YellTimer; - uint32 Step; - bool bYellTimer; - - void Reset() OVERRIDE - { - bYellTimer = false; - Step = 0; - } - - void UpdateAI(uint32 Diff) OVERRIDE - { - if (!me->HasAura(SPELL_PROPAGANDIZED)) - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - - if (bYellTimer && YellTimer <= Diff) - { - switch (Step) - { - case 0: - Talk(SAY_QUEST2); - YellTimer = 3000; - ++Step; - break; - case 1: - Talk(SAY_QUEST3); - me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); - Step = 0; - bYellTimer = false; - break; - } - } - else - YellTimer -= Diff; - } - }; -}; - -/*###### ## npc_lady_jaina_proudmoore ######*/ @@ -249,7 +149,7 @@ class npc_lady_jaina_proudmoore : public CreatureScript public: npc_lady_jaina_proudmoore() : CreatureScript("npc_lady_jaina_proudmoore") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_SENDER_INFO) @@ -260,7 +160,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -289,7 +189,7 @@ class npc_nat_pagle : public CreatureScript public: npc_nat_pagle() : CreatureScript("npc_nat_pagle") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -298,7 +198,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -342,7 +242,7 @@ class npc_private_hendel : public CreatureScript public: npc_private_hendel() : CreatureScript("npc_private_hendel") { } - bool OnQuestAccept(Player* /*player*/, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* /*player*/, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT16) creature->setFaction(FACTION_HOSTILE); @@ -350,7 +250,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_private_hendelAI(creature); } @@ -359,12 +259,12 @@ public: { npc_private_hendelAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); } - void AttackedBy(Unit* pAttacker) OVERRIDE + void AttackedBy(Unit* pAttacker) override { if (me->GetVictim()) return; @@ -375,7 +275,7 @@ public: AttackStart(pAttacker); } - void DamageTaken(Unit* pDoneBy, uint32 &Damage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32 &Damage) override { if (Damage > me->GetHealth() || me->HealthBelowPctDamaged(20, Damage)) { @@ -409,7 +309,7 @@ class npc_zelfrax : public CreatureScript public: npc_zelfrax() : CreatureScript("npc_zelfrax") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_zelfraxAI(creature); } @@ -421,7 +321,7 @@ public: MoveToDock(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -436,7 +336,7 @@ public: } } - void MovementInform(uint32 Type, uint32 /*Id*/) OVERRIDE + void MovementInform(uint32 Type, uint32 /*Id*/) override { if (Type != POINT_MOTION_TYPE) return; @@ -458,7 +358,7 @@ public: Talk(SAY_ZELFRAX2); } - void UpdateAI(uint32 /*Diff*/) OVERRIDE + void UpdateAI(uint32 /*Diff*/) override { if (!UpdateVictim()) return; @@ -494,12 +394,12 @@ class npc_stinky : public CreatureScript public: npc_stinky() : CreatureScript("npc_stinky") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_stinkyAI(creature); } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_STINKYS_ESCAPE_H || quest->GetQuestId() == QUEST_STINKYS_ESCAPE_A) { @@ -518,7 +418,7 @@ public: { npc_stinkyAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -563,14 +463,14 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_ATTACKED_1, who); } - void Reset() OVERRIDE { } + void Reset() override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Player* player = GetPlayerForEscort(); if (player && HasEscortState(STATE_ESCORT_ESCORTING)) @@ -583,7 +483,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -612,7 +512,7 @@ class spell_ooze_zap : public SpellScriptLoader { PrepareSpellScript(spell_ooze_zap_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_OOZE_ZAP)) return false; @@ -637,14 +537,14 @@ class spell_ooze_zap : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ooze_zap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_ooze_zap_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ooze_zap_SpellScript(); } @@ -659,7 +559,7 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader { PrepareSpellScript(spell_ooze_zap_channel_end_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_OOZE_ZAP_CHANNEL_END)) return false; @@ -674,13 +574,13 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader GetHitUnit()->Kill(GetHitUnit()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ooze_zap_channel_end_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ooze_zap_channel_end_SpellScript(); } @@ -695,7 +595,7 @@ class spell_energize_aoe : public SpellScriptLoader { PrepareSpellScript(spell_energize_aoe_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ENERGIZED)) return false; @@ -720,7 +620,7 @@ class spell_energize_aoe : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_energize_aoe_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_energize_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); @@ -728,7 +628,7 @@ class spell_energize_aoe : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_energize_aoe_SpellScript(); } @@ -749,7 +649,7 @@ class go_blackhoof_cage : public GameObjectScript public: go_blackhoof_cage() : GameObjectScript("go_blackhoof_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (Creature* prisoner = go->FindNearestCreature(NPC_THERAMORE_PRISONER, 1.0f)) @@ -772,7 +672,6 @@ void AddSC_dustwallow_marsh() new npc_private_hendel(); new npc_zelfrax(); new npc_stinky(); - new npc_theramore_guard(); new spell_ooze_zap(); new spell_ooze_zap_channel_end(); new spell_energize_aoe(); diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp index 2d322a7c079..b79bc1f088b 100644 --- a/src/server/scripts/Kalimdor/zone_felwood.cpp +++ b/src/server/scripts/Kalimdor/zone_felwood.cpp @@ -54,7 +54,7 @@ class npcs_riverbreeze_and_silversky : public CreatureScript public: npcs_riverbreeze_and_silversky() : CreatureScript("npcs_riverbreeze_and_silversky") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -65,7 +65,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp index 11e95f325c2..fa5336df1f3 100644 --- a/src/server/scripts/Kalimdor/zone_feralas.cpp +++ b/src/server/scripts/Kalimdor/zone_feralas.cpp @@ -42,7 +42,7 @@ class npc_gregan_brewspewer : public CreatureScript public: npc_gregan_brewspewer() : CreatureScript("npc_gregan_brewspewer") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -55,7 +55,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -97,7 +97,7 @@ class npc_oox22fe : public CreatureScript public: npc_oox22fe() : CreatureScript("npc_oox22fe") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_RESCUE_OOX22FE) { @@ -118,7 +118,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_oox22feAI(creature); } @@ -127,7 +127,7 @@ public: { npc_oox22feAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -162,20 +162,20 @@ public: } } - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) me->SetStandState(UNIT_STAND_STATE_DEAD); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { //For an small probability the npc says something when he get aggro if (urand(0, 9) > 7) Talk(SAY_OOX_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -192,7 +192,7 @@ class npc_screecher_spirit : public CreatureScript public: npc_screecher_spirit() : CreatureScript("npc_screecher_spirit") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->SEND_GOSSIP_MENU(2039, creature->GetGUID()); player->TalkedToCreature(creature->GetEntry(), creature->GetGUID()); @@ -227,13 +227,13 @@ class spell_gordunni_trap : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnCast += SpellCastFn(spell_gordunni_trap_SpellScript::HandleDummy); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gordunni_trap_SpellScript(); } diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 3b77a2c7a0b..0c07d5dc6df 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -62,7 +62,7 @@ class npc_bunthen_plainswind : public CreatureScript public: npc_bunthen_plainswind() : CreatureScript("npc_bunthen_plainswind") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -82,7 +82,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->getClass() != CLASS_DRUID) player->SEND_GOSSIP_MENU(4916, creature->GetGUID()); @@ -121,7 +121,7 @@ class npc_great_bear_spirit : public CreatureScript public: npc_great_bear_spirit() : CreatureScript("npc_great_bear_spirit") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -149,7 +149,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { //ally or horde quest if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE) @@ -177,7 +177,7 @@ class npc_silva_filnaveth : public CreatureScript public: npc_silva_filnaveth() : CreatureScript("npc_silva_filnaveth") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -197,7 +197,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->getClass() != CLASS_DRUID) player->SEND_GOSSIP_MENU(4913, creature->GetGUID()); @@ -288,7 +288,7 @@ class npc_clintar_spirit : public CreatureScript public: npc_clintar_spirit() : CreatureScript("npc_clintar_spirit") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_clintar_spiritAI(creature); } @@ -310,7 +310,7 @@ public: bool EventOnWait; - void Reset() OVERRIDE + void Reset() override { if (!PlayerGUID) { @@ -323,7 +323,7 @@ public: } } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { std::list<Player*> playerOnQuestList; Trinity::AnyPlayerInObjectRangeCheck checker(me, 5.0f); @@ -345,7 +345,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!PlayerGUID) return; @@ -359,7 +359,7 @@ public: } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); if (player && player->IsInCombat() && player->getAttackerForHelper()) @@ -384,7 +384,7 @@ public: return; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -546,7 +546,7 @@ public: } else if (EventOnWait) EventTimer -= diff; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { CurrWP = waypointId; EventTimer = 0; @@ -593,7 +593,7 @@ public: EventMap events; - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) return; @@ -607,19 +607,19 @@ public: } } - void EnterCombat(Unit* /*attacker*/) OVERRIDE + void EnterCombat(Unit* /*attacker*/) override { events.Reset(); events.ScheduleEvent(EVENT_CAST_CLEAVE, urand(3000, 5000)); events.ScheduleEvent(EVENT_CAST_STARFALL, urand(8000, 10000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(SPELL_OMEN_SUMMON_SPOTLIGHT); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_ELUNE_CANDLE) { @@ -630,7 +630,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -654,7 +654,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_omenAI(creature); } @@ -671,13 +671,13 @@ public: EventMap events; - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_DESPAWN, 5*MINUTE*IN_MILLISECONDS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -697,7 +697,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_giant_spotlightAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_mulgore.cpp b/src/server/scripts/Kalimdor/zone_mulgore.cpp index f70460ec7b6..fa35371f3f2 100644 --- a/src/server/scripts/Kalimdor/zone_mulgore.cpp +++ b/src/server/scripts/Kalimdor/zone_mulgore.cpp @@ -24,7 +24,6 @@ SDCategory: Mulgore EndScriptData */ /* ContentData -npc_skorn_whitecloud npc_kyle_frenzied npc_plains_vision EndContentData */ @@ -35,41 +34,6 @@ EndContentData */ #include "Player.h" #include "SpellInfo.h" -/*###### -# npc_skorn_whitecloud -######*/ - -#define GOSSIP_SW "Tell me a story, Skorn." - -class npc_skorn_whitecloud : public CreatureScript -{ -public: - npc_skorn_whitecloud() : CreatureScript("npc_skorn_whitecloud") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) - player->SEND_GOSSIP_MENU(523, creature->GetGUID()); - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (!player->GetQuestRewardStatus(770)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SW, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(522, creature->GetGUID()); - - return true; - } - -}; - /*##### # npc_kyle_frenzied ######*/ @@ -91,7 +55,7 @@ class npc_kyle_frenzied : public CreatureScript public: npc_kyle_frenzied() : CreatureScript("npc_kyle_frenzied") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kyle_frenziedAI(creature); } @@ -106,7 +70,7 @@ public: uint32 EventTimer; uint8 EventPhase; - void Reset() OVERRIDE + void Reset() override { EventActive = false; IsMovingToLunch = false; @@ -118,7 +82,7 @@ public: me->UpdateEntry(NPC_KYLE_FRENZIED); } - void SpellHit(Unit* Caster, SpellInfo const* Spell) OVERRIDE + void SpellHit(Unit* Caster, SpellInfo const* Spell) override { if (!me->GetVictim() && !EventActive && Spell->Id == SPELL_LUNCH) { @@ -138,7 +102,7 @@ public: } } - void MovementInform(uint32 Type, uint32 PointId) OVERRIDE + void MovementInform(uint32 Type, uint32 PointId) override { if (Type != POINT_MOTION_TYPE || !EventActive) return; @@ -147,7 +111,7 @@ public: IsMovingToLunch = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (EventActive) { @@ -264,7 +228,7 @@ class npc_plains_vision : public CreatureScript public: npc_plains_vision() : CreatureScript("npc_plains_vision") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_plains_visionAI(creature); } @@ -277,16 +241,16 @@ public: uint8 WayPointId; uint8 amountWP; - void Reset() OVERRIDE + void Reset() override { WayPointId = 0; newWaypoint = true; amountWP = 49; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -303,7 +267,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (newWaypoint) { @@ -321,7 +285,6 @@ public: void AddSC_mulgore() { - new npc_skorn_whitecloud(); new npc_kyle_frenzied(); new npc_plains_vision(); } diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp index 4b6670043bf..36ea884cf50 100644 --- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp +++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp @@ -47,7 +47,7 @@ class npc_shenthul : public CreatureScript public: npc_shenthul() : CreatureScript("npc_shenthul") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_SHATTERED_SALUTE) { @@ -57,7 +57,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_shenthulAI(creature); } @@ -72,7 +72,7 @@ public: uint32 ResetTimer; uint64 PlayerGUID; - void Reset() OVERRIDE + void Reset() override { CanTalk = false; CanEmote = false; @@ -81,9 +81,9 @@ public: PlayerGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CanEmote) { @@ -114,7 +114,7 @@ public: DoMeleeAttackIfReady(); } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { if (emote == TEXT_EMOTE_SALUTE && player->GetQuestStatus(QUEST_SHATTERED_SALUTE) == QUEST_STATUS_INCOMPLETE) { @@ -155,7 +155,7 @@ class npc_thrall_warchief : public CreatureScript public: npc_thrall_warchief() : CreatureScript("npc_thrall_warchief") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -192,7 +192,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -204,7 +204,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_thrall_warchiefAI(creature); } @@ -216,15 +216,15 @@ public: uint32 ChainLightningTimer; uint32 ShockTimer; - void Reset() OVERRIDE + void Reset() override { ChainLightningTimer = 2000; ShockTimer = 8000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index b002bbe8a48..04cec70b7ad 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -65,7 +65,7 @@ class npcs_rutgar_and_frankal : public CreatureScript public: npcs_rutgar_and_frankal() : CreatureScript("npcs_rutgar_and_frankal") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -129,7 +129,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -415,7 +415,7 @@ class npc_anachronos_the_ancient : public CreatureScript public: npc_anachronos_the_ancient() : CreatureScript("npc_anachronos_the_ancient") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_anachronos_the_ancientAI(creature); } @@ -435,7 +435,7 @@ public: uint64 PlayerGUID; bool eventEnd; - void Reset() OVERRIDE + void Reset() override { AnimationTimer = 1500; AnimationCount = 0; @@ -649,11 +649,11 @@ public: Unit* mob = NULL; for (uint8 i = 0; i < 4; ++i) { - mob = player->FindNearestCreature(entries[i], 50, me); + mob = player->FindNearestCreature(entries[i], 50); while (mob) { mob->RemoveFromWorld(); - mob = player->FindNearestCreature(15423, 50, me); + mob = player->FindNearestCreature(15423, 50); } } break; @@ -706,7 +706,7 @@ public: break; case 65: me->SetVisible(false); - if (Creature* AnachronosQuestTrigger = (Unit::GetCreature(*me, AnachronosQuestTriggerGUID))) + if (Creature* AnachronosQuestTrigger = (ObjectAccessor::GetCreature(*me, AnachronosQuestTriggerGUID))) { Talk(ARYGOS_YELL_1); AnachronosQuestTrigger->AI()->EnterEvadeMode(); @@ -717,7 +717,7 @@ public: } ++AnimationCount; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AnimationTimer) { @@ -728,7 +728,7 @@ public: if (AnimationCount < 65) me->CombatStop(); if (AnimationCount == 65 || eventEnd) - me->AI()->EnterEvadeMode(); + EnterEvadeMode(); } }; @@ -743,7 +743,7 @@ class npc_qiraj_war_spawn : public CreatureScript public: npc_qiraj_war_spawn() : CreatureScript("npc_qiraj_war_spawn") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_qiraj_war_spawnAI(creature); } @@ -758,7 +758,7 @@ public: bool Timers; bool hasTarget; - void Reset() OVERRIDE + void Reset() override { MobGUID = 0; PlayerGUID = 0; @@ -766,10 +766,10 @@ public: hasTarget = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void JustDied(Unit* /*slayer*/) OVERRIDE; + void EnterCombat(Unit* /*who*/) override { } + void JustDied(Unit* /*slayer*/) override; - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Timers) { @@ -830,7 +830,7 @@ public: } hasTarget = true; if (target) - me->AI()->AttackStart(target); + AttackStart(target); } if (!(me->FindNearestCreature(15379, 60))) DoCast(me, 33652); @@ -856,7 +856,7 @@ class npc_anachronos_quest_trigger : public CreatureScript public: npc_anachronos_quest_trigger() : CreatureScript("npc_anachronos_quest_trigger") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_anachronos_quest_triggerAI(creature); } @@ -877,7 +877,7 @@ public: bool Announced; bool Failed; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; @@ -970,7 +970,7 @@ public: Announced = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!PlayerGUID || !EventStarted) return; @@ -1002,11 +1002,11 @@ void npc_qiraj_war_spawn::npc_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/) if (!MobGUID) return; - if (Creature* mob = Unit::GetCreature(*me, MobGUID)) + if (Creature* mob = ObjectAccessor::GetCreature(*me, MobGUID)) if (npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI* triggerAI = CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, mob->AI())) triggerAI->LiveCounter(); -}; +} /*##### # go_crystalline_tear @@ -1017,11 +1017,11 @@ class go_crystalline_tear : public GameObjectScript public: go_crystalline_tear() : GameObjectScript("go_crystalline_tear") { } - bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest) override { if (quest->GetQuestId() == QUEST_A_PAWN_ON_THE_ETERNAL_BOARD) { - if (Creature* trigger = go->FindNearestCreature(15454, 100, player)) + if (Creature* trigger = go->FindNearestCreature(15454, 100)) { Unit* Merithra = trigger->SummonCreature(15378, -8034.535f, 1535.14f, 2.61f, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000); Unit* Caelestrasz = trigger->SummonCreature(15379, -8032.767f, 1533.148f, 2.61f, 1.5f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000); @@ -1288,7 +1288,7 @@ class go_wind_stone : public GameObjectScript } public: - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { uint8 rank = GetPlayerRank(player); @@ -1366,7 +1366,7 @@ class go_wind_stone : public GameObjectScript return true; } - bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); player->PlayerTalkClass->SendCloseGossip(); diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp index 92fd5a3fd47..7b29ced9860 100644 --- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp +++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp @@ -49,7 +49,7 @@ class npc_braug_dimspirit : public CreatureScript public: npc_braug_dimspirit() : CreatureScript("npc_braug_dimspirit") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -66,7 +66,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -117,7 +117,7 @@ public: { npc_kaya_flathoofAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -139,15 +139,15 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void Reset() OVERRIDE { } + void Reset() override { } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_PROTECT_KAYA) { @@ -161,7 +161,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kaya_flathoofAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index 204a2960611..23e8e2f26ff 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -19,14 +19,13 @@ /* ScriptData SDName: Tanaris SD%Complete: 80 -SDComment: Quest support: 648, 1560, 2954, 4005, 10277, 10279(Special flight path). Noggenfogger vendor +SDComment: Quest support: 648, 1560, 2954, 4005, 10277, 10279(Special flight path). SDCategory: Tanaris EndScriptData */ /* ContentData npc_aquementas npc_custodian_of_time -npc_marin_noggenfogger npc_steward_of_time npc_stone_watcher_of_norgannon npc_OOX17 @@ -58,7 +57,7 @@ class npc_aquementas : public CreatureScript public: npc_aquementas() : CreatureScript("npc_aquementas") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_aquementasAI(creature); } @@ -74,7 +73,7 @@ public: uint32 FrostShockTimer; uint32 AquaJetTimer; - void Reset() OVERRIDE + void Reset() override { SendItemTimer = 0; SwitchFactionTimer = 10000; @@ -101,12 +100,12 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(AGGRO_YELL_AQUE, who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (isFriendly) { @@ -124,7 +123,7 @@ public: { if (SendItemTimer <= diff) { - if (me->GetVictim()->GetTypeId() == TYPEID_PLAYER) + if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER) SendItem(me->GetVictim()); SendItemTimer = 5000; } else SendItemTimer -= diff; @@ -175,7 +174,7 @@ class npc_custodian_of_time : public CreatureScript public: npc_custodian_of_time() : CreatureScript("npc_custodian_of_time") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_custodian_of_timeAI(creature); } @@ -184,7 +183,7 @@ public: { npc_custodian_of_timeAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -251,7 +250,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) @@ -270,10 +269,10 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void Reset() OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void Reset() override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); } @@ -282,39 +281,6 @@ public: }; /*###### -## npc_marin_noggenfogger -######*/ - -class npc_marin_noggenfogger : public CreatureScript -{ -public: - npc_marin_noggenfogger() : CreatureScript("npc_marin_noggenfogger") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_TRADE) - player->GetSession()->SendListInventory(creature->GetGUID()); - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (creature->IsVendor() && player->GetQuestRewardStatus(2662)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } - -}; - -/*###### ## npc_steward_of_time ######*/ @@ -325,7 +291,7 @@ class npc_steward_of_time : public CreatureScript public: npc_steward_of_time() : CreatureScript("npc_steward_of_time") { } - bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest) override { if (quest->GetQuestId() == 10279) //Quest: To The Master's Lair player->CastSpell(player, 34891, true); //(Flight through Caverns) @@ -333,7 +299,7 @@ public: return false; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -342,7 +308,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -376,7 +342,7 @@ class npc_stone_watcher_of_norgannon : public CreatureScript public: npc_stone_watcher_of_norgannon() : CreatureScript("npc_stone_watcher_of_norgannon") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -409,7 +375,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -447,7 +413,7 @@ class npc_OOX17 : public CreatureScript public: npc_OOX17() : CreatureScript("npc_OOX17") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == Q_OOX17) { @@ -463,7 +429,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_OOX17AI(creature); } @@ -472,7 +438,7 @@ public: { npc_OOX17AI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -500,14 +466,14 @@ public: } } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_OOX_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -542,7 +508,7 @@ class npc_tooga : public CreatureScript public: npc_tooga() : CreatureScript("npc_tooga") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_TOOGA) { @@ -553,7 +519,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_toogaAI(creature); } @@ -568,7 +534,7 @@ public: uint64 TortaGUID; - void Reset() OVERRIDE + void Reset() override { CheckSpeechTimer = 2500; PostEventTimer = 1000; @@ -577,7 +543,7 @@ public: TortaGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -596,7 +562,7 @@ public: } } - void MovementInform(uint32 MotionType, uint32 PointId) OVERRIDE + void MovementInform(uint32 MotionType, uint32 PointId) override { FollowerAI::MovementInform(MotionType, PointId); @@ -607,7 +573,7 @@ public: SetFollowComplete(); } - void UpdateFollowerAI(uint32 Diff) OVERRIDE + void UpdateFollowerAI(uint32 Diff) override { if (!UpdateVictim()) { @@ -618,7 +584,7 @@ public: { PostEventTimer = 5000; - Creature* torta = Creature::GetCreature(*me, TortaGUID); + Creature* torta = ObjectAccessor::GetCreature(*me, TortaGUID); if (!torta || !torta->IsAlive()) { //something happened, so just complete @@ -681,7 +647,6 @@ void AddSC_tanaris() { new npc_aquementas(); new npc_custodian_of_time(); - new npc_marin_noggenfogger(); new npc_steward_of_time(); new npc_stone_watcher_of_norgannon(); new npc_OOX17(); diff --git a/src/server/scripts/Kalimdor/zone_teldrassil.cpp b/src/server/scripts/Kalimdor/zone_teldrassil.cpp index a94813f2b0f..e1b2144c97c 100644 --- a/src/server/scripts/Kalimdor/zone_teldrassil.cpp +++ b/src/server/scripts/Kalimdor/zone_teldrassil.cpp @@ -50,7 +50,7 @@ class npc_mist : public CreatureScript public: npc_mist() : CreatureScript("npc_mist") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_MIST) if (npc_mistAI* pMistAI = CAST_AI(npc_mist::npc_mistAI, creature->AI())) @@ -59,7 +59,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mistAI(creature); } @@ -68,9 +68,9 @@ public: { npc_mistAI(Creature* creature) : FollowerAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -98,7 +98,7 @@ public: } //call not needed here, no known abilities - /*void UpdateFollowerAI(const uint32 Diff) OVERRIDE + /*void UpdateFollowerAI(const uint32 Diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 7b08baa0511..dabfee00065 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -55,7 +55,7 @@ class npc_beaten_corpse : public CreatureScript public: npc_beaten_corpse() : CreatureScript("npc_beaten_corpse") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF +1) @@ -66,7 +66,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_LOST_IN_BATTLE) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_LOST_IN_BATTLE) == QUEST_STATUS_COMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CORPSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -102,7 +102,7 @@ class npc_gilthares : public CreatureScript public: npc_gilthares() : CreatureScript("npc_gilthares") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_FREE_FROM_HOLD) { @@ -117,7 +117,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_giltharesAI(creature); } @@ -126,9 +126,9 @@ public: { npc_giltharesAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -158,7 +158,7 @@ public: } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { //not always use if (rand()%4) @@ -191,7 +191,7 @@ class npc_taskmaster_fizzule : public CreatureScript public: npc_taskmaster_fizzule() : CreatureScript("npc_taskmaster_fizzule") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_taskmaster_fizzuleAI(creature); } @@ -208,7 +208,7 @@ public: uint32 ResetTimer; uint8 FlareCount; - void Reset() OVERRIDE + void Reset() override { IsFriend = false; ResetTimer = 120000; @@ -229,7 +229,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY) { @@ -240,9 +240,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsFriend) { @@ -259,7 +259,7 @@ public: DoMeleeAttackIfReady(); } - void ReceiveEmote(Player* /*player*/, uint32 emote) OVERRIDE + void ReceiveEmote(Player* /*player*/, uint32 emote) override { if (emote == TEXT_EMOTE_SALUTE) { @@ -307,7 +307,7 @@ class npc_twiggy_flathead : public CreatureScript public: npc_twiggy_flathead() : CreatureScript("npc_twiggy_flathead") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_twiggy_flatheadAI(creature); } @@ -327,7 +327,7 @@ public: uint64 AffrayChallenger[6]; uint64 BigWill; - void Reset() OVERRIDE + void Reset() override { EventInProgress = false; EventGrate = false; @@ -345,7 +345,7 @@ public: BigWill = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || !who->IsAlive() || EventInProgress) return; @@ -359,7 +359,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (EventInProgress) { @@ -380,7 +380,7 @@ public: { if (AffrayChallenger[i]) { - Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]); + Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]); if (creature && creature->IsAlive()) creature->DisappearAndDie(); } @@ -388,7 +388,7 @@ public: if (BigWill) // unsummon bigWill { - Creature* creature = Unit::GetCreature((*me), BigWill); + Creature* creature = ObjectAccessor::GetCreature((*me), BigWill); if (creature && creature->IsAlive()) creature->DisappearAndDie(); } @@ -429,7 +429,7 @@ public: { if (AffrayChallenger[i]) { - Creature* creature = Unit::GetCreature((*me), AffrayChallenger[i]); + Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i]); if ((!creature || (!creature->IsAlive())) && !ChallengerDown[i]) { Talk(SAY_TWIGGY_FLATHEAD_DOWN); @@ -526,7 +526,7 @@ public: uint32 PostEventTimer; uint32 PostEventCount; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -539,7 +539,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -562,7 +562,7 @@ public: } } - void WaypointStart(uint32 PointId) OVERRIDE + void WaypointStart(uint32 PointId) override { Player* player = GetPlayerForEscort(); @@ -581,7 +581,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_PILOT_WIZZ) me->SetStandState(UNIT_STAND_STATE_DEAD); @@ -590,7 +590,7 @@ public: summoned->AI()->AttackStart(me); } - void UpdateEscortAI(const uint32 Diff) OVERRIDE + void UpdateEscortAI(const uint32 Diff) override { if (!UpdateVictim()) { @@ -632,7 +632,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPE) { @@ -643,7 +643,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wizzlecrank_shredderAI(creature); } diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp index f027fd05f8b..b36037d9995 100644 --- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp +++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp @@ -57,7 +57,7 @@ class npc_kanati : public CreatureScript public: npc_kanati() : CreatureScript("npc_kanati") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_PROTECT_KANATI) if (npc_kanatiAI* pEscortAI = CAST_AI(npc_kanati::npc_kanatiAI, creature->AI())) @@ -66,7 +66,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kanatiAI(creature); } @@ -75,9 +75,9 @@ public: { npc_kanatiAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -98,7 +98,7 @@ public: me->SummonCreature(NPC_GALAK_ASS, GalakLoc, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -142,7 +142,7 @@ class npc_lakota_windsong : public CreatureScript public: npc_lakota_windsong() : CreatureScript("npc_lakota_windsong") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_FREE_AT_LAST) { @@ -155,7 +155,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lakota_windsongAI(creature); } @@ -164,9 +164,9 @@ public: { npc_lakota_windsongAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -225,7 +225,7 @@ class npc_paoka_swiftmountain : public CreatureScript public: npc_paoka_swiftmountain() : CreatureScript("npc_paoka_swiftmountain") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_HOMEWARD) { @@ -238,7 +238,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_paoka_swiftmountainAI(creature); } @@ -247,9 +247,9 @@ public: { npc_paoka_swiftmountainAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -294,7 +294,7 @@ class npc_plucky : public CreatureScript public: npc_plucky() : CreatureScript("npc_plucky") { } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -307,7 +307,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_SCOOP) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_P, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -317,7 +317,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pluckyAI(creature); } @@ -329,7 +329,7 @@ public: uint32 NormFaction; uint32 ResetTimer; - void Reset() OVERRIDE + void Reset() override { ResetTimer = 120000; @@ -342,7 +342,7 @@ public: DoCast(me, SPELL_PLUCKY_CHICKEN, false); } - void ReceiveEmote(Player* player, uint32 TextEmote) OVERRIDE + void ReceiveEmote(Player* player, uint32 TextEmote) override { if (player->GetQuestStatus(QUEST_SCOOP) == QUEST_STATUS_INCOMPLETE) { @@ -368,7 +368,7 @@ public: } } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (me->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP)) { @@ -404,7 +404,7 @@ class go_panther_cage : public GameObjectScript public: go_panther_cage() : GameObjectScript("go_panther_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(5151) == QUEST_STATUS_INCOMPLETE) @@ -426,7 +426,7 @@ class npc_enraged_panther : public CreatureScript public: npc_enraged_panther() : CreatureScript("npc_enraged_panther") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_enraged_pantherAI(creature); } @@ -435,13 +435,13 @@ public: { npc_enraged_pantherAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_PASSIVE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp index 10538fb2387..3b303ffa463 100644 --- a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp +++ b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp @@ -48,7 +48,7 @@ class npc_cairne_bloodhoof : public CreatureScript public: npc_cairne_bloodhoof() : CreatureScript("npc_cairne_bloodhoof") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_SENDER_INFO) @@ -59,7 +59,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -72,7 +72,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_cairne_bloodhoofAI(creature); } @@ -87,7 +87,7 @@ public: uint32 ThunderclapTimer; uint32 UppercutTimer; - void Reset() OVERRIDE + void Reset() override { BerserkerChargeTimer = 30000; CleaveTimer = 5000; @@ -96,9 +96,9 @@ public: UppercutTimer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp index dd165f807b2..09f82b0417c 100644 --- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp +++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp @@ -57,7 +57,7 @@ class npc_ame : public CreatureScript public: npc_ame() : CreatureScript("npc_ame") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_CHASING_AME) { @@ -70,7 +70,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ameAI(creature); } @@ -81,7 +81,7 @@ public: uint32 DemoralizingShoutTimer; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (Player* player = GetPlayerForEscort()) { @@ -110,23 +110,23 @@ public: } } - void Reset() OVERRIDE + void Reset() override { DemoralizingShoutTimer = 5000; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_CHASING_AME); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) @@ -173,7 +173,7 @@ class npc_ringo : public CreatureScript public: npc_ringo() : CreatureScript("npc_ringo") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_A_LITTLE_HELP) { @@ -187,7 +187,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ringoAI(creature); } @@ -202,7 +202,7 @@ public: uint64 SpraggleGUID; - void Reset() OVERRIDE + void Reset() override { FaintTimer = urand(30000, 60000); EndEventProgress = 0; @@ -210,7 +210,7 @@ public: SpraggleGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -231,7 +231,7 @@ public: } } - void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE + void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override { if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_REVIVE_RINGO) ClearFaint(); @@ -262,7 +262,7 @@ public: SetFollowPaused(false); } - void UpdateFollowerAI(uint32 Diff) OVERRIDE + void UpdateFollowerAI(uint32 Diff) override { if (!UpdateVictim()) { @@ -270,7 +270,7 @@ public: { if (EndEventTimer <= Diff) { - Creature* spraggle = Creature::GetCreature(*me, SpraggleGUID); + Creature* spraggle = ObjectAccessor::GetCreature(*me, SpraggleGUID); if (!spraggle || !spraggle->IsAlive()) { SetFollowComplete(); diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 3ae8bc38120..11b720ad8d5 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -45,7 +45,7 @@ class npc_rivern_frostwind : public CreatureScript public: npc_rivern_frostwind() : CreatureScript("npc_rivern_frostwind") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -54,7 +54,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -292,7 +292,7 @@ class npc_ranshalla : public CreatureScript { public: npc_ranshalla() : CreatureScript("npc_ranshalla") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_GUARDIANS_ALTAR) { @@ -307,7 +307,7 @@ public: return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ranshallaAI(creature); } @@ -328,7 +328,7 @@ public: uint64 _voiceEluneGUID; uint64 _altarGUID; - void Reset() OVERRIDE + void Reset() override { _delayTimer = 0; } @@ -394,7 +394,7 @@ public: StartNextDialogueText(SAY_PRIESTESS_ALTAR_3); } - void WaypointReached(uint32 pointId) OVERRIDE + void WaypointReached(uint32 pointId) override { switch (pointId) { @@ -563,7 +563,7 @@ public: } - void UpdateEscortAI(const uint32 diff) OVERRIDE + void UpdateEscortAI(const uint32 diff) override { DialogueUpdate(diff); @@ -596,7 +596,7 @@ class go_elune_fire : public GameObjectScript { public: go_elune_fire() : GameObjectScript("go_elune_fire") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { // Check if we are using the torches or the altar bool isAltar = false; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp index 8f71ae47bcb..42ceaec4def 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp @@ -57,14 +57,14 @@ class boss_amanitar : public CreatureScript { boss_amanitarAI(Creature* creature) : BossAI(creature, DATA_AMANITAR) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -75,7 +75,7 @@ class boss_amanitar : public CreatureScript events.ScheduleEvent(EVENT_SPAWN, 5 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI); @@ -87,9 +87,7 @@ class boss_amanitar : public CreatureScript for (uint8 i = 0; i < 30; ++i) { - Position pos; - me->GetPosition(&pos); - me->GetRandomNearPosition(pos, 30.0f); + Position pos = me->GetRandomNearPosition(30.0f); pos.m_positionZ = me->GetMap()->GetHeight(pos.GetPositionX(), pos.GetPositionY(), MAX_HEIGHT) + 2.0f; if (Creature* trigger = me->SummonCreature(NPC_TRIGGER, pos)) @@ -110,7 +108,7 @@ class boss_amanitar : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -152,7 +150,7 @@ class boss_amanitar : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetAhnKahetAI<boss_amanitarAI>(creature); } @@ -169,7 +167,7 @@ public: EventMap events; - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_AURA, 1 * IN_MILLISECONDS); @@ -183,16 +181,16 @@ public: DoCast(SPELL_POWER_MUSHROOM_VISUAL_AURA); } - void DamageTaken(Unit* /*attacker*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32 &damage) override { if (damage >= me->GetHealth() && me->GetEntry() == NPC_HEALTHY_MUSHROOM) DoCast(me, SPELL_HEALTHY_MUSHROOM_POTENT_FUNGUS, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*victim*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*victim*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -221,7 +219,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_amanitar_mushroomsAI(creature); } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index 84c9181e495..ab142c1375c 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -60,14 +60,14 @@ class boss_elder_nadox : public CreatureScript { boss_elder_nadoxAI(Creature* creature) : BossAI(creature, DATA_ELDER_NADOX) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); AmountHealthModifier = 1; GuardianDied = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -82,13 +82,13 @@ class boss_elder_nadox : public CreatureScript } } - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override { if (summon->GetEntry() == NPC_AHNKAHAR_GUARDIAN) GuardianDied = true; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_RESPECT_YOUR_ELDERS) return !GuardianDied ? 1 : 0; @@ -96,19 +96,19 @@ class boss_elder_nadox : public CreatureScript return 0; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -160,7 +160,7 @@ class boss_elder_nadox : public CreatureScript uint8 AmountHealthModifier; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetAhnKahetAI<boss_elder_nadoxAI>(creature); } @@ -177,7 +177,7 @@ class npc_ahnkahar_nerubian : public CreatureScript EventMap events; - void Reset() OVERRIDE + void Reset() override { if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN) DoCast(me, SPELL_GUARDIAN_AURA, true); @@ -185,13 +185,13 @@ class npc_ahnkahar_nerubian : public CreatureScript events.ScheduleEvent(EVENT_SPRINT, 13 * IN_MILLISECONDS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN) me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -215,7 +215,7 @@ class npc_ahnkahar_nerubian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ahnkahar_nerubianAI(creature); } @@ -234,15 +234,15 @@ public: creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*victim*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*victim*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nadox_eggsAI(creature); } @@ -274,14 +274,14 @@ public: targets.remove_if(GuardianCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_elder_nadox_guardian_SpellScript(); } @@ -292,7 +292,7 @@ class achievement_respect_your_elders : public AchievementCriteriaScript public: achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 7555ba39206..1c042f4d185 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -82,7 +82,7 @@ public: return 100*(me->GetHealth()-damage)/me->GetMaxHealth(); } - void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) damage = 0; @@ -95,7 +95,7 @@ public: } } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { if (spell->Id == SPELL_INSANITY) { @@ -143,7 +143,7 @@ public: } } - void Reset() OVERRIDE + void Reset() override { uiMindFlayTimer = 8*IN_MILLISECONDS; uiShadowBoltVolleyTimer = 5*IN_MILLISECONDS; @@ -165,7 +165,7 @@ public: me->SetControlled(false, UNIT_STATE_STUNNED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -173,7 +173,7 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { Summons.Summon(summon); } @@ -202,7 +202,7 @@ public: return spell; } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { uint32 phase = summon->GetPhaseMask(); uint32 nextPhase = 0; @@ -211,7 +211,7 @@ public: // Check if all summons in this phase killed for (SummonList::const_iterator iter = Summons.begin(); iter != Summons.end(); ++iter) { - if (Creature* visage = Unit::GetCreature(*me, *iter)) + if (Creature* visage = ObjectAccessor::GetCreature(*me, *iter)) { // Not all are dead if (phase == visage->GetPhaseMask()) @@ -246,7 +246,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -285,7 +285,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -295,14 +295,14 @@ public: ResetPlayersPhaseMask(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_volazjAI>(creature); } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index f599e6e7c27..b78bdae5c87 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -87,7 +87,7 @@ public: bool volunteerWork; bool bFirstTime; - void Reset() OVERRIDE + void Reset() override { uiOpFerTimer = urand(15*IN_MILLISECONDS, 20*IN_MILLISECONDS); @@ -112,7 +112,7 @@ public: bFirstTime = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER)) return; @@ -122,7 +122,7 @@ public: instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER)) return; @@ -130,7 +130,7 @@ public: ScriptedAI::AttackStart(who); } - void KilledUnit(Unit* Victim) OVERRIDE + void KilledUnit(Unit* Victim) override { if (!Victim || Victim->GetTypeId() != TYPEID_PLAYER) return; @@ -138,19 +138,19 @@ public: Talk(TEXT_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(TEXT_DEATH); instance->SetBossState(DATA_JEDOGA_SHADOWSEEKER, DONE); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_INITIAND_KILLED) volunteerWork = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_VOLUNTEER_WORK) return volunteerWork ? 1 : 0; @@ -158,7 +158,7 @@ public: return 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!instance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER)) return; @@ -212,7 +212,7 @@ public: } else { - if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET))) + if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_PL_JEDOGA_TARGET))) { AttackStart(target); instance->SetData(DATA_JEDOGA_RESET_INITIANDS, 0); @@ -266,7 +266,7 @@ public: bCanDown = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS && instance->GetData(DATA_ALL_INITIAND_DEAD)) MoveDown(); @@ -319,7 +319,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_jedoga_shadowseekerAI>(creature); } @@ -343,7 +343,7 @@ public: bool bWalking; - void Reset() OVERRIDE + void Reset() override { bWalking = false; bCheckTimer = 2*IN_MILLISECONDS; @@ -364,7 +364,7 @@ public: } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (!killer || !instance) return; @@ -388,11 +388,11 @@ public: instance->SetData64(DATA_PL_JEDOGA_TARGET, killer->GetGUID()); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !victim) return; @@ -400,7 +400,7 @@ public: ScriptedAI::AttackStart(victim); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !who) @@ -409,7 +409,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiPointId) override { if (uiType != POINT_MOTION_TYPE || !instance) return; @@ -430,7 +430,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bCheckTimer <= diff) { @@ -482,7 +482,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_jedoga_initiandAI>(creature); } @@ -522,13 +522,13 @@ public: bool bCast; bool bCast2; - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*victim*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*victim*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!bRemoved && me->GetPositionX() > 440.0f) { @@ -565,7 +565,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_jedogas_aufseher_triggerAI>(creature); } @@ -578,7 +578,7 @@ class achievement_volunteer_work : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp index efe439de440..e3156e21371 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp @@ -88,9 +88,12 @@ class boss_prince_taldaram : public CreatureScript boss_prince_taldaramAI(Creature* creature) : BossAI(creature, DATA_PRINCE_TALDARAM) { me->SetDisableGravity(true); + _flameSphereTargetGUID = 0; + _embraceTargetGUID = 0; + _embraceTakenDamage = 0; } - void Reset() OVERRIDE + void Reset() override { _Reset(); _flameSphereTargetGUID = 0; @@ -98,7 +101,7 @@ class boss_prince_taldaram : public CreatureScript _embraceTakenDamage = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -122,7 +125,7 @@ class boss_prince_taldaram : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -201,7 +204,7 @@ class boss_prince_taldaram : public CreatureScript DoMeleeAttackIfReady(); } - void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*doneBy*/, uint32& damage) override { Unit* embraceTarget = GetEmbraceTarget(); @@ -216,13 +219,13 @@ class boss_prince_taldaram : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -269,7 +272,7 @@ class boss_prince_taldaram : public CreatureScript uint32 _embraceTakenDamage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetAhnKahetAI<boss_prince_taldaramAI>(creature); } @@ -283,9 +286,12 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript struct npc_prince_taldaram_flame_sphereAI : public ScriptedAI { - npc_prince_taldaram_flame_sphereAI(Creature* creature) : ScriptedAI(creature) { } + npc_prince_taldaram_flame_sphereAI(Creature* creature) : ScriptedAI(creature) + { + _flameSphereTargetGUID = 0; + } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_FLAME_SPHERE_SPAWN_EFFECT, true); DoCast(me, SPELL_FLAME_SPHERE_VISUAL, true); @@ -296,15 +302,15 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript _events.ScheduleEvent(EVENT_DESPAWN, 13 * IN_MILLISECONDS); } - void SetGUID(uint64 guid, int32 /*id = 0*/) OVERRIDE + void SetGUID(uint64 guid, int32 /*id = 0*/) override { _flameSphereTargetGUID = guid; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -361,7 +367,7 @@ class npc_prince_taldaram_flame_sphere : public CreatureScript uint64 _flameSphereTargetGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_prince_taldaram_flame_sphereAI(creature); } @@ -373,7 +379,7 @@ class go_prince_taldaram_sphere : public GameObjectScript public: go_prince_taldaram_sphere() : GameObjectScript("go_prince_taldaram_sphere") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) @@ -413,7 +419,7 @@ class spell_prince_taldaram_conjure_flame_sphere : public SpellScriptLoader { PrepareSpellScript(spell_prince_taldaram_conjure_flame_sphere_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FLAME_SPHERE_SUMMON_1) || !sSpellMgr->GetSpellInfo(SPELL_FLAME_SPHERE_SUMMON_2) @@ -434,13 +440,13 @@ class spell_prince_taldaram_conjure_flame_sphere : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_prince_taldaram_conjure_flame_sphere_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_prince_taldaram_conjure_flame_sphere_SpellScript(); } @@ -462,13 +468,13 @@ class spell_prince_taldaram_flame_sphere_summon : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_prince_taldaram_flame_sphere_summon_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_prince_taldaram_flame_sphere_summon_SpellScript(); } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp index 6f03228ad76..bf7b4355ea6 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp @@ -55,7 +55,7 @@ class instance_ahnkahet : public InstanceMapScript InitiandGUIDs.clear(); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -82,7 +82,7 @@ class instance_ahnkahet : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -117,7 +117,7 @@ class instance_ahnkahet : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -129,7 +129,7 @@ class instance_ahnkahet : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -141,9 +141,9 @@ class instance_ahnkahet : public InstanceMapScript SwitchTrigger = data; break; case DATA_JEDOGA_RESET_INITIANDS: - for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr) + for (uint64 guid : InitiandGUIDs) { - if (Creature* creature = instance->GetCreature(*itr)) + if (Creature* creature = instance->GetCreature(guid)) { creature->Respawn(); if (!creature->IsInEvadeMode()) @@ -156,7 +156,7 @@ class instance_ahnkahet : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -164,9 +164,9 @@ class instance_ahnkahet : public InstanceMapScript case DATA_SPHERE_2: return SpheresState[type - DATA_SPHERE_1]; case DATA_ALL_INITIAND_DEAD: - for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr) + for (uint64 guid : InitiandGUIDs) { - Creature* cr = instance->GetCreature(*itr); + Creature* cr = instance->GetCreature(guid); if (!cr || cr->IsAlive()) return 0; } @@ -179,7 +179,7 @@ class instance_ahnkahet : public InstanceMapScript return 0; } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { switch (type) { @@ -194,7 +194,7 @@ class instance_ahnkahet : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -214,11 +214,11 @@ class instance_ahnkahet : public InstanceMapScript { std::vector<uint64> vInitiands; vInitiands.clear(); - for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr) + for (uint64 guid : InitiandGUIDs) { - Creature* cr = instance->GetCreature(*itr); + Creature* cr = instance->GetCreature(guid); if (cr && cr->IsAlive()) - vInitiands.push_back(*itr); + vInitiands.push_back(guid); } if (vInitiands.empty()) return 0; @@ -235,7 +235,7 @@ class instance_ahnkahet : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -245,9 +245,9 @@ class instance_ahnkahet : public InstanceMapScript case DATA_JEDOGA_SHADOWSEEKER: if (state == DONE) { - for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr) + for (uint64 guid : InitiandGUIDs) { - if (Creature* cr = instance->GetCreature(*itr)) + if (Creature* cr = instance->GetCreature(guid)) cr->DespawnOrUnsummon(); } } @@ -258,7 +258,7 @@ class instance_ahnkahet : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -269,7 +269,7 @@ class instance_ahnkahet : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -321,7 +321,7 @@ class instance_ahnkahet : public InstanceMapScript uint8 SwitchTrigger; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ahnkahet_InstanceScript(map); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 8a9fc2993a8..bf5855c3318 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -113,7 +113,7 @@ public: SummonList Summons; - void Reset() OVERRIDE + void Reset() override { CarrionBeetlesTimer = 8*IN_MILLISECONDS; LeechingSwarmTimer = 20*IN_MILLISECONDS; @@ -136,8 +136,7 @@ public: Creature* DoSummonImpaleTarget(Unit* target) { - Position targetPos; - target->GetPosition(&targetPos); + Position targetPos = target->GetPosition(); if (TempSummon* impaleTarget = me->SummonCreature(CREATURE_IMPALE_TARGET, targetPos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 6*IN_MILLISECONDS)) { @@ -151,7 +150,7 @@ public: return NULL; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DelayTimer = 0; @@ -163,7 +162,7 @@ public: instance->SetBossState(DATA_ANUBARAK, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -189,7 +188,7 @@ public: } break; case IMPALE_PHASE_ATTACK: - if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget)) + if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget)) { impaleTarget->CastSpell(impaleTarget, SPELL_IMPALE_SPIKE, false); impaleTarget->RemoveAurasDueToSpell(SPELL_IMPALE_SHAKEGROUND); @@ -198,7 +197,7 @@ public: ImpaleTimer = 1*IN_MILLISECONDS; break; case IMPALE_PHASE_DMG: - if (Creature* impaleTarget = Unit::GetCreature(*me, ImpaleTarget)) + if (Creature* impaleTarget = ObjectAccessor::GetCreature(*me, ImpaleTarget)) me->CastSpell(impaleTarget, SPELL_IMPALE_DMG, true); ImpalePhase = IMPALE_PHASE_TARGET; ImpaleTimer = 9*IN_MILLISECONDS; @@ -326,14 +325,14 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); Summons.DespawnAll(); instance->SetBossState(DATA_ANUBARAK, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -341,13 +340,13 @@ public: Talk(SAY_SLAY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { Summons.Summon(summon); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_anub_arakAI>(creature); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index a7ad7dbfb4b..10d34be46b6 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -72,7 +72,7 @@ public: float fMaxDistance; - void Reset() OVERRIDE + void Reset() override { me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 9.0f); me->SetFloatValue(UNIT_FIELD_COMBATREACH, 9.0f); @@ -91,7 +91,7 @@ public: } //when Hadronox kills any enemy (that includes a party member) she will regain 10% of her HP if the target had Leech Poison on - void KilledUnit(Unit* Victim) OVERRIDE + void KilledUnit(Unit* Victim) override { // not sure if this aura check is correct, I think it is though if (!Victim || !Victim->HasAura(DUNGEON_MODE(SPELL_LEECH_POISON, H_SPELL_LEECH_POISON)) || !me->IsAlive()) @@ -100,12 +100,12 @@ public: me->ModifyHealth(int32(me->CountPctFromMaxHealth(10))); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_HADRONOX, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetBossState(DATA_HADRONOX, IN_PROGRESS); me->SetInCombatWithZone(); @@ -132,7 +132,7 @@ public: EnterEvadeMode(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -188,7 +188,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_hadronoxAI>(creature); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 2fe619a5367..00aa2120225 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -26,30 +26,22 @@ enum Spells { SPELL_MIND_FLAY = 52586, - H_SPELL_MIND_FLAY = 59367, SPELL_CURSE_OF_FATIGUE = 52592, - H_SPELL_CURSE_OF_FATIGUE = 59368, SPELL_FRENZY = 28747, //maybe 53361 SPELL_SUMMON_SKITTERING_SWARMER = 52438, //AOE Effect 140, maybe 52439 SPELL_SUMMON_SKITTERING_SWARMER_1 = 52439, //Summon 3x 28735 - H_SPELL_ACID_SPLASH = 59363, SPELL_ACID_SPLASH = 52446, SPELL_CHARGE = 16979, //maybe is another spell SPELL_BACKSTAB = 52540, SPELL_SHADOW_BOLT = 52534, - H_SPELL_SHADOW_BOLT = 59357, SPELL_SHADOW_NOVA = 52535, - H_SPELL_SHADOW_NOVA = 59358, SPELL_STRIKE = 52532, SPELL_CLEAVE = 49806, SPELL_ENRAGE = 52470, SPELL_INFECTED_BITE = 52469, - H_SPELL_INFECTED_BITE = 59364, SPELL_WEB_WRAP = 52086, //the spell is not working properly SPELL_BLINDING_WEBS = 52524, - H_SPELL_BLINDING_WEBS = 59365, - SPELL_POSION_SPRAY = 52493, - H_SPELL_POSION_SPRAY = 59366 + SPELL_POSION_SPRAY = 52493 }; enum Mobs @@ -69,7 +61,7 @@ enum Yells SAY_SEND_GROUP = 5 }; -const Position SpawnPoint[] = +Position const SpawnPoint[] = { { 566.164f, 682.087f, 769.079f, 2.21657f }, { 529.042f, 706.941f, 777.298f, 1.0821f }, @@ -81,444 +73,573 @@ const Position SpawnPoint[] = { 552.625f, 706.408f, 777.177f, 3.4383f } }; +enum Events +{ + EVENT_SUMMON = 1, + EVENT_MIND_FLAY, + EVENT_CURSE_FATIGUE +}; + class boss_krik_thir : public CreatureScript { -public: - boss_krik_thir() : CreatureScript("boss_krik_thir") { } + public: + boss_krik_thir() : CreatureScript("boss_krik_thir") { } - struct boss_krik_thirAI : public ScriptedAI - { - boss_krik_thirAI(Creature* creature) : ScriptedAI(creature) + struct boss_krik_thirAI : public BossAI { - instance = creature->GetInstanceScript(); - } + boss_krik_thirAI(Creature* creature) : BossAI(creature, DATA_KRIKTHIR_THE_GATEWATCHER) { } - InstanceScript* instance; + void Reset() override + { + _Reset(); + } - uint32 uiMindFlayTimer; - uint32 uiCurseFatigueTimer; - uint32 uiSummonTimer; + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _EnterCombat(); + Summon(); - void Reset() OVERRIDE - { - uiMindFlayTimer = 15*IN_MILLISECONDS; - uiCurseFatigueTimer = 12*IN_MILLISECONDS; + events.ScheduleEvent(EVENT_SUMMON, 15000); + events.ScheduleEvent(EVENT_MIND_FLAY, 15000); + events.ScheduleEvent(EVENT_CURSE_FATIGUE, 12000); + } - instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, NOT_STARTED); - } + void Summon() + { + for (uint8 i = 0; i < 8; i++) + { + me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[i], TEMPSUMMON_TIMED_DESPAWN, 25000); + uint32 summon_entry = (i == 4 || i == 5 || i == 6) ? NPC_SKITTERING_INFECTIOR : NPC_SKITTERING_SWARMER; + me->SummonCreature(summon_entry, SpawnPoint[i], TEMPSUMMON_TIMED_DESPAWN, 25000); + } + } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); - Summon(); - uiSummonTimer = 15*IN_MILLISECONDS; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, IN_PROGRESS); - } + events.Update(diff); - void Summon() - { - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[0], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[0], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[1], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[1], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[2], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[2], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[3], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[3], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_INFECTIOR, SpawnPoint[4], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[4], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_INFECTIOR, SpawnPoint[5], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[5], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_INFECTIOR, SpawnPoint[6], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[6], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[7], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - me->SummonCreature(NPC_SKITTERING_SWARMER, SpawnPoint[7], TEMPSUMMON_TIMED_DESPAWN, 25*IN_MILLISECONDS); - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SUMMON: + Summon(); + events.ScheduleEvent(EVENT_SUMMON, 15000); + break; + case EVENT_MIND_FLAY: + DoCastVictim(SPELL_MIND_FLAY); + events.ScheduleEvent(EVENT_MIND_FLAY, 15000); + break; + case EVENT_CURSE_FATIGUE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_CURSE_OF_FATIGUE); + events.ScheduleEvent(EVENT_CURSE_FATIGUE, 10000); + break; + default: + break; + } + } - if (uiSummonTimer <= diff) - { - Summon(); - uiSummonTimer = 15*IN_MILLISECONDS; - } else uiSummonTimer -= diff; + if (!me->HasAura(SPELL_FRENZY) && HealthBelowPct(10)) + DoCast(me, SPELL_FRENZY, true); - if (uiMindFlayTimer <= diff) - { - DoCastVictim(SPELL_MIND_FLAY); - uiMindFlayTimer = 15*IN_MILLISECONDS; - } else uiMindFlayTimer -= diff; + DoMeleeAttackIfReady(); + } - if (uiCurseFatigueTimer <= diff) + void JustDied(Unit* /*killer*/) override { - //WowWiki say "Curse of Fatigue-Kirk'thir will cast Curse of Fatigue on 2-3 targets periodically." - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CURSE_OF_FATIGUE); - if (Unit* tankTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true)) - DoCast(tankTarget, SPELL_CURSE_OF_FATIGUE); - - uiCurseFatigueTimer = 10*IN_MILLISECONDS; - } else uiCurseFatigueTimer -= diff; - - if (!me->HasAura(SPELL_FRENZY) && HealthBelowPct(10)) - DoCast(me, SPELL_FRENZY, true); - - DoMeleeAttackIfReady(); - } - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); + Talk(SAY_DEATH); + _JustDied(); + } - instance->SetBossState(DATA_KRIKTHIR_THE_GATEWATCHER, DONE); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() != TYPEID_PLAYER) + return; - void KilledUnit(Unit* victim) OVERRIDE - { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; + Talk(SAY_SLAY); + } - Talk(SAY_SLAY); - } + void JustSummoned(Creature* summoned) override + { + summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + } + }; - void JustSummoned(Creature* summoned) OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + return GetAzjolNerubAI<boss_krik_thirAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_krik_thirAI>(creature); - } }; class npc_skittering_infector : public CreatureScript { -public: - npc_skittering_infector() : CreatureScript("npc_skittering_infector") { } + public: + npc_skittering_infector() : CreatureScript("npc_skittering_infector") { } + + struct npc_skittering_infectorAI : public ScriptedAI + { + npc_skittering_infectorAI(Creature* creature) : ScriptedAI(creature) { } - struct npc_skittering_infectorAI : public ScriptedAI - { - npc_skittering_infectorAI(Creature* creature) : ScriptedAI(creature) { } + void JustDied(Unit* /*killer*/) override + { + DoCastAOE(SPELL_ACID_SPLASH); + } + }; - void JustDied(Unit* /*killer*/) OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - //The spell is not working propperly - DoCastVictim(SPELL_ACID_SPLASH, true); + return GetAzjolNerubAI<npc_skittering_infectorAI>(creature); } - }; +}; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_skittering_infectorAI(creature); - } +enum TrashEvents +{ + // Anubar Skrimisher + EVENT_ANUBAR_CHARGE = 1, + EVENT_BACKSTAB, + + // Anubar Shadowcaster + EVENT_SHADOW_BOLT, + EVENT_SHADOW_NOVA, + + // Anubar Warrior + EVENT_STRIKE, + EVENT_CLEAVE, + + // Watcher Gashra + EVENT_WEB_WRAP_GASHRA, + EVENT_INFECTED_BITE_GASHRA, + + // Watcher Narjil + EVENT_WEB_WRAP_NARJIL, + EVENT_INFECTED_BITE_NARJIL, + EVENT_BINDING_WEBS, + + // Watcher Silthik + EVENT_WEB_WRAP_SILTHIK, + EVENT_INFECTED_BITE_SILTHIK, + EVENT_POISON_SPRAY }; class npc_anub_ar_skirmisher : public CreatureScript { -public: - npc_anub_ar_skirmisher() : CreatureScript("npc_anub_ar_skirmisher") { } - - struct npc_anub_ar_skirmisherAI : public ScriptedAI - { - npc_anub_ar_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 uiChargeTimer; - uint32 uiBackstabTimer; + public: + npc_anub_ar_skirmisher() : CreatureScript("npc_anub_ar_skirmisher") { } - void Reset() OVERRIDE + struct npc_anub_ar_skirmisherAI : public ScriptedAI { - uiChargeTimer = 11*IN_MILLISECONDS; - uiBackstabTimer = 7*IN_MILLISECONDS; - } + npc_anub_ar_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + void Reset() override + { + events.Reset(); + } - if (uiChargeTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + events.ScheduleEvent(EVENT_ANUBAR_CHARGE, 11000); + events.ScheduleEvent(EVENT_BACKSTAB, 7000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { - DoResetThreat(); - me->AddThreat(target, 1.0f); - DoCast(target, SPELL_CHARGE, true); + switch (eventId) + { + case EVENT_ANUBAR_CHARGE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + { + DoResetThreat(); + me->AddThreat(target, 1.0f); + DoCast(target, SPELL_CHARGE, true); + } + events.ScheduleEvent(EVENT_ANUBAR_CHARGE, 15000); + break; + case EVENT_BACKSTAB: + DoCastVictim(SPELL_BACKSTAB); + events.ScheduleEvent(EVENT_BACKSTAB, 12000); + break; + default: + break; + } } - uiChargeTimer = 15*IN_MILLISECONDS; - } else uiChargeTimer -= diff; - if (uiBackstabTimer <= diff) - { - DoCastVictim(SPELL_BACKSTAB); - uiBackstabTimer = 12*IN_MILLISECONDS; - } else uiBackstabTimer -= diff; + DoMeleeAttackIfReady(); + } - DoMeleeAttackIfReady(); + private: + EventMap events; + }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetAzjolNerubAI<npc_anub_ar_skirmisherAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_anub_ar_skirmisherAI(creature); - } }; class npc_anub_ar_shadowcaster : public CreatureScript { -public: - npc_anub_ar_shadowcaster() : CreatureScript("npc_anub_ar_shadowcaster") { } - - struct npc_anub_ar_shadowcasterAI : public ScriptedAI - { - npc_anub_ar_shadowcasterAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 uiShadowBoltTimer; - uint32 uiShadowNovaTimer; + public: + npc_anub_ar_shadowcaster() : CreatureScript("npc_anub_ar_shadowcaster") { } - void Reset() OVERRIDE + struct npc_anub_ar_shadowcasterAI : public ScriptedAI { - uiShadowBoltTimer = 6*IN_MILLISECONDS; - uiShadowNovaTimer = 15*IN_MILLISECONDS; - } + npc_anub_ar_shadowcasterAI(Creature* creature) : ScriptedAI(creature) { } - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + void Reset() override + { + events.Reset(); + } - if (uiShadowBoltTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_SHADOW_BOLT, true); - uiShadowBoltTimer = 15*IN_MILLISECONDS; - } else uiShadowBoltTimer -= diff; + events.ScheduleEvent(EVENT_SHADOW_BOLT, 6000); + events.ScheduleEvent(EVENT_SHADOW_NOVA, 15000); + } - if (uiShadowNovaTimer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_SHADOW_NOVA, true); - uiShadowNovaTimer = 17*IN_MILLISECONDS; - } else uiShadowNovaTimer -= diff; + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } - }; + events.Update(diff); - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_anub_ar_shadowcasterAI(creature); - } -}; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; -class npc_anub_ar_warrior : public CreatureScript -{ -public: - npc_anub_ar_warrior() : CreatureScript("npc_anub_ar_warrior") { } + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SHADOW_BOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_SHADOW_BOLT, true); + events.ScheduleEvent(EVENT_SHADOW_BOLT, 15000); + break; + case EVENT_SHADOW_NOVA: + DoCastVictim(SPELL_SHADOW_NOVA, true); + events.ScheduleEvent(EVENT_SHADOW_NOVA, 17000); + break; + default: + break; + } + } - struct npc_anub_ar_warriorAI : public ScriptedAI - { - npc_anub_ar_warriorAI(Creature* creature) : ScriptedAI(creature){ } + DoMeleeAttackIfReady(); + } - uint32 uiCleaveTimer; - uint32 uiStrikeTimer; + private: + EventMap events; + }; - void Reset() OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - uiCleaveTimer = 11*IN_MILLISECONDS; - uiStrikeTimer = 6*IN_MILLISECONDS; + return GetAzjolNerubAI<npc_anub_ar_shadowcasterAI>(creature); } +}; + +class npc_anub_ar_warrior : public CreatureScript +{ + public: + npc_anub_ar_warrior() : CreatureScript("npc_anub_ar_warrior") { } - void UpdateAI(uint32 diff) OVERRIDE + struct npc_anub_ar_warriorAI : public ScriptedAI { - if (!UpdateVictim()) - return; + npc_anub_ar_warriorAI(Creature* creature) : ScriptedAI(creature) { } - if (uiStrikeTimer <= diff) + void Reset() override { - DoCastVictim(SPELL_STRIKE, true); - uiStrikeTimer = 15*IN_MILLISECONDS; - } else uiStrikeTimer -= diff; + events.Reset(); + } - if (uiCleaveTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCastVictim(SPELL_CLEAVE, true); - uiCleaveTimer = 17*IN_MILLISECONDS; - } else uiCleaveTimer -= diff; + events.ScheduleEvent(EVENT_CLEAVE, 11000); + events.ScheduleEvent(EVENT_STRIKE, 6000); + } - DoMeleeAttackIfReady(); - } - }; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_anub_ar_warriorAI(creature); - } -}; + events.Update(diff); -class npc_watcher_gashra : public CreatureScript -{ -public: - npc_watcher_gashra() : CreatureScript("npc_watcher_gashra") { } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - struct npc_watcher_gashraAI : public ScriptedAI - { - npc_watcher_gashraAI(Creature* creature) : ScriptedAI(creature) { } + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CLEAVE: + DoCastVictim(SPELL_STRIKE, true); + events.ScheduleEvent(EVENT_CLEAVE, 15000); + break; + case EVENT_STRIKE: + DoCastVictim(SPELL_CLEAVE, true); + events.ScheduleEvent(EVENT_STRIKE, 17000); + break; + default: + break; + } + } - uint32 uiWebWrapTimer; - uint32 uiInfectedBiteTimer; + DoMeleeAttackIfReady(); + } - void Reset() OVERRIDE - { - uiWebWrapTimer = 11*IN_MILLISECONDS; - uiInfectedBiteTimer = 4*IN_MILLISECONDS; - } + private: + EventMap events; + }; - void EnterCombat(Unit* /*who*/) OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - DoCast(me, SPELL_ENRAGE, true); + return GetAzjolNerubAI<npc_anub_ar_warriorAI>(creature); } +}; - void UpdateAI(uint32 diff) OVERRIDE +class npc_watcher_gashra : public CreatureScript +{ + public: + npc_watcher_gashra() : CreatureScript("npc_watcher_gashra") { } + + struct npc_watcher_gashraAI : public ScriptedAI { - if (!UpdateVictim()) - return; + npc_watcher_gashraAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - if (uiWebWrapTimer <= diff) + void Reset() override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_WEB_WRAP, true); - uiWebWrapTimer = 17*IN_MILLISECONDS; - } else uiWebWrapTimer -= diff; + _events.Reset(); + } - if (uiInfectedBiteTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - DoCastVictim(SPELL_INFECTED_BITE, true); - uiInfectedBiteTimer = 15*IN_MILLISECONDS; - } else uiInfectedBiteTimer -= diff; + DoCast(me, SPELL_ENRAGE, true); + _events.ScheduleEvent(EVENT_WEB_WRAP_GASHRA, 11000); + _events.ScheduleEvent(EVENT_INFECTED_BITE_GASHRA, 4000); + } - DoMeleeAttackIfReady(); - } - }; + void JustDied(Unit* /*killer*/) override + { + Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER)); + if (krikthir && krikthir->IsAlive()) + krikthir->AI()->Talk(SAY_PREFIGHT); + } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_watcher_gashraAI(creature); - } -}; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; -class npc_watcher_narjil : public CreatureScript -{ -public: - npc_watcher_narjil() : CreatureScript("npc_watcher_narjil") { } + _events.Update(diff); - struct npc_watcher_narjilAI : public ScriptedAI - { - npc_watcher_narjilAI(Creature* creature) : ScriptedAI(creature) { } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_WEB_WRAP_GASHRA: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_WEB_WRAP, true); + _events.ScheduleEvent(EVENT_WEB_WRAP_GASHRA, 17000); + break; + case EVENT_INFECTED_BITE_GASHRA: + DoCastVictim(SPELL_INFECTED_BITE, true); + _events.ScheduleEvent(EVENT_INFECTED_BITE_GASHRA, 15000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } - uint32 uiWebWrapTimer; - uint32 uiInfectedBiteTimer; - uint32 uiBindingWebsTimer; + private: + EventMap _events; + InstanceScript* _instance; + }; - void Reset() OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - uiWebWrapTimer = 11*IN_MILLISECONDS; - uiInfectedBiteTimer = 4*IN_MILLISECONDS; - uiBindingWebsTimer = 17*IN_MILLISECONDS; + return GetAzjolNerubAI<npc_watcher_gashraAI>(creature); } +}; + +class npc_watcher_narjil : public CreatureScript +{ + public: + npc_watcher_narjil() : CreatureScript("npc_watcher_narjil") { } - void UpdateAI(uint32 diff) OVERRIDE + struct npc_watcher_narjilAI : public ScriptedAI { - if (!UpdateVictim()) - return; + npc_watcher_narjilAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } + + void Reset() override + { + _events.Reset(); + } - if (uiWebWrapTimer <= diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_WEB_WRAP, true); - uiWebWrapTimer = 15*IN_MILLISECONDS; - } else uiWebWrapTimer -= diff; + _events.ScheduleEvent(EVENT_WEB_WRAP_NARJIL, 11000); + _events.ScheduleEvent(EVENT_INFECTED_BITE_NARJIL, 4000); + _events.ScheduleEvent(EVENT_BINDING_WEBS, 17000); + } - if (uiInfectedBiteTimer <= diff) + void JustDied(Unit* /*killer*/) override { - DoCastVictim(SPELL_INFECTED_BITE, true); - uiInfectedBiteTimer = 11*IN_MILLISECONDS; - } else uiInfectedBiteTimer -= diff; + Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER)); + if (krikthir && krikthir->IsAlive()) + krikthir->AI()->Talk(SAY_PREFIGHT); + } - if (uiBindingWebsTimer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_BLINDING_WEBS, true); - uiBindingWebsTimer = 17*IN_MILLISECONDS; - } else uiBindingWebsTimer -= diff; + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } - }; + _events.Update(diff); - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_watcher_narjilAI(creature); - } -}; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; -class npc_watcher_silthik : public CreatureScript -{ -public: - npc_watcher_silthik() : CreatureScript("npc_watcher_silthik") { } + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_WEB_WRAP_NARJIL: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_WEB_WRAP, true); + _events.ScheduleEvent(EVENT_WEB_WRAP_NARJIL, 15000); + break; + case EVENT_INFECTED_BITE_NARJIL: + DoCastVictim(SPELL_INFECTED_BITE, true); + _events.ScheduleEvent(EVENT_INFECTED_BITE_NARJIL, 11000); + break; + case EVENT_BINDING_WEBS: + DoCastVictim(SPELL_BLINDING_WEBS, true); + _events.ScheduleEvent(EVENT_BINDING_WEBS, 17000); + break; + default: + break; + } + } - struct npc_watcher_silthikAI : public ScriptedAI - { - npc_watcher_silthikAI(Creature* creature) : ScriptedAI(creature) { } + DoMeleeAttackIfReady(); + } - uint32 uiWebWrapTimer; - uint32 uiInfectedBiteTimer; - uint32 uiPoisonSprayTimer; + private: + EventMap _events; + InstanceScript* _instance; + }; - void Reset() OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - uiWebWrapTimer = 11*IN_MILLISECONDS; - uiInfectedBiteTimer = 4*IN_MILLISECONDS; - uiPoisonSprayTimer = 15*IN_MILLISECONDS; + return GetAzjolNerubAI<npc_watcher_narjilAI>(creature); } +}; - void UpdateAI(uint32 diff) OVERRIDE +class npc_watcher_silthik : public CreatureScript +{ + public: + npc_watcher_silthik() : CreatureScript("npc_watcher_silthik") { } + + struct npc_watcher_silthikAI : public ScriptedAI { - if (!UpdateVictim()) - return; + npc_watcher_silthikAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - if (uiWebWrapTimer <= diff) + void Reset() override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_WEB_WRAP, true); + _events.Reset(); + } - uiWebWrapTimer = 15*IN_MILLISECONDS; - } else uiWebWrapTimer -= diff; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_WEB_WRAP_SILTHIK, 11000); + _events.ScheduleEvent(EVENT_INFECTED_BITE_SILTHIK, 4000); + _events.ScheduleEvent(EVENT_POISON_SPRAY, 15000); + } - if (uiInfectedBiteTimer <= diff) + void JustDied(Unit* /*killer*/) override { - DoCastVictim(SPELL_INFECTED_BITE, true); - uiInfectedBiteTimer = 15*IN_MILLISECONDS; - } else uiInfectedBiteTimer -= diff; + Creature* krikthir = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KRIKTHIR_THE_GATEWATCHER)); + if (krikthir && krikthir->IsAlive()) + krikthir->AI()->Talk(SAY_PREFIGHT); + } - if (uiPoisonSprayTimer <= diff) + void UpdateAI(uint32 diff) override { - DoCastVictim(SPELL_POSION_SPRAY, true); - uiPoisonSprayTimer = 17*IN_MILLISECONDS; - } else uiPoisonSprayTimer -= diff; + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); + _events.Update(diff); - } - }; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_watcher_silthikAI(creature); - } + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_WEB_WRAP_SILTHIK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_WEB_WRAP, true); + _events.ScheduleEvent(EVENT_WEB_WRAP_SILTHIK, 15000); + break; + case EVENT_INFECTED_BITE_SILTHIK: + DoCastVictim(SPELL_INFECTED_BITE, true); + _events.ScheduleEvent(EVENT_INFECTED_BITE_SILTHIK, 11000); + break; + case EVENT_POISON_SPRAY: + DoCastVictim(SPELL_POSION_SPRAY, true); + _events.ScheduleEvent(EVENT_POISON_SPRAY, 17000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetAzjolNerubAI<npc_watcher_silthikAI>(creature); + } }; class achievement_watch_him_die : public AchievementCriteriaScript @@ -528,7 +649,7 @@ class achievement_watch_him_die : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 0b641eea3bc..106d7e54150 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -48,7 +48,7 @@ class instance_azjol_nerub : public InstanceMapScript WatcherNarjilGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -75,7 +75,7 @@ class instance_azjol_nerub : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -90,7 +90,7 @@ class instance_azjol_nerub : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -105,7 +105,7 @@ class instance_azjol_nerub : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -128,7 +128,7 @@ class instance_azjol_nerub : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -139,7 +139,7 @@ class instance_azjol_nerub : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -180,7 +180,7 @@ class instance_azjol_nerub : public InstanceMapScript uint64 WatcherNarjilGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_azjol_nerub_InstanceScript(map); } diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt index 42a7ee15bb6..8401ea4b9a5 100644 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ b/src/server/scripts/Northrend/CMakeLists.txt @@ -20,7 +20,6 @@ set(scripts_STAT_SRCS Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp Northrend/Ulduar/HallsOfLightning/boss_loken.cpp Northrend/Ulduar/Ulduar/boss_general_vezax.cpp - Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp Northrend/Ulduar/Ulduar/boss_thorim.cpp Northrend/Ulduar/Ulduar/boss_ignis.cpp Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -168,6 +167,7 @@ set(scripts_STAT_SRCS Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp + Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp Northrend/IcecrownCitadel/boss_festergut.cpp Northrend/IcecrownCitadel/boss_rotface.cpp diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 045564ce570..81e124cf5bc 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -134,7 +134,7 @@ public: { boss_sartharionAI(Creature* creature) : BossAI(creature, DATA_SARTHARION) { } - void Reset() OVERRIDE + void Reset() override { _isBerserk = false; _isSoftEnraged = false; @@ -150,12 +150,12 @@ public: instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_SARTHARION_AGGRO); _EnterCombat(); @@ -173,25 +173,25 @@ public: events.ScheduleEvent(EVENT_CALL_VESPERON, 120000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_SARTHARION_DEATH); _JustDied(); - if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) + if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) if (tenebron->IsAlive()) tenebron->DisappearAndDie(); - if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON))) + if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) if (shadron->IsAlive()) shadron->DisappearAndDie(); - if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON))) + if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON))) if (vesperon->IsAlive()) vesperon->DisappearAndDie(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SARTHARION_SLAY); @@ -211,7 +211,7 @@ public: void DrakeRespawn() // Drakes respawning system { - if (Creature* tenebron = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) + if (Creature* tenebron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) { tenebron->SetHomePosition(3239.07f, 657.235f, 86.8775f, 4.74729f); if (tenebron->IsAlive()) @@ -231,7 +231,7 @@ public: } } - if (Creature* shadron = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON))) + if (Creature* shadron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) { shadron->SetHomePosition(3363.06f, 525.28f, 98.362f, 4.76475f); if (shadron->IsAlive()) @@ -251,7 +251,7 @@ public: } } - if (Creature* vesperon = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON))) + if (Creature* vesperon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON))) { vesperon->SetHomePosition(3145.68f, 520.71f, 89.7f, 4.64258f); if (vesperon->IsAlive()) @@ -280,7 +280,7 @@ public: //if at least one of the dragons are alive and are being called bool _canUseWill = false; - if (Creature* fetchTene = Unit::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) + if (Creature* fetchTene = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TENEBRON))) { if (fetchTene->IsAlive() && !fetchTene->GetVictim()) { @@ -298,7 +298,7 @@ public: } } - if (Creature* fetchShad = Unit::GetCreature(*me, instance->GetData64(DATA_SHADRON))) + if (Creature* fetchShad = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) { if (fetchShad->IsAlive() && !fetchShad->GetVictim()) { @@ -316,7 +316,7 @@ public: } } - if (Creature* fetchVesp = Unit::GetCreature(*me, instance->GetData64(DATA_VESPERON))) + if (Creature* fetchVesp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VESPERON))) { if (fetchVesp && fetchVesp->IsAlive() && !fetchVesp->GetVictim()) { @@ -340,7 +340,7 @@ public: void CallDragon(uint32 dataId) { - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(dataId))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(dataId))) { if (temp->IsAlive() && !temp->GetVictim()) { @@ -375,7 +375,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == TWILIGHT_ACHIEVEMENTS) return drakeCount; @@ -398,7 +398,7 @@ public: Trinity::Containers::SelectRandomContainerElement(fireCyclonesList)->CastSpell(target, SPELL_LAVA_STRIKE, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -506,7 +506,7 @@ public: uint8 drakeCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<boss_sartharionAI>(creature); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp index be5a42517b5..0d07a9fde50 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp @@ -32,7 +32,7 @@ public: { instance_obsidian_sanctum_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { sartharionGUID = 0; tenebronGUID = 0; @@ -40,7 +40,7 @@ public: vesperonGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -64,7 +64,7 @@ public: } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -82,7 +82,7 @@ public: return true; } - uint64 GetData64(uint32 Data) const OVERRIDE + uint64 GetData64(uint32 Data) const override { switch (Data) { @@ -98,7 +98,7 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -109,7 +109,7 @@ public: return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -148,7 +148,7 @@ public: uint64 vesperonGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_obsidian_sanctum_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 9ae6f811e19..2caa16fc19d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -73,7 +73,7 @@ enum Enums //Whelps NPC_TWILIGHT_WHELP = 30890, - NPC_SHARTHARION_TWILIGHT_WHELP = 31214, + NPC_SARTHARION_TWILIGHT_WHELP = 31214, SPELL_FADE_ARMOR = 60708, // Reduces the armor of an enemy by 1500 for 15s //flame tsunami @@ -168,7 +168,7 @@ struct dummy_dragonAI : public ScriptedAI instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -180,7 +180,7 @@ struct dummy_dragonAI : public ScriptedAI _canLoot = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoZoneInCombat(); @@ -189,13 +189,13 @@ struct dummy_dragonAI : public ScriptedAI events.ScheduleEvent(EVENT_SHADOW_BREATH, 20000); } - void SetData(uint32 type, uint32 value) OVERRIDE + void SetData(uint32 type, uint32 value) override { if (type == DATA_CAN_LOOT) _canLoot = value; } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (!instance || type != POINT_MOTION_TYPE) return; @@ -253,7 +253,7 @@ struct dummy_dragonAI : public ScriptedAI { case NPC_TENEBRON: { - if (!instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) + if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) { for (uint32 i = 0; i < 6; ++i) me->SummonCreature(NPC_TWILIGHT_EGG, TwilightEggs[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000); @@ -267,7 +267,7 @@ struct dummy_dragonAI : public ScriptedAI } case NPC_SHADRON: { - if (!instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) + if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); else me->SummonCreature(NPC_ACOLYTE_OF_SHADRON, AcolyteofShadron2, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 28000); @@ -276,7 +276,7 @@ struct dummy_dragonAI : public ScriptedAI } case NPC_VESPERON: { - if (!instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) + if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) { if (Creature* acolyte = me->SummonCreature(NPC_ACOLYTE_OF_VESPERON, AcolyteofVesperon, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000)) { @@ -311,13 +311,13 @@ struct dummy_dragonAI : public ScriptedAI // Refresh respawnTime so time again are set to 30secs? } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!_canLoot) me->SetLootRecipient(NULL); @@ -365,7 +365,7 @@ struct dummy_dragonAI : public ScriptedAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -417,19 +417,19 @@ public: { npc_tenebronAI(Creature* creature) : dummy_dragonAI(creature) { } - void Reset() OVERRIDE + void Reset() override { dummy_dragonAI::Reset(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { dummy_dragonAI::EnterCombat(who); events.ScheduleEvent(EVENT_HATCH_EGGS, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // if no target, update dummy and return if (!UpdateVictim()) @@ -458,7 +458,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_tenebronAI>(creature); } @@ -477,7 +477,7 @@ public: { npc_shadronAI(Creature* creature) : dummy_dragonAI(creature) { } - void Reset() OVERRIDE + void Reset() override { dummy_dragonAI::Reset(); @@ -490,14 +490,14 @@ public: instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { dummy_dragonAI::EnterCombat(who); events.ScheduleEvent(EVENT_ACOLYTE_SHADRON, 60000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // if no target, update dummy and return if (!UpdateVictim()) @@ -537,7 +537,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_shadronAI>(creature); } @@ -556,19 +556,19 @@ public: { npc_vesperonAI(Creature* creature) : dummy_dragonAI(creature) { } - void Reset() OVERRIDE + void Reset() override { dummy_dragonAI::Reset(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { dummy_dragonAI::EnterCombat(who); events.ScheduleEvent(EVENT_ACOLYTE_VESPERON, 60000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // if no target, update dummy and return if (!UpdateVictim()) @@ -603,7 +603,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_vesperonAI>(creature); } @@ -625,7 +625,7 @@ class npc_acolyte_of_shadron : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { // Despawn the NPC automatically after 28 seconds me->DespawnOrUnsummon(28000); @@ -645,7 +645,7 @@ class npc_acolyte_of_shadron : public CreatureScript me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADRON))) instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); @@ -681,7 +681,7 @@ class npc_acolyte_of_shadron : public CreatureScript debuffTarget->RemoveAurasDueToSpell(SPELL_GIFT_OF_TWILIGTH_SHA); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -693,7 +693,7 @@ class npc_acolyte_of_shadron : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_acolyte_of_shadronAI>(creature); } @@ -715,7 +715,7 @@ class npc_acolyte_of_vesperon : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { // Despawn the NPC automatically after 28 seconds me->DespawnOrUnsummon(28000); @@ -725,7 +725,7 @@ class npc_acolyte_of_vesperon : public CreatureScript DoCast(me, SPELL_TWILIGHT_TORMENT_VESP_ACO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP_ACO); @@ -765,7 +765,7 @@ class npc_acolyte_of_vesperon : public CreatureScript instance->DoRemoveAurasDueToSpellOnPlayers(58835); // Components of spell Twilight Torment } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -777,7 +777,7 @@ class npc_acolyte_of_vesperon : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_acolyte_of_vesperonAI>(creature); } @@ -805,7 +805,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->AddAura(SPELL_TWILIGHT_SHIFT_ENTER, me); @@ -816,19 +816,19 @@ public: { me->RemoveAllAuras(); - if (!instance->GetBossState(DATA_SARTHARION) == IN_PROGRESS) + if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) me->SummonCreature(NPC_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); else - me->SummonCreature(NPC_SHARTHARION_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); + me->SummonCreature(NPC_SARTHARION_TWILIGHT_WHELP, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); me->DealDamage(me, me->GetHealth()); } - void JustSummoned(Creature* who) OVERRIDE + void JustSummoned(Creature* who) override { who->SetInCombatWithZone(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -846,7 +846,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetObsidianSanctumAI<npc_twilight_eggsAI>(creature); } @@ -875,7 +875,7 @@ public: me->AddAura(SPELL_FLAME_TSUNAMI, me); } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100); @@ -883,7 +883,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -908,7 +908,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_flame_tsunamiAI(creature); } @@ -935,7 +935,7 @@ public: SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->AddAura(46265, me); // Wrong, can't find proper visual @@ -943,7 +943,7 @@ public: events.ScheduleEvent(EVENT_VOID_BLAST, 5000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -962,7 +962,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_twilight_fissureAI(creature); } @@ -989,14 +989,14 @@ public: Reset(); } - void Reset() OVERRIDE + void Reset() override { me->RemoveAllAuras(); me->SetInCombatWithZone(); events.ScheduleEvent(EVENT_FADE_ARMOR, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1017,7 +1017,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_twilight_whelpAI(creature); } @@ -1028,7 +1028,7 @@ class achievement_twilight_assist : public AchievementCriteriaScript public: achievement_twilight_assist() : AchievementCriteriaScript("achievement_twilight_assist") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 1; } @@ -1039,7 +1039,7 @@ class achievement_twilight_duo : public AchievementCriteriaScript public: achievement_twilight_duo() : AchievementCriteriaScript("achievement_twilight_duo") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 2; } @@ -1050,7 +1050,7 @@ class achievement_twilight_zone : public AchievementCriteriaScript public: achievement_twilight_zone() : AchievementCriteriaScript("achievement_twilight_zone") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(TWILIGHT_ACHIEVEMENTS) == 3; } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 6c0acc9bba4..69605574f86 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -76,7 +76,7 @@ class boss_baltharus_the_warborn : public CreatureScript _introDone = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.SetPhase(PHASE_INTRO); @@ -85,7 +85,7 @@ class boss_baltharus_the_warborn : public CreatureScript instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetMaxHealth()); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -110,7 +110,7 @@ class boss_baltharus_the_warborn : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->InterruptNonMeleeSpells(false); _EnterCombat(); @@ -122,7 +122,7 @@ class boss_baltharus_the_warborn : public CreatureScript Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -130,20 +130,20 @@ class boss_baltharus_the_warborn : public CreatureScript xerestrasza->AI()->DoAction(ACTION_BALTHARUS_DEATH); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); summon->SetHealth(me->GetHealth()); summon->CastSpell(summon, SPELL_SPAWN_EFFECT, true); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) { @@ -162,7 +162,7 @@ class boss_baltharus_the_warborn : public CreatureScript instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { bool introPhase = events.IsInPhase(PHASE_INTRO); if (!UpdateVictim() && !introPhase) @@ -215,7 +215,7 @@ class boss_baltharus_the_warborn : public CreatureScript bool _introDone; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<boss_baltharus_the_warbornAI>(creature); } @@ -233,7 +233,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); _events.Reset(); @@ -242,21 +242,21 @@ class npc_baltharus_the_warborn_clone : public CreatureScript _events.ScheduleEvent(EVENT_ENERVATING_BRAND, urand(10000, 15000)); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { // Setting DATA_BALTHARUS_SHARED_HEALTH to 0 when killed would bug the boss. if (_instance && me->GetHealth() > damage) _instance->SetData(DATA_BALTHARUS_SHARED_HEALTH, me->GetHealth() - damage); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { // This is here because DamageTaken wont trigger if the damage is deadly. if (Creature* baltharus = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_BALTHARUS_THE_WARBORN))) killer->Kill(baltharus); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -299,7 +299,7 @@ class npc_baltharus_the_warborn_clone : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_baltharus_the_warborn_cloneAI>(creature); } @@ -323,13 +323,13 @@ class spell_baltharus_enervating_brand_trigger : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_baltharus_enervating_brand_trigger_SpellScript::CheckDistance); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_baltharus_enervating_brand_trigger_SpellScript(); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index d0b0db2e1ab..b5c20e95278 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -94,14 +94,14 @@ class boss_general_zarithrian : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -111,36 +111,36 @@ class boss_general_zarithrian : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_ADDS, 40000); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_GENERAL_ZARITHRIAN, FAIL); } // Override to not set adds in combat yet. - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - bool CanAIAttack(Unit const* /*target*/) const OVERRIDE + bool CanAIAttack(Unit const* /*target*/) const override { return (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -189,7 +189,7 @@ class boss_general_zarithrian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<boss_general_zarithrianAI>(creature); } @@ -207,7 +207,7 @@ class npc_onyx_flamecaller : public CreatureScript npc_escortAI::SetDespawnAtEnd(false); } - void Reset() OVERRIDE + void Reset() override { _lavaGoutCount = 0; me->setActive(true); @@ -215,28 +215,28 @@ class npc_onyx_flamecaller : public CreatureScript Start(true, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _events.Reset(); _events.ScheduleEvent(EVENT_BLAST_NOVA, urand(20000, 30000)); _events.ScheduleEvent(EVENT_LAVA_GOUT, 5000); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { // Prevent EvadeMode } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - // Let Zarithrian count as summoner. _instance cant be null since we got GetRubySanctumAI + // Let Zarithrian count as summoner. if (Creature* zarithrian = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_GENERAL_ZARITHRIAN))) zarithrian->AI()->JustSummoned(me); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { - if (waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS || waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS*2) + if (waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS - 1 || waypointId == MAX_PATH_FLAMECALLER_WAYPOINTS * 2 - 1) { DoZoneInCombat(); SetEscortPaused(true); @@ -257,7 +257,7 @@ class npc_onyx_flamecaller : public CreatureScript } } - void UpdateEscortAI(uint32 const diff) OVERRIDE + void UpdateEscortAI(uint32 const diff) override { if (!UpdateVictim()) return; @@ -299,7 +299,7 @@ class npc_onyx_flamecaller : public CreatureScript uint8 _lavaGoutCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_onyx_flamecallerAI>(creature); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index c35c9ba2d11..43c295d5f64 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -199,8 +199,8 @@ uint8 const MAX_CORPOREALITY_STATE = 11; struct CorporealityEntry { - uint32 materialRealmSpell; uint32 twilightRealmSpell; + uint32 materialRealmSpell; }; CorporealityEntry const _corporealityReference[MAX_CORPOREALITY_STATE] = { @@ -221,7 +221,7 @@ struct generic_halionAI : public BossAI { generic_halionAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId), _canEvade(false) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); me->AddAura(SPELL_TWILIGHT_PRECISION, me); @@ -231,19 +231,19 @@ struct generic_halionAI : public BossAI events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000)); } - void Reset() OVERRIDE + void Reset() override { _canEvade = false; _Reset(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); _JustReachedHome(); } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -262,7 +262,7 @@ struct generic_halionAI : public BossAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING)) return; @@ -275,7 +275,7 @@ struct generic_halionAI : public BossAI DoMeleeAttackIfReady(); } - void SetData(uint32 index, uint32 dataValue) OVERRIDE + void SetData(uint32 index, uint32 dataValue) override { switch (index) { @@ -287,7 +287,7 @@ struct generic_halionAI : public BossAI } } - void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) OVERRIDE + void SpellHit(Unit* /*who*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TWILIGHT_MENDING) Talk(SAY_REGENERATE); @@ -309,7 +309,7 @@ class boss_halion : public CreatureScript me->SetHomePosition(HalionSpawnPos); } - void Reset() OVERRIDE + void Reset() override { generic_halionAI::Reset(); me->SetReactState(REACT_DEFENSIVE); @@ -317,14 +317,14 @@ class boss_halion : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { // Phase 1: We always can evade. Phase 2 & 3: We can evade if and only if the controller tells us to. if (events.IsInPhase(PHASE_ONE) || _canEvade) generic_halionAI::EnterEvadeMode(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_AGGRO); @@ -344,7 +344,7 @@ class boss_halion : public CreatureScript controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_ONE); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -362,7 +362,7 @@ class boss_halion : public CreatureScript Position const* GetMeteorStrikePosition() const { return &_meteorStrikePos; } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (me->HealthBelowPctDamaged(75, damage) && events.IsInPhase(PHASE_ONE)) { @@ -389,15 +389,22 @@ class boss_halion : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (events.IsInPhase(PHASE_TWO)) return; + // Rough radius, it is not an exactly perfect circle + if (me->GetDistance2d(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY()) > 48.5f) + { + EnterEvadeMode(); + return; + } + generic_halionAI::UpdateAI(diff); } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -411,7 +418,7 @@ class boss_halion : public CreatureScript { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_TWILIGHT_REALM)) { - target->GetPosition(&_meteorStrikePos); + _meteorStrikePos = target->GetPosition(); me->CastSpell(_meteorStrikePos.GetPositionX(), _meteorStrikePos.GetPositionY(), _meteorStrikePos.GetPositionZ(), SPELL_METEOR_STRIKE, true, NULL, NULL, me->GetGUID()); Talk(SAY_METEOR_STRIKE); } @@ -431,7 +438,7 @@ class boss_halion : public CreatureScript } } - void SetData(uint32 index, uint32 value) OVERRIDE + void SetData(uint32 index, uint32 value) override { switch (index) { @@ -447,7 +454,7 @@ class boss_halion : public CreatureScript Position _meteorStrikePos; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<boss_halionAI>(creature); } @@ -478,7 +485,7 @@ class boss_twilight_halion : public CreatureScript me->SetReactState(REACT_AGGRESSIVE); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { events.Reset(); events.SetPhase(PHASE_TWO); @@ -491,9 +498,9 @@ class boss_twilight_halion : public CreatureScript } // Never evade - void EnterEvadeMode() OVERRIDE { } + void EnterEvadeMode() override { } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); @@ -502,7 +509,7 @@ class boss_twilight_halion : public CreatureScript me->CastSpell(victim, SPELL_LEAVE_TWILIGHT_REALM, true); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (Creature* halion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION))) { @@ -521,7 +528,7 @@ class boss_twilight_halion : public CreatureScript instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (me->HealthBelowPctDamaged(50, damage) && events.IsInPhase(PHASE_TWO)) { @@ -543,7 +550,7 @@ class boss_twilight_halion : public CreatureScript } } - void SpellHit(Unit* who, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* who, SpellInfo const* spell) override { switch (spell->Id) { @@ -557,7 +564,7 @@ class boss_twilight_halion : public CreatureScript } } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -576,7 +583,7 @@ class boss_twilight_halion : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<boss_twilight_halionAI>(creature); } @@ -595,7 +602,7 @@ class npc_halion_controller : public CreatureScript me->SetPhaseMask(me->GetPhaseMask() | 0x20, true); } - void Reset() OVERRIDE + void Reset() override { _summons.DespawnAll(); _events.Reset(); @@ -606,12 +613,12 @@ class npc_halion_controller : public CreatureScript DoCast(me, SPELL_CLEAR_DEBUFFS); } - void JustSummoned(Creature* who) OVERRIDE + void JustSummoned(Creature* who) override { _summons.Summon(who); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _events.Reset(); _summons.DespawnAll(); @@ -619,7 +626,7 @@ class npc_halion_controller : public CreatureScript DoCast(me, SPELL_CLEAR_DEBUFFS); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _twilightDamageTaken = 0; _materialDamageTaken = 0; @@ -627,7 +634,7 @@ class npc_halion_controller : public CreatureScript _events.ScheduleEvent(EVENT_TRIGGER_BERSERK, 8 * MINUTE * IN_MILLISECONDS); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_TWILIGHT_HALION))) twilightHalion->DespawnOrUnsummon(); @@ -641,7 +648,7 @@ class npc_halion_controller : public CreatureScript _instance->SetBossState(DATA_HALION, FAIL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -683,7 +690,7 @@ class npc_halion_controller : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // The IsInCombat() check is needed because that check should be false when Halion is // not engaged, while it would return true without as UpdateVictim() checks for @@ -750,7 +757,7 @@ class npc_halion_controller : public CreatureScript } } - void SetData(uint32 id, uint32 value) OVERRIDE + void SetData(uint32 id, uint32 value) override { switch (id) { @@ -848,7 +855,6 @@ class npc_halion_controller : public CreatureScript { if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetData64(itr))) { - RemoveCorporeality(halion, itr == DATA_TWILIGHT_HALION); halion->CastSpell(halion, GetSpell(_materialCorporealityValue, itr == DATA_TWILIGHT_HALION), true); if (itr == DATA_TWILIGHT_HALION) @@ -859,19 +865,6 @@ class npc_halion_controller : public CreatureScript } } - void RemoveCorporeality(Creature* who, bool isTwilight = false) - { - for (uint8 i = 0; i < MAX_CORPOREALITY_STATE; i++) - { - uint32 spellID = (isTwilight ? _corporealityReference[i].twilightRealmSpell : _corporealityReference[i].materialRealmSpell); - if (who->HasAura(spellID)) - { - who->RemoveAurasDueToSpell(spellID); - break; - } - } - } - uint32 GetSpell(uint8 pctValue, bool isTwilight = false) const { CorporealityEntry entry = _corporealityReference[pctValue]; @@ -887,7 +880,7 @@ class npc_halion_controller : public CreatureScript uint8 _materialCorporealityValue; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_halion_controllerAI>(creature); } @@ -908,7 +901,7 @@ class npc_orb_carrier : public CreatureScript ASSERT(creature->GetVehicleKit()); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { /// According to sniffs this spell is cast every 1 or 2 seconds. /// However, refreshing it looks bad, so just cast the spell if @@ -924,7 +917,7 @@ class npc_orb_carrier : public CreatureScript me->SetFacingToObject(rotationFocus); // setInFront } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_SHOOT) { @@ -958,7 +951,7 @@ class npc_orb_carrier : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_orb_carrierAI>(creature); } @@ -977,7 +970,7 @@ class npc_meteor_strike_initial : public CreatureScript SetCombatMovement(false); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -990,7 +983,7 @@ class npc_meteor_strike_initial : public CreatureScript } } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { Creature* owner = summoner->ToCreature(); if (!owner) @@ -1006,7 +999,6 @@ class npc_meteor_strike_initial : public CreatureScript if (HalionAI* halionAI = CAST_AI(HalionAI, owner->AI())) { Position const* ownerPos = halionAI->GetMeteorStrikePosition(); - Position newPos; float angle[4]; angle[0] = me->GetAngle(ownerPos); angle[1] = me->GetAngle(ownerPos) - static_cast<float>(M_PI/2); @@ -1018,21 +1010,21 @@ class npc_meteor_strike_initial : public CreatureScript { angle[i] = Position::NormalizeOrientation(angle[i]); me->SetOrientation(angle[i]); - me->GetNearPosition(newPos, 10.0f, 0.0f); // Exact distance + Position newPos = me->GetNearPosition(10.0f, 0.0f); // Exact distance if (Creature* meteor = me->SummonCreature(NPC_METEOR_STRIKE_NORTH + i, newPos, TEMPSUMMON_TIMED_DESPAWN, 30000)) _meteorList.push_back(meteor); } } } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } - void EnterEvadeMode() OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } + void EnterEvadeMode() override { } private: InstanceScript* _instance; std::list<Creature*> _meteorList; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_meteor_strike_initialAI>(creature); } @@ -1054,7 +1046,7 @@ class npc_meteor_strike : public CreatureScript SetCombatMovement(false); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_METEOR_STRIKE_BURN) { @@ -1064,14 +1056,14 @@ class npc_meteor_strike : public CreatureScript } } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { // Let Halion Controller count as summoner. if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_HALION_CONTROLLER))) controller->AI()->JustSummoned(me); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_spawnCount > 5) return; @@ -1080,8 +1072,7 @@ class npc_meteor_strike : public CreatureScript if (_events.ExecuteEvent() == EVENT_SPAWN_METEOR_FLAME) { - Position pos; - me->GetNearPosition(pos, _range, 0.0f); + Position pos = me->GetNearPosition( _range, 0.0f); if (Creature* flame = me->SummonCreature(NPC_METEOR_STRIKE_FLAME, pos, TEMPSUMMON_TIMED_DESPAWN, 25000)) { @@ -1103,7 +1094,7 @@ class npc_meteor_strike : public CreatureScript uint8 _spawnCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_meteor_strikeAI>(creature); } @@ -1143,7 +1134,7 @@ class npc_combustion_consumption : public CreatureScript me->SetPhaseMask(0x01 | 0x20, true); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { // Let Halion Controller count as summoner if (Creature* controller = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_HALION_CONTROLLER))) @@ -1152,7 +1143,7 @@ class npc_combustion_consumption : public CreatureScript _summonerGuid = summoner->GetGUID(); } - void SetData(uint32 type, uint32 stackAmount) OVERRIDE + void SetData(uint32 type, uint32 stackAmount) override { Unit* summoner = ObjectAccessor::GetUnit(*me, _summonerGuid); @@ -1166,7 +1157,7 @@ class npc_combustion_consumption : public CreatureScript summoner->CastCustomSpell(_explosionSpell, SPELLVALUE_BASE_POINT0, damage, summoner); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: InstanceScript* _instance; @@ -1175,7 +1166,7 @@ class npc_combustion_consumption : public CreatureScript uint64 _summonerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_combustion_consumptionAI>(creature); } @@ -1190,7 +1181,7 @@ class npc_living_inferno : public CreatureScript { npc_living_infernoAI(Creature* creature) : ScriptedAI(creature) { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { me->SetInCombatWithZone(); me->CastSpell(me, SPELL_BLAZING_AURA, true); @@ -1200,13 +1191,13 @@ class npc_living_inferno : public CreatureScript controller->AI()->JustSummoned(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(1); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_living_infernoAI>(creature); } @@ -1222,30 +1213,30 @@ class npc_living_ember : public CreatureScript { npc_living_emberAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _hasEnraged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _enrageTimer = 20000; _hasEnraged = false; } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { if (InstanceScript* instance = me->GetInstanceScript()) if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) controller->AI()->JustSummoned(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING)) return; @@ -1265,7 +1256,7 @@ class npc_living_ember : public CreatureScript bool _hasEnraged; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_living_emberAI>(creature); } @@ -1299,14 +1290,14 @@ class go_twilight_portal : public GameObjectScript } } - bool GossipHello(Player* player) OVERRIDE + bool GossipHello(Player* player) override { if (_spellId != 0) player->CastSpell(player, _spellId, true); return true; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (_instance->GetBossState(DATA_HALION) == IN_PROGRESS) return; @@ -1324,7 +1315,7 @@ class go_twilight_portal : public GameObjectScript bool _deleted; }; - GameObjectAI* GetAI(GameObject* gameobject) const OVERRIDE + GameObjectAI* GetAI(GameObject* gameobject) const override { return GetRubySanctumAI<go_twilight_portalAI>(gameobject); } @@ -1349,13 +1340,13 @@ class spell_halion_meteor_strike_marker : public SpellScriptLoader creCaster->AI()->DoAction(ACTION_METEOR_STRIKE_AOE); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_halion_meteor_strike_marker_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_halion_meteor_strike_marker_AuraScript(); } @@ -1373,7 +1364,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader public: spell_halion_combustion_consumption_AuraScript(uint32 spellID) : AuraScript(), _markSpell(spellID) { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(_markSpell)) return false; @@ -1399,7 +1390,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), _markSpell, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_halion_combustion_consumption_AuraScript::AddMarkStack, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); AfterEffectApply += AuraEffectApplyFn(spell_halion_combustion_consumption_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); @@ -1409,7 +1400,7 @@ class spell_halion_combustion_consumption : public SpellScriptLoader uint32 _markSpell; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_halion_combustion_consumption_AuraScript(_spellID); } @@ -1432,7 +1423,7 @@ class spell_halion_marks : public SpellScriptLoader spell_halion_marks_AuraScript(uint32 summonSpell, uint32 removeSpell) : AuraScript(), _summonSpellId(summonSpell), _removeSpellId(removeSpell) { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(_summonSpellId)) return false; @@ -1459,7 +1450,7 @@ class spell_halion_marks : public SpellScriptLoader GetTarget()->CastCustomSpell(_summonSpellId, SPELLVALUE_BASE_POINT1, aurEff->GetBase()->GetStackAmount(), GetTarget(), TRIGGERED_FULL_MASK, NULL, NULL, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { OnDispel += AuraDispelFn(spell_halion_marks_AuraScript::BeforeDispel); AfterEffectRemove += AuraEffectRemoveFn(spell_halion_marks_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -1469,7 +1460,7 @@ class spell_halion_marks : public SpellScriptLoader uint32 _removeSpellId; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_halion_marks_AuraScript(_summonSpell, _removeSpell); } @@ -1496,20 +1487,19 @@ class spell_halion_damage_aoe_summon : public SpellScriptLoader SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB)); uint32 duration = uint32(GetSpellInfo()->GetDuration()); - Position pos; - caster->GetPosition(&pos); + Position pos = caster->GetPosition(); if (Creature* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id)) if (summon->IsAIEnabled) summon->AI()->SetData(DATA_STACKS_DISPELLED, GetSpellValue()->EffectBasePoints[EFFECT_1]); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_halion_damage_aoe_summon_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_halion_damage_aoe_summon_SpellScript(); } @@ -1531,7 +1521,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader _isApply(isApplyHandler), _beforeHitSpellId(beforeHitSpell) { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(_beforeHitSpellId)) return false; @@ -1556,7 +1546,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader instance->SendEncounterUnit(ENCOUNTER_FRAME_UNK7); } - void Register() OVERRIDE + void Register() override { if (!_isApply) { @@ -1571,7 +1561,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader uint32 _beforeHitSpellId; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_halion_twilight_realm_handlers_AuraScript(_beforeHitSpell, _isApplyHandler); } @@ -1590,7 +1580,7 @@ class spell_halion_clear_debuffs : public SpellScriptLoader { PrepareSpellScript(spell_halion_clear_debuffs_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CLEAR_DEBUFFS)) return false; @@ -1605,13 +1595,13 @@ class spell_halion_clear_debuffs : public SpellScriptLoader GetHitUnit()->RemoveAurasDueToSpell(GetSpellInfo()->Effects[effIndex].CalcValue()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_halion_clear_debuffs_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_halion_clear_debuffs_SpellScript(); } @@ -1657,13 +1647,13 @@ class spell_halion_twilight_cutter : public SpellScriptLoader unitList.clear(); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_halion_twilight_cutter_SpellScript::RemoveNotBetween, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_halion_twilight_cutter_SpellScript(); } @@ -1685,13 +1675,13 @@ class spell_halion_twilight_phasing : public SpellScriptLoader caster->GetMap()->SummonCreature(NPC_TWILIGHT_HALION, HalionSpawnPos); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_halion_twilight_phasing_SpellScript::Phase); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_halion_twilight_phasing_SpellScript(); } @@ -1719,14 +1709,14 @@ class spell_halion_summon_exit_portals : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_halion_summon_exit_portals_SpellScript::SetDest0, EFFECT_0, TARGET_DEST_CASTER); OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_halion_summon_exit_portals_SpellScript::SetDest1, EFFECT_1, TARGET_DEST_CASTER); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_halion_summon_exit_portals_SpellScript(); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index bd5ab3d1a6e..199337b0631 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -77,13 +77,13 @@ class boss_saviana_ragefire : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_AGGRESSIVE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -93,13 +93,13 @@ class boss_saviana_ragefire : public CreatureScript events.ScheduleEvent(EVENT_FLIGHT, 60000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); me->PlayDirectSound(SOUND_ID_DEATH); } - void MovementInform(uint32 type, uint32 point) OVERRIDE + void MovementInform(uint32 type, uint32 point) override { if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) return; @@ -128,20 +128,20 @@ class boss_saviana_ragefire : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); me->SetCanFly(false); me->SetDisableGravity(false); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -197,7 +197,7 @@ class boss_saviana_ragefire : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<boss_saviana_ragefireAI>(creature); } @@ -238,14 +238,14 @@ class spell_saviana_conflagration_init : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_saviana_conflagration_init_SpellScript(); } @@ -267,13 +267,13 @@ class spell_saviana_conflagration_throwback : public SpellScriptLoader GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_saviana_conflagration_throwback_SpellScript(); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 1f8656853a2..eed8168eff8 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -67,7 +67,7 @@ class instance_ruby_sanctum : public InstanceMapScript } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -112,7 +112,7 @@ class instance_ruby_sanctum : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -155,7 +155,7 @@ class instance_ruby_sanctum : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -167,7 +167,7 @@ class instance_ruby_sanctum : public InstanceMapScript } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) @@ -181,7 +181,7 @@ class instance_ruby_sanctum : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -224,7 +224,7 @@ class instance_ruby_sanctum : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -278,7 +278,7 @@ class instance_ruby_sanctum : public InstanceMapScript return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type != DATA_BALTHARUS_SHARED_HEALTH) return; @@ -286,7 +286,7 @@ class instance_ruby_sanctum : public InstanceMapScript BaltharusSharedHealth = data; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type != DATA_BALTHARUS_SHARED_HEALTH) return 0; @@ -294,7 +294,7 @@ class instance_ruby_sanctum : public InstanceMapScript return BaltharusSharedHealth; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -305,14 +305,14 @@ class instance_ruby_sanctum : public InstanceMapScript return saveStream.str(); } - void FillInitialWorldStates(WorldPacket& data) OVERRIDE + void FillInitialWorldStates(WorldPacket& data) override { data << uint32(WORLDSTATE_CORPOREALITY_MATERIAL) << uint32(50); data << uint32(WORLDSTATE_CORPOREALITY_TWILIGHT) << uint32(50); data << uint32(WORLDSTATE_CORPOREALITY_TOGGLE) << uint32(0); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -365,7 +365,7 @@ class instance_ruby_sanctum : public InstanceMapScript uint32 BaltharusSharedHealth; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ruby_sanctum_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp index d0a46b01bd4..0d2b98dbd1c 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp @@ -60,13 +60,13 @@ class npc_xerestrasza : public CreatureScript _introDone = false; } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_BALTHARUS_DEATH) { @@ -92,7 +92,7 @@ class npc_xerestrasza : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_isIntro) return; @@ -138,7 +138,7 @@ class npc_xerestrasza : public CreatureScript bool _introDone; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetRubySanctumAI<npc_xerestraszaAI>(creature); } @@ -149,7 +149,7 @@ class at_baltharus_plateau : public AreaTriggerScript public: at_baltharus_plateau() : AreaTriggerScript("at_baltharus_plateau") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { // Only trigger once if (InstanceScript* instance = player->GetInstanceScript()) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 773009b06d6..7e9e351ae9c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -135,14 +135,14 @@ class spell_eadric_radiance : public SpellScriptLoader unitList.remove_if(OrientationCheck(GetCaster())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_eadric_radiance_SpellScript(); } @@ -170,7 +170,7 @@ public: bool bDone; - void Reset() OVERRIDE + void Reset() override { uiVenganceTimer = 10000; uiRadianceTimer = 16000; @@ -180,7 +180,7 @@ public: bDone = false; } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth()) { @@ -191,7 +191,7 @@ public: } } - void MovementInform(uint32 MovementType, uint32 /*Data*/) OVERRIDE + void MovementInform(uint32 MovementType, uint32 /*Data*/) override { if (MovementType != POINT_MOTION_TYPE) return; @@ -201,7 +201,7 @@ public: me->DisappearAndDie(); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (bDone && uiResetTimer <= uiDiff) { @@ -245,7 +245,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_eadricAI>(creature); } @@ -279,7 +279,7 @@ public: uint32 uiRenewTimer; uint32 uiResetTimer; - void Reset() OVERRIDE + void Reset() override { me->RemoveAllAuras(); @@ -292,18 +292,18 @@ public: bHealth = false; bDone = false; - if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID)) + if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID)) if (pMemory->IsAlive()) pMemory->RemoveFromWorld(); } - void SetData(uint32 uiId, uint32 /*uiValue*/) OVERRIDE + void SetData(uint32 uiId, uint32 /*uiValue*/) override { if (uiId == 1) me->RemoveAura(SPELL_SHIELD); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth()) { @@ -314,7 +314,7 @@ public: } } - void MovementInform(uint32 MovementType, uint32 Point) OVERRIDE + void MovementInform(uint32 MovementType, uint32 Point) override { if (MovementType != POINT_MOTION_TYPE || Point != 0) return; @@ -324,7 +324,7 @@ public: me->DisappearAndDie(); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (bDone && uiResetTimer <= uiDiff) { @@ -373,7 +373,7 @@ public: DoCast(me, SPELL_RENEW); break; case 1: - if (Creature* pMemory = Unit::GetCreature(*me, MemoryGUID)) + if (Creature* pMemory = ObjectAccessor::GetCreature(*me, MemoryGUID)) if (pMemory->IsAlive()) DoCast(pMemory, SPELL_RENEW); break; @@ -396,13 +396,13 @@ public: DoMeleeAttackIfReady(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { MemoryGUID = summon->GetGUID(); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_paletressAI>(creature); } @@ -421,14 +421,14 @@ public: uint32 uiShadowPastTimer; uint32 uiWakingNightmare; - void Reset() OVERRIDE + void Reset() override { uiOldWoundsTimer = 12000; uiShadowPastTimer = 5000; uiWakingNightmare = 7000; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -462,7 +462,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (TempSummon* summ = me->ToTempSummon()) if (Unit* summoner = summ->GetSummoner()) @@ -471,7 +471,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_memoryAI(creature); } @@ -497,7 +497,7 @@ public: uint8 uiWaypoint; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId == 0) { @@ -516,7 +516,7 @@ public: } } - void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE + void SetData(uint32 uiType, uint32 /*uiData*/) override { switch (me->GetEntry()) { @@ -568,7 +568,7 @@ public: uiWaypoint = uiType; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -578,13 +578,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ARGENT_SOLDIER_DEFEATED, instance->GetData(DATA_ARGENT_SOLDIER_DEFEATED) + 1); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_argent_soldierAI>(creature); } @@ -629,7 +629,7 @@ class spell_paletress_summon_memory : public SpellScriptLoader { PrepareSpellScript(spell_paletress_summon_memory_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { for (uint8 i = 0; i < 25; ++i) if (!sSpellMgr->GetSpellInfo(memorySpellId[i])) @@ -652,14 +652,14 @@ class spell_paletress_summon_memory : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), memorySpellId[urand(0, 24)], true, NULL, NULL, GetCaster()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_paletress_summon_memory_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_paletress_summon_memory_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_paletress_summon_memory_SpellScript(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 5a0cd7cc3d2..a8aff70b034 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -108,7 +108,7 @@ public: uint32 uiDeathBiteTimer; uint32 uiMarkedDeathTimer; - void Reset() OVERRIDE + void Reset() override { RemoveSummons(); me->SetDisplayId(me->GetNativeDisplayId()); @@ -140,20 +140,20 @@ public: for (std::list<uint64>::const_iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr) { - if (Creature* temp = Unit::GetCreature(*me, *itr)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr)) if (temp) temp->DisappearAndDie(); } SummonList.clear(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { SummonList.push_back(summon->GetGUID()); summon->AI()->AttackStart(me->GetVictim()); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -268,7 +268,7 @@ public: DoMeleeAttackIfReady(); } - void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) override { if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON) { @@ -289,7 +289,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_KILL_CREDIT); @@ -297,7 +297,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_black_knightAI>(creature); } @@ -314,12 +314,12 @@ public: uint32 uiAttackTimer; - void Reset() OVERRIDE + void Reset() override { uiAttackTimer = 3500; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -338,7 +338,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_risen_ghoulAI(creature); } @@ -356,12 +356,12 @@ public: Start(false, true, 0, NULL); } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE + void WaypointReached(uint32 /*waypointId*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -371,7 +371,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_black_knight_skeletal_gryphonAI(creature); } 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 d2f6b8a3420..2e24398d49a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -126,9 +126,9 @@ bool GrandChampionsOutVehicle(Creature* me) if (!instance) return false; - Creature* pGrandChampion1 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1)); - Creature* pGrandChampion2 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2)); - Creature* pGrandChampion3 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3)); + Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1)); + Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2)); + Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3)); if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3) { @@ -169,14 +169,14 @@ public: uint32 uiWaypointPath; - void Reset() OVERRIDE + void Reset() override { uiChargeTimer = 5000; uiShieldBreakerTimer = 8000; uiBuffTimer = urand(30000, 60000); } - void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE + void SetData(uint32 uiType, uint32 /*uiData*/) override { switch (uiType) { @@ -205,7 +205,7 @@ public: Start(false, true, 0, NULL); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -219,7 +219,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCastSpellShield(); } @@ -230,7 +230,7 @@ public: DoCast(me, SPELL_SHIELD, true); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -295,7 +295,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<generic_vehicleAI_toc5AI>(creature); } @@ -337,14 +337,14 @@ public: bool bDone; bool bHome; - void Reset() OVERRIDE + void Reset() override { uiBladeStormTimer = urand(15000, 20000); uiInterceptTimer = 7000; uiMortalStrikeTimer = urand(8000, 12000); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { ScriptedAI::JustReachedHome(); @@ -357,7 +357,7 @@ public: bHome = false; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!bDone && GrandChampionsOutVehicle(me)) { @@ -421,13 +421,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_warrior_toc5AI>(creature); } @@ -469,7 +469,7 @@ public: bool bDone; bool bHome; - void Reset() OVERRIDE + void Reset() override { uiFireBallTimer = 5000; uiPolymorphTimer = 8000; @@ -477,7 +477,7 @@ public: uiHasteTimer = 22000; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { ScriptedAI::JustReachedHome(); @@ -490,7 +490,7 @@ public: bHome = false; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!bDone && GrandChampionsOutVehicle(me)) { @@ -558,13 +558,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_mage_toc5AI>(creature); } @@ -606,7 +606,7 @@ public: bool bDone; bool bHome; - void Reset() OVERRIDE + void Reset() override { uiChainLightningTimer = 16000; uiHealingWaveTimer = 12000; @@ -614,13 +614,13 @@ public: uiHexMendingTimer = urand(20000, 25000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoCast(me, SPELL_EARTH_SHIELD); DoCast(who, SPELL_HEX_OF_MENDING); }; - void JustReachedHome() OVERRIDE + void JustReachedHome() override { ScriptedAI::JustReachedHome(); @@ -633,7 +633,7 @@ public: bHome = false; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!bDone && GrandChampionsOutVehicle(me)) { @@ -703,13 +703,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_shaman_toc5AI>(creature); } @@ -753,7 +753,7 @@ public: bool bDone; bool bHome; - void Reset() OVERRIDE + void Reset() override { uiShootTimer = 12000; uiMultiShotTimer = 0; @@ -764,7 +764,7 @@ public: bShoot = false; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { ScriptedAI::JustReachedHome(); @@ -777,7 +777,7 @@ public: bHome = false; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!bDone && GrandChampionsOutVehicle(me)) { @@ -829,7 +829,7 @@ public: if (bShoot && uiMultiShotTimer <= uiDiff) { me->InterruptNonMeleeSpells(true); - Unit* target = Unit::GetUnit(*me, uiTargetGUID); + Unit* target = ObjectAccessor::GetUnit(*me, uiTargetGUID); if (target && me->IsInRange(target, 5.0f, 30.0f, false)) { @@ -857,13 +857,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_hunter_toc5AI>(creature); } @@ -903,14 +903,14 @@ public: bool bDone; bool bHome; - void Reset() OVERRIDE + void Reset() override { uiEviscerateTimer = 8000; uiFanKivesTimer = 14000; uiPosionBottleTimer = 19000; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { ScriptedAI::JustReachedHome(); @@ -923,7 +923,7 @@ public: bHome = false; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!bDone && GrandChampionsOutVehicle(me)) { @@ -976,13 +976,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(BOSS_GRAND_CHAMPIONS, DONE); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_rouge_toc5AI>(creature); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 1f8b281b807..ac8a7969c9d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -34,7 +34,7 @@ class instance_trial_of_the_champion : public InstanceMapScript public: instance_trial_of_the_champion() : InstanceMapScript("instance_trial_of_the_champion", 650) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_trial_of_the_champion_InstanceMapScript(map); } @@ -66,7 +66,7 @@ public: bool bDone; - void Initialize() OVERRIDE + void Initialize() override { uiMovementDone = 0; uiGrandChampionsDeaths = 0; @@ -90,7 +90,7 @@ public: memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) { @@ -101,7 +101,7 @@ public: return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { Map::PlayerList const &players = instance->GetPlayers(); uint32 TeamInInstance = 0; @@ -117,29 +117,29 @@ public: // Champions case VEHICLE_MOKRA_SKILLCRUSHER_MOUNT: if (TeamInInstance == HORDE) - creature->UpdateEntry(VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT, ALLIANCE); + creature->UpdateEntry(VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT); break; case VEHICLE_ERESSEA_DAWNSINGER_MOUNT: if (TeamInInstance == HORDE) - creature->UpdateEntry(VEHICLE_AMBROSE_BOLTSPARK_MOUNT, ALLIANCE); + creature->UpdateEntry(VEHICLE_AMBROSE_BOLTSPARK_MOUNT); break; case VEHICLE_RUNOK_WILDMANE_MOUNT: if (TeamInInstance == HORDE) - creature->UpdateEntry(VEHICLE_COLOSOS_MOUNT, ALLIANCE); + creature->UpdateEntry(VEHICLE_COLOSOS_MOUNT); break; case VEHICLE_ZUL_TORE_MOUNT: if (TeamInInstance == HORDE) - creature->UpdateEntry(VEHICLE_EVENSONG_MOUNT, ALLIANCE); + creature->UpdateEntry(VEHICLE_EVENSONG_MOUNT); break; case VEHICLE_DEATHSTALKER_VESCERI_MOUNT: if (TeamInInstance == HORDE) - creature->UpdateEntry(VEHICLE_LANA_STOUTHAMMER_MOUNT, ALLIANCE); + creature->UpdateEntry(VEHICLE_LANA_STOUTHAMMER_MOUNT); break; // Coliseum Announcer || Just NPC_JAEREN must be spawned. case NPC_JAEREN: uiAnnouncerGUID = creature->GetGUID(); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ARELAS, ALLIANCE); + creature->UpdateEntry(NPC_ARELAS); break; case VEHICLE_ARGENT_WARHORSE: case VEHICLE_ARGENT_BATTLEWORG: @@ -152,7 +152,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -166,7 +166,7 @@ public: } } - void SetData(uint32 uiType, uint32 uiData) OVERRIDE + void SetData(uint32 uiType, uint32 uiData) override { switch (uiType) { @@ -235,7 +235,7 @@ public: SaveToDB(); } - uint32 GetData(uint32 uiData) const OVERRIDE + uint32 GetData(uint32 uiData) const override { switch (uiData) { @@ -251,7 +251,7 @@ public: return 0; } - uint64 GetData64(uint32 uiData) const OVERRIDE + uint64 GetData64(uint32 uiData) const override { switch (uiData) { @@ -266,7 +266,7 @@ public: return 0; } - void SetData64(uint32 uiType, uint64 uiData) OVERRIDE + void SetData64(uint32 uiType, uint64 uiData) override { switch (uiType) { @@ -282,7 +282,7 @@ public: } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -301,7 +301,7 @@ public: return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index a60e69d6479..e22ee040599 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -130,7 +130,7 @@ public: uiPhase = uiPhaseStep; } - void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE + void SetData(uint32 uiType, uint32 /*uiData*/) override { switch (uiType) { @@ -161,7 +161,7 @@ public: } for (std::list<uint64>::const_iterator itr = TempList.begin(); itr != TempList.end(); ++itr) - if (Creature* summon = Unit::GetCreature(*me, *itr)) + if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) AggroAllPlayers(summon); }else if (uiLesserChampions == 9) StartGrandChampionsAttack(); @@ -173,9 +173,9 @@ public: void StartGrandChampionsAttack() { - Creature* pGrandChampion1 = Unit::GetCreature(*me, uiVehicle1GUID); - Creature* pGrandChampion2 = Unit::GetCreature(*me, uiVehicle2GUID); - Creature* pGrandChampion3 = Unit::GetCreature(*me, uiVehicle3GUID); + Creature* pGrandChampion1 = ObjectAccessor::GetCreature(*me, uiVehicle1GUID); + Creature* pGrandChampion2 = ObjectAccessor::GetCreature(*me, uiVehicle2GUID); + Creature* pGrandChampion3 = ObjectAccessor::GetCreature(*me, uiVehicle3GUID); if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3) { @@ -185,7 +185,7 @@ public: } } - void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiPointId) override { if (uiType != POINT_MOTION_TYPE) return; @@ -357,7 +357,7 @@ public: if (instance->GetData(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED && instance->GetData(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED) { if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) - me->AI()->SetData(DATA_START, 0); + SetData(DATA_START, 0); if (instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE) DoStartArgentChampionEncounter(); @@ -397,7 +397,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { ScriptedAI::UpdateAI(uiDiff); @@ -417,7 +417,7 @@ public: if (!Champion1List.empty()) { for (std::list<uint64>::const_iterator itr = Champion1List.begin(); itr != Champion1List.end(); ++itr) - if (Creature* summon = Unit::GetCreature(*me, *itr)) + if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) AggroAllPlayers(summon); NextStep(0, false); } @@ -429,7 +429,7 @@ public: return; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) { @@ -438,7 +438,7 @@ public: } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { switch (summon->GetEntry()) { @@ -452,18 +452,18 @@ public: case VEHICLE_ORGRIMMAR_WOLF: case VEHICLE_SILVERMOON_HAWKSTRIDER: case VEHICLE_DARKSPEAR_RAPTOR: - me->AI()->SetData(DATA_LESSER_CHAMPIONS_DEFEATED, 0); + SetData(DATA_LESSER_CHAMPIONS_DEFEATED, 0); break; } } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_announcer_toc5AI>(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); @@ -488,7 +488,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 93d5c399725..6a664ec7f8d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -168,7 +168,7 @@ class boss_anubarak_trial : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.SetPhase(PHASE_MELEE); @@ -196,7 +196,7 @@ class boss_anubarak_trial : public CreatureScript _burrowGUID.clear(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -205,7 +205,7 @@ class boss_anubarak_trial : public CreatureScript } } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { if (!_intro) @@ -215,7 +215,7 @@ class boss_anubarak_trial : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SetBossState(BOSS_ANUBARAK, FAIL); //Summon Scarab Swarms neutral at random places @@ -227,7 +227,7 @@ class boss_anubarak_trial : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -241,7 +241,7 @@ class boss_anubarak_trial : public CreatureScript (*itr)->DespawnOrUnsummon(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -265,7 +265,7 @@ class boss_anubarak_trial : public CreatureScript summons.Summon(summoned); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -285,7 +285,7 @@ class boss_anubarak_trial : public CreatureScript _sphereGUID[i] = summoned->GetGUID(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -344,7 +344,7 @@ class boss_anubarak_trial : public CreatureScript uint32 at = urand(0, _burrowGUID.size()-1); for (uint32 k = 0; k < at; k++) ++i; - if (Creature* pBurrow = Unit::GetCreature(*me, *i)) + if (Creature* pBurrow = ObjectAccessor::GetCreature(*me, *i)) pBurrow->CastSpell(pBurrow, 66340, false); events.ScheduleEvent(EVENT_SUMMON_SCARAB, 4*IN_MILLISECONDS, 0, PHASE_SUBMERGED); @@ -377,7 +377,7 @@ class boss_anubarak_trial : public CreatureScript uint8 i = startAt; do { - if (Unit* pSphere = Unit::GetCreature(*me, _sphereGUID[i])) + if (Unit* pSphere = ObjectAccessor::GetCreature(*me, _sphereGUID[i])) { if (!pSphere->HasAura(SPELL_FROST_SPHERE)) { @@ -421,7 +421,7 @@ class boss_anubarak_trial : public CreatureScript bool _reachedPhase3; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_anubarak_trialAI>(creature); }; @@ -439,7 +439,7 @@ class npc_swarm_scarab : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->SetCorpseDelay(0); _determinationTimer = urand(5*IN_MILLISECONDS, 60*IN_MILLISECONDS); @@ -450,7 +450,7 @@ class npc_swarm_scarab : public CreatureScript Anubarak->AI()->JustSummoned(me); } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { switch (actionId) { @@ -463,12 +463,12 @@ class npc_swarm_scarab : public CreatureScript } } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { DoCast(killer, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS) me->DisappearAndDie(); @@ -493,7 +493,7 @@ class npc_swarm_scarab : public CreatureScript uint32 _determinationTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_swarm_scarabAI>(creature); }; @@ -511,7 +511,7 @@ class npc_nerubian_burrower : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->SetCorpseDelay(10); _submergeTimer = 30*IN_MILLISECONDS; @@ -524,7 +524,7 @@ class npc_nerubian_burrower : public CreatureScript Anubarak->AI()->JustSummoned(me); } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { switch (actionId) { @@ -538,7 +538,7 @@ class npc_nerubian_burrower : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_instance->GetBossState(BOSS_ANUBARAK) != IN_PROGRESS) me->DisappearAndDie(); @@ -581,7 +581,7 @@ class npc_nerubian_burrower : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_nerubian_burrowerAI>(creature); }; @@ -598,7 +598,7 @@ class npc_frost_sphere : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); DoCast(SPELL_FROST_SPHERE); @@ -606,7 +606,7 @@ class npc_frost_sphere : public CreatureScript me->GetMotionMaster()->MoveRandom(20.0f); } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { if (me->GetHealth() <= damage) { @@ -634,7 +634,7 @@ class npc_frost_sphere : public CreatureScript } } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != EFFECT_MOTION_TYPE) return; @@ -654,7 +654,7 @@ class npc_frost_sphere : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_frost_sphereAI(creature); }; @@ -671,7 +671,7 @@ class npc_anubarak_spike : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _phase = PHASE_NO_MOVEMENT; _phaseSwitchTimer = 1; @@ -679,12 +679,12 @@ class npc_anubarak_spike : public CreatureScript me->SetInCombatWithZone(); } - bool CanAIAttack(Unit const* victim) const OVERRIDE + bool CanAIAttack(Unit const* victim) const override { return victim->GetTypeId() == TYPEID_PLAYER; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { @@ -693,12 +693,12 @@ class npc_anubarak_spike : public CreatureScript } } - void DamageTaken(Unit* /*who*/, uint32& uiDamage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& uiDamage) override { uiDamage = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -742,7 +742,7 @@ class npc_anubarak_spike : public CreatureScript } } - void MoveInLineOfSight(Unit* pWho) OVERRIDE + void MoveInLineOfSight(Unit* pWho) override { if (!pWho) @@ -802,7 +802,7 @@ class npc_anubarak_spike : public CreatureScript PursuingSpikesPhases _phase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_anubarak_spikeAI(creature); }; @@ -827,13 +827,13 @@ class spell_impale : public SpellScriptLoader SetHitDamage(0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_impale_SpellScript::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_impale_SpellScript(); } @@ -848,7 +848,7 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader { PrepareAuraScript(spell_anubarak_leeching_swarm_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_DMG) || !sSpellMgr->GetSpellInfo(SPELL_LEECHING_SWARM_HEAL)) return false; @@ -870,13 +870,13 @@ class spell_anubarak_leeching_swarm : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_anubarak_leeching_swarm_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_anubarak_leeching_swarm_AuraScript(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 44a6ddb368f..77697cdb3e8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -351,7 +351,7 @@ class boss_toc_champion_controller : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _championsNotStarted = 0; _championsFailed = 0; @@ -469,7 +469,7 @@ class boss_toc_champion_controller : public CreatureScript } } - void SetData(uint32 uiType, uint32 uiData) OVERRIDE + void SetData(uint32 uiType, uint32 uiData) override { switch (uiType) { @@ -479,7 +479,7 @@ class boss_toc_champion_controller : public CreatureScript case 1: for (std::list<uint64>::iterator i = _summons.begin(); i != _summons.end(); ++i) { - if (Creature* temp = Unit::GetCreature(*me, *i)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, *i)) { temp->SetReactState(REACT_AGGRESSIVE); temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); @@ -537,7 +537,7 @@ class boss_toc_champion_controller : public CreatureScript bool _inProgress; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_toc_champion_controllerAI>(creature); } @@ -550,16 +550,16 @@ struct boss_faction_championsAI : public BossAI _aiType = aitype; } - void Reset() OVERRIDE + void Reset() override { _events.ScheduleEvent(EVENT_THREAT, 5*IN_MILLISECONDS); if (IsHeroic() && (_aiType != AI_PET)) _events.ScheduleEvent(EVENT_REMOVE_CC, 5*IN_MILLISECONDS); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { - if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) + if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) pChampionController->AI()->SetData(2, FAIL); me->DespawnOrUnsummon(); } @@ -577,7 +577,7 @@ struct boss_faction_championsAI : public BossAI std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList(); for (std::list<HostileReference*>::const_iterator itr = tList.begin(); itr != tList.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && me->getThreatManager().getThreat(unit)) { if (unit->GetTypeId() == TYPEID_PLAYER) @@ -606,22 +606,22 @@ struct boss_faction_championsAI : public BossAI //DoCast(me, SPELL_PVP_TRINKET); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (_aiType != AI_PET) - if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) + if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) pChampionController->AI()->SetData(2, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_ANTI_AOE, true); _EnterCombat(); - if (Creature* pChampionController = Unit::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) + if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) pChampionController->AI()->SetData(2, IN_PROGRESS); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -634,11 +634,11 @@ struct boss_faction_championsAI : public BossAI if (TeamInInstance == ALLIANCE) { - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_VARIAN))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_VARIAN))) temp->AI()->Talk(SAY_KILL_PLAYER); } else - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(NPC_GARROSH))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GARROSH))) temp->AI()->Talk(SAY_KILL_PLAYER); @@ -663,7 +663,7 @@ struct boss_faction_championsAI : public BossAI Unit* target; for (iter = tList.begin(); iter!=tList.end(); ++iter) { - target = Unit::GetUnit(*me, (*iter)->getUnitGuid()); + target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid()); if (target && target->getPowerType() == POWER_MANA) return target; } @@ -678,14 +678,14 @@ struct boss_faction_championsAI : public BossAI Unit* target; for (iter = tList.begin(); iter != tList.end(); ++iter) { - target = Unit::GetUnit(*me, (*iter)->getUnitGuid()); + target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid()); if (target && me->GetDistance2d(target) < distance) ++count; } return count; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -704,7 +704,7 @@ struct boss_faction_championsAI : public BossAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -753,7 +753,7 @@ class npc_toc_druid : public CreatureScript { npc_toc_druidAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_LIFEBLOOM, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS)); @@ -767,7 +767,7 @@ class npc_toc_druid : public CreatureScript SetEquipmentSlots(false, 51799, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -831,7 +831,7 @@ class npc_toc_druid : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_druidAI>(creature); } @@ -846,7 +846,7 @@ class npc_toc_shaman : public CreatureScript { npc_toc_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_HEALING_WAVE, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS)); @@ -859,7 +859,7 @@ class npc_toc_shaman : public CreatureScript SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -924,7 +924,7 @@ class npc_toc_shaman : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_shamanAI>(creature); } @@ -939,7 +939,7 @@ class npc_toc_paladin : public CreatureScript { npc_toc_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_HAND_OF_FREEDOM, urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS)); @@ -953,7 +953,7 @@ class npc_toc_paladin : public CreatureScript SetEquipmentSlots(false, 50771, 47079, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1028,7 +1028,7 @@ class npc_toc_paladin : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_paladinAI>(creature); } @@ -1043,7 +1043,7 @@ class npc_toc_priest : public CreatureScript { npc_toc_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_HEALER) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_RENEW, urand(3*IN_MILLISECONDS, 10*IN_MILLISECONDS)); @@ -1056,7 +1056,7 @@ class npc_toc_priest : public CreatureScript SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1113,7 +1113,7 @@ class npc_toc_priest : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_priestAI>(creature); } @@ -1131,7 +1131,7 @@ class npc_toc_shadow_priest : public CreatureScript { npc_toc_shadow_priestAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_SILENCE, urand(10*IN_MILLISECONDS, 25*IN_MILLISECONDS)); @@ -1146,7 +1146,7 @@ class npc_toc_shadow_priest : public CreatureScript DoCast(me, SPELL_SHADOWFORM); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1211,7 +1211,7 @@ class npc_toc_shadow_priest : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_shadow_priestAI>(creature); } @@ -1226,7 +1226,7 @@ class npc_toc_warlock : public CreatureScript { npc_toc_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_HELLFIRE, urand(10*IN_MILLISECONDS, 30*IN_MILLISECONDS)); @@ -1239,13 +1239,13 @@ class npc_toc_warlock : public CreatureScript SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { boss_faction_championsAI::EnterCombat(who); DoCast(SPELL_SUMMON_FELHUNTER); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1302,7 +1302,7 @@ class npc_toc_warlock : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_warlockAI>(creature); } @@ -1317,7 +1317,7 @@ class npc_toc_mage : public CreatureScript { npc_toc_mageAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(1*IN_MILLISECONDS, 5*IN_MILLISECONDS)); @@ -1331,7 +1331,7 @@ class npc_toc_mage : public CreatureScript SetEquipmentSlots(false, 47524, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1396,7 +1396,7 @@ class npc_toc_mage : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_mageAI>(creature); } @@ -1411,7 +1411,7 @@ class npc_toc_hunter : public CreatureScript { npc_toc_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_AIMED_SHOT, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS)); @@ -1425,13 +1425,13 @@ class npc_toc_hunter : public CreatureScript SetEquipmentSlots(false, 47156, EQUIP_NO_CHANGE, 48711); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { boss_faction_championsAI::EnterCombat(who); DoCast(SPELL_CALL_PET); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1498,7 +1498,7 @@ class npc_toc_hunter : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_hunterAI>(creature); } @@ -1513,7 +1513,7 @@ class npc_toc_boomkin : public CreatureScript { npc_toc_boomkinAI(Creature* creature) : boss_faction_championsAI(creature, AI_RANGED) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_CYCLONE, urand(10*IN_MILLISECONDS, 20*IN_MILLISECONDS)); @@ -1528,7 +1528,7 @@ class npc_toc_boomkin : public CreatureScript SetEquipmentSlots(false, 50966, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1590,7 +1590,7 @@ class npc_toc_boomkin : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_boomkinAI>(creature); } @@ -1608,7 +1608,7 @@ class npc_toc_warrior : public CreatureScript { npc_toc_warriorAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_BLADESTORM, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS)); @@ -1623,7 +1623,7 @@ class npc_toc_warrior : public CreatureScript SetEquipmentSlots(false, 47427, 46964, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1694,7 +1694,7 @@ class npc_toc_warrior : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_warriorAI>(creature); } @@ -1709,7 +1709,7 @@ class npc_toc_dk : public CreatureScript { npc_toc_dkAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_CHAINS_OF_ICE, urand(5*IN_MILLISECONDS, 15*IN_MILLISECONDS)); @@ -1722,7 +1722,7 @@ class npc_toc_dk : public CreatureScript SetEquipmentSlots(false, 47518, 51021, EQUIP_NO_CHANGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1790,7 +1790,7 @@ class npc_toc_dk : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_dkAI>(creature); } @@ -1805,7 +1805,7 @@ class npc_toc_rogue : public CreatureScript { npc_toc_rogueAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_FAN_OF_KNIVES, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS)); @@ -1821,7 +1821,7 @@ class npc_toc_rogue : public CreatureScript me->SetMaxPower(POWER_ENERGY, 100); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1895,7 +1895,7 @@ class npc_toc_rogue : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_rogueAI>(creature); } @@ -1910,7 +1910,7 @@ class npc_toc_enh_shaman : public CreatureScript { npc_toc_enh_shamanAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_DPS_EARTH_SHOCK, urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS)); @@ -1927,12 +1927,12 @@ class npc_toc_enh_shaman : public CreatureScript summons.DespawnAll(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* /*pSummoned*/) OVERRIDE + void SummonedCreatureDespawn(Creature* /*pSummoned*/) override { --_totemCount; } @@ -1955,13 +1955,13 @@ class npc_toc_enh_shaman : public CreatureScript */ } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { boss_faction_championsAI::JustDied(killer); summons.DespawnAll(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -2021,7 +2021,7 @@ class npc_toc_enh_shaman : public CreatureScript float _totemOldCenterX, _totemOldCenterY; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_enh_shamanAI>(creature); } @@ -2036,7 +2036,7 @@ class npc_toc_retro_paladin : public CreatureScript { npc_toc_retro_paladinAI(Creature* creature) : boss_faction_championsAI(creature, AI_MELEE) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_AVENGING_WRATH, urand(25*IN_MILLISECONDS, 35*IN_MILLISECONDS)); @@ -2050,13 +2050,13 @@ class npc_toc_retro_paladin : public CreatureScript SetEquipmentSlots(false, 47519, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { boss_faction_championsAI::EnterCombat(who); DoCast(SPELL_SEAL_OF_COMMAND); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -2127,7 +2127,7 @@ class npc_toc_retro_paladin : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_retro_paladinAI>(creature); } @@ -2142,14 +2142,14 @@ class npc_toc_pet_warlock : public CreatureScript { npc_toc_pet_warlockAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); events.ScheduleEvent(EVENT_DEVOUR_MAGIC, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); events.ScheduleEvent(EVENT_SPELL_LOCK, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -2179,7 +2179,7 @@ class npc_toc_pet_warlock : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_pet_warlockAI>(creature); } @@ -2194,13 +2194,13 @@ class npc_toc_pet_hunter : public CreatureScript { npc_toc_pet_hunterAI(Creature* creature) : boss_faction_championsAI(creature, AI_PET) { } - void Reset() OVERRIDE + void Reset() override { boss_faction_championsAI::Reset(); _clawTimer = urand(5*IN_MILLISECONDS, 10*IN_MILLISECONDS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -2219,7 +2219,7 @@ class npc_toc_pet_hunter : public CreatureScript uint32 _clawTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toc_pet_hunterAI>(creature); } @@ -2234,7 +2234,7 @@ class spell_faction_champion_warl_unstable_affliction : public SpellScriptLoader { PrepareAuraScript(spell_faction_champion_warl_unstable_affliction_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_UNSTABLE_AFFLICTION_DISPEL)) return false; @@ -2247,13 +2247,13 @@ class spell_faction_champion_warl_unstable_affliction : public SpellScriptLoader caster->CastSpell(dispelInfo->GetDispeller(), SPELL_UNSTABLE_AFFLICTION_DISPEL, true, NULL, GetEffect(EFFECT_0)); } - void Register() OVERRIDE + void Register() override { AfterDispel += AuraDispelFn(spell_faction_champion_warl_unstable_affliction_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_faction_champion_warl_unstable_affliction_AuraScript(); } @@ -2268,7 +2268,7 @@ class spell_faction_champion_death_grip : public SpellScriptLoader { PrepareSpellScript(spell_faction_champion_death_grip_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DEATH_GRIP_PULL)) return false; @@ -2284,14 +2284,14 @@ class spell_faction_champion_death_grip : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_faction_champion_death_grip_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_faction_champion_death_grip_SpellScript(); } @@ -2306,7 +2306,7 @@ class spell_toc_bloodlust : public SpellScriptLoader { PrepareSpellScript(spell_toc_bloodlust_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(AURA_SATED)) return false; @@ -2324,7 +2324,7 @@ class spell_toc_bloodlust : public SpellScriptLoader target->CastSpell(target, AURA_SATED, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY); @@ -2332,7 +2332,7 @@ class spell_toc_bloodlust : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_toc_bloodlust_SpellScript(); } @@ -2347,7 +2347,7 @@ class spell_toc_heroism : public SpellScriptLoader { PrepareSpellScript(spell_toc_heroism_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(AURA_EXHAUSTION)) return false; @@ -2365,7 +2365,7 @@ class spell_toc_heroism : public SpellScriptLoader target->CastSpell(target, AURA_EXHAUSTION, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_toc_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY); @@ -2373,7 +2373,7 @@ class spell_toc_heroism : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_toc_heroism_SpellScript(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index cb4b3cfcea3..c0f7b2f1856 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -101,7 +101,7 @@ class boss_jaraxxus : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_FEL_FIREBALL, 5*IN_MILLISECONDS); @@ -113,7 +113,7 @@ class boss_jaraxxus : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_INFERNAL_ERUPTION, 80*IN_MILLISECONDS); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(BOSS_JARAXXUS, FAIL); @@ -121,7 +121,7 @@ class boss_jaraxxus : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -130,24 +130,24 @@ class boss_jaraxxus : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summons.Summon(summoned); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -210,7 +210,7 @@ class boss_jaraxxus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_jaraxxusAI>(creature); } @@ -229,14 +229,14 @@ class npc_legion_flame : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetInCombatWithZone(); DoCast(SPELL_LEGION_FLAME_EFFECT); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { UpdateVictim(); if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS) @@ -246,7 +246,7 @@ class npc_legion_flame : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_legion_flameAI>(creature); } @@ -264,7 +264,7 @@ class npc_infernal_volcano : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); @@ -276,31 +276,31 @@ class npc_infernal_volcano : public CreatureScript _summons.DespawnAll(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { DoCast(SPELL_INFERNAL_ERUPTION_EFFECT); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { _summons.Summon(summoned); // makes immediate corpse despawn of summoned Felflame Infernals summoned->SetCorpseDelay(0); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // used to despawn corpse immediately me->DespawnOrUnsummon(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: SummonList _summons; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_infernal_volcanoAI(creature); } @@ -318,13 +318,13 @@ class npc_fel_infernal : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _felStreakTimer = 30*IN_MILLISECONDS; me->SetInCombatWithZone(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS) { @@ -351,7 +351,7 @@ class npc_fel_infernal : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_fel_infernalAI>(creature); } @@ -368,7 +368,7 @@ class npc_nether_portal : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); @@ -380,31 +380,31 @@ class npc_nether_portal : public CreatureScript _summons.DespawnAll(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { DoCast(SPELL_NETHER_PORTAL_EFFECT); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { _summons.Summon(summoned); // makes immediate corpse despawn of summoned Mistress of Pain summoned->SetCorpseDelay(0); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // used to despawn corpse immediately me->DespawnOrUnsummon(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: SummonList _summons; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nether_portalAI(creature); } @@ -423,7 +423,7 @@ class npc_mistress_of_pain : public CreatureScript _instance->SetData(DATA_MISTRESS_OF_PAIN_COUNT, INCREASE); } - void Reset() OVERRIDE + void Reset() override { _events.ScheduleEvent(EVENT_SHIVAN_SLASH, 30*IN_MILLISECONDS); _events.ScheduleEvent(EVENT_SPINNING_STRIKE, 30*IN_MILLISECONDS); @@ -432,12 +432,12 @@ class npc_mistress_of_pain : public CreatureScript me->SetInCombatWithZone(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _instance->SetData(DATA_MISTRESS_OF_PAIN_COUNT, DECREASE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_instance->GetBossState(BOSS_JARAXXUS) != IN_PROGRESS) { @@ -482,7 +482,7 @@ class npc_mistress_of_pain : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_mistress_of_painAI>(creature); } @@ -497,7 +497,7 @@ class spell_mistress_kiss : public SpellScriptLoader { PrepareAuraScript(spell_mistress_kiss_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (GetCaster()) if (sSpellMgr->GetSpellIdForDifficulty(SPELL_MISTRESS_KISS_DAMAGE_SILENCE, GetCaster())) @@ -519,13 +519,13 @@ class spell_mistress_kiss : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_mistress_kiss_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mistress_kiss_AuraScript(); } @@ -553,7 +553,7 @@ class spell_mistress_kiss_area : public SpellScriptLoader class spell_mistress_kiss_area_SpellScript : public SpellScript { - PrepareSpellScript(spell_mistress_kiss_area_SpellScript) + PrepareSpellScript(spell_mistress_kiss_area_SpellScript); void FilterTargets(std::list<WorldObject*>& targets) { @@ -572,14 +572,14 @@ class spell_mistress_kiss_area : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mistress_kiss_area_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_mistress_kiss_area_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mistress_kiss_area_SpellScript(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index ea166585bb3..9e75bef9735 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -160,7 +160,7 @@ class boss_gormok : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_IMPALE, urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS)); events.ScheduleEvent(EVENT_STAGGERING_STOMP, 15*IN_MILLISECONDS); @@ -169,13 +169,13 @@ class boss_gormok : public CreatureScript summons.DespawnAll(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); ScriptedAI::EnterEvadeMode(); } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) return; @@ -193,12 +193,12 @@ class boss_gormok : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(TYPE_NORTHREND_BEASTS, GORMOK_DONE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); instance->SetData(TYPE_NORTHREND_BEASTS, FAIL); @@ -206,7 +206,7 @@ class boss_gormok : public CreatureScript me->DespawnOrUnsummon(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); me->SetInCombatWithZone(); @@ -223,7 +223,7 @@ class boss_gormok : public CreatureScript } } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { // despawn the remaining passengers on death if (damage >= me->GetHealth()) @@ -232,7 +232,7 @@ class boss_gormok : public CreatureScript pSnobold->ToCreature()->DespawnOrUnsummon(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -279,7 +279,7 @@ class boss_gormok : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gormokAI>(creature); } @@ -294,11 +294,13 @@ class npc_snobold_vassal : public CreatureScript { npc_snobold_vassalAI(Creature* creature) : ScriptedAI(creature) { + _targetGUID = 0; + _targetDied = false; _instance = creature->GetInstanceScript(); _instance->SetData(DATA_SNOBOLD_COUNT, INCREASE); } - void Reset() OVERRIDE + void Reset() override { _events.ScheduleEvent(EVENT_BATTER, 5*IN_MILLISECONDS); _events.ScheduleEvent(EVENT_HEAD_CRACK, 25*IN_MILLISECONDS); @@ -310,25 +312,25 @@ class npc_snobold_vassal : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _targetGUID = who->GetGUID(); me->TauntApply(who); DoCast(who, SPELL_SNOBOLLED); } - void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) override { if (pDoneBy->GetGUID() == _targetGUID) uiDamage = 0; } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) return; @@ -344,7 +346,7 @@ class npc_snobold_vassal : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Unit* target = ObjectAccessor::GetPlayer(*me, _targetGUID)) if (target->IsAlive()) @@ -352,7 +354,7 @@ class npc_snobold_vassal : public CreatureScript _instance->SetData(DATA_SNOBOLD_COUNT, DECREASE); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -367,7 +369,7 @@ class npc_snobold_vassal : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || _targetDied) return; @@ -444,7 +446,7 @@ class npc_snobold_vassal : public CreatureScript bool _targetDied; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_snobold_vassalAI>(creature); } @@ -462,7 +464,7 @@ class npc_firebomb : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_FIRE_BOMB_DOT, true); SetCombatMovement(false); @@ -470,7 +472,7 @@ class npc_firebomb : public CreatureScript me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (_instance->GetData(TYPE_NORTHREND_BEASTS) != GORMOK_IN_PROGRESS) me->DespawnOrUnsummon(); @@ -480,7 +482,7 @@ class npc_firebomb : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_firebombAI>(creature); } @@ -492,7 +494,7 @@ struct boss_jormungarAI : public BossAI { } - void Reset() OVERRIDE + void Reset() override { Enraged = false; @@ -504,9 +506,9 @@ struct boss_jormungarAI : public BossAI events.ScheduleEvent(EVENT_SLIME_POOL, 15*IN_MILLISECONDS, 0, PHASE_MOBILE); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* otherWorm = Unit::GetCreature(*me, instance->GetData64(OtherWormEntry))) + if (Creature* otherWorm = ObjectAccessor::GetCreature(*me, instance->GetData64(OtherWormEntry))) { if (!otherWorm->IsAlive()) { @@ -520,7 +522,7 @@ struct boss_jormungarAI : public BossAI } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { // prevent losing 2 attempts at once on heroics if (instance->GetData(TYPE_NORTHREND_BEASTS) != FAIL) @@ -529,20 +531,20 @@ struct boss_jormungarAI : public BossAI me->DespawnOrUnsummon(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) instance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELIGIBLE, 0); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); me->SetInCombatWithZone(); instance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -681,7 +683,7 @@ class boss_acidmaw : public CreatureScript { boss_acidmawAI(Creature* creature) : boss_jormungarAI(creature) { } - void Reset() OVERRIDE + void Reset() override { boss_jormungarAI::Reset(); BiteSpell = SPELL_PARALYTIC_BITE; @@ -697,7 +699,7 @@ class boss_acidmaw : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_acidmawAI>(creature); } @@ -714,7 +716,7 @@ class boss_dreadscale : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { boss_jormungarAI::Reset(); BiteSpell = SPELL_BURNING_BITE; @@ -731,7 +733,7 @@ class boss_dreadscale : public CreatureScript WasMobile = false; } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) return; @@ -749,13 +751,13 @@ class boss_dreadscale : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); boss_jormungarAI::EnterEvadeMode(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); @@ -763,7 +765,7 @@ class boss_dreadscale : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_dreadscaleAI>(creature); } @@ -781,13 +783,13 @@ class npc_slime_pool : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _cast = false; me->SetReactState(REACT_PASSIVE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!_cast) { @@ -804,7 +806,7 @@ class npc_slime_pool : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_slime_poolAI>(creature); } @@ -828,13 +830,13 @@ class spell_gormok_fire_bomb : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_gormok_fire_bomb_SpellScript::TriggerFireBomb, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gormok_fire_bomb_SpellScript(); } @@ -851,7 +853,7 @@ class boss_icehowl : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_FEROCIOUS_BUTT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS)); events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(15*IN_MILLISECONDS, 25*IN_MILLISECONDS)); @@ -867,13 +869,13 @@ class boss_icehowl : public CreatureScript _stage = 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); instance->SetData(TYPE_NORTHREND_BEASTS, ICEHOWL_DONE); } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) return; @@ -910,20 +912,20 @@ class boss_icehowl : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); ScriptedAI::EnterEvadeMode(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); instance->SetData(TYPE_NORTHREND_BEASTS, FAIL); me->DespawnOrUnsummon(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -931,13 +933,13 @@ class boss_icehowl : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); instance->SetData(TYPE_NORTHREND_BEASTS, ICEHOWL_IN_PROGRESS); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_TRAMPLE && target->GetTypeId() == TYPEID_PLAYER) { @@ -949,7 +951,7 @@ class boss_icehowl : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1115,7 +1117,7 @@ class boss_icehowl : public CreatureScript uint8 _stage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_icehowlAI>(creature); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 0d7dc9062ad..e40cd9d5f41 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -145,7 +145,7 @@ struct boss_twin_baseAI : public BossAI { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); @@ -163,7 +163,7 @@ struct boss_twin_baseAI : public BossAI summons.DespawnAll(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SetBossState(BOSS_VALKIRIES, FAIL); @@ -171,7 +171,7 @@ struct boss_twin_baseAI : public BossAI me->DespawnOrUnsummon(); } - void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiId) override { if (uiType != POINT_MOTION_TYPE) return; @@ -187,7 +187,7 @@ struct boss_twin_baseAI : public BossAI } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -196,12 +196,12 @@ struct boss_twin_baseAI : public BossAI } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -222,7 +222,7 @@ struct boss_twin_baseAI : public BossAI summons.Despawn(summoned); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); if (Creature* pSister = GetSister()) @@ -245,10 +245,10 @@ struct boss_twin_baseAI : public BossAI // Called when sister pointer needed Creature* GetSister() { - return Unit::GetCreature((*me), instance->GetData64(SisterNpcId)); + return ObjectAccessor::GetCreature((*me), instance->GetData64(SisterNpcId)); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->SetInCombatWithZone(); if (Creature* pSister = GetSister()) @@ -262,7 +262,7 @@ struct boss_twin_baseAI : public BossAI DoCast(me, SurgeSpellId); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -283,7 +283,7 @@ struct boss_twin_baseAI : public BossAI me->SetCanDualWield(mode); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!instance || !UpdateVictim()) return; @@ -394,7 +394,7 @@ class boss_fjola : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); Stage = 0; @@ -415,7 +415,7 @@ class boss_fjola : public CreatureScript boss_twin_baseAI::Reset(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_START_TWINS_FIGHT); @@ -423,13 +423,13 @@ class boss_fjola : public CreatureScript boss_twin_baseAI::EnterCombat(who); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); boss_twin_baseAI::EnterEvadeMode(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->DoUseDoorOrButton(instance->GetData64(GO_MAIN_GATE_DOOR)); @@ -437,7 +437,7 @@ class boss_fjola : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fjolaAI>(creature); } @@ -452,7 +452,7 @@ class boss_eydis : public CreatureScript { boss_eydisAI(Creature* creature) : boss_twin_baseAI(creature) { } - void Reset() OVERRIDE + void Reset() override { SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); Stage = 1; @@ -472,7 +472,7 @@ class boss_eydis : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_eydisAI>(creature); } @@ -487,7 +487,7 @@ class npc_essence_of_twin : public CreatureScript { npc_essence_of_twinAI(Creature* creature) : ScriptedAI(creature) { } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { uint32 spellReturned = 0; switch (me->GetEntry()) @@ -506,12 +506,12 @@ class npc_essence_of_twin : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_essence_of_twinAI(creature); }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->RemoveAurasDueToSpell(creature->GetAI()->GetData(ESSENCE_REMOVE)); player->CastSpell(player, creature->GetAI()->GetData(ESSENCE_APPLY), true); @@ -540,7 +540,7 @@ struct npc_unleashed_ballAI : public ScriptedAI me->GetMotionMaster()->MovePoint(0, x, y, me->GetPositionZ()); } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); @@ -551,7 +551,7 @@ struct npc_unleashed_ballAI : public ScriptedAI RangeCheckTimer = 0.5*IN_MILLISECONDS; } - void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiId) override { if (uiType != POINT_MOTION_TYPE) return; @@ -582,7 +582,7 @@ class npc_unleashed_dark : public CreatureScript { npc_unleashed_darkAI(Creature* creature) : npc_unleashed_ballAI(creature) { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (RangeCheckTimer < diff) { @@ -599,7 +599,7 @@ class npc_unleashed_dark : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unleashed_darkAI(creature); } @@ -614,7 +614,7 @@ class npc_unleashed_light : public CreatureScript { npc_unleashed_lightAI(Creature* creature) : npc_unleashed_ballAI(creature) { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (RangeCheckTimer < diff) { @@ -631,7 +631,7 @@ class npc_unleashed_light : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unleashed_lightAI(creature); } @@ -649,18 +649,18 @@ class npc_bullet_controller : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { DoCastAOE(SPELL_CONTROLLER_PERIODIC); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { UpdateVictim(); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bullet_controllerAI(creature); } @@ -673,13 +673,12 @@ class spell_powering_up : public SpellScriptLoader class spell_powering_up_SpellScript : public SpellScript { - public: - PrepareSpellScript(spell_powering_up_SpellScript) + PrepareSpellScript(spell_powering_up_SpellScript); uint32 spellId; uint32 poweringUp; - bool Load() OVERRIDE + bool Load() override { spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster()); if (!sSpellMgr->GetSpellInfo(spellId)) @@ -712,13 +711,13 @@ class spell_powering_up : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_powering_up_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_powering_up_SpellScript(); } @@ -735,7 +734,7 @@ class spell_valkyr_essences : public SpellScriptLoader uint32 spellId; - bool Load() OVERRIDE + bool Load() override { spellId = sSpellMgr->GetSpellIdForDifficulty(SPELL_SURGE_OF_SPEED, GetCaster()); if (!sSpellMgr->GetSpellInfo(spellId)) @@ -807,13 +806,13 @@ class spell_valkyr_essences : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectAbsorb += AuraEffectAbsorbFn(spell_valkyr_essences_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_valkyr_essences_AuraScript(); } @@ -828,7 +827,7 @@ class spell_power_of_the_twins : public SpellScriptLoader { PrepareAuraScript(spell_power_of_the_twins_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -851,7 +850,7 @@ class spell_power_of_the_twins : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_power_of_the_twins_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_power_of_the_twins_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -859,7 +858,7 @@ class spell_power_of_the_twins : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_power_of_the_twins_AuraScript(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index c0e49fa43fb..7cab84ee4a7 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -31,7 +31,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript { instance_trial_of_the_crusader_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { SetBossNumber(MAX_ENCOUNTERS); TrialCounter = 50; @@ -69,7 +69,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript FloorGUID = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i) if (GetBossState(i) == IN_PROGRESS) @@ -82,7 +82,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript return false; } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (instance->IsHeroic()) { @@ -95,7 +95,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript // make sure Anub'arak isnt missing and floor is destroyed after a crash if (GetBossState(BOSS_LICH_KING) == DONE && TrialCounter && GetBossState(BOSS_ANUBARAK) != DONE) { - Creature* anubArak = Unit::GetCreature(*player, GetData64(NPC_ANUBARAK)); + Creature* anubArak = ObjectAccessor::GetCreature(*player, GetData64(NPC_ANUBARAK)); if (!anubArak) anubArak = player->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); @@ -122,7 +122,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript go->SetGoState(GO_STATE_READY); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -179,7 +179,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -227,7 +227,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -403,7 +403,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -472,7 +472,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -523,7 +523,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript return 0; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -586,7 +586,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript case 5060: case 5070: case 5080: - return NPC_LICH_KING_1; + return NPC_LICH_KING; break; case 120: case 122: @@ -629,7 +629,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript return 0; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && NotOneButTwoJormungarsTimer) { @@ -665,12 +665,12 @@ class instance_trial_of_the_crusader : public InstanceMapScript NeedSave = false; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return SaveDataBuffer; } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { @@ -697,7 +697,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript OUT_LOAD_INST_DATA_COMPLETE; } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE + bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override { switch (criteria_id) { @@ -774,7 +774,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript bool TributeToImmortalityEligible; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_trial_of_the_crusader_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index fdefde10b4f..11548ba4b1c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -115,7 +115,7 @@ class npc_announcer_toc10 : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_THRALL, 300.0f)) @@ -124,10 +124,10 @@ class npc_announcer_toc10 : public CreatureScript pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (!instance) @@ -156,7 +156,7 @@ class npc_announcer_toc10 : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override { player->PlayerTalkClass->ClearMenus(); player->CLOSE_GOSSIP_MENU(); @@ -173,7 +173,7 @@ class npc_announcer_toc10 : public CreatureScript else if (instance->GetBossState(BOSS_JARAXXUS) != DONE) { // if Jaraxxus is spawned, but the raid wiped - if (Creature* jaraxxus = Unit::GetCreature(*player, instance->GetData64(NPC_JARAXXUS))) + if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetData64(NPC_JARAXXUS))) { jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS); jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -207,7 +207,7 @@ class npc_announcer_toc10 : public CreatureScript creature->CastSpell(creature, SPELL_CORPSE_TELEPORT, false); creature->CastSpell(creature, SPELL_DESTROY_FLOOR_KNOCKUP, false); - Creature* anubArak = Unit::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK)); + Creature* anubArak = ObjectAccessor::GetCreature(*creature, instance->GetData64(NPC_ANUBARAK)); if (!anubArak || !anubArak->IsAlive()) anubArak = creature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); @@ -220,7 +220,7 @@ class npc_announcer_toc10 : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_announcer_toc10AI(creature); } @@ -238,7 +238,7 @@ class boss_lich_king_toc : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _updateTimer = 0; me->SetReactState(REACT_PASSIVE); @@ -252,7 +252,7 @@ class boss_lich_king_toc : public CreatureScript me->SetWalk(true); } - void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiId) override { if (uiType != POINT_MOTION_TYPE || !_instance) return; @@ -270,12 +270,12 @@ class boss_lich_king_toc : public CreatureScript } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!_instance) return; - if (_instance->GetData(TYPE_EVENT_NPC) != NPC_LICH_KING_1) + if (_instance->GetData(TYPE_EVENT_NPC) != NPC_LICH_KING) return; _updateTimer = _instance->GetData(TYPE_EVENT_TIMER); @@ -330,7 +330,7 @@ class boss_lich_king_toc : public CreatureScript me->CastSpell(me, SPELL_DESTROY_FLOOR_KNOCKUP, false); _instance->SetBossState(BOSS_LICH_KING, DONE); - Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK)); + Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_ANUBARAK)); if (!temp || !temp->IsAlive()) temp = me->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); @@ -355,7 +355,7 @@ class boss_lich_king_toc : public CreatureScript uint32 _updateTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lich_king_tocAI>(creature); } @@ -373,11 +373,11 @@ class npc_fizzlebang_toc : public CreatureScript _instance = me->GetInstanceScript(); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Talk(SAY_STAGE_1_06, killer); _instance->SetData(TYPE_EVENT, 1180); - if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) { temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); temp->SetReactState(REACT_AGGRESSIVE); @@ -385,14 +385,14 @@ class npc_fizzlebang_toc : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { me->SetWalk(true); _portalGUID = 0; me->GetMotionMaster()->MovePoint(1, ToCCommonLoc[10].GetPositionX(), ToCCommonLoc[10].GetPositionY()-60, ToCCommonLoc[10].GetPositionZ()); } - void MovementInform(uint32 uiType, uint32 uiId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiId) override { if (uiType != POINT_MOTION_TYPE) return; @@ -410,12 +410,12 @@ class npc_fizzlebang_toc : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { _summons.Summon(summoned); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!_instance) return; @@ -484,23 +484,23 @@ class npc_fizzlebang_toc : public CreatureScript _updateTimer = 5*IN_MILLISECONDS; break; case 1142: - if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) temp->SetTarget(me->GetGUID()); - if (Creature* pTrigger = Unit::GetCreature(*me, _triggerGUID)) + if (Creature* pTrigger = ObjectAccessor::GetCreature(*me, _triggerGUID)) pTrigger->DespawnOrUnsummon(); - if (Creature* pPortal = Unit::GetCreature(*me, _portalGUID)) + if (Creature* pPortal = ObjectAccessor::GetCreature(*me, _portalGUID)) pPortal->DespawnOrUnsummon(); _instance->SetData(TYPE_EVENT, 1144); _updateTimer = 10*IN_MILLISECONDS; break; case 1144: - if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) temp->AI()->Talk(SAY_STAGE_1_05); _instance->SetData(TYPE_EVENT, 1150); _updateTimer = 5*IN_MILLISECONDS; break; case 1150: - if (Creature* temp = Unit::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, _instance->GetData64(NPC_JARAXXUS))) { //1-shot Fizzlebang temp->CastSpell(me, 67888, false); @@ -526,7 +526,7 @@ class npc_fizzlebang_toc : public CreatureScript uint64 _triggerGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_fizzlebang_tocAI>(creature); } @@ -544,11 +544,11 @@ class npc_tirion_toc : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!_instance) return; @@ -699,7 +699,7 @@ class npc_tirion_toc : public CreatureScript _instance->SetData(TYPE_EVENT, 3092); break; case 3092: - if (Creature* pChampionController = Unit::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) + if (Creature* pChampionController = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_CHAMPIONS_CONTROLLER))) pChampionController->AI()->SetData(1, NOT_STARTED); _instance->SetData(TYPE_EVENT, 3095); break; @@ -735,12 +735,12 @@ class npc_tirion_toc : public CreatureScript break; case 4015: _instance->DoUseDoorOrButton(_instance->GetData64(GO_MAIN_GATE_DOOR)); - if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE))) + if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_LIGHTBANE))) { temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ()); temp->SetVisible(true); } - if (Creature* temp = Unit::GetCreature((*me), _instance->GetData64(NPC_DARKBANE))) + if (Creature* temp = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_DARKBANE))) { temp->GetMotionMaster()->MovePoint(1, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ()); temp->SetVisible(true); @@ -764,7 +764,7 @@ class npc_tirion_toc : public CreatureScript case 5005: _updateTimer = 8*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 5010); - me->SummonCreature(NPC_LICH_KING_1, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5); + me->SummonCreature(NPC_LICH_KING, ToCCommonLoc[2].GetPositionX(), ToCCommonLoc[2].GetPositionY(), ToCCommonLoc[2].GetPositionZ(), 5); break; case 5020: Talk(SAY_STAGE_4_03); @@ -779,7 +779,7 @@ class npc_tirion_toc : public CreatureScript _instance->SetData(TYPE_EVENT, 6005); break; case 6005: - if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING))) + if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING))) tirionFordring->AI()->Talk(SAY_STAGE_4_06); _updateTimer = 20*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 6010); @@ -787,7 +787,7 @@ class npc_tirion_toc : public CreatureScript case 6010: if (IsHeroic()) { - if (Creature* tirionFordring = Unit::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING))) + if (Creature* tirionFordring = ObjectAccessor::GetCreature((*me), _instance->GetData64(NPC_TIRION_FORDRING))) tirionFordring->AI()->Talk(SAY_STAGE_4_07); _updateTimer = 1*MINUTE*IN_MILLISECONDS; _instance->SetBossState(BOSS_ANUBARAK, SPECIAL); @@ -814,7 +814,7 @@ class npc_tirion_toc : public CreatureScript uint32 _updateTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_tirion_tocAI>(creature); } @@ -832,11 +832,11 @@ class npc_garrosh_toc : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!_instance) return; @@ -898,7 +898,7 @@ class npc_garrosh_toc : public CreatureScript uint32 _updateTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_garrosh_tocAI>(creature); } @@ -916,11 +916,11 @@ class npc_varian_toc : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!_instance) return; @@ -982,7 +982,7 @@ class npc_varian_toc : public CreatureScript uint32 _updateTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_varian_tocAI>(creature); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h index 17e4f2869c6..8a62453d7c1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h @@ -40,7 +40,7 @@ enum SpellIds enum MiscData { - DESPAWN_TIME = 300000, + DESPAWN_TIME = 1200000, DISPLAYID_DESTROYED_FLOOR = 9060 }; @@ -184,8 +184,7 @@ enum CreatureIds NPC_FIZZLEBANG = 35458, NPC_GARROSH = 34995, NPC_VARIAN = 34990, - NPC_LICH_KING_0 = 16980, - NPC_LICH_KING_1 = 35877, + NPC_LICH_KING = 35877, NPC_THRALL = 34994, NPC_PROUDMOORE = 34992, diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index 7b55452105b..a1690598532 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -60,12 +60,12 @@ class boss_king_dred : public CreatureScript { boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -77,13 +77,13 @@ class boss_king_dred : public CreatureScript events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000)); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_RAPTOR_KILLED) ++raptorsKilled; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_RAPTORS_KILLED) return raptorsKilled; @@ -91,12 +91,12 @@ class boss_king_dred : public CreatureScript return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -151,7 +151,7 @@ class boss_king_dred : public CreatureScript uint8 raptorsKilled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<boss_king_dredAI>(creature); } @@ -173,12 +173,12 @@ class npc_drakkari_gutripper : public CreatureScript uint32 GutRipTimer; - void Reset() OVERRIDE + void Reset() override { GutRipTimer = urand(10000, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -194,14 +194,14 @@ class npc_drakkari_gutripper : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED))) Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<npc_drakkari_gutripperAI>(creature); } @@ -223,12 +223,12 @@ class npc_drakkari_scytheclaw : public CreatureScript uint32 uiRendTimer; - void Reset() OVERRIDE + void Reset() override { uiRendTimer = urand(10000, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -244,14 +244,14 @@ class npc_drakkari_scytheclaw : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED))) Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<npc_drakkari_scytheclawAI>(creature); } @@ -264,7 +264,7 @@ class achievement_king_dred : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 09db3f89c26..4e9462a447f 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -82,7 +82,7 @@ public: { boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -93,7 +93,7 @@ public: SetBubbled(false); } - void EnterCombat(Unit* /* victim */) OVERRIDE + void EnterCombat(Unit* /* victim */) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -103,7 +103,7 @@ public: SetBubbled(true); } - void AttackStart(Unit* target) OVERRIDE + void AttackStart(Unit* target) override { if (!target) return; @@ -112,19 +112,19 @@ public: DoStartNoMovement(target); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || _bubbled) return; @@ -153,13 +153,13 @@ public: } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_CRYSTAL_HANDLER_DIED) CrystalHandlerDied(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { BossAI::MoveInLineOfSight(who); @@ -171,12 +171,12 @@ public: _ohNovos = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return type == DATA_NOVOS_ACHIEV && _ohNovos ? 1 : 0; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); } @@ -208,7 +208,7 @@ public: { for (uint8 i = 0; i < 4; i++) if (uint64 guid = instance->GetData64(summoners[i].data)) - if (Creature* crystalChannelTarget = instance->instance->GetCreature(guid)) + if (Creature* crystalChannelTarget = ObjectAccessor::GetCreature(*me, guid)) { if (active) crystalChannelTarget->AI()->SetData(summoners[i].spell, summoners[i].timer); @@ -221,7 +221,7 @@ public: { for (uint8 i = 0; i < 4; i++) if (uint64 guid = instance->GetData64(DATA_NOVOS_CRYSTAL_1 + i)) - if (GameObject* crystal = instance->instance->GetGameObject(guid)) + if (GameObject* crystal = ObjectAccessor::GetGameObject(*me, guid)) SetCrystalStatus(crystal, active); } @@ -231,7 +231,7 @@ public: if (Creature* crystalChannelTarget = crystal->FindNearestCreature(NPC_CRYSTAL_CHANNEL_TARGET, 5.0f)) { if (active) - crystalChannelTarget->AI()->DoCastAOE(SPELL_BEAM_CHANNEL); + crystalChannelTarget->CastSpell((Unit*)NULL, SPELL_BEAM_CHANNEL); else if (crystalChannelTarget->HasUnitState(UNIT_STATE_CASTING)) crystalChannelTarget->CastStop(); } @@ -241,7 +241,7 @@ public: { for (uint8 i = 0; i < 4; i++) if (uint64 guid = instance->GetData64(DATA_NOVOS_CRYSTAL_1 + i)) - if (GameObject* crystal = instance->instance->GetGameObject(guid)) + if (GameObject* crystal = ObjectAccessor::GetGameObject(*me, guid)) if (crystal->GetGoState() == GO_STATE_ACTIVE) { SetCrystalStatus(crystal, false); @@ -258,7 +258,7 @@ public: events.ScheduleEvent(EVENT_SUMMON_MINIONS, 15000); } else if (uint64 guid = instance->GetData64(DATA_NOVOS_SUMMONER_4)) - if (Creature* crystalChannelTarget = instance->instance->GetCreature(guid)) + if (Creature* crystalChannelTarget = ObjectAccessor::GetCreature(*me, guid)) crystalChannelTarget->AI()->SetData(SPELL_SUMMON_CRYSTAL_HANDLER, 15000); } @@ -267,7 +267,7 @@ public: bool _bubbled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<boss_novosAI>(creature); } @@ -282,14 +282,14 @@ public: { npc_crystal_channel_targetAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _spell = 0; _timer = 0; _temp = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_spell) { @@ -303,18 +303,18 @@ public: } } - void SetData(uint32 id, uint32 value) OVERRIDE + void SetData(uint32 id, uint32 value) override { _spell = id; _timer = value; _temp = value; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (InstanceScript* instance = me->GetInstanceScript()) if (uint64 guid = instance->GetData64(DATA_NOVOS)) - if (Creature* novos = Creature::GetCreature(*me, guid)) + if (Creature* novos = ObjectAccessor::GetCreature(*me, guid)) novos->AI()->JustSummoned(summon); if (summon) @@ -330,7 +330,7 @@ public: uint32 _temp; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<npc_crystal_channel_targetAI>(creature); } @@ -341,7 +341,7 @@ class achievement_oh_novos : public AchievementCriteriaScript public: achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->AI()->GetData(DATA_NOVOS_ACHIEV); } @@ -356,7 +356,7 @@ class spell_novos_summon_minions : public SpellScriptLoader { PrepareSpellScript(spell_novos_summon_minions_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_COPY_OF_MINIONS)) return false; @@ -369,13 +369,13 @@ class spell_novos_summon_minions : public SpellScriptLoader GetCaster()->CastSpell((Unit*)NULL, SPELL_SUMMON_COPY_OF_MINIONS, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_novos_summon_minions_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_novos_summon_minions_SpellScript(); } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index 8022c19180c..77f026b1d3a 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -84,13 +84,13 @@ class boss_tharon_ja : public CreatureScript { boss_tharon_jaAI(Creature* creature) : BossAI(creature, DATA_THARON_JA) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->RestoreDisplayId(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); _EnterCombat(); @@ -101,13 +101,13 @@ class boss_tharon_ja : public CreatureScript events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(8000, 10000)); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -116,7 +116,7 @@ class boss_tharon_ja : public CreatureScript DoCastAOE(SPELL_ACHIEVEMENT_CHECK, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -199,7 +199,7 @@ class boss_tharon_ja : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<boss_tharon_jaAI>(creature); } @@ -214,7 +214,7 @@ class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader { PrepareSpellScript(spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GIFT_OF_THARON_JA)) return false; @@ -227,13 +227,13 @@ class spell_tharon_ja_clear_gift_of_tharon_ja : public SpellScriptLoader target->RemoveAura(SPELL_GIFT_OF_THARON_JA); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript(); } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 4fc8f532c47..13d968d9e06 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -75,13 +75,13 @@ class boss_trollgore : public CreatureScript { boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _consumptionJunction = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -93,7 +93,7 @@ class boss_trollgore : public CreatureScript events.ScheduleEvent(EVENT_SPAWN, urand(30000, 40000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -147,13 +147,13 @@ class boss_trollgore : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_CONSUMPTION_JUNCTION) return _consumptionJunction ? 1 : 0; @@ -161,7 +161,7 @@ class boss_trollgore : public CreatureScript return 0; } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -169,7 +169,7 @@ class boss_trollgore : public CreatureScript Talk(SAY_KILL); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->GetMotionMaster()->MovePoint(POINT_LANDING, Landing); summons.Summon(summon); @@ -179,7 +179,7 @@ class boss_trollgore : public CreatureScript bool _consumptionJunction; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<boss_trollgoreAI>(creature); } @@ -194,7 +194,7 @@ class npc_drakkari_invader : public CreatureScript { npc_drakkari_invaderAI(Creature* creature) : ScriptedAI(creature) { } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type == POINT_MOTION_TYPE && pointId == POINT_LANDING) { @@ -205,7 +205,7 @@ class npc_drakkari_invader : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetDrakTharonKeepAI<npc_drakkari_invaderAI>(creature); } @@ -221,7 +221,7 @@ class spell_trollgore_consume : public SpellScriptLoader { PrepareSpellScript(spell_trollgore_consume_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CONSUME_BUFF)) return false; @@ -234,13 +234,13 @@ class spell_trollgore_consume : public SpellScriptLoader target->CastSpell(GetCaster(), SPELL_CONSUME_BUFF, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_trollgore_consume_SpellScript::HandleConsume, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_trollgore_consume_SpellScript(); } @@ -256,7 +256,7 @@ class spell_trollgore_corpse_explode : public SpellScriptLoader { PrepareAuraScript(spell_trollgore_corpse_explode_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CORPSE_EXPLODE_DAMAGE)) return false; @@ -276,14 +276,14 @@ class spell_trollgore_corpse_explode : public SpellScriptLoader target->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_trollgore_corpse_explode_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); AfterEffectRemove += AuraEffectRemoveFn(spell_trollgore_corpse_explode_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_trollgore_corpse_explode_AuraScript(); } @@ -299,7 +299,7 @@ class spell_trollgore_invader_taunt : public SpellScriptLoader { PrepareSpellScript(spell_trollgore_invader_taunt_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue())) return false; @@ -312,13 +312,13 @@ class spell_trollgore_invader_taunt : public SpellScriptLoader target->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_trollgore_invader_taunt_SpellScript::HandleTaunt, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_trollgore_invader_taunt_SpellScript(); } @@ -331,7 +331,7 @@ class achievement_consumption_junction : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index 112afe732b6..d7c21991ca0 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -41,7 +41,7 @@ class instance_drak_tharon_keep : public InstanceMapScript memset(NovosSummonerGUIDs, 0, 4 * sizeof(uint64)); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -68,7 +68,7 @@ class instance_drak_tharon_keep : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -121,7 +121,7 @@ class instance_drak_tharon_keep : public InstanceMapScript NovosSummonerGUIDs[3] = creature->GetGUID(); } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -152,14 +152,14 @@ class instance_drak_tharon_keep : public InstanceMapScript return 0; } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { if (unit->GetEntry() == NPC_CRYSTAL_HANDLER) if (Creature* novos = instance->GetCreature(NovosGUID)) novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -170,7 +170,7 @@ class instance_drak_tharon_keep : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -213,7 +213,7 @@ class instance_drak_tharon_keep : public InstanceMapScript uint64 NovosSummonerGUIDs[4]; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_drak_tharon_keep_InstanceScript(map); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 2e0466d19d0..fe98f005bca 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -71,7 +71,7 @@ class boss_bronjahm : public CreatureScript DoCast(me, SPELL_SOULSTORM_CHANNEL, true); } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName)) me->IsAIEnabled = false; @@ -79,7 +79,7 @@ class boss_bronjahm : public CreatureScript Reset(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.SetPhase(PHASE_1); @@ -90,12 +90,12 @@ class boss_bronjahm : public CreatureScript instance->SetBossState(DATA_BRONJAHM, NOT_STARTED); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { DoCast(me, SPELL_SOULSTORM_CHANNEL, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); me->RemoveAurasDueToSpell(SPELL_SOULSTORM_CHANNEL); @@ -103,20 +103,20 @@ class boss_bronjahm : public CreatureScript instance->SetBossState(DATA_BRONJAHM, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetBossState(DATA_BRONJAHM, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (events.IsInPhase(PHASE_1) && !HealthAbovePct(30)) { @@ -127,7 +127,7 @@ class boss_bronjahm : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); summon->SetReactState(REACT_PASSIVE); @@ -136,7 +136,7 @@ class boss_bronjahm : public CreatureScript summon->CastSpell(summon, SPELL_PURPLE_BANISH_VISUAL, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -186,7 +186,7 @@ class boss_bronjahm : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_bronjahmAI>(creature); } @@ -204,7 +204,7 @@ class npc_corrupted_soul_fragment : public CreatureScript instance = me->GetInstanceScript(); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != CHASE_MOTION_TYPE) return; @@ -226,7 +226,7 @@ class npc_corrupted_soul_fragment : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_corrupted_soul_fragmentAI>(creature); } @@ -254,13 +254,13 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader SetHitDamage(newDamage); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_bronjahm_magic_bane_SpellScript::RecalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_bronjahm_magic_bane_SpellScript(); } @@ -281,13 +281,13 @@ class spell_bronjahm_consume_soul : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), GetEffectValue(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_bronjahm_consume_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_bronjahm_consume_soul_SpellScript(); } @@ -309,13 +309,13 @@ class spell_bronjahm_soulstorm_channel : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), i, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_bronjahm_soulstorm_channel_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_bronjahm_soulstorm_channel_AuraScript(); } @@ -340,13 +340,13 @@ class spell_bronjahm_soulstorm_visual : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), i, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_bronjahm_soulstorm_visual_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_bronjahm_soulstorm_visual_AuraScript(); } @@ -388,7 +388,7 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader targets = sharedTargets; } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsInitial, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_bronjahm_soulstorm_targeting_SpellScript::FilterTargetsSubsequent, EFFECT_2, TARGET_UNIT_DEST_AREA_ENEMY); @@ -397,7 +397,7 @@ class spell_bronjahm_soulstorm_targeting : public SpellScriptLoader std::list<WorldObject*> sharedTargets; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_bronjahm_soulstorm_targeting_SpellScript(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 8ef6abf2f47..e64067fb995 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -132,7 +132,7 @@ class boss_devourer_of_souls : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (!instance || static_cast<InstanceMap*>(me->GetMap())->GetScriptId() != sObjectMgr->GetScriptId(FoSScriptName)) me->IsAIEnabled = false; @@ -140,7 +140,7 @@ class boss_devourer_of_souls : public CreatureScript Reset(); } - void Reset() OVERRIDE + void Reset() override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); me->SetDisplayId(DISPLAY_ANGER); @@ -154,7 +154,7 @@ class boss_devourer_of_souls : public CreatureScript instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_FACE_AGGRO); @@ -169,7 +169,7 @@ class boss_devourer_of_souls : public CreatureScript instance->SetData(DATA_DEVOURER_EVENT, IN_PROGRESS); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -194,7 +194,7 @@ class boss_devourer_of_souls : public CreatureScript Talk(textId); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { summons.DespawnAll(); @@ -223,13 +223,13 @@ class boss_devourer_of_souls : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override { if (spell->Id == H_SPELL_PHANTOM_BLAST) threeFaced = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_THREE_FACED) return threeFaced; @@ -237,7 +237,7 @@ class boss_devourer_of_souls : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Return since we have no target if (!UpdateVictim()) @@ -343,7 +343,7 @@ class boss_devourer_of_souls : public CreatureScript int8 wailingSoulTick; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_devourer_of_soulsAI>(creature); } @@ -359,7 +359,7 @@ class spell_devourer_of_souls_mirrored_soul : public SpellScriptLoader { PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_PROC_AURA)) return false; @@ -372,13 +372,13 @@ class spell_devourer_of_souls_mirrored_soul : public SpellScriptLoader target->CastSpell(GetCaster(), SPELL_MIRRORED_SOUL_PROC_AURA, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_devourer_of_souls_mirrored_soul_SpellScript(); } @@ -394,14 +394,14 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader { PrepareAuraScript(spell_devourer_of_souls_mirrored_soul_proc_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_DAMAGE)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { return true; } @@ -418,14 +418,14 @@ class spell_devourer_of_souls_mirrored_soul_proc : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_MIRRORED_SOUL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetCaster(), true); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_devourer_of_souls_mirrored_soul_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_devourer_of_souls_mirrored_soul_proc_AuraScript(); } @@ -441,7 +441,7 @@ class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript { PrepareSpellScript(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MIRRORED_SOUL_BUFF)) return false; @@ -464,14 +464,14 @@ class spell_devourer_of_souls_mirrored_soul_target_selector : public SpellScript GetCaster()->CastSpell(target, SPELL_MIRRORED_SOUL_BUFF, false); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); OnEffectHitTarget += SpellEffectFn(spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_devourer_of_souls_mirrored_soul_target_selector_SpellScript(); } @@ -482,7 +482,7 @@ class achievement_three_faced : public AchievementCriteriaScript public: achievement_three_faced() : AchievementCriteriaScript("achievement_three_faced") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index 3e901bfd0d4..fc9a786aab9 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -89,13 +89,13 @@ public: EventMap events; Phase phase; - void Reset() OVERRIDE + void Reset() override { events.Reset(); phase = PHASE_NORMAL; } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { switch (actionId) { @@ -109,7 +109,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (phase == PHASE_INTRO) { @@ -158,7 +158,7 @@ public: } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -172,7 +172,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -188,7 +188,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_sylvanas_fosAI>(creature); } @@ -212,13 +212,13 @@ public: EventMap events; Phase phase; - void Reset() OVERRIDE + void Reset() override { events.Reset(); phase = PHASE_NORMAL; } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { switch (actionId) { @@ -232,7 +232,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (phase == PHASE_INTRO) { @@ -292,7 +292,7 @@ public: } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -306,7 +306,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -322,7 +322,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_jaina_fosAI>(creature); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp index cb03842cf3f..964787777a7 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp @@ -43,13 +43,13 @@ class instance_forge_of_souls : public InstanceMapScript teamInInstance = 0; } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (!teamInInstance) teamInInstance = player->GetTeam(); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (!teamInInstance) { @@ -69,20 +69,20 @@ class instance_forge_of_souls : public InstanceMapScript break; case NPC_SYLVANAS_PART1: if (teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE); + creature->UpdateEntry(NPC_JAINA_PART1); break; case NPC_LORALEN: if (teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ELANDRA, ALLIANCE); + creature->UpdateEntry(NPC_ELANDRA); break; case NPC_KALIRA: if (teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_KORELN, ALLIANCE); + creature->UpdateEntry(NPC_KORELN); break; } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -95,7 +95,7 @@ class instance_forge_of_souls : public InstanceMapScript return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -110,7 +110,7 @@ class instance_forge_of_souls : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -121,7 +121,7 @@ class instance_forge_of_souls : public InstanceMapScript return saveStream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -158,7 +158,7 @@ class instance_forge_of_souls : public InstanceMapScript uint32 teamInInstance; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_forge_of_souls_InstanceScript(map); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 2ba47d354f9..a5577b6a0ea 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -25,7 +25,7 @@ enum Texts SAY_SLAY = 1, SAY_DEATH = 2, SAY_IMPENDING_DESPAIR = 3, - SAY_DEFILING_HORROR = 4, + SAY_DEFILING_HORROR = 4 }; enum Spells @@ -33,8 +33,9 @@ enum Spells SPELL_QUIVERING_STRIKE = 72422, SPELL_IMPENDING_DESPAIR = 72426, SPELL_DEFILING_HORROR = 72435, - SPELL_HOPELESSNESS = 72395, - H_SPELL_HOPELESSNESS = 72390, /// @todo not in dbc. Add in DB. + SPELL_HOPELESSNESS_1 = 72395, + SPELL_HOPELESSNESS_2 = 72396, + SPELL_HOPELESSNESS_3 = 72397 }; enum Events @@ -42,99 +43,106 @@ enum Events EVENT_NONE, EVENT_QUIVERING_STRIKE, EVENT_IMPENDING_DESPAIR, - EVENT_DEFILING_HORROR, + EVENT_DEFILING_HORROR }; +uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 }; + class boss_falric : public CreatureScript { -public: - boss_falric() : CreatureScript("boss_falric") { } - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_falricAI>(creature); - } - - struct boss_falricAI : public boss_horAI - { - boss_falricAI(Creature* creature) : boss_horAI(creature) { } - - uint8 uiHopelessnessCount; - - void Reset() OVERRIDE - { - boss_horAI::Reset(); - - uiHopelessnessCount = 0; + public: + boss_falric() : CreatureScript("boss_falric") { } - instance->SetBossState(DATA_FALRIC_EVENT, NOT_STARTED); - } - - void EnterCombat(Unit* /*who*/) OVERRIDE + struct boss_falricAI : public boss_horAI { - Talk(SAY_AGGRO); - instance->SetBossState(DATA_FALRIC_EVENT, IN_PROGRESS); - - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000); - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000); - events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer. - } + boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { } - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); - - instance->SetBossState(DATA_FALRIC_EVENT, DONE); - } + void Reset() override + { + boss_horAI::Reset(); + _hopelessnessCount = 0; + } - void KilledUnit(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_SLAY); - } + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + instance->SetBossState(DATA_FALRIC, IN_PROGRESS); - void UpdateAI(uint32 diff) OVERRIDE - { - // Return since we have no target - if (!UpdateVictim()) - return; + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000); + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000); + events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000)); + } - events.Update(diff); + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage)) + || (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage)) + || (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage))) + { + if (_hopelessnessCount) + me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me)); + DoCast(me, HopelessnessHelper[_hopelessnessCount]); + ++_hopelessnessCount; + } + } - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + events.Reset(); + instance->SetBossState(DATA_FALRIC, DONE); + } - switch (events.ExecuteEvent()) + void KilledUnit(Unit* who) override { - case EVENT_QUIVERING_STRIKE: - DoCast(SPELL_QUIVERING_STRIKE); - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000); - break; - case EVENT_IMPENDING_DESPAIR: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - { - Talk(SAY_IMPENDING_DESPAIR); - DoCast(target, SPELL_IMPENDING_DESPAIR); - } - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000); - break; - case EVENT_DEFILING_HORROR: - DoCast(SPELL_DEFILING_HORROR); - events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer. - break; + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } - if ((uiHopelessnessCount < 1 && HealthBelowPct(66)) - || (uiHopelessnessCount < 2 && HealthBelowPct(33)) - || (uiHopelessnessCount < 3 && HealthBelowPct(10))) + void UpdateAI(uint32 diff) override { - uiHopelessnessCount++; - DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS, H_SPELL_HOPELESSNESS)); + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_QUIVERING_STRIKE: + DoCastVictim(SPELL_QUIVERING_STRIKE); + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000); + break; + case EVENT_IMPENDING_DESPAIR: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + { + Talk(SAY_IMPENDING_DESPAIR); + DoCast(target, SPELL_IMPENDING_DESPAIR); + } + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000); + break; + case EVENT_DEFILING_HORROR: + DoCastAOE(SPELL_DEFILING_HORROR); + events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - }; + private: + uint8 _hopelessnessCount; + }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<boss_falricAI>(creature); + } }; void AddSC_boss_falric() diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index c6f692e7ff5..902a917c594 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -17,6 +17,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" #include "halls_of_reflection.h" enum Texts @@ -33,6 +35,7 @@ enum Spells SPELL_WELL_OF_CORRUPTION = 72362, SPELL_CORRUPTED_FLESH = 72363, SPELL_SHARED_SUFFERING = 72368, + SPELL_SHARED_SUFFERING_DISPEL = 72373 }; enum Events @@ -41,93 +44,130 @@ enum Events EVENT_OBLITERATE, EVENT_WELL_OF_CORRUPTION, EVENT_CORRUPTED_FLESH, - EVENT_SHARED_SUFFERING, + EVENT_SHARED_SUFFERING }; class boss_marwyn : public CreatureScript { -public: - boss_marwyn() : CreatureScript("boss_marwyn") { } + public: + boss_marwyn() : CreatureScript("boss_marwyn") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<boss_marwynAI>(creature); - } - - struct boss_marwynAI : public boss_horAI - { - boss_marwynAI(Creature* creature) : boss_horAI(creature) { } - - void Reset() OVERRIDE + struct boss_marwynAI : public boss_horAI { - boss_horAI::Reset(); + boss_marwynAI(Creature* creature) : boss_horAI(creature, DATA_MARWYN) { } - instance->SetBossState(DATA_MARWYN_EVENT, NOT_STARTED); - } + void Reset() override + { + boss_horAI::Reset(); + } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); - instance->SetBossState(DATA_MARWYN_EVENT, IN_PROGRESS); + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + instance->SetBossState(DATA_MARWYN, IN_PROGRESS); + + events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000)); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000)); + } - events.ScheduleEvent(EVENT_OBLITERATE, 30000); /// @todo Check timer - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); /// @todo Check timer - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + events.Reset(); + instance->SetBossState(DATA_MARWYN, DONE); + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } - instance->SetBossState(DATA_MARWYN_EVENT, DONE); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_OBLITERATE: + DoCastVictim(SPELL_OBLITERATE); + events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000)); + break; + case EVENT_WELL_OF_CORRUPTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_WELL_OF_CORRUPTION); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); + break; + case EVENT_CORRUPTED_FLESH: + Talk(SAY_CORRUPTED_FLESH); + DoCastAOE(SPELL_CORRUPTED_FLESH); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); + break; + case EVENT_SHARED_SUFFERING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + DoCast(target, SPELL_SHARED_SUFFERING); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; - void KilledUnit(Unit* /*victim*/) OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - Talk(SAY_SLAY); + return GetHallsOfReflectionAI<boss_marwynAI>(creature); } +}; - void UpdateAI(uint32 diff) OVERRIDE - { - // Return since we have no target - if (!UpdateVictim()) - return; +// 72368, 72369 - Shared Suffering +class spell_marwyn_shared_suffering : public SpellScriptLoader +{ + public: + spell_marwyn_shared_suffering() : SpellScriptLoader("spell_marwyn_shared_suffering") { } - events.Update(diff); + class spell_marwyn_shared_suffering_AuraScript : public AuraScript + { + PrepareAuraScript(spell_marwyn_shared_suffering_AuraScript); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL) + return; + + if (Unit* caster = GetCaster()) + { + int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber()); + if (remainingDamage > 0) + caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK); + } + } - switch (events.ExecuteEvent()) + void Register() override { - case EVENT_OBLITERATE: - DoCast(SPELL_OBLITERATE); - events.ScheduleEvent(EVENT_OBLITERATE, 30000); - break; - case EVENT_WELL_OF_CORRUPTION: - DoCast(SPELL_WELL_OF_CORRUPTION); - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); - break; - case EVENT_CORRUPTED_FLESH: - Talk(SAY_CORRUPTED_FLESH); - DoCast(SPELL_CORRUPTED_FLESH); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); - break; - case EVENT_SHARED_SUFFERING: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHARED_SUFFERING); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); - break; + AfterEffectRemove += AuraEffectRemoveFn(spell_marwyn_shared_suffering_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } + }; - DoMeleeAttackIfReady(); + AuraScript* GetAuraScript() const override + { + return new spell_marwyn_shared_suffering_AuraScript(); } - }; - }; void AddSC_boss_marwyn() { new boss_marwyn(); + new spell_marwyn_shared_suffering(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 027a6843c87..4303026ba64 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -18,6 +18,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" +#include "SpellScript.h" +#include "Transport.h" #include "Player.h" #include "halls_of_reflection.h" @@ -36,17 +38,6 @@ enum Text SAY_JAINA_INTRO_11 = 10, SAY_JAINA_INTRO_END = 11, - SAY_JAINA_ESCAPE_1 = 0, - SAY_JAINA_ESCAPE_2 = 1, - SAY_JAINA_ESCAPE_3 = 2, - SAY_JAINA_ESCAPE_4 = 3, - SAY_JAINA_ESCAPE_5 = 4, - SAY_JAINA_ESCAPE_6 = 5, - SAY_JAINA_ESCAPE_7 = 6, - SAY_JAINA_ESCAPE_8 = 7, - SAY_JAINA_ESCAPE_9 = 8, - SAY_JAINA_ESCAPE_10 = 9, - SAY_SYLVANAS_INTRO_1 = 0, SAY_SYLVANAS_INTRO_2 = 1, SAY_SYLVANAS_INTRO_3 = 2, @@ -57,16 +48,6 @@ enum Text SAY_SYLVANAS_INTRO_8 = 7, SAY_SYLVANAS_INTRO_END = 8, - SAY_SYLVANAS_ESCAPE_1 = 0, - SAY_SYLVANAS_ESCAPE_2 = 1, - SAY_SYLVANAS_ESCAPE_3 = 2, - SAY_SYLVANAS_ESCAPE_4 = 3, - SAY_SYLVANAS_ESCAPE_5 = 4, - SAY_SYLVANAS_ESCAPE_6 = 5, - SAY_SYLVANAS_ESCAPE_7 = 6, - SAY_SYLVANAS_ESCAPE_8 = 7, - SAY_SYLVANAS_ESCAPE_9 = 8, - SAY_UTHER_INTRO_A2_1 = 0, SAY_UTHER_INTRO_A2_2 = 1, SAY_UTHER_INTRO_A2_3 = 2, @@ -90,27 +71,40 @@ enum Text SAY_LK_JAINA_INTRO_END = 3, SAY_LK_SYLVANAS_INTRO_END = 4, + SAY_JAINA_SYLVANAS_ESCAPE_1 = 0, + SAY_JAINA_SYLVANAS_ESCAPE_2 = 1, + SAY_JAINA_SYLVANAS_ESCAPE_3 = 2, + SAY_JAINA_SYLVANAS_ESCAPE_4 = 3, + SAY_JAINA_SYLVANAS_ESCAPE_5 = 4, + SAY_JAINA_SYLVANAS_ESCAPE_6 = 5, + SAY_JAINA_SYLVANAS_ESCAPE_7 = 6, // unused + SAY_JAINA_SYLVANAS_ESCAPE_8 = 7, + + SAY_JAINA_ESCAPE_9 = 8, + SAY_JAINA_ESCAPE_10 = 9, + + SAY_SYLVANAS_ESCAPE_9 = 8, + SAY_LK_ESCAPE_1 = 0, SAY_LK_ESCAPE_2 = 1, - SAY_LK_ESCAPE_3 = 2, - SAY_LK_ESCAPE_4 = 3, - SAY_LK_ESCAPE_5 = 4, - SAY_LK_ESCAPE_6 = 5, - SAY_LK_ESCAPE_7 = 6, - SAY_LK_ESCAPE_8 = 7, - SAY_LK_ESCAPE_9 = 8, - SAY_LK_ESCAPE_10 = 9, - SAY_LK_ESCAPE_11 = 10, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_1 = 2, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_2 = 3, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_3 = 4, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_4 = 5, + SAY_LK_ESCAPE_GHOULS = 6, + SAY_LK_ESCAPE_ABOMINATION = 7, + SAY_LK_ESCAPE_WINTER = 8, + SAY_LK_ESCAPE_HARVEST_SOUL = 9, SAY_FALRIC_INTRO_1 = 5, SAY_FALRIC_INTRO_2 = 6, - SAY_MARWYN_INTRO_1 = 4, + SAY_MARWYN_INTRO_1 = 4 }; enum Events { - EVENT_WALK_INTRO1 = 1, + EVENT_WALK_INTRO1 = 1, EVENT_WALK_INTRO2, EVENT_START_INTRO, EVENT_SKIP_INTRO, @@ -181,21 +175,17 @@ enum Events EVENT_ESCAPE_13, EVENT_ESCAPE_14, EVENT_ESCAPE_15, - //EVENT_ESCAPE_16, + EVENT_ESCAPE_16, EVENT_ESCAPE_17, - EVENT_ESCAPE_18, - EVENT_ESCAPE_19, - EVENT_ESCAPE_20, - EVENT_ESCAPE_21, - EVENT_ESCAPE_22, - EVENT_ESCAPE_23, - EVENT_ESCAPE_24, - EVENT_ESCAPE_25, - EVENT_ESCAPE_26, - EVENT_ESCAPE_27, - - EVENT_OPEN_FROSTWORN_DOOR, - EVENT_CLOSE_FROSTWORN_DOOR, + + EVENT_REMORSELESS_WINTER, + EVENT_ESCAPE_SUMMON_GHOULS, + EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, + EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, + + EVENT_OPEN_IMPENETRABLE_DOOR, + EVENT_CLOSE_IMPENETRABLE_DOOR, + EVENT_KORELN_LORALEN_DEATH }; enum Misc @@ -203,907 +193,1151 @@ enum Misc ACTION_START_INTRO, ACTION_SKIP_INTRO, - QUEST_DELIVRANCE_FROM_THE_PIT_A2 = 24710, - QUEST_DELIVRANCE_FROM_THE_PIT_H2 = 24712, - QUEST_WRATH_OF_THE_LICH_KING_A2 = 24500, - QUEST_WRATH_OF_THE_LICH_KING_H2 = 24802, + JAINA_SYLVANAS_MAX_HEALTH = 252000, + + POINT_SHADOW_THRONE_DOOR = 1, + POINT_ATTACK_ICEWALL = 2, + POINT_TRAP = 3, + + SOUND_LK_SLAY_1 = 17214, + SOUND_LK_SLAY_2 = 17215, + SOUND_LK_FURY_OF_FROSTMOURNE = 17224 }; enum Spells { - SPELL_CAST_VISUAL = 65633, // Jaina/Sylavana - SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn - SPELL_UTHER_DESPAWN = 70693, + // Misc SPELL_TAKE_FROSTMOURNE = 72729, SPELL_FROSTMOURNE_DESPAWN = 72726, SPELL_FROSTMOURNE_VISUAL = 73220, SPELL_FROSTMOURNE_SOUNDS = 70667, - SPELL_JAINA_ICEBARRIER = 69787, // Jaina Ice Barrier - SPELL_JAINA_ICEPRISON = 69708, // Jaina Ice Prison - SPELL_SYLVANAS_CLOAKOFDARKNESS = 70188, // Sylvanas Cloak of Darkness - SPELL_SYLVANAS_DARKBINDING = 70194, // Sylvanas Dark Binding - SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter - SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper - SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of FrostMourne + SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn + SPELL_UTHER_DESPAWN = 70693, + + // Jaina, Sylvanas + SPELL_CAST_VISUAL = 65633, // wrong + SPELL_SUMMON_SOULS = 72711, + SPELL_TAUNT_ARTHAS = 69857, + SPELL_JAINA_ICE_BARRIER = 69787, // Jaina Ice Barrier + SPELL_JAINA_ICE_PRISON = 69708, // Jaina Ice Prison SPELL_JAINA_DESTROY_ICE_WALL = 69784, // Jaina + SPELL_SYLVANAS_CLOAK_OF_DARKNESS = 70188, // Sylvanas Cloak of Darkness + SPELL_SYLVANAS_DARK_BINDING = 70194, // Sylvanas Dark Binding SPELL_SYLVANAS_DESTROY_ICE_WALL = 70224, // Sylvanas - SPELL_SYLVANAS_JUMP = 68339, // Sylvanas Jump + SPELL_SYLVANAS_BLINDING_RETREAT = 70199, // Sylvanas Blinding Retreat + + // Lich King + SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter + SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper + SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of Frostmourne SPELL_RAISE_DEAD = 69818, - SPELL_HARVEST_SOUL = 70070, - SPELL_SUMMON_RISE_WITCH_DOCTOR = 69836, + SPELL_SUMMON_RISEN_WITCH_DOCTOR = 69836, SPELL_SUMMON_LUMBERING_ABOMINATION = 69835, SPELL_SUMMON_ICE_WALL = 69768, // Visual effect and icewall summoning + SPELL_PAIN_AND_SUFFERING = 74115, // Lich King Pain and Suffering + SPELL_STUN_BREAK_JAINA = 69764, // Lich King visual spell, another Stun Break is 69763, should remove the stun effect + SPELL_STUN_BREAK_SYLVANAS = 70200, + SPELL_HARVEST_SOUL = 69866, // Lich King Harvest Soul + + // Koreln, Loralen + SPELL_FEIGN_DEATH = 29266, // Raging Ghoul - SPELL_EMERGE_VISUAL = 50142, SPELL_GHOUL_JUMP = 70150, + SPELL_RAGING_GHOUL_SPAWN = 69636, - // Witch Doctor - SPELL_COURSE_OF_DOOM = 70144, + // Risen Witch Doctor + SPELL_CURSE_OF_DOOM = 70144, SPELL_SHADOW_BOLT_VOLLEY = 70145, SPELL_SHADOW_BOLT = 70080, + SPELL_RISEN_WITCH_DOCTOR_SPAWN = 69639, // Lumbering Abomination - SPELL_ABON_STRIKE = 40505, - SPELL_VOMIT_SPRAY = 70176, + SPELL_CLEAVE = 40505, + SPELL_VOMIT_SPRAY = 70176 }; -const Position HallsofReflectionLocs[] = +enum HorGossipMenu { - {5283.234863f, 1990.946777f, 707.695679f, 0.929097f}, // 2 Loralen Follows - {5408.031250f, 2102.918213f, 707.695251f, 0.792756f}, // 9 Sylvanas Follows - {5401.866699f, 2110.837402f, 707.695251f, 0.800610f}, // 10 Loralen follows + GOSSIP_MENU_JAINA_FINAL = 10930, + GOSSIP_MENU_SYLVANAS_FINAL = 10931 }; -const Position NpcJainaOrSylvanasEscapeRoute[] = +Position const NpcJainaOrSylvanasEscapeRoute[] = { - {5601.217285f, 2207.652832f, 731.541931f, 5.223304f}, // leave the throne room - {5607.224375f, 2173.913330f, 731.126038f, 2.608723f}, // adjust route - {5583.427246f, 2138.784180f, 731.150391f, 4.260901f}, // stop for talking - {5560.281738f, 2104.025635f, 731.410889f, 4.058383f}, // attack the first icewall - {5510.990723f, 2000.772217f, 734.716064f, 3.973213f}, // attack the second icewall - {5452.641113f, 1905.762329f, 746.530579f, 4.118834f}, // attack the third icewall - {5338.126953f, 1768.429810f, 767.237244f, 3.855189f}, // attack the fourth icewall - {5257.712402f, 1669.379395f, 784.300110f, 0.908373f}, // face the Lich king - {5261.191895f, 1681.901611f, 784.285278f, 4.410465f}, // final position + { 5601.217285f, 2207.652832f, 731.541931f, 5.223304f }, // leave the throne room + { 5607.224375f, 2173.913330f, 731.126038f, 2.608723f }, // adjust route + { 5583.427246f, 2138.784180f, 731.150391f, 4.260901f }, // stop for talking + { 5560.281738f, 2104.025635f, 731.410889f, 4.058383f }, // attack the first icewall + { 5510.990723f, 2000.772217f, 734.716064f, 3.973213f }, // attack the second icewall + { 5452.641113f, 1905.762329f, 746.530579f, 4.118834f }, // attack the third icewall + { 5338.126953f, 1768.429810f, 767.237244f, 3.855189f }, // attack the fourth icewall + { 5259.06f, 1669.27f, 784.3008f, 0.0f }, // trap (sniffed) + { 5265.53f, 1681.6f, 784.2947f, 4.13643f } // final position (sniffed) }; -const Position IceWalls[] = +Position const LichKingMoveAwayPos = { 5400.069824f, 2102.7131689f, 707.69525f, 0.843803f }; // Lich King walks away +Position const LichKingFirstSummon = { 5600.076172f, 2192.270996f, 731.750488f, 4.330935f }; // Lich King First summons +Position const JainaSylvanasShadowThroneDoor = { 5577.243f, 2235.852f, 733.0128f, 2.209562f }; // Jaina/Sylvanas move to door +Position const LichKingFinalPos = { 5283.742188f, 1706.335693f, 783.293518f, 4.138510f }; // Lich King Final Pos + +// sniffed +Position const KorelnOrLoralenPos[] = { - {5547.833f, 2083.701f,731.4332f,4.24115f}, // first icewall - {5503.213f, 1969.547f,737.0245f,4.293779f},// second icewall - {5439.976f, 1879.005f,752.7048f,4.207591f},// third icewall - {5318.289f, 1749.184f,771.9423f,4.054276f},// fourth icewall + { 5253.061f, 1953.616f, 707.6948f, 0.8377581f }, + { 5283.226f, 1992.300f, 707.7445f, 0.8377581f }, + { 5360.711f, 2064.797f, 707.6948f, 0.0f } }; -const Position IntroPos = {5265.89f, 1952.98f, 707.6978f, 0.0f}; // Jaina/Sylvanas Intro Start Position -const Position MoveThronePos = {5306.952148f, 1998.499023f, 709.341431f, 1.277278f}; // Jaina/Sylvanas walks to throne -const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f}; -const Position LichKingSpawnPos = {5362.917480f, 2062.307129f, 707.695374f, 3.945812f}; -const Position LichKingMoveThronePos = {5312.080566f, 2009.172119f, 709.341431f, 3.973301f}; // Lich King walks to throne -const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away -const Position LichKingSpawnPos2 = {5552.733398f, 2262.718506f, 733.011047f, 4.009696f}; // Lich King Spawn Position 2 -const Position LichKingFirstSummon = {5600.076172f, 2192.270996f, 731.750488f, 4.330935f}; // Lich King First summons -const Position JainaShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Jaina Spawn Position 2 -const Position SylvanasShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Sylvanas Spawn Position 2 -const Position FalricStartPos = {5283.878906f, 2030.459595f, 709.319641f, 5.506670f}; // Falric start position -const Position MarwynStartPos = {5334.979980f, 1982.399536f, 709.320129f, 2.347014f}; // Marwyn start position -const Position LichKingFinalPos = {5283.742188f, 1706.335693f, 783.293518f, 4.138510f}; // Lich King Final Pos -const Position ChestPos = {5246.187500f, 1649.079468f, 784.301758f, 0.901268f}; // Chest position -const Position FinalPortalPos = {5270.634277f ,1639.101196f, 784.303040f, 1.682743f}; // Final portal position - -class npc_jaina_or_sylvanas_hor : public CreatureScript +Position const SylvanasIntroPosition[] = { - public: - npc_jaina_or_sylvanas_hor() : CreatureScript("npc_jaina_or_sylvanas_hor") { } - - // AI of Part1 - struct npc_jaina_or_sylvanas_horAI : public ScriptedAI - { - npc_jaina_or_sylvanas_horAI(Creature* creature) : ScriptedAI(creature) - { - _instance = me->GetInstanceScript(); - } - - InstanceScript* _instance; - uint64 _utherGUID; - uint64 _lichkingGUID; + { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn + { 5263.2f, 1950.96f, 707.6948f, 0.8028514f }, // 1 - Move to Door + { 5306.82f, 1998.17f, 709.341f, 1.239184f }, // 2 - Move to Frostmourne +}; - EventMap _events; +Position const JainaIntroPosition[] = +{ + { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn + { 5265.89f, 1952.98f, 707.6978f, 0.0f }, // 1 - Move to Door + { 5306.95f, 1998.49f, 709.3414f, 1.277278f } // 2 - Move to Frostmourne +}; - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case 0: - player->CLOSE_GOSSIP_MENU(); - _events.ScheduleEvent(EVENT_START_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - case 1: - player->CLOSE_GOSSIP_MENU(); - _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - } - } +Position const UtherSpawnPos = { 5307.814f, 2003.168f, 709.4244f, 4.537856f }; - void Reset() OVERRIDE - { - _events.Reset(); +Position const LichKingIntroPosition[] = +{ + { 5362.463f, 2062.693f, 707.7781f, 3.944444f }, // 0 - Spawn + { 5332.83f, 2031.24f, 707.6948f, 0.0f }, // 1 - Door + { 5312.93f, 2010.24f, 709.34f, 0.0f }, // 2 - Move to Frostmourne + { 5319.028f, 2016.662f, 707.6948f, 0.0f }, // 3 - Move back + { 5332.285f, 2030.832f, 707.6948f, 0.0f }, // 4 - Move back 2 + { 5355.488f, 2055.149f, 707.6907f, 0.0f } // 5 - Move back 3 +}; - _utherGUID = 0; - _lichkingGUID = 0; +Position const FalricPosition[] = +{ + { 5276.583f, 2037.45f, 709.4025f, 5.532694f }, // 0 - Spawn + { 5283.95f, 2030.53f, 709.3191f, 0.0f } // 1 - Intro +}; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - me->SetStandState(UNIT_STAND_STATE_STAND); - _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000); - } +Position const MarwynPosition[] = +{ + { 5342.232f, 1975.696f, 709.4025f, 2.391101f }, // 0 - Spawn + { 5335.01f, 1982.37f, 709.3191f, 0.0f } // 1 - Intro +}; - void UpdateAI(uint32 diff) OVERRIDE - { - _events.Update(diff); +Position const SylvanasShadowThroneDoorPosition = { 5576.79f, 2235.73f, 733.0029f, 2.687807f }; - switch (_events.ExecuteEvent()) - { - case EVENT_WALK_INTRO1: - me->GetMotionMaster()->MovePoint(0, IntroPos); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - { - Talk(SAY_JAINA_INTRO_1); - _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000); - } - else - { - Talk(SAY_SYLVANAS_INTRO_1); - _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000); - } - break; - case EVENT_WALK_INTRO2: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_INTRO_2); - else - Talk(SAY_SYLVANAS_INTRO_2); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - case EVENT_START_INTRO: - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - // Begining of intro is differents between fActions as the speech sequence and timers are differents. - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - _events.ScheduleEvent(EVENT_INTRO_A2_1, 0); - else - _events.ScheduleEvent(EVENT_INTRO_H2_1, 0); - break; - // A2 Intro Events - case EVENT_INTRO_A2_1: - Talk(SAY_JAINA_INTRO_3); - _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000); - break; - case EVENT_INTRO_A2_2: - Talk(SAY_JAINA_INTRO_4); - _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); - break; - case EVENT_INTRO_A2_3: - me->CastSpell(me, SPELL_CAST_VISUAL, false); - me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); - _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); - _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000); - break; - case EVENT_INTRO_A2_4: - if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - uther->GetMotionMaster()->MoveIdle(); - _utherGUID = uther->GetGUID(); - } - _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); - break; - case EVENT_INTRO_A2_5: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_1); - _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); - break; - case EVENT_INTRO_A2_6: - Talk(SAY_JAINA_INTRO_5); - _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000); - break; - case EVENT_INTRO_A2_7: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_2); - _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000); - break; - case EVENT_INTRO_A2_8: - Talk(SAY_JAINA_INTRO_6); - _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200); - break; - case EVENT_INTRO_A2_9: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_3); - _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000); - break; - case EVENT_INTRO_A2_10: - Talk(SAY_JAINA_INTRO_7); - _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000); - break; - case EVENT_INTRO_A2_11: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_4); - _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000); - break; - case EVENT_INTRO_A2_12: - Talk(SAY_JAINA_INTRO_8); - _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000); - break; - case EVENT_INTRO_A2_13: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_5); - _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000); - break; - case EVENT_INTRO_A2_14: - Talk(SAY_JAINA_INTRO_9); - _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000); - break; - case EVENT_INTRO_A2_15: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_6); - _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000); - break; - case EVENT_INTRO_A2_16: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_7); - _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000); - break; - case EVENT_INTRO_A2_17: - Talk(SAY_JAINA_INTRO_10); - _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000); - break; - case EVENT_INTRO_A2_18: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - uther->AI()->Talk(SAY_UTHER_INTRO_A2_8); - } - _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000); - break; - case EVENT_INTRO_A2_19: - Talk(SAY_JAINA_INTRO_11); - _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000); - break; - // H2 Intro Events - case EVENT_INTRO_H2_1: - Talk(SAY_SYLVANAS_INTRO_1); - _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000); - break; - case EVENT_INTRO_H2_2: - Talk(SAY_SYLVANAS_INTRO_2); - _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); - break; - case EVENT_INTRO_H2_3: - Talk(SAY_SYLVANAS_INTRO_3); - me->CastSpell(me, SPELL_CAST_VISUAL, false); - me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); - _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); - _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); - break; - case EVENT_INTRO_H2_4: - // spawn UTHER during speach 2 - if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - uther->GetMotionMaster()->MoveIdle(); - _utherGUID = uther->GetGUID(); - } - _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); - break; - case EVENT_INTRO_H2_5: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_1); - _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); - break; - case EVENT_INTRO_H2_6: - Talk(SAY_SYLVANAS_INTRO_4); - _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); - break; - case EVENT_INTRO_H2_7: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_2); - _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); - break; - case EVENT_INTRO_H2_8: - Talk(SAY_SYLVANAS_INTRO_5); - _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); - break; - case EVENT_INTRO_H2_9: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_3); - _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); - break; - case EVENT_INTRO_H2_10: - Talk(SAY_SYLVANAS_INTRO_6); - _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); - break; - case EVENT_INTRO_H2_11: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_4); - _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); - break; - case EVENT_INTRO_H2_12: - Talk(SAY_SYLVANAS_INTRO_7); - _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); - break; - case EVENT_INTRO_H2_13: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - uther->AI()->Talk(SAY_UTHER_INTRO_H2_5); - } - _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); - break; - case EVENT_INTRO_H2_14: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_6); - _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); - break; - case EVENT_INTRO_H2_15: - Talk(SAY_SYLVANAS_INTRO_8); - _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); - break; - // Remaining Intro Events common for both faction - case EVENT_INTRO_LK_1: - // Spawn LK in front of door, and make him move to the sword. - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); - _lichkingGUID = lichking->GetGUID(); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000); - } - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); - else - uther->AI()->Talk(SAY_UTHER_INTRO_H2_7); - } - _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000); - break; - case EVENT_INTRO_LK_2: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->AI()->Talk(SAY_LK_INTRO_1); - _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000); - break; - case EVENT_INTRO_LK_3: - // The Lich King banishes Uther to the abyss. - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true); - uther->DespawnOrUnsummon(5000); - _utherGUID = 0; - } - _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000); - break; - case EVENT_INTRO_LK_4: - // He steps forward and removes the runeblade from the heap of skulls. - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE))) - frostmourne->SetPhaseMask(2, true); - lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true); - lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true); - } - _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000); - break; - case EVENT_INTRO_LK_5: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->AI()->Talk(SAY_LK_INTRO_2); - _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000); - break; - case EVENT_INTRO_LK_6: - // summon Falric and Marwyn. then go back to the door - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); - falric->SetVisible(true); - } - if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); - marwyn->SetVisible(true); - } - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - lichking->AI()->Talk(SAY_LK_INTRO_3); - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 5000); - break; - case EVENT_INTRO_LK_7: - if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->AI()->Talk(SAY_MARWYN_INTRO_1); - marwyn->SetWalk(true); - marwyn->GetMotionMaster()->MovePoint(0, MarwynStartPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000); - break; - case EVENT_INTRO_LK_8: - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->AI()->Talk(SAY_FALRIC_INTRO_1); - falric->SetWalk(true); - falric->GetMotionMaster()->MovePoint(0, FalricStartPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); - break; - case EVENT_INTRO_LK_9: - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - falric->AI()->Talk(SAY_FALRIC_INTRO_2); - _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); - _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000); - break; - case EVENT_INTRO_LK_10: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_INTRO_END); - else - Talk(SAY_SYLVANAS_INTRO_END); - me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); - /// @todo Loralen/Koreln shall run also - _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000); - break; - case EVENT_INTRO_LK_11: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END); - else - lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END); - } - _events.ScheduleEvent(EVENT_INTRO_END, 5000); - break; - case EVENT_INTRO_END: - _instance->SetData(DATA_INTRO_EVENT, DONE); - // Loralen or Koreln disappearAndDie() - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - lichking->DespawnOrUnsummon(5000); - _lichkingGUID = 0; - } - me->DespawnOrUnsummon(10000); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 7000); - break; - case EVENT_SKIP_INTRO: - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - /// @todo Loralen/Koreln shall run also - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); - lichking->SetReactState(REACT_PASSIVE); - _lichkingGUID = lichking->GetGUID(); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000); - } - _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000); - break; - case EVENT_OPEN_FROSTWORN_DOOR: - if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR))) - _instance->HandleGameObject(0, true, gate); - break; - case EVENT_CLOSE_FROSTWORN_DOOR: - if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR))) - _instance->HandleGameObject(0, false, gate); - break; - } - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_horAI>(creature); - } +Position const IceWallTargetPosition[] = +{ + { 5547.833f, 2083.701f, 731.4332f, 1.029744f }, // 1st Icewall + { 5503.213f, 1969.547f, 737.0245f, 1.27409f }, // 2nd Icewall + { 5439.976f, 1879.005f, 752.7048f, 1.064651f }, // 3rd Icewall + { 5318.289f, 1749.184f, 771.9423f, 0.8726646f } // 4th Icewall }; -class npc_jaina_or_sylvanas_escape_hor : public CreatureScript +class npc_jaina_or_sylvanas_intro_hor : public CreatureScript { public: - npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { } - - // AI of Part2 - struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI - { - npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature), - _instance(creature->GetInstanceScript()), _lichkingGUID(0), _walltargetGUID(0), - _icewallGUID(0), _icewall(0) - { - } - - InstanceScript* _instance; - uint64 _lichkingGUID; - uint64 _walltargetGUID; // dummy - uint64 _icewallGUID; // object - uint32 _icewall; // icewall number - - EventMap _events; + npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { } - void Reset() OVERRIDE + struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI { - _events.Reset(); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->DespawnOrUnsummon(1); - _lichkingGUID = 0; - _walltargetGUID = 0; - _icewallGUID = 0; - _icewall = 0; - _events.ScheduleEvent(EVENT_ESCAPE, 0); - } - - void JustDied(Unit* /*Killer*/) OVERRIDE - { - _instance->SetData(DATA_ESCAPE_EVENT, FAIL); - } - - void DoAction(int32 actionId) OVERRIDE - { - switch (actionId) - { - case ACTION_START_ESCAPING: // called by InstanceScript when we need to start the escaping event - _events.ScheduleEvent(EVENT_ESCAPE_1, 1000); - break; - case ACTION_WALL_BROKEN: - _icewall++; - if (_icewall != 4) - _events.ScheduleEvent(EVENT_ESCAPE_17, 3000); - else - _events.ScheduleEvent(EVENT_ESCAPE_23, 3000); - break; + npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + _utherGUID = 0; + _lichkingGUID = 0; } - } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - switch (action) + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override { - case 0: - player->CLOSE_GOSSIP_MENU(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - _events.ScheduleEvent(EVENT_ESCAPE_7, 0); - break; - } - } + player->PlayerTalkClass->ClearMenus(); - void DestroyIceWall() - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL); - else - me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL); + switch (gossipListId) + { + case 0: + player->PlayerTalkClass->SendCloseGossip(); + _events.ScheduleEvent(EVENT_START_INTRO, 1000); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + case 1: + player->PlayerTalkClass->SendCloseGossip(); + _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + default: + break; + } + } - _instance->HandleGameObject(_icewallGUID, true); + void Reset() override + { + _events.Reset(); - if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) - wallTarget->DespawnOrUnsummon(); - } + _utherGUID = 0; + _lichkingGUID = 0; - void UpdateAI(uint32 diff) OVERRIDE - { - _events.Update(diff); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->SetStandState(UNIT_STAND_STATE_STAND); + _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000); + } - while (uint32 event = _events.ExecuteEvent()) + void UpdateAI(uint32 diff) override { - switch (event) + _events.Update(diff); + + switch (_events.ExecuteEvent()) { - case EVENT_ESCAPE: - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART2, LichKingSpawnPos2, TEMPSUMMON_MANUAL_DESPAWN)) + case EVENT_WALK_INTRO1: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[0]); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) { - me->Attack(lichking, true); - lichking->Attack(me, true); - me->SetReactState(REACT_PASSIVE); - lichking->SetReactState(REACT_PASSIVE); - _lichkingGUID = lichking->GetGUID(); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_ICEBARRIER); - else - DoCast(me, SPELL_SYLVANAS_CLOAKOFDARKNESS); + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[1]); + Talk(SAY_JAINA_INTRO_1); + _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000); } - me->SetHealth(252000); - break; - case EVENT_ESCAPE_1: - _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + else { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->AI()->Talk(SAY_LK_ESCAPE_1); - else - lichking->AI()->Talk(SAY_LK_ESCAPE_2); - _events.ScheduleEvent(EVENT_ESCAPE_2, 8000); + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[1]); + Talk(SAY_SYLVANAS_INTRO_1); + _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000); } break; - case EVENT_ESCAPE_2: + case EVENT_WALK_INTRO2: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_CAST_VISUAL, true); + Talk(SAY_JAINA_INTRO_2); else - DoCast(me, SPELL_SYLVANAS_JUMP, true); - _events.ScheduleEvent(EVENT_ESCAPE_3, 1000); + Talk(SAY_SYLVANAS_INTRO_2); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); break; - case EVENT_ESCAPE_3: + case EVENT_START_INTRO: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]); + // Begining of intro is differents between factions as the speech sequence and timers are differents. if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCastAOE(SPELL_JAINA_ICEPRISON, true); + { + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]); + _events.ScheduleEvent(EVENT_INTRO_A2_1, 0); + } else - DoCastAOE(SPELL_SYLVANAS_DARKBINDING, true); - _events.ScheduleEvent(EVENT_ESCAPE_4, 2000); + { + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]); + _events.ScheduleEvent(EVENT_INTRO_H2_1, 0); + } break; - case EVENT_ESCAPE_4: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_1); - else - Talk(SAY_SYLVANAS_ESCAPE_1); - _events.ScheduleEvent(EVENT_ESCAPE_5, 2000); + // A2 Intro Events + case EVENT_INTRO_A2_1: + Talk(SAY_JAINA_INTRO_3); + _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000); break; - case EVENT_ESCAPE_5: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->CombatStop(); - me->GetMotionMaster()->MovePoint(0, JainaShadowThroneDoor); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->RemoveAurasDueToSpell(SPELL_JAINA_ICEBARRIER); - else - me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAKOFDARKNESS); - _events.ScheduleEvent(EVENT_ESCAPE_6, 5000); + case EVENT_INTRO_A2_2: + Talk(SAY_JAINA_INTRO_4); + _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); break; - case EVENT_ESCAPE_6: - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); + case EVENT_INTRO_A2_3: + me->CastSpell(me, SPELL_CAST_VISUAL, false); + me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); + _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); + _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000); break; - case EVENT_ESCAPE_7: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICEPRISON); - else - lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARKBINDING); - } - _events.ScheduleEvent(EVENT_ESCAPE_8, 1000); + case EVENT_INTRO_A2_4: + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + _utherGUID = uther->GetGUID(); + _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); break; - case EVENT_ESCAPE_8: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR); - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); - _events.ScheduleEvent(EVENT_ESCAPE_9, 3000); + case EVENT_INTRO_A2_5: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_1); + _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); break; - case EVENT_ESCAPE_9: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); - _events.ScheduleEvent(EVENT_ESCAPE_10, 1000); + case EVENT_INTRO_A2_6: + Talk(SAY_JAINA_INTRO_5); + _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000); break; - case EVENT_ESCAPE_10: - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]); - _events.ScheduleEvent(EVENT_ESCAPE_11, 5000); + case EVENT_INTRO_A2_7: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_2); + _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000); break; - case EVENT_ESCAPE_11: - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->GetMotionMaster()->MovePoint(0, LichKingFirstSummon); - _events.ScheduleEvent(EVENT_ESCAPE_12, 6000); + case EVENT_INTRO_A2_8: + Talk(SAY_JAINA_INTRO_6); + _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200); break; - case EVENT_ESCAPE_12: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + case EVENT_INTRO_A2_9: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_3); + _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000); + break; + case EVENT_INTRO_A2_10: + Talk(SAY_JAINA_INTRO_7); + _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000); + break; + case EVENT_INTRO_A2_11: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_4); + _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000); + break; + case EVENT_INTRO_A2_12: + Talk(SAY_JAINA_INTRO_8); + _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000); + break; + case EVENT_INTRO_A2_13: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_5); + _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000); + break; + case EVENT_INTRO_A2_14: + Talk(SAY_JAINA_INTRO_9); + _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000); + break; + case EVENT_INTRO_A2_15: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_6); + _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000); + break; + case EVENT_INTRO_A2_16: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_7); + _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000); + break; + case EVENT_INTRO_A2_17: + Talk(SAY_JAINA_INTRO_10); + _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000); + break; + case EVENT_INTRO_A2_18: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->AI()->Talk(SAY_LK_ESCAPE_3); - lichking->AI()->DoCast(me, SPELL_RAISE_DEAD); - lichking->Attack(me, true); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_A2_8); } - _events.ScheduleEvent(EVENT_ESCAPE_13, 4000); + _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000); break; - case EVENT_ESCAPE_13: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + case EVENT_INTRO_A2_19: + Talk(SAY_JAINA_INTRO_11); + _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000); + break; + // H2 Intro Events + case EVENT_INTRO_H2_1: + Talk(SAY_SYLVANAS_INTRO_1); + _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000); + break; + case EVENT_INTRO_H2_2: + Talk(SAY_SYLVANAS_INTRO_2); + _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); + break; + case EVENT_INTRO_H2_3: + Talk(SAY_SYLVANAS_INTRO_3); + me->CastSpell(me, SPELL_CAST_VISUAL, false); + me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); + _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); + _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); + break; + case EVENT_INTRO_H2_4: + // spawn UTHER during speach 2 + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + _utherGUID = uther->GetGUID(); + _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); + break; + case EVENT_INTRO_H2_5: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_1); + _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); + break; + case EVENT_INTRO_H2_6: + Talk(SAY_SYLVANAS_INTRO_4); + _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); + break; + case EVENT_INTRO_H2_7: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_2); + _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); + break; + case EVENT_INTRO_H2_8: + Talk(SAY_SYLVANAS_INTRO_5); + _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); + break; + case EVENT_INTRO_H2_9: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_3); + _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); + break; + case EVENT_INTRO_H2_10: + Talk(SAY_SYLVANAS_INTRO_6); + _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); + break; + case EVENT_INTRO_H2_11: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_4); + _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); + break; + case EVENT_INTRO_H2_12: + Talk(SAY_SYLVANAS_INTRO_7); + _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); + break; + case EVENT_INTRO_H2_13: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->AI()->DoCast(lichking, SPELL_REMORSELESS_WINTER, true); - lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_H2_5); } - if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[0], TEMPSUMMON_MANUAL_DESPAWN, 720000)) + _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); + break; + case EVENT_INTRO_H2_14: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_6); + _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); + break; + case EVENT_INTRO_H2_15: + Talk(SAY_SYLVANAS_INTRO_8); + _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); + break; + // Remaining Intro Events common for both faction + case EVENT_INTRO_LK_1: + // Spawn LK in front of door, and make him move to the sword. + if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN)) { - _walltargetGUID = walltarget->GetGUID(); - walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL); - walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - me->Attack(walltarget, false); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]); + _lichkingGUID = lichking->GetGUID(); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000); } - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[3]); - _events.ScheduleEvent(EVENT_ESCAPE_14, 8000); - break; - case EVENT_ESCAPE_14: - if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f)) - { - _icewallGUID = icewall->GetGUID(); - icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - _instance->HandleGameObject(0, false, icewall); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_2); - else - Talk(SAY_SYLVANAS_ESCAPE_2); - } + uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); + else + uther->AI()->Talk(SAY_UTHER_INTRO_H2_7); } - _events.ScheduleEvent(EVENT_ESCAPE_15, 1000); + _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000); break; - case EVENT_ESCAPE_15: + case EVENT_INTRO_LK_2: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_1); + _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000); + break; + case EVENT_INTRO_LK_3: + // The Lich King banishes Uther to the abyss. + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); - lichking->SetReactState(REACT_PASSIVE); + uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true); + uther->DespawnOrUnsummon(5000); + _utherGUID = 0; } - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); - else - DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); + _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000); break; - case EVENT_ESCAPE_17:// ICEWALL BROKEN - me->GetMotionMaster()->MoveIdle(); + case EVENT_INTRO_LK_4: + // He steps forward and removes the runeblade from the heap of skulls. if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - lichking->StopMoving(); - lichking->AI()->Talk(SAY_LK_ESCAPE_3); - lichking->AI()->DoCast(me, SPELL_RAISE_DEAD); + if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE))) + frostmourne->SetPhaseMask(2, true); + lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true); + lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true); } - - DestroyIceWall(); - - if (_icewall && _icewall < 4) - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]); - _events.ScheduleEvent(EVENT_ESCAPE_18, 2000); + _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000); break; - case EVENT_ESCAPE_18: + case EVENT_INTRO_LK_5: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_2); + _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000); + break; + case EVENT_INTRO_LK_6: + // summon Falric and Marwyn. then go back to the door + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) { - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); + falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); + falric->SetVisible(true); } - _events.ScheduleEvent(EVENT_ESCAPE_19, 6000); - break; - case EVENT_ESCAPE_19: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN))) { - if (_icewall && _icewall < 4) - lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); - lichking->SetReactState(REACT_PASSIVE); - lichking->Attack(me, true); + marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); + marwyn->SetVisible(true); } - if (_icewall < 4) + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000)) - { - _walltargetGUID = walltarget->GetGUID(); - walltarget->AI()->DoCast(walltarget, SPELL_SUMMON_ICE_WALL); - walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - me->Attack(walltarget, false); - } + lichking->AI()->Talk(SAY_LK_INTRO_3); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); } - _events.ScheduleEvent(EVENT_ESCAPE_20, 3000); + _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 5000); break; - case EVENT_ESCAPE_20: - if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) + case EVENT_INTRO_LK_7: + if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN))) { - if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f)) - { - _icewallGUID = icewall->GetGUID(); - _instance->HandleGameObject(0, false, icewall); - icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - { - if (_icewall == 1) - Talk(SAY_JAINA_ESCAPE_3); - else if (_icewall == 2) - Talk(SAY_JAINA_ESCAPE_4); - else if (_icewall == 3) - Talk(SAY_JAINA_ESCAPE_5); - } - else if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) - { - if (_icewall == 1) - Talk(SAY_SYLVANAS_ESCAPE_3); - else if (_icewall == 2) - Talk(SAY_SYLVANAS_ESCAPE_4); - else if (_icewall == 3) - Talk(SAY_SYLVANAS_ESCAPE_5); - } - } + marwyn->AI()->Talk(SAY_MARWYN_INTRO_1); + marwyn->SetWalk(true); + marwyn->GetMotionMaster()->MovePoint(0, MarwynPosition[1]); } - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000); + break; + case EVENT_INTRO_LK_8: + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) { - if (_icewall && _icewall < 3) - lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - else - lichking->AI()->DoCast(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); + falric->AI()->Talk(SAY_FALRIC_INTRO_1); + falric->SetWalk(true); + falric->GetMotionMaster()->MovePoint(0, FalricPosition[1]); } - if (_icewall == 3) - _events.ScheduleEvent(EVENT_ESCAPE_21, 16000); // last wall, really far - else - _events.ScheduleEvent(EVENT_ESCAPE_21, 9000); + _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); + break; + case EVENT_INTRO_LK_9: + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) + falric->AI()->Talk(SAY_FALRIC_INTRO_2); + _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000); break; - case EVENT_ESCAPE_21: + case EVENT_INTRO_LK_10: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); + Talk(SAY_JAINA_INTRO_END); else - DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); - + Talk(SAY_SYLVANAS_INTRO_END); + me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); + /// @todo: needs some improvements + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(1, KorelnOrLoralenPos[2]); + _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000); + break; + case EVENT_INTRO_LK_11: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (_icewall == 1) - lichking->AI()->DoCast(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); - else if (_icewall > 1 && _icewall < 4) - { - lichking->AI()->DoCast(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - _events.ScheduleEvent(EVENT_ESCAPE_22, 1000); - } + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END); + else + lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END); } + _events.ScheduleEvent(EVENT_INTRO_END, 5000); break; - case EVENT_ESCAPE_22: + case EVENT_INTRO_END: + _instance->SetData(DATA_INTRO_EVENT, DONE); + _events.ScheduleEvent(EVENT_KORELN_LORALEN_DEATH, 8000); if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (_icewall >= 2 && _icewall < 4) - lichking->AI()->DoCast(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); + lichking->DespawnOrUnsummon(5000); + _lichkingGUID = 0; } + me->DespawnOrUnsummon(10000); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 7000); break; - case EVENT_ESCAPE_23: // FINAL PART - DestroyIceWall(); - + case EVENT_SKIP_INTRO: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_6); + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]); else - Talk(SAY_SYLVANAS_ESCAPE_6); + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]); + + if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN)) { - lichking->GetMotionMaster()->MovePoint(0, LichKingFinalPos); - lichking->AI()->Talk(SAY_LK_ESCAPE_11); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]); + lichking->SetReactState(REACT_PASSIVE); + _lichkingGUID = lichking->GetGUID(); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000); } - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[8]); - _events.ScheduleEvent(EVENT_ESCAPE_24, 10000); + _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000); break; - case EVENT_ESCAPE_24: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_8); - else - Talk(SAY_SYLVANAS_ESCAPE_8); - _events.ScheduleEvent(EVENT_ESCAPE_25, 5000); + case EVENT_OPEN_IMPENETRABLE_DOOR: + _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), true); break; - case EVENT_ESCAPE_25: - if (GameObject* cave = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_CAVE_IN))) - cave->SetGoState(GO_STATE_READY); - _events.ScheduleEvent(EVENT_ESCAPE_26, 4000); + case EVENT_CLOSE_IMPENETRABLE_DOOR: + _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), false); break; - case EVENT_ESCAPE_26: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_10); + case EVENT_KORELN_LORALEN_DEATH: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->CastSpell(korelnOrLoralen, SPELL_FEIGN_DEATH); + break; + default: + break; + } + } + + private: + InstanceScript* _instance; + EventMap _events; + uint64 _utherGUID; + uint64 _lichkingGUID; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_intro_horAI>(creature); + } +}; + +class npc_jaina_or_sylvanas_escape_hor : public CreatureScript +{ + public: + npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { } + + bool OnGossipHello(Player* player, Creature* creature) override + { + // override default gossip + if (InstanceScript* instance = creature->GetInstanceScript()) + if (instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + { + player->PrepareGossipMenu(creature, creature->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true); + player->SendPreparedGossip(creature); + return true; + } + + // load default gossip + return false; + } + + struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI + { + npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()), _icewall(0), _prefight(false), _invincibility(true) { } + + void Reset() override + { + _events.Reset(); + _icewall = 0; + _events.ScheduleEvent(EVENT_ESCAPE, 1000); + _instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + } + + void JustDied(Unit* /*killer*/) override + { + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->AI()->EnterEvadeMode(); // event failed + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (damage >= me->GetHealth() && _invincibility) + damage = me->GetHealth() - 1; + } + + void DoAction(int32 actionId) override + { + switch (actionId) + { + case ACTION_START_PREFIGHT: + if (_prefight) + return; + _prefight = true; + _events.ScheduleEvent(EVENT_ESCAPE_1, 1000); + break; + case ACTION_WALL_BROKEN: + ++_icewall; + if (_icewall < 4) + _events.ScheduleEvent(EVENT_ESCAPE_13, 3000); else - Talk(SAY_SYLVANAS_ESCAPE_9); - _events.ScheduleEvent(EVENT_ESCAPE_27, 4000); + _events.ScheduleEvent(EVENT_ESCAPE_15, 3000); break; - case EVENT_ESCAPE_27: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_ALLIANCE_HEROIC : GO_CAPTAIN_CHEST_ALLIANCE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000); + case ACTION_GUNSHIP_ARRIVAL: + _events.ScheduleEvent(EVENT_ESCAPE_16, 5000); + break; + case ACTION_GUNSHIP_ARRIVAL_2: + _events.ScheduleEvent(EVENT_ESCAPE_17, 5000); + break; + default: + break; + } + } + + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override + { + player->PlayerTalkClass->ClearMenus(); + + switch (gossipListId) + { + case 0: + player->PlayerTalkClass->SendCloseGossip(); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + _events.ScheduleEvent(EVENT_ESCAPE_6, 0); + break; + default: + break; + } + } + + void DestroyIceWall() + { + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL); + else + me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL); + + _instance->HandleGameObject(_instance->GetData64(DATA_ICEWALL), true); + me->m_Events.AddEvent(new GameObjectDeleteDelayEvent(me, _instance->GetData64(DATA_ICEWALL)), me->m_Events.CalculateTime(5000)); + + if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET))) + wallTarget->DespawnOrUnsummon(); + } + + void SummonIceWall() + { + if (_icewall < 4) + { + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->StopMoving(); + if (Creature* wallTarget = me->SummonCreature(NPC_ICE_WALL_TARGET, IceWallTargetPosition[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000)) + lichking->CastSpell(wallTarget, SPELL_SUMMON_ICE_WALL); + + lichking->AI()->SetData(DATA_ICEWALL, _icewall); + } + } + } + + void AttackIceWall() + { + if (_icewall < 4) + Talk(SAY_JAINA_SYLVANAS_ESCAPE_2 + _icewall); + + if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET))) + me->SetFacingToObject(wallTarget); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); + else + DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + switch (pointId) + { + case POINT_SHADOW_THRONE_DOOR: + if (me->GetEntry() == NPC_JAINA_ESCAPE) + me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER); else - me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_HORDE_HEROIC : GO_CAPTAIN_CHEST_HORDE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000); - me->SummonGameObject(GO_PORTAL, FinalPortalPos.GetPositionX(), FinalPortalPos.GetPositionY(), FinalPortalPos.GetPositionZ(), FinalPortalPos.GetOrientation(), 0, 0, 0, 0, 720000); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->DespawnOrUnsummon(1); + me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); + me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation()); + break; + case POINT_ATTACK_ICEWALL: + AttackIceWall(); break; + case POINT_TRAP: + Talk(SAY_JAINA_SYLVANAS_ESCAPE_8); + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + me->SetFacingToObject(lichking); + break; + default: + break; + } + } + + void DeleteAllFromThreatList(Unit* target, uint64 except) + { + ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList(); + for (auto i : threatlist) + { + if (i->getUnitGuid() == except) + continue; + + i->removeReference(); + } + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_ESCAPE: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_ICE_BARRIER); + else + DoCast(me, SPELL_SYLVANAS_CLOAK_OF_DARKNESS); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + AttackStart(lichking); + lichking->AI()->AttackStart(me); + me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true); + } + me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + case EVENT_ESCAPE_1: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + lichking->AI()->Talk(SAY_LK_ESCAPE_1); + else + lichking->AI()->Talk(SAY_LK_ESCAPE_2); + _events.ScheduleEvent(EVENT_ESCAPE_2, 8000); + } + break; + case EVENT_ESCAPE_2: + me->AttackStop(); + me->StopMoving(); + me->SetReactState(REACT_PASSIVE); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_ICE_PRISON, false); + else + DoCast(me, SPELL_SYLVANAS_BLINDING_RETREAT, true); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->SetReactState(REACT_PASSIVE); + lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + } + + _events.ScheduleEvent(EVENT_ESCAPE_3, 1500); + break; + case EVENT_ESCAPE_3: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + DoCastAOE(SPELL_SYLVANAS_DARK_BINDING, true); + _events.ScheduleEvent(EVENT_ESCAPE_4, 1000); + break; + case EVENT_ESCAPE_4: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_CREDIT_FINDING_JAINA); + else + DoCast(me, SPELL_CREDIT_FINDING_SYLVANAS); + Talk(SAY_JAINA_SYLVANAS_ESCAPE_1); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + lichking->RemoveAllAttackers(); + + DeleteAllFromThreatList(lichking, me->GetGUID()); + } + + _events.ScheduleEvent(EVENT_ESCAPE_5, 2000); + break; + case EVENT_ESCAPE_5: + me->GetMotionMaster()->MovePoint(POINT_SHADOW_THRONE_DOOR, SylvanasShadowThroneDoorPosition); + break; + case EVENT_ESCAPE_6: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + { + lichking->CastSpell(lichking, SPELL_STUN_BREAK_JAINA); + lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICE_PRISON); + } + else + { + lichking->CastSpell(lichking, SPELL_STUN_BREAK_SYLVANAS); + lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARK_BINDING); + } + } + _invincibility = false; + _instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + _events.ScheduleEvent(EVENT_ESCAPE_7, 1000); + break; + case EVENT_ESCAPE_7: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR); + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); + _events.ScheduleEvent(EVENT_ESCAPE_8, 3000); + break; + case EVENT_ESCAPE_8: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); + _events.ScheduleEvent(EVENT_ESCAPE_9, 1000); + break; + case EVENT_ESCAPE_9: + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]); + _events.ScheduleEvent(EVENT_ESCAPE_10, 5000); + break; + case EVENT_ESCAPE_10: + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]); + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->GetMotionMaster()->MovePoint(1, LichKingFirstSummon); + _events.ScheduleEvent(EVENT_ESCAPE_11, 6000); + break; + case EVENT_ESCAPE_11: + SummonIceWall(); + _events.ScheduleEvent(EVENT_ESCAPE_12, 4000); + break; + case EVENT_ESCAPE_12: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->CastSpell(lichking, SPELL_PAIN_AND_SUFFERING, true); + + me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[3]); + break; + case EVENT_ESCAPE_13: // ICEWALL BROKEN + DestroyIceWall(); + + if (_icewall && _icewall < 4) + me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]); + _events.ScheduleEvent(EVENT_ESCAPE_14, 8000); + break; + case EVENT_ESCAPE_14: + SummonIceWall(); + break; + case EVENT_ESCAPE_15: // FINAL PART + DestroyIceWall(); + + Talk(SAY_JAINA_SYLVANAS_ESCAPE_6); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->GetMotionMaster()->MovePoint(2, LichKingFinalPos); + lichking->RemoveAurasDueToSpell(SPELL_REMORSELESS_WINTER); + } + me->GetMotionMaster()->MovePoint(POINT_TRAP, NpcJainaOrSylvanasEscapeRoute[7]); + break; + case EVENT_ESCAPE_16: + me->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL); + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + Talk(SAY_JAINA_ESCAPE_9); + if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP))) + gunship->EnableMovement(true); + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, DONE); + break; + case EVENT_ESCAPE_17: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + Talk(SAY_JAINA_ESCAPE_10); + else + Talk(SAY_SYLVANAS_ESCAPE_9); + DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + default: + break; } } + + DoMeleeAttackIfReady(); } - }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature); - } + private: + InstanceScript* _instance; + EventMap _events; + uint32 _icewall; // icewall number + bool _prefight; + bool _invincibility; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature); + } +}; + +class npc_the_lich_king_escape_hor : public CreatureScript +{ + public: + npc_the_lich_king_escape_hor() : CreatureScript("npc_the_lich_king_escape_hor") { } + + struct npc_the_lich_king_escape_horAI : public ScriptedAI + { + npc_the_lich_king_escape_horAI(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, NOT_STARTED); + _summonsCount = 0; + _icewall = 0; + _despawn = false; + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (damage >= me->GetHealth()) + damage = me->GetHealth() - 1; + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type == POINT_MOTION_TYPE) + { + switch (pointId) + { + case 1: + if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + me->GetMotionMaster()->MoveChase(target); + break; + case 2: + Talk(SAY_LK_ESCAPE_HARVEST_SOUL); + + if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + DoCast(target, SPELL_HARVEST_SOUL); + + if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP))) + gunship->EnableMovement(true); + break; + default: + break; + } + } + } + + void JustSummoned(Creature* /*summon*/) override + { + ++_summonsCount; + } + + void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override + { + // should never happen + if (!_summonsCount) + return; + + --_summonsCount; + + // All summons dead and no summon events scheduled + if (!_summonsCount && _events.Empty()) + { + if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + jainaOrSylvanas->AI()->DoAction(ACTION_WALL_BROKEN); + } + } + + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + DoPlaySoundToSet(me, RAND(SOUND_LK_SLAY_1, SOUND_LK_SLAY_2)); + } + + void SetData(uint32 type, uint32 data) override + { + if (type != DATA_ICEWALL) + return; + + _icewall = data; + + switch (_icewall) + { + case 0: // 6 Ghouls, 1 Witch Doctor + DoZoneInCombat(); + _events.ScheduleEvent(EVENT_REMORSELESS_WINTER, 0); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 14000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_1); + break; + case 1: // 6 Ghouls, 2 Witch Doctor, 1 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 13000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 16000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 18000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_2); + break; + case 2: // 6 Ghouls, 2 Witch Doctor, 2 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 19000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 39000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_3); + break; + case 3: // 12 Ghouls, 4 Witch Doctor, 3 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 19000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 40000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 46000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 55000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 62000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 66000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_4); + break; + default: + break; + } + } + + void EnterEvadeMode() override + { + if (_despawn) + return; + + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, FAIL); + me->StopMoving(); + DoPlaySoundToSet(me, SOUND_LK_FURY_OF_FROSTMOURNE); + DoCastAOE(SPELL_FURY_OF_FROSTMOURNE); + me->DespawnOrUnsummon(12000); + _despawn = true; + } + + void UpdateAI(uint32 diff) override + { + if (!SelectVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_REMORSELESS_WINTER: + me->StopMoving(); + Talk(SAY_LK_ESCAPE_WINTER); + DoCast(me, SPELL_REMORSELESS_WINTER); + break; + case EVENT_ESCAPE_SUMMON_GHOULS: + me->StopMoving(); + Talk(SAY_LK_ESCAPE_GHOULS); + DoCast(me, SPELL_RAISE_DEAD); + break; + case EVENT_ESCAPE_SUMMON_WITCH_DOCTOR: + DoCast(me, SPELL_SUMMON_RISEN_WITCH_DOCTOR); + break; + case EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION: + Talk(SAY_LK_ESCAPE_ABOMINATION); + DoCast(me, SPELL_SUMMON_LUMBERING_ABOMINATION); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + bool SelectVictim() + { + if (!me->IsInCombat()) + return false; + + if (!me->HasReactState(REACT_PASSIVE)) + { + if (Unit* victim = me->SelectVictim()) + AttackStart(victim); + return me->GetVictim(); + } + else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER)) + { + EnterEvadeMode(); + return false; + } + + return true; + } + + InstanceScript* _instance; + EventMap _events; + uint8 _icewall; + uint32 _summonsCount; + bool _despawn; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_the_lich_king_escape_horAI>(creature); + } }; enum TrashSpells @@ -1140,7 +1374,7 @@ enum TrashSpells SPELL_SHOOT = 72208, SPELL_CURSED_ARROW = 72222, SPELL_FROST_TRAP = 72215, - SPELL_ICE_SHOT = 72268, + SPELL_ICE_SHOT = 72268 }; enum TrashEvents @@ -1175,27 +1409,27 @@ enum TrashEvents EVENT_SHOOT, EVENT_CURSED_ARROW, EVENT_FROST_TRAP, - EVENT_ICE_SHOT, + EVENT_ICE_SHOT }; struct npc_gauntlet_trash : public ScriptedAI { - npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } + npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()), InternalWaveId(0) { } - void Reset() OVERRIDE + void Reset() override { - InternalWaveId = 0; me->CastSpell(me, SPELL_WELL_OF_SOULS, true); _events.Reset(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (_instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED) _instance->SetData(DATA_WAVE_COUNT, NOT_STARTED); } - void SetData(uint32 type, uint32 value) OVERRIDE + void SetData(uint32 type, uint32 value) override { if (type) return; @@ -1203,7 +1437,7 @@ struct npc_gauntlet_trash : public ScriptedAI InternalWaveId = value; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type) return 0; @@ -1219,352 +1453,362 @@ protected: class npc_ghostly_priest : public CreatureScript { -public: - npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { } - - struct npc_ghostly_priestAI : public npc_gauntlet_trash - { - npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { } - void EnterCombat(Unit* /*who*/) OVERRIDE + struct npc_ghostly_priestAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); - _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); - _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); - } + npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHADOW_WORD_PAIN: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHADOW_WORD_PAIN); - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); - break; - case EVENT_CIRCLE_OF_DESTRUCTION: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION); - _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); - break; - case EVENT_COWER_IN_FEAR: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_COWER_IN_FEAR); - _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); - break; - case EVENT_DARK_MENDING: - // find an ally with missing HP - if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000))) - { - DoCast(target, SPELL_DARK_MENDING); - _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); - } - else - { - // no friendly unit with missing hp. re-check in just 5 sec. - _events.ScheduleEvent(EVENT_DARK_MENDING, 5000); - } - break; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000)); + _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); + _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); + _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); } - DoMeleeAttackIfReady(); - } - }; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_ghostly_priestAI>(creature); - } -}; + _events.Update(diff); -class npc_phantom_mage : public CreatureScript -{ -public: - npc_phantom_mage() : CreatureScript("npc_phantom_mage") { } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - struct npc_phantom_mageAI : public npc_gauntlet_trash - { - npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { } + switch (_events.ExecuteEvent()) + { + case EVENT_SHADOW_WORD_PAIN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_SHADOW_WORD_PAIN); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000)); + break; + case EVENT_CIRCLE_OF_DESTRUCTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true)) + DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION); + _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); + break; + case EVENT_COWER_IN_FEAR: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true)) + DoCast(target, SPELL_COWER_IN_FEAR); + _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); + break; + case EVENT_DARK_MENDING: + // find an ally with missing HP + if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000))) + { + DoCast(target, SPELL_DARK_MENDING); + _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); + } + else + { + // no friendly unit with missing hp. re-check in just 5 sec. + _events.ScheduleEvent(EVENT_DARK_MENDING, 5000); + } + break; + default: + break; + } - void EnterEvadeMode() OVERRIDE + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!me->HasAura(AURA_HALLUCINATION)) - npc_gauntlet_trash::EnterEvadeMode(); + return GetHallsOfReflectionAI<npc_ghostly_priestAI>(creature); } +}; - void EnterCombat(Unit* /*who*/) OVERRIDE +class npc_phantom_mage : public CreatureScript +{ + public: + npc_phantom_mage() : CreatureScript("npc_phantom_mage") { } + + struct npc_phantom_mageAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_FIREBALL, 3000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000); - _events.ScheduleEvent(EVENT_FROSTBOLT, 9000); - _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); - _events.ScheduleEvent(EVENT_HALLUCINATION, 40000); - } + npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void UpdateAI(uint32 diff) OVERRIDE + void EnterEvadeMode() override + { + if (!me->HasAura(AURA_HALLUCINATION)) + npc_gauntlet_trash::EnterEvadeMode(); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_FIREBALL, 3000); + _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000); + _events.ScheduleEvent(EVENT_FROSTBOLT, 9000); + _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); + _events.ScheduleEvent(EVENT_HALLUCINATION, 40000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_FIREBALL: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FIREBALL); + _events.ScheduleEvent(EVENT_FIREBALL, 15000); + break; + case EVENT_FLAMESTRIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FLAMESTRIKE); + _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000); + break; + case EVENT_FROSTBOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FROSTBOLT); + _events.ScheduleEvent(EVENT_FROSTBOLT, 15000); + break; + case EVENT_CHAINS_OF_ICE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) + DoCast(target, SPELL_CHAINS_OF_ICE); + _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000); + break; + case EVENT_HALLUCINATION: + // removing any dots on mage or else the invisibility spell will break duration + me->RemoveAllAuras(); + DoCast(me, SPELL_HALLUCINATION); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_FIREBALL: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_FIREBALL); - _events.ScheduleEvent(EVENT_FIREBALL, 15000); - break; - case EVENT_FLAMESTRIKE: - DoCast(SPELL_FLAMESTRIKE); - _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000); - break; - case EVENT_FROSTBOLT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_FROSTBOLT); - _events.ScheduleEvent(EVENT_FROSTBOLT, 15000); - break; - case EVENT_CHAINS_OF_ICE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CHAINS_OF_ICE); - _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000); - break; - case EVENT_HALLUCINATION: - // removing any dots on mage or else the invisibility spell will break duration - me->RemoveAllAuras(); - DoCast(SPELL_HALLUCINATION); - break; - } - - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_phantom_mageAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_phantom_mageAI>(creature); - } }; class npc_phantom_hallucination : public CreatureScript { -public: - npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { } - - struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI - { - npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { } + public: + npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { } - void Reset() OVERRIDE + struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI { - if (Unit* unit = me->SelectNearestTarget()) - AttackStart(unit); - DoZoneInCombat(); - } + npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { } - void EnterEvadeMode() OVERRIDE - { - if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION)) - npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(); - } + void Reset() override + { + DoZoneInCombat(me, 150.0f); + } + + void EnterEvadeMode() override + { + if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION)) + npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(); + } + + void JustDied(Unit* /*killer*/) override + { + DoCastAOE(SPELL_HALLUCINATION_2); + } + }; - void JustDied(Unit* /*killer*/) OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { - DoCast(SPELL_HALLUCINATION_2); + return new npc_phantom_hallucinationAI(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_phantom_hallucinationAI(creature); - } }; class npc_shadowy_mercenary : public CreatureScript { -public: - npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { } - - struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash - { - npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { } - void EnterCombat(Unit* /*who*/) OVERRIDE + struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000); - _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000); - } + npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHADOW_STEP, 23000); + _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000); + _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) OVERRIDE + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_SHADOW_STEP: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_SHADOW_STEP); + _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); + break; + case EVENT_DEADLY_POISON: + DoCastVictim(SPELL_DEADLY_POISON); + _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000); + break; + case EVENT_ENVENOMED_DAGGER_THROW: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_ENVENOMED_DAGGER_THROW); + _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); + break; + case EVENT_KIDNEY_SHOT: + DoCastVictim(SPELL_KIDNEY_SHOT); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHADOW_STEP: - DoCast(SPELL_SHADOW_STEP); - _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); - break; - case EVENT_DEADLY_POISON: - DoCastVictim(SPELL_DEADLY_POISON); - _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000); - break; - case EVENT_ENVENOMED_DAGGER_THROW: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_ENVENOMED_DAGGER_THROW); - _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); - break; - case EVENT_KIDNEY_SHOT: - DoCastVictim(SPELL_KIDNEY_SHOT); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000); - break; - } - - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_shadowy_mercenaryAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_shadowy_mercenaryAI>(creature); - } }; class npc_spectral_footman : public CreatureScript { -public: - npc_spectral_footman() : CreatureScript("npc_spectral_footman") { } - - struct npc_spectral_footmanAI : public npc_gauntlet_trash - { - npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_spectral_footman() : CreatureScript("npc_spectral_footman") { } - void EnterCombat(Unit* /*who*/) OVERRIDE + struct npc_spectral_footmanAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000); - _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); - } + npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 14000); + _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000); + _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + } - _events.Update(diff); + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + _events.Update(diff); - switch (_events.ExecuteEvent()) - { - case EVENT_SPECTRAL_STRIKE: - DoCastVictim(SPELL_SPECTRAL_STRIKE); - _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); - break; - case EVENT_SHIELD_BASH: - DoCastVictim(SPELL_SHIELD_BASH); - _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000); - break; - case EVENT_TORTURED_ENRAGE: - DoCast(SPELL_TORTURED_ENRAGE); - _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); - break; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_SPECTRAL_STRIKE: + DoCastVictim(SPELL_SPECTRAL_STRIKE); + _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); + break; + case EVENT_SHIELD_BASH: + DoCastVictim(SPELL_SHIELD_BASH); + _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000); + break; + case EVENT_TORTURED_ENRAGE: + DoCast(me, SPELL_TORTURED_ENRAGE); + _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); } + }; - DoMeleeAttackIfReady(); + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_spectral_footmanAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_spectral_footmanAI>(creature); - } }; class npc_tortured_rifleman : public CreatureScript { -public: - npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { } - - struct npc_tortured_riflemanAI : public npc_gauntlet_trash - { - npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { } - void EnterCombat(Unit* /*who*/) OVERRIDE + struct npc_tortured_riflemanAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHOOT, 1); /// @todo adjust timers - _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000); - _events.ScheduleEvent(EVENT_FROST_TRAP, 10000); - _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); - } + npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHOOT, 1); + _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000); + _events.ScheduleEvent(EVENT_FROST_TRAP, 10000); + _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void UpdateAI(uint32 diff) OVERRIDE + switch (_events.ExecuteEvent()) + { + case EVENT_SHOOT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_SHOOT); + _events.ScheduleEvent(EVENT_SHOOT, 2000); + break; + case EVENT_CURSED_ARROW: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_CURSED_ARROW); + _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); + break; + case EVENT_FROST_TRAP: + DoCast(me, SPELL_FROST_TRAP); + _events.ScheduleEvent(EVENT_FROST_TRAP, 30000); + break; + case EVENT_ICE_SHOT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_ICE_SHOT); + _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHOOT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHOOT); - _events.ScheduleEvent(EVENT_SHOOT, 2000); - break; - case EVENT_CURSED_ARROW: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CURSED_ARROW); - _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); - break; - case EVENT_FROST_TRAP: - DoCast(SPELL_FROST_TRAP); - _events.ScheduleEvent(EVENT_FROST_TRAP, 30000); - break; - case EVENT_ICE_SHOT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_ICE_SHOT); - _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); - break; - } - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_tortured_riflemanAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_tortured_riflemanAI>(creature); - } }; - -enum GeneralEvents +enum FrostswornGeneral { - //General + // General EVENT_SHIELD = 1, EVENT_SPIKE = 2, EVENT_CLONE = 3, @@ -1572,555 +1816,652 @@ enum GeneralEvents SAY_AGGRO = 0, SAY_DEATH = 1, - SPELL_SHIELD_THROWN = 69222, // 73076 on hc - SPELL_SPIKE = 69184, // 70399 on hc - SPELL_CLONE_NAME = 57507, - SPELL_CLONE_MODEL = 45204, + SPELL_SHIELD_THROWN = 69222, + SPELL_SPIKE = 69184, + SPELL_CLONE = 69828, + SPELL_GHOST_VISUAL = 69861, // Reflection EVENT_BALEFUL_STRIKE = 1, - SPELL_BALEFUL_STRIKE = 69933, // 70400 on hc - SPELL_SPIRIT_BURST = 69900, // 73046 on hc + SPELL_BALEFUL_STRIKE = 69933, + SPELL_SPIRIT_BURST = 69900 }; -class npc_frostworn_general : public CreatureScript +class npc_frostsworn_general : public CreatureScript { -public: - npc_frostworn_general() : CreatureScript("npc_frostworn_general") { } + public: + npc_frostsworn_general() : CreatureScript("npc_frostsworn_general") { } - struct npc_frostworn_generalAI : public ScriptedAI - { - npc_frostworn_generalAI(Creature* creature) : ScriptedAI(creature) + struct npc_frostsworn_generalAI : public ScriptedAI { - _instance = me->GetInstanceScript(); - Reset(); - } + npc_frostsworn_generalAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - InstanceScript* _instance; - EventMap _events; + void Reset() override + { + _events.Reset(); + _instance->SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED); + } - void Reset() OVERRIDE - { - _events.Reset(); - _instance->SetData(DATA_FROSWORN_EVENT, NOT_STARTED); - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _events.Reset(); + _instance->SetData(DATA_FROSTSWORN_GENERAL, DONE); + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); - _instance->SetData(DATA_FROSWORN_EVENT, DONE); - } + void EnterCombat(Unit* /*victim*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + _events.ScheduleEvent(EVENT_SHIELD, 5000); + _events.ScheduleEvent(EVENT_SPIKE, 14000); + _events.ScheduleEvent(EVENT_CLONE, 22000); + _instance->SetData(DATA_FROSTSWORN_GENERAL, IN_PROGRESS); + } - void EnterCombat(Unit* /*victim*/) OVERRIDE - { - Talk(SAY_AGGRO); - _events.ScheduleEvent(EVENT_SHIELD, 5000); - _events.ScheduleEvent(EVENT_SPIKE, 14000); - _events.ScheduleEvent(EVENT_CLONE, 22000); - _instance->SetData(DATA_FROSWORN_EVENT, IN_PROGRESS); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + _events.Update(diff); - _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_SHIELD: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + DoCast(target, SPELL_SHIELD_THROWN); + _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000)); + break; + case EVENT_SPIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + DoCast(target, SPELL_SPIKE); + _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000)); + break; + case EVENT_CLONE: + SummonClones(); + _events.ScheduleEvent(EVENT_CLONE, 60000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } - while (uint32 event = _events.ExecuteEvent()) + void SummonClones() { - switch (event) + std::list<Unit*> playerList; + SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0.0f, true); + for (Unit* target : playerList) { - case EVENT_SHIELD: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SHIELD_THROWN); - _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000)); - break; - case EVENT_SPIKE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SPIKE); - _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000)); - break; - case EVENT_CLONE: - SummonClones(); - _events.ScheduleEvent(EVENT_CLONE, 60000); - break; + if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000)) + { + target->CastSpell(reflection, SPELL_CLONE, true); + target->CastSpell(reflection, SPELL_GHOST_VISUAL, true); + reflection->AI()->AttackStart(target); + } } } - DoMeleeAttackIfReady(); - } - void SummonClones() + private: + InstanceScript* _instance; + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override { - std::list<Unit *> playerList; - SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true); - for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) - { - Unit* temp = (*itr); - Creature* reflection = me->SummonCreature(NPC_REFLECTION, temp->GetPositionX(), temp->GetPositionY(), temp->GetPositionZ(), temp->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000); - reflection->SetName(temp->GetName()); - temp->CastSpell(reflection, SPELL_CLONE_NAME, true); - temp->CastSpell(reflection, SPELL_CLONE_MODEL, true); - reflection->setFaction(me->getFaction()); - reflection->AI()->AttackStart(temp); - } + return GetHallsOfReflectionAI<npc_frostsworn_generalAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_frostworn_generalAI>(creature); - } }; class npc_spiritual_reflection : public CreatureScript { -public: - npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { } + public: + npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { } - struct npc_spiritual_reflectionAI : public ScriptedAI - { - npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) + struct npc_spiritual_reflectionAI : public ScriptedAI { - Reset(); - } + npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) { } - EventMap _events; + void Reset() override + { + _events.Reset(); + } - void Reset() OVERRIDE - { - _events.Reset(); - } + void EnterCombat(Unit* /*victim*/) override + { + _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000); + } - void EnterCombat(Unit* /*victim*/) OVERRIDE - { - _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000); - } + void JustDied(Unit* /*killer*/) override + { + DoCastAOE(SPELL_SPIRIT_BURST); + } - void JustDied(Unit* killer) OVERRIDE - { - DoCast(killer, SPELL_SPIRIT_BURST); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; + _events.Update(diff); - _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + switch (_events.ExecuteEvent()) + { + case EVENT_BALEFUL_STRIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 8.0f, true)) + DoCast(target, SPELL_BALEFUL_STRIKE); + _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000)); + break; + default: + break; + } - switch (_events.ExecuteEvent()) - { - case EVENT_BALEFUL_STRIKE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_BALEFUL_STRIKE); - _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000)); + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - }; + private: + EventMap _events; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_spiritual_reflectionAI(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_spiritual_reflectionAI(creature); + } }; +// 5689 class at_hor_intro_start : public AreaTriggerScript { -public: - at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { } + public: + at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + if (player->IsGameMaster()) + return true; - if (player->IsGameMaster()) - return true; + InstanceScript* _instance = player->GetInstanceScript(); - if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED) - _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS); + if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED) + _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS); - return true; - } + return true; + } }; class at_hor_waves_restarter : public AreaTriggerScript { -public: - at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { } + public: + at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + if (player->IsGameMaster()) + return true; - if (player->IsGameMaster()) - return true; + InstanceScript* _instance = player->GetInstanceScript(); + + if (_instance->GetData(DATA_WAVE_COUNT)) + return true; - if (_instance->GetData(DATA_WAVE_COUNT)) + if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN) != DONE) + { + _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + + if (Creature* falric = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_FALRIC))) + { + falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); + falric->SetVisible(true); + } + if (Creature* marwyn = ObjectAccessor::GetCreature(*player, _instance->GetData64(DATA_MARWYN))) + { + marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); + marwyn->SetVisible(true); + } + } return true; + } +}; - if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN_EVENT) != DONE) +// 5740 +class at_hor_impenetrable_door : public AreaTriggerScript +{ + public: + at_hor_impenetrable_door() : AreaTriggerScript("at_hor_impenetrable_door") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override { - _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + if (player->IsGameMaster()) + return true; - if (Creature* falric = player->GetCreature(*player, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); - falric->SetVisible(true); - } - if (Creature* marwyn = player->GetCreature(*player, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); - marwyn->SetVisible(true); - } + InstanceScript* _instance = player->GetInstanceScript(); + if (_instance->GetBossState(DATA_MARWYN) == DONE) + return true; + + /// return false to handle teleport by db + return false; } - return true; - } }; -class at_shadow_throne : public AreaTriggerScript +// 5605 +class at_hor_shadow_throne : public AreaTriggerScript { -public: - at_shadow_throne() : AreaTriggerScript("at_shadow_throne") { } + public: + at_hor_shadow_throne() : AreaTriggerScript("at_hor_shadow_throne") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override + { + if (player->IsGameMaster()) + return true; + + InstanceScript* _instance = player->GetInstanceScript(); + + if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED) + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, IN_PROGRESS); - if (player->IsGameMaster()) return true; + } +}; - if (_instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS); +enum EscapeEvents +{ + // Raging Ghoul + EVENT_RAGING_GHOUL_JUMP = 1, - return true; - } + // Risen Witch Doctor + EVENT_RISEN_WITCH_DOCTOR_CURSE, + EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, + EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, + + // Lumbering Abomination + EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, + EVENT_LUMBERING_ABOMINATION_CLEAVE }; -class npc_raging_ghoul : public CreatureScript +namespace hor { -public: - npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { } - struct npc_raging_ghoulAI : public ScriptedAI - { - npc_raging_ghoulAI(Creature* creature) : ScriptedAI(creature) +class StartMovementEvent : public BasicEvent +{ + public: + StartMovementEvent(Creature* owner) : _owner(owner) { } + + bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override { - _instance = me->GetInstanceScript(); + _owner->SetReactState(REACT_AGGRESSIVE); + if (Unit* target = _owner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + _owner->AI()->AttackStart(target); + return true; } - InstanceScript* _instance; - uint32 _emergeTimer; - bool _doEmerge; - bool _doJump; - uint64 _leaderGUID; + private: + Creature* _owner; +}; - void Reset() OVERRIDE - { - _emergeTimer = 4000; - _doEmerge = false; - _doJump = false; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); +} // namespace hor - } +struct npc_escape_event_trash : public ScriptedAI +{ + npc_escape_event_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void IsSummonedBy(Unit*) OVERRIDE - { - DoCast(me, SPELL_EMERGE_VISUAL); - DoZoneInCombat(me, 100.00f); - } + void Reset() override + { + _events.Reset(); + } - void JustDied(Unit* /*killer*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override + { + if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == FAIL || _instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED) + me->DespawnOrUnsummon(); + } + + void IsSummonedBy(Unit* /*summoner*/) override + { + DoZoneInCombat(me, 0.0f); + if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) { - _instance->SetData(DATA_SUMMONS, 0); + me->SetInCombatWith(leader); + leader->SetInCombatWith(me); + me->AddThreat(leader, 0.0f); } + } - void AttackStart(Unit* who) OVERRIDE +protected: + EventMap _events; + InstanceScript* _instance; +}; + +class npc_raging_ghoul : public CreatureScript +{ + public: + npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { } + + struct npc_raging_ghoulAI : public npc_escape_event_trash { - if (!who) - return; + npc_raging_ghoulAI(Creature* creature) : npc_escape_event_trash(creature) { } - if (!_doEmerge) - return; + void Reset() override + { + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 5000); + } - ScriptedAI::AttackStart(who); - } + void IsSummonedBy(Unit* summoner) override + { + me->CastSpell(me, SPELL_RAGING_GHOUL_SPAWN, true); + me->SetReactState(REACT_PASSIVE); + me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000)); - void UpdateAI(uint32 diff) OVERRIDE - { - if (!_instance) - return; + npc_escape_event_trash::IsSummonedBy(summoner); + } - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + void UpdateAI(uint32 diff) override { - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); - Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)); + npc_escape_event_trash::UpdateAI(diff); + + if (!UpdateVictim()) + return; + + _events.Update(diff); - if (_doEmerge != true) + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) { - if (_emergeTimer < diff) - { - _doEmerge = true; - if (leader) + case EVENT_RAGING_GHOUL_JUMP: + if (Unit* victim = me->GetVictim()) { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); + if (me->IsInRange(victim, 5.0f, 30.0f)) + { + DoCast(victim, SPELL_GHOUL_JUMP); + return; + } } - } - else - _emergeTimer -= diff; + _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 500); + break; + default: + break; } - if (me->Attack(leader,true))/*(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f))*/ - { - if (!_doJump && me->IsWithinDistInMap(leader, 30.0f) && !me->IsWithinDistInMap(leader, 5.0f)) - { - _doJump = true; - DoCast(leader, SPELL_GHOUL_JUMP); - } - } + DoMeleeAttackIfReady(); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } - }; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_raging_ghoulAI>(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_raging_ghoulAI>(creature); + } }; class npc_risen_witch_doctor : public CreatureScript { -public: - npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { } + public: + npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { } - struct npc_risen_witch_doctorAI : public ScriptedAI - { - npc_risen_witch_doctorAI(Creature* creature) : ScriptedAI(creature) + struct npc_risen_witch_doctorAI : public npc_escape_event_trash { - _instance = me->GetInstanceScript(); - } + npc_risen_witch_doctorAI(Creature* creature) : npc_escape_event_trash(creature) { } - InstanceScript* _instance; - uint32 _emergeTimer; - bool _doEmerge; - uint64 _leaderGUID; - uint32 _boltTimer; - uint32 _boltVolleyTimer; - uint32 _curseTimer; + void Reset() override + { + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, 6000); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, 15000); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, 7000); + } - void Reset() OVERRIDE - { - _emergeTimer = 5000; - _boltTimer = 6000; - _boltVolleyTimer = 15000; - _curseTimer = 7000; - _doEmerge = false; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); - } + void IsSummonedBy(Unit* summoner) override + { + me->CastSpell(me, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true); + me->SetReactState(REACT_PASSIVE); + me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000)); - void IsSummonedBy(Unit*) OVERRIDE - { - DoCast(me, SPELL_EMERGE_VISUAL); - DoZoneInCombat(me, 100.00f); - } + npc_escape_event_trash::IsSummonedBy(summoner); + } - void JustDied(Unit* /*killer*/) OVERRIDE - { - _instance->SetData(DATA_SUMMONS, 0); - } + void UpdateAI(uint32 diff) override + { + npc_escape_event_trash::UpdateAI(diff); - void AttackStart(Unit* who) OVERRIDE - { - if (!who) - return; + if (!UpdateVictim()) + return; + + _events.Update(diff); - if (_doEmerge == false) - return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - ScriptedAI::AttackStart(who); + switch (_events.ExecuteEvent()) + { + case EVENT_RISEN_WITCH_DOCTOR_CURSE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true)) + DoCast(target, SPELL_CURSE_OF_DOOM); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, urand(10000, 15000)); + break; + case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 20.0f, true)) + DoCast(target, SPELL_SHADOW_BOLT); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, urand(2000, 3000)); + break; + case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY: + if (SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true)) + DoCastAOE(SPELL_SHADOW_BOLT_VOLLEY); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, urand(15000, 22000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_risen_witch_doctorAI>(creature); } +}; + +class npc_lumbering_abomination : public CreatureScript +{ + public: + npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { } - void UpdateAI(uint32 diff) OVERRIDE + struct npc_lumbering_abominationAI : public npc_escape_event_trash { - if (!_instance) - return; + npc_lumbering_abominationAI(Creature* creature) : npc_escape_event_trash(creature) { } - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + void Reset() override { - if (_doEmerge != true) - { - if (_emergeTimer < diff) - { - _doEmerge = true; - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, 15000); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, 6000); + } - if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) - { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); - } - } - else - _emergeTimer -= diff; - } + void UpdateAI(uint32 diff) override + { + npc_escape_event_trash::UpdateAI(diff); - if (_curseTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_COURSE_OF_DOOM); - _curseTimer = urand(10000, 15000); - } - else - _curseTimer -= diff; + if (!UpdateVictim()) + return; - if (_boltTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_SHADOW_BOLT); - _boltTimer = urand(2000, 3000); - } - else - _boltTimer -= diff; + _events.Update(diff); - if (_boltVolleyTimer < diff) + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_SHADOW_BOLT_VOLLEY); - _boltVolleyTimer = urand(15000, 22000); + case EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY: + DoCastVictim(SPELL_VOMIT_SPRAY); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, urand(15000, 20000)); + break; + case EVENT_LUMBERING_ABOMINATION_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, urand(7000, 9000)); + break; + default: + break; } - else - _boltVolleyTimer -= diff; + + DoMeleeAttackIfReady(); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } - }; + }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_risen_witch_doctorAI>(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_lumbering_abominationAI>(creature); + } }; - -class npc_lumbering_abomination : public CreatureScript +// 72900 - Start Halls of Reflection Quest AE +class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader { -public: - npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { } + public: + spell_hor_start_halls_of_reflection_quest_ae() : SpellScriptLoader("spell_hor_start_halls_of_reflection_quest_ae") { } - struct npc_lumbering_abominationAI : public ScriptedAI - { - npc_lumbering_abominationAI(Creature* creature) : ScriptedAI(creature) + class spell_hor_start_halls_of_reflection_quest_ae_SpellScript : public SpellScript { - _instance = me->GetInstanceScript(); - } + PrepareSpellScript(spell_hor_start_halls_of_reflection_quest_ae_SpellScript); + + void StartQuests(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + { + // CanTakeQuest and CanAddQuest checks done in spell effect execution + if (target->GetTeam() == ALLIANCE) + target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_A, true); + else + target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_H, true); + } + } - InstanceScript* _instance; - uint64 _leaderGUID; - bool _doWalk; - uint32 _strikeTimer; - uint32 _vomitTimer; + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hor_start_halls_of_reflection_quest_ae_SpellScript::StartQuests, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; - void Reset() OVERRIDE + SpellScript* GetSpellScript() const override { - _doWalk = false; - _vomitTimer = 15000; - _strikeTimer = 6000; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); + return new spell_hor_start_halls_of_reflection_quest_ae_SpellScript(); } +}; + +// 70190 - Evasion +class spell_hor_evasion : public SpellScriptLoader +{ + public: + spell_hor_evasion() : SpellScriptLoader("spell_hor_evasion") { } + + class spell_hor_evasion_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hor_evasion_SpellScript); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void SetDest(SpellDestination& dest) + { + WorldObject* target = GetExplTargetWorldObject(); + Position pos(*target); + Position home = GetCaster()->ToCreature()->GetHomePosition(); + + // prevent evasion outside the room + if (pos.IsInDist2d(&home, 15.0f)) + return; + + float angle = pos.GetAngle(&home); + float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster()); + target->MovePosition(pos, dist, angle); + + dest.Relocate(pos); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_hor_evasion_SpellScript::SetDest, EFFECT_0, TARGET_DEST_TARGET_RADIUS); + } + }; - void IsSummonedBy(Unit*) OVERRIDE + SpellScript* GetSpellScript() const override { - DoCast(me, SPELL_EMERGE_VISUAL); - DoZoneInCombat(me, 100.00f); + return new spell_hor_evasion_SpellScript(); } +}; + +// 70017 - Gunship Cannon Fire +class spell_hor_gunship_cannon_fire : public SpellScriptLoader +{ + public: + spell_hor_gunship_cannon_fire() : SpellScriptLoader("spell_hor_gunship_cannon_fire") { } - void UpdateAI(uint32 diff) OVERRIDE + class spell_hor_gunship_cannon_fire_AuraScript : public AuraScript { - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + PrepareAuraScript(spell_hor_gunship_cannon_fire_AuraScript); + + void HandlePeriodic(AuraEffect const* /*aurEff*/) { - if (_doWalk != true) + if (!urand(0, 2)) { - _doWalk = true; - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); - if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) - { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); - } - } - if (_strikeTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_ABON_STRIKE); - _strikeTimer = urand(7000, 9000); + if (GetTarget()->GetEntry() == NPC_GUNSHIP_CANNON_HORDE) + GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE, true); + else + GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE, true); } - else - _strikeTimer -= diff; + } - if (_vomitTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_VOMIT_SPRAY); - _vomitTimer = urand(15000, 20000); - } - else - _vomitTimer -= diff; + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hor_gunship_cannon_fire_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } + }; - void JustDied(Unit* /*killer*/) OVERRIDE + AuraScript* GetAuraScript() const override { - _instance->SetData(DATA_SUMMONS, 0); + return new spell_hor_gunship_cannon_fire_AuraScript(); } - - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetInstanceAI<npc_lumbering_abominationAI>(creature); - } }; void AddSC_halls_of_reflection() { new at_hor_intro_start(); new at_hor_waves_restarter(); - new at_shadow_throne(); - new npc_jaina_or_sylvanas_hor(); + new at_hor_impenetrable_door(); + new at_hor_shadow_throne(); + new npc_jaina_or_sylvanas_intro_hor(); new npc_jaina_or_sylvanas_escape_hor(); + new npc_the_lich_king_escape_hor(); new npc_ghostly_priest(); new npc_phantom_mage(); new npc_phantom_hallucination(); new npc_shadowy_mercenary(); new npc_spectral_footman(); new npc_tortured_rifleman(); + new npc_frostsworn_general(); + new npc_spiritual_reflection(); new npc_raging_ghoul(); new npc_risen_witch_doctor(); new npc_lumbering_abomination(); - new npc_frostworn_general(); - new npc_spiritual_reflection(); + new spell_hor_start_halls_of_reflection_quest_ae(); + new spell_hor_evasion(); + new spell_hor_gunship_cannon_fire(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index c4776c3cfcd..a05035f7b44 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -15,170 +15,231 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef DEF_HALLS_OF_REFLECTION_H -#define DEF_HALLS_OF_REFLECTION_H +#ifndef HALLS_OF_REFLECTION_H_ +#define HALLS_OF_REFLECTION_H_ #define HoRScriptName "instance_halls_of_reflection" -#define MAX_ENCOUNTER 3 + +uint32 const EncounterCount = 3; /* Halls of Reflection encounters: -0- Falric -1- Marwyn -2- The Lich King + 0 - Falric + 1 - Marwyn + 2 - The Lich King */ -enum Data +enum DataTypes { - DATA_FALRIC_EVENT = 0, - DATA_MARWYN_EVENT = 1, - DATA_LICHKING_EVENT = 2, + DATA_FALRIC = 0, + DATA_MARWYN = 1, + DATA_THE_LICH_KING_ESCAPE = 2, + DATA_INTRO_EVENT = 3, - DATA_FROSWORN_EVENT = 4, + DATA_FROSTSWORN_GENERAL = 4, - DATA_WAVE_COUNT = 5, - DATA_TEAM_IN_INSTANCE = 6, - DATA_FROSTMOURNE = 7, - DATA_FROSTWORN_DOOR = 8, - DATA_ESCAPE_EVENT = 9, + DATA_KORELN_LORALEN = 5, + DATA_WAVE_COUNT = 6, + DATA_TEAM_IN_INSTANCE = 7, + DATA_FROSTMOURNE = 8, + DATA_IMPENETRABLE_DOOR = 9, DATA_ESCAPE_LEADER = 10, - DATA_SUMMONS = 11, - DATA_ICEWALL = 12, - DATA_CAVE_IN = 13 + DATA_ICEWALL = 11, + DATA_ICEWALL_TARGET = 12, + DATA_GUNSHIP = 13 }; -enum Creatures +enum CreatureIds { - NPC_JAINA_PART1 = 37221, - NPC_SYLVANAS_PART1 = 37223, - NPC_UTHER = 37225, - NPC_LICH_KING_PART1 = 37226, - NPC_LORALEN = 37779, - NPC_KORELN = 37582, - - NPC_FALRIC = 38112, - NPC_MARWYN = 38113, - NPC_WAVE_MERCENARY = 38177, - NPC_WAVE_FOOTMAN = 38173, - NPC_WAVE_RIFLEMAN = 38176, - NPC_WAVE_PRIEST = 38175, - NPC_WAVE_MAGE = 38172, - - NPC_FROSTWORN_GENERAL = 36723, - NPC_REFLECTION = 37068, // 37107 for tank only? - - NPC_JAINA_PART2 = 36955, - NPC_SYLVANAS_PART2 = 37554, - NPC_LICH_KING_PART2 = 36954, - NPC_BARTLETT = 37182, // High Captain Justin Bartlett - NPC_KORM = 37833, // Sky-Reaver Korm Blackscar - NPC_ICE_WALL = 37014, // Ice Wall Target - - NPC_RAGING_GNOUL = 36940, - NPC_RISEN_WITCH_DOCTOR = 36941, - NPC_ABON = 37069 + NPC_JAINA_INTRO = 37221, + NPC_SYLVANAS_INTRO = 37223, + NPC_UTHER = 37225, + NPC_THE_LICH_KING_INTRO = 37226, + NPC_KORELN = 37582, + NPC_LORALEN = 37779, + NPC_FROSTMOUNRE_ALTAR_BUNNY = 37704, + + NPC_FALRIC = 38112, + NPC_MARWYN = 38113, + NPC_WAVE_MERCENARY = 38177, + NPC_WAVE_FOOTMAN = 38173, + NPC_WAVE_RIFLEMAN = 38176, + NPC_WAVE_PRIEST = 38175, + NPC_WAVE_MAGE = 38172, + + NPC_FROSTSWORN_GENERAL = 36723, + NPC_REFLECTION = 37068, // 37107 for tank only? + + NPC_JAINA_ESCAPE = 36955, + NPC_SYLVANAS_ESCAPE = 37554, + NPC_THE_LICH_KING_ESCAPE = 36954, + NPC_ICE_WALL_TARGET = 37014, + + NPC_RAGING_GHOUL = 36940, + NPC_RISEN_WITCH_DOCTOR = 36941, + NPC_LUMBERING_ABOMINATION = 37069, + + NPC_GUNSHIP_CANNON_HORDE = 37593, + NPC_JUSTIN_BARTLETT = 30344, + NPC_KORM_BLACKSCAR = 30824, + + NPC_WORLD_TRIGGER = 22515 }; -enum GameObjects +enum GameObjectIds { - GO_FROSTMOURNE = 202302, - GO_ENTRANCE_DOOR = 201976, - GO_FROSTWORN_DOOR = 197341, - GO_ARTHAS_DOOR = 197342, - //GO_ESCAPE_DOOR = 197343, // always open ? - - GO_ICE_WALL = 201385, - GO_CAVE = 201596, - - GO_STAIRS_SKYBREAKER = 201709, - GO_SKYBREAKER = 201598, - GO_STAIRS_ORGRIM_HAMMER = 202211, - GO_ORGRIM_HAMMER = 201599, - GO_PORTAL = 202079, - - GO_CAPTAIN_CHEST_HORDE_NORMAL = 202212, //3145 - GO_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, //30357 - GO_CAPTAIN_CHEST_HORDE_HEROIC = 202337, //3246 - GO_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, //3333 + GO_FROSTMOURNE = 202302, + GO_ENTRANCE_DOOR = 201976, + GO_IMPENETRABLE_DOOR = 197341, + GO_SHADOW_THRONE_DOOR = 197342, + GO_ESCAPE_DOOR = 197343, // always open ? + + GO_ICE_WALL = 201385, + GO_CAVE_IN = 201596, + + GO_THE_SKYBREAKER = 201598, + GO_ORGRIMS_HAMMER = 201599, + GO_THE_SKYBREAKER_STAIRS = 201709, + GO_ORGRIMS_HAMMER_STAIRS = 202211, + GO_PORTAL_TO_DALARAN = 195682, + + GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, + GO_THE_CAPTAIN_CHEST_HORDE_NORMAL = 202212, + GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, + GO_THE_CAPTAIN_CHEST_HORDE_HEROIC = 202337 }; -enum HorWorldStates +enum Achievements { - WORLD_STATE_HOR_WAVES_ENABLED = 4884, - WORLD_STATE_HOR_WAVE_COUNT = 4882, + ACHIEV_NOT_RETREATING_EVENT = 22615, + SPELL_ACHIEV_CHECK = 72830 }; // Common actions from Instance Script to Boss Script enum Actions { - ACTION_ENTER_COMBAT, - ACTION_START_ESCAPING, - ACTION_WALL_BROKEN + ACTION_ENTER_COMBAT = -668001, + ACTION_START_PREFIGHT = -668002, + ACTION_WALL_BROKEN = -668003, + ACTION_GUNSHIP_ARRIVAL = -668004, + ACTION_GUNSHIP_ARRIVAL_2 = -668005 }; -enum TrashGeneralSpells +enum InstanceEvents { - // General spells - SPELL_WELL_OF_SOULS = 72630, // cast when spawn(become visible) - SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates + EVENT_SPAWN_WAVES = 1, + EVENT_NEXT_WAVE = 2, + EVENT_DO_WIPE = 3, + EVENT_ADD_WAVE = 4, + EVENT_SPAWN_ESCAPE_EVENT = 5 }; -enum InstanceEvents +enum InstanceEventIds { - EVENT_SPAWN_WAVES = 1, - EVENT_NEXT_WAVE = 2, - EVENT_DO_WIPE = 3, - EVENT_ADD_WAVE = 4, + EVENT_GUNSHIP_ARRIVAL = 22709, + EVENT_GUNSHIP_ARRIVAL_2 = 22714, + EVENT_ICE_WALL_SUMMONED = 22795 }; -// Base class for FALRIC and MARWYN -// handled the summonList and the notification events to/from the InstanceScript -struct boss_horAI : ScriptedAI +enum InstanceSpells { - boss_horAI(Creature* creature) : ScriptedAI(creature), summons(creature) - { - instance = me->GetInstanceScript(); - } + // Trash + SPELL_WELL_OF_SOULS = 72630, // cast when spawn (become visible) + SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates + + // Start Quests + SPELL_START_HALLS_OF_REFLECTION_QUEST_A = 71351, + SPELL_START_HALLS_OF_REFLECTION_QUEST_H = 71542, + SPELL_START_HALLS_OF_REFLECTION_QUEST_AE = 72900, + + // Quest Credits + SPELL_CREDIT_FINDING_SYLVANAS = 71536, + SPELL_CREDIT_FINDING_JAINA = 71538, + SPELL_CREDIT_ESCAPING_ARTHAS = 71352, + + // Gunship + SPELL_GUNSHIP_CANNON_FIRE = 70017, + SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021, + SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246 +}; - InstanceScript* instance; - EventMap events; - SummonList summons; +enum InstanceWorldStates +{ + WORLD_STATE_HOR_WAVES_ENABLED = 4884, + WORLD_STATE_HOR_WAVE_COUNT = 4882 +}; + +enum InstanceYells +{ + SAY_CAPTAIN_FIRE = 0, + SAY_CAPTAIN_FINAL = 1 +}; + +// Base class for FALRIC and MARWYN +struct boss_horAI : BossAI +{ + boss_horAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId) { } - void Reset() + void Reset() override { - events.Reset(); + _Reset(); me->SetVisible(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetReactState(REACT_PASSIVE); if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED) - instance->ProcessEvent(0, EVENT_DO_WIPE); + instance->ProcessEvent(NULL, EVENT_DO_WIPE); } - void DoAction(int32 actionID) + void DoAction(int32 actionId) override { - switch (actionID) + switch (actionId) { - case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat. + case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat. me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetReactState(REACT_AGGRESSIVE); - - if (Unit* unit = me->SelectNearestTarget()) - AttackStart(unit); - - DoZoneInCombat(); + DoZoneInCombat(me, 150.0f); + break; + default: break; } } - void JustSummoned(Creature* summoned) + void JustSummoned(Creature* summon) override { - summons.Summon(summoned); + summons.Summon(summon); } }; +class GameObjectDeleteDelayEvent : public BasicEvent +{ + public: + GameObjectDeleteDelayEvent(Unit* owner, uint64 gameObjectGUID) : _owner(owner), _gameObjectGUID(gameObjectGUID) { } + + void DeleteGameObject() + { + if (GameObject* go = ObjectAccessor::GetGameObject(*_owner, _gameObjectGUID)) + go->Delete(); + } + + bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override + { + DeleteGameObject(); + return true; + } + + void Abort(uint64 /*execTime*/) override + { + DeleteGameObject(); + } + + private: + Unit* _owner; + uint64 _gameObjectGUID; +}; + template<class AI> AI* GetHallsOfReflectionAI(Creature* creature) { return GetInstanceAI<AI>(creature, HoRScriptName); } -#endif +#endif // HALLS_OF_REFLECTION_H_ diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index f78be036900..6f33e80b92b 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -19,590 +19,792 @@ #include "ScriptedCreature.h" #include "InstanceScript.h" #include "Player.h" +#include "Transport.h" #include "WorldPacket.h" #include "halls_of_reflection.h" -Position const JainaSpawnPos = {5236.659f, 1929.894f, 707.7781f, 0.8726646f}; // Jaina Spawn Position -Position const SylvanasSpawnPos = {5236.667f, 1929.906f, 707.7781f, 0.8377581f}; // Sylvanas Spawn Position -Position const GeneralSpawnPos = {5415.538f, 2117.842f, 707.7781f, 3.944444f}; // Frostsworn General -Position const JainaSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Jaina Spawn Position 2 -Position const SylvanasSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Sylvanas Spawn Position 2 +Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position +Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed) +Position const JainaSpawnPos2 = { 5549.011f, 2257.041f, 733.0120f, 1.153993f }; // Jaina Spawn Position 2 +Position const SylvanasSpawnPos2 = { 5549.29f, 2257.353f, 733.0943f, 0.8901179f }; // Sylvanas Spawn Position 2 (sniffed) +Position const KorelnOrLoralenSpawnPos = { 5232.68f, 1931.46f, 707.7781f, 0.8377581f }; + +Position const TheLichKingEscapePosition[] = +{ + { 5557.017f, 2266.103f, 733.0943f, 3.892084f }, // 0 - Spawn (Horde) + { 5552.733f, 2262.718f, 733.0110f, 4.009696f } // 1 - Spawn (Alliance) +}; Position const SpawnPos[] = { - {5309.577f, 2042.668f, 707.7781f, 4.694936f}, - {5295.885f, 2040.342f, 707.7781f, 5.078908f}, - {5340.836f, 1992.458f, 707.7781f, 2.757620f}, - {5325.072f, 1977.597f, 707.7781f, 2.076942f}, - {5277.365f, 1993.229f, 707.7781f, 0.401426f}, - {5275.479f, 2001.135f, 707.7781f, 0.174533f}, - {5302.448f, 2042.222f, 707.7781f, 4.904375f}, - {5343.293f, 1999.384f, 707.7781f, 2.914700f}, - {5295.635f, 1973.757f, 707.7781f, 1.186824f}, - {5311.031f, 1972.229f, 707.7781f, 1.640610f}, - {5275.076f, 2008.724f, 707.7781f, 6.213372f}, - {5316.701f, 2041.550f, 707.7781f, 4.502949f}, - {5344.150f, 2007.168f, 707.7781f, 3.159046f}, - {5319.158f, 1973.998f, 707.7781f, 1.919862f}, - {5302.247f, 1972.415f, 707.7781f, 1.378810f}, - {5277.739f, 2016.882f, 707.7781f, 5.969026f}, - {5322.964f, 2040.288f, 707.7781f, 4.345870f}, - {5343.467f, 2015.951f, 707.7781f, 3.490659f}, - {5313.820f, 1978.146f, 707.7781f, 1.745329f}, - {5279.649f, 2004.656f, 707.7781f, 0.069814f}, - {5306.057f, 2037.002f, 707.7781f, 4.817109f}, - {5337.865f, 2003.403f, 707.7781f, 2.984513f}, - {5299.434f, 1979.009f, 707.7781f, 1.239184f}, - {5312.752f, 2037.122f, 707.7781f, 4.590216f}, - {5335.724f, 1996.859f, 707.7781f, 2.740167f}, - {5280.632f, 2012.156f, 707.7781f, 6.056293f}, - {5320.369f, 1980.125f, 707.7781f, 2.007129f}, - {5306.572f, 1977.474f, 707.7781f, 1.500983f}, - {5336.599f, 2017.278f, 707.7781f, 3.473205f}, - {5282.897f, 2019.597f, 707.7781f, 5.881760f}, - {5318.704f, 2036.108f, 707.7781f, 4.223697f}, - {5280.513f, 1997.842f, 707.7781f, 0.296706f}, - {5337.833f, 2010.057f, 707.7781f, 3.228859f}, - {5299.250f, 2035.998f, 707.7781f, 5.026548f}, + { 5309.577f, 2042.668f, 707.7781f, 4.694936f }, + { 5295.885f, 2040.342f, 707.7781f, 5.078908f }, + { 5340.836f, 1992.458f, 707.7781f, 2.757620f }, + { 5325.072f, 1977.597f, 707.7781f, 2.076942f }, + { 5277.365f, 1993.229f, 707.7781f, 0.401426f }, + { 5275.479f, 2001.135f, 707.7781f, 0.174533f }, + { 5302.448f, 2042.222f, 707.7781f, 4.904375f }, + { 5343.293f, 1999.384f, 707.7781f, 2.914700f }, + { 5295.635f, 1973.757f, 707.7781f, 1.186824f }, + { 5311.031f, 1972.229f, 707.7781f, 1.640610f }, + { 5275.076f, 2008.724f, 707.7781f, 6.213372f }, + { 5316.701f, 2041.550f, 707.7781f, 4.502949f }, + { 5344.150f, 2007.168f, 707.7781f, 3.159046f }, + { 5319.158f, 1973.998f, 707.7781f, 1.919862f }, + { 5302.247f, 1972.415f, 707.7781f, 1.378810f }, + { 5277.739f, 2016.882f, 707.7781f, 5.969026f }, + { 5322.964f, 2040.288f, 707.7781f, 4.345870f }, + { 5343.467f, 2015.951f, 707.7781f, 3.490659f }, + { 5313.820f, 1978.146f, 707.7781f, 1.745329f }, + { 5279.649f, 2004.656f, 707.7781f, 0.069814f }, + { 5306.057f, 2037.002f, 707.7781f, 4.817109f }, + { 5337.865f, 2003.403f, 707.7781f, 2.984513f }, + { 5299.434f, 1979.009f, 707.7781f, 1.239184f }, + { 5312.752f, 2037.122f, 707.7781f, 4.590216f }, + { 5335.724f, 1996.859f, 707.7781f, 2.740167f }, + { 5280.632f, 2012.156f, 707.7781f, 6.056293f }, + { 5320.369f, 1980.125f, 707.7781f, 2.007129f }, + { 5306.572f, 1977.474f, 707.7781f, 1.500983f }, + { 5336.599f, 2017.278f, 707.7781f, 3.473205f }, + { 5282.897f, 2019.597f, 707.7781f, 5.881760f }, + { 5318.704f, 2036.108f, 707.7781f, 4.223697f }, + { 5280.513f, 1997.842f, 707.7781f, 0.296706f }, + { 5337.833f, 2010.057f, 707.7781f, 3.228859f }, + { 5299.250f, 2035.998f, 707.7781f, 5.026548f } }; class instance_halls_of_reflection : public InstanceMapScript { -public: - instance_halls_of_reflection() : InstanceMapScript("instance_halls_of_reflection", 668) { } - - struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript - { - instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) { } + public: + instance_halls_of_reflection() : InstanceMapScript(HoRScriptName, 668) { } - void Initialize() OVERRIDE + struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript { - SetBossNumber(MAX_ENCOUNTER); - events.Reset(); - - _falricGUID = 0; - _marwynGUID = 0; - _jainaOrSylvanasPart1GUID = 0; - _jainaOrSylvanasPart2GUID = 0; - _lichkingPart1GUID = 0; - _frostwornGeneralGUID = 0; - - _frostmourneGUID = 0; - _entranceDoorGUID = 0; - _frostwornDoorGUID = 0; - _arthasDoorGUID = 0; - _escapeDoorGUID = 0; - _caveGUID = 0; - - _teamInInstance = 0; - _waveCount = 0; - _introEvent = NOT_STARTED; - _frostwornGeneral = NOT_STARTED; - _escapeevent = NOT_STARTED; - _mobsaticewall = 0; - } + instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); + + JainaOrSylvanasIntroGUID = 0; + KorelnOrLoralenGUID = 0; + TheLichkingIntroGUID = 0; + FalricGUID = 0; + MarwynGUID = 0; + FrostmourneAltarBunnyGUID = 0; + FrostswornGeneralGUID = 0; + JainaOrSylvanasEscapeGUID = 0; + TheLichKingEscapeGUID = 0; + + FrostmourneGUID = 0; + EntranceDoorGUID = 0; + ImpenetrableDoorGUID = 0; + ShadowThroneDoorGUID = 0; + CaveInGUID = 0; + GunshipGUID = 0; + CaptainsChestGUID = 0; + CaptainGUID = 0; + IcewallGUID = 0; + IcewallTargetGUID = 0; + + _teamInInstance = 0; + _waveCount = 0; + _introState = NOT_STARTED; + _frostswornGeneralState = NOT_STARTED; + + events.Reset(); + } - void OnPlayerEnter(Player* player) OVERRIDE - { - if (!_teamInInstance) - _teamInInstance = player->GetTeam(); - } + void OnPlayerEnter(Player* player) override + { + if (!_teamInInstance) + _teamInInstance = player->GetTeam(); - void OnCreatureCreate(Creature* creature) OVERRIDE - { - if (!_teamInInstance) + if (GetBossState(DATA_MARWYN) == DONE) + { + SpawnGunship(); + + if (!JainaOrSylvanasEscapeGUID && GetBossState(DATA_THE_LICH_KING_ESCAPE) != DONE) + SpawnEscapeEvent(); + } + } + + void OnCreatureCreate(Creature* creature) override { - Map::PlayerList const& players = instance->GetPlayers(); - if (!players.isEmpty()) - if (Player* player = players.begin()->GetSource()) - _teamInInstance = player->GetTeam(); + switch (creature->GetEntry()) + { + case NPC_JAINA_INTRO: + case NPC_SYLVANAS_INTRO: + JainaOrSylvanasIntroGUID = creature->GetGUID(); + break; + case NPC_KORELN: + case NPC_LORALEN: + if (GetBossState(DATA_MARWYN) != DONE) + creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + KorelnOrLoralenGUID = creature->GetGUID(); + break; + case NPC_THE_LICH_KING_INTRO: + TheLichkingIntroGUID = creature->GetGUID(); + break; + case NPC_FALRIC: + FalricGUID = creature->GetGUID(); + break; + case NPC_MARWYN: + MarwynGUID = creature->GetGUID(); + break; + case NPC_FROSTMOUNRE_ALTAR_BUNNY: + FrostmourneAltarBunnyGUID = creature->GetGUID(); + break; + case NPC_FROSTSWORN_GENERAL: + FrostswornGeneralGUID = creature->GetGUID(); + if (GetBossState(DATA_MARWYN) == DONE) + creature->SetPhaseMask(1, true); + break; + case NPC_JAINA_ESCAPE: + case NPC_SYLVANAS_ESCAPE: + JainaOrSylvanasEscapeGUID = creature->GetGUID(); + break; + case NPC_THE_LICH_KING_ESCAPE: + TheLichKingEscapeGUID = creature->GetGUID(); + break; + case NPC_JUSTIN_BARTLETT: + case NPC_KORM_BLACKSCAR: + CaptainGUID = creature->GetGUID(); + break; + case NPC_WORLD_TRIGGER: + if (!creature->GetTransport()) + break; + // no break + case NPC_GUNSHIP_CANNON_HORDE: + GunshipCannonGUIDs.insert(creature->GetGUID()); + break; + case NPC_ICE_WALL_TARGET: + IcewallTargetGUID = creature->GetGUID(); + break; + default: + break; + } } - switch (creature->GetEntry()) + void OnCreatureRemove(Creature* creature) override { - case NPC_JAINA_PART1: - case NPC_SYLVANAS_PART1: - _jainaOrSylvanasPart1GUID = creature->GetGUID(); - break; - case NPC_FALRIC: - _falricGUID = creature->GetGUID(); - break; - case NPC_MARWYN: - _marwynGUID = creature->GetGUID(); - break; - case NPC_FROSTWORN_GENERAL: - _frostwornGeneralGUID = creature->GetGUID(); - if (GetBossState(DATA_MARWYN_EVENT) == DONE) - if (Creature* general = instance->GetCreature(_frostwornGeneralGUID)) - general->SetPhaseMask(1, true); - break; - case NPC_JAINA_PART2: - case NPC_SYLVANAS_PART2: - _jainaOrSylvanasPart2GUID = creature->GetGUID(); - break; + switch (creature->GetEntry()) + { + case NPC_WAVE_MERCENARY: + case NPC_WAVE_FOOTMAN: + case NPC_WAVE_RIFLEMAN: + case NPC_WAVE_PRIEST: + case NPC_WAVE_MAGE: + { + uint32 internalWaveId = creature->AI()->GetData(0); + waveGuidList[internalWaveId].erase(creature->GetGUID()); + break; + } + case NPC_ICE_WALL_TARGET: + IcewallTargetGUID = 0; + break; + case NPC_WORLD_TRIGGER: + case NPC_GUNSHIP_CANNON_HORDE: + GunshipCannonGUIDs.erase(creature->GetGUID()); + break; + default: + break; + } } - } - void OnCreatureRemove(Creature* creature) OVERRIDE - { - switch (creature->GetEntry()) + uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override { - case NPC_WAVE_MERCENARY: - case NPC_WAVE_FOOTMAN: - case NPC_WAVE_RIFLEMAN: - case NPC_WAVE_PRIEST: - case NPC_WAVE_MAGE: + if (!_teamInInstance) + { + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } + + switch (entry) { - uint32 internalWaveId = creature->AI()->GetData(0); - waveGuidList[internalWaveId].erase(creature->GetGUID()); - break; + case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL: + case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC: + case GO_THE_SKYBREAKER_STAIRS: + if (_teamInInstance == HORDE) + return 0; + break; + case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL: + case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC: + case GO_ORGRIMS_HAMMER_STAIRS: + if (_teamInInstance == ALLIANCE) + return 0; + break; + default: + break; } + + return entry; } - } - void OnGameObjectCreate(GameObject* go) OVERRIDE - { - switch (go->GetEntry()) + void OnGameObjectCreate(GameObject* go) override { - case GO_FROSTMOURNE: - _frostmourneGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - HandleGameObject(0, false, go); - if (GetData(DATA_INTRO_EVENT) == DONE) - go->SetPhaseMask(2, true); - break; - case GO_ENTRANCE_DOOR: - _entranceDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - HandleGameObject(0, true, go); - break; - case GO_FROSTWORN_DOOR: - _frostwornDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (GetBossState(DATA_MARWYN_EVENT) == DONE) - HandleGameObject(0, true, go); - else - HandleGameObject(0, false, go); - break; - case GO_ARTHAS_DOOR: - _arthasDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (GetData(DATA_FROSWORN_EVENT) == DONE) - HandleGameObject(0, true, go); - else + switch (go->GetEntry()) + { + case GO_FROSTMOURNE: + FrostmourneGUID = go->GetGUID(); + if (GetData(DATA_INTRO_EVENT) == DONE) + go->SetPhaseMask(2, true); + break; + case GO_ENTRANCE_DOOR: + EntranceDoorGUID = go->GetGUID(); + break; + case GO_IMPENETRABLE_DOOR: + ImpenetrableDoorGUID = go->GetGUID(); + HandleGameObject(0, GetBossState(DATA_MARWYN) == DONE, go); + break; + case GO_SHADOW_THRONE_DOOR: + ShadowThroneDoorGUID = go->GetGUID(); + HandleGameObject(0, GetData(DATA_FROSTSWORN_GENERAL) == DONE, go); + break; + case GO_CAVE_IN: + CaveInGUID = go->GetGUID(); + break; + case GO_THE_SKYBREAKER: + case GO_ORGRIMS_HAMMER: + GunshipGUID = go->GetGUID(); + break; + case GO_THE_SKYBREAKER_STAIRS: + case GO_ORGRIMS_HAMMER_STAIRS: + if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + go->SetRespawnTime(DAY); + GunshipStairGUIDs.insert(go->GetGUID()); + break; + case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL: + case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL: + case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC: + case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC: + CaptainsChestGUID = go->GetGUID(); + break; + case GO_ICE_WALL: HandleGameObject(0, false, go); - break; - case GO_CAVE: - _caveGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - break; + IcewallGUID = go->GetGUID(); + break; + default: + break; + } } - } - void FillInitialWorldStates(WorldPacket& data) OVERRIDE - { - data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(0); - data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(0); - } - - bool SetBossState(uint32 type, EncounterState state) OVERRIDE - { - if (!InstanceScript::SetBossState(type, state)) - return false; - - switch (type) + void OnGameObjectRemove(GameObject* go) override { - case DATA_FALRIC_EVENT: - if (state == DONE) - { - ++_waveCount; - events.ScheduleEvent(EVENT_NEXT_WAVE, 60000); - } - break; - case DATA_MARWYN_EVENT: - if (state == DONE) - { - HandleGameObject(_entranceDoorGUID, true); - HandleGameObject(_frostwornDoorGUID, true); - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0); - if (Creature* general = instance->GetCreature(_frostwornGeneralGUID)) - general->SetPhaseMask(1, true); - } - break; - case DATA_LICHKING_EVENT: - default: - break; + switch (go->GetEntry()) + { + case GO_THE_SKYBREAKER_STAIRS: + case GO_ORGRIMS_HAMMER_STAIRS: + GunshipStairGUIDs.erase(go->GetGUID()); + break; + default: + break; + } } - return true; - } + void FillInitialWorldStates(WorldPacket& data) override + { + data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(_introState == DONE && GetBossState(DATA_MARWYN) != DONE); + data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(_waveCount); + } - void SetData(uint32 type, uint32 data) OVERRIDE - { - switch (type) + bool SetBossState(uint32 type, EncounterState state) override { - case DATA_INTRO_EVENT: - if (data == IN_PROGRESS) - { - if (!_introEvent) + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_FALRIC: + if (state == DONE) { - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART1, JainaSpawnPos); - else - instance->SummonCreature(NPC_SYLVANAS_PART1, SylvanasSpawnPos); + ++_waveCount; + events.ScheduleEvent(EVENT_NEXT_WAVE, 60000); } - } - _introEvent = data; - break; - case DATA_WAVE_COUNT: - if (_waveCount && data == NOT_STARTED) - ProcessEvent(NULL, EVENT_DO_WIPE); - break; - case DATA_FROSWORN_EVENT: - if (data == DONE) - { - HandleGameObject(_arthasDoorGUID, true); - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2); - else - instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2); - } - _frostwornGeneral = data; - break; - case DATA_ESCAPE_EVENT: - if (data == IN_PROGRESS) - { - if (!_escapeevent) - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->AI()->DoAction(ACTION_START_ESCAPING); - } - else if (data == NOT_STARTED) - { - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->DespawnOrUnsummon(1); - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2); - else - instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2); - SetData(DATA_ESCAPE_EVENT,IN_PROGRESS); - } - _escapeevent = data; - break; - case DATA_SUMMONS: - if (data == 0) - { - _mobsaticewall--; - if (_mobsaticewall == 0) + break; + case DATA_MARWYN: + if (state == DONE) { - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->AI()->DoAction(ACTION_WALL_BROKEN); + if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID)) + bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true); + + if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID)) + korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + + HandleGameObject(EntranceDoorGUID, true); + HandleGameObject(ImpenetrableDoorGUID, true); + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0); + if (Creature* general = instance->GetCreature(FrostswornGeneralGUID)) + general->SetPhaseMask(1, true); + + SpawnGunship(); + SpawnEscapeEvent(); } - } - else if (data == 1) - _mobsaticewall++; - break; + break; + case DATA_THE_LICH_KING_ESCAPE: + switch (state) + { + case NOT_STARTED: + break; + case IN_PROGRESS: + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_START_PREFIGHT); + break; + case DONE: + if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID)) + chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + + DoUseDoorOrButton(CaveInGUID, 15); + + if (Creature* lichking = instance->GetCreature(TheLichKingEscapeGUID)) + { + lichking->CastSpell((Unit*)NULL, SPELL_ACHIEV_CHECK, true); + lichking->DespawnOrUnsummon(1); + } + break; + case FAIL: + DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->DespawnOrUnsummon(10000); + + if (Creature* icewallTarget = instance->GetCreature(IcewallTargetGUID)) + icewallTarget->DespawnOrUnsummon(); + + if (GameObject* icewall = instance->GetGameObject(IcewallGUID)) + icewall->Delete(); + + events.ScheduleEvent(EVENT_SPAWN_ESCAPE_EVENT, 30000); + break; + default: + break; + } + break; + default: + break; + } + + return true; } - SaveToDB(); - } + void SpawnGunship() + { + // don't spawn gunship twice + if (GunshipGUID) + return; + if (!_teamInInstance) + { + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } - // wave scheduling,checked when wave npcs die - void OnUnitDeath(Unit* unit) OVERRIDE - { - Creature* creature = unit->ToCreature(); - if (!creature) - return; + if (Transport* gunship = sTransportMgr->CreateTransport(_teamInInstance == HORDE ? GO_ORGRIMS_HAMMER : GO_THE_SKYBREAKER, 0, instance)) + gunship->EnableMovement(GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE); + } - switch (creature->GetEntry()) + void SpawnEscapeEvent() { - case NPC_WAVE_MERCENARY: - case NPC_WAVE_FOOTMAN: - case NPC_WAVE_RIFLEMAN: - case NPC_WAVE_PRIEST: - case NPC_WAVE_MAGE: + if (!_teamInInstance) { - uint32 deadNpcs = 0; - uint32 waveId = creature->AI()->GetData(0); - for (std::set<uint64>::const_iterator itr = waveGuidList[waveId].begin(); itr != waveGuidList[waveId].end(); ++itr) - { - Creature* npc = instance->GetCreature(*itr); - if (!npc || !npc->IsAlive()) - ++deadNpcs; - } - // because the current npc returns IsAlive when OnUnitDeath happens - // we check if the number of dead npcs is equal to the list-1 - if (deadNpcs == waveGuidList[waveId].size() - 1) + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } + + if (_teamInInstance == ALLIANCE) + { + instance->SummonCreature(NPC_JAINA_ESCAPE, JainaSpawnPos2); + instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[1]); + } + else + { + instance->SummonCreature(NPC_SYLVANAS_ESCAPE, SylvanasSpawnPos2); + instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[0]); + } + } + + void SetData(uint32 type, uint32 data) override + { + switch (type) + { + case DATA_INTRO_EVENT: + if (data == IN_PROGRESS) + { + if (_introState == NOT_STARTED) + { + if (_teamInInstance == ALLIANCE) + { + instance->SummonCreature(NPC_JAINA_INTRO, JainaSpawnPos); + instance->SummonCreature(NPC_KORELN, KorelnOrLoralenSpawnPos); + } + else + { + instance->SummonCreature(NPC_SYLVANAS_INTRO, SylvanasSpawnPos); + instance->SummonCreature(NPC_LORALEN, KorelnOrLoralenSpawnPos); + } + } + } + _introState = data; + break; + case DATA_WAVE_COUNT: + if (_waveCount && data == NOT_STARTED) + ProcessEvent(NULL, EVENT_DO_WIPE); + break; + case DATA_FROSTSWORN_GENERAL: + if (data == DONE) + HandleGameObject(ShadowThroneDoorGUID, true); + _frostswornGeneralState = data; + break; + default: + break; + } + + SaveToDB(); + } + + // wave scheduling, checked when wave npcs die + void OnUnitDeath(Unit* unit) override + { + Creature* creature = unit->ToCreature(); + if (!creature) + return; + + switch (creature->GetEntry()) + { + case NPC_WAVE_MERCENARY: + case NPC_WAVE_FOOTMAN: + case NPC_WAVE_RIFLEMAN: + case NPC_WAVE_PRIEST: + case NPC_WAVE_MAGE: { + uint32 waveId = creature->AI()->GetData(0); + for (uint64 guid : waveGuidList[waveId]) + { + if (Creature* npc = instance->GetCreature(guid)) + if (npc->IsAlive()) + return; + } + ++_waveCount; events.ScheduleEvent(EVENT_NEXT_WAVE, 3000); + break; } - break; } } - } - void Update(uint32 diff) OVERRIDE - { - if (!instance->HavePlayers()) - return; + void Update(uint32 diff) override + { + if (!instance->HavePlayers()) + return; - events.Update(diff); + events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_NEXT_WAVE: - ProcessEvent(NULL, EVENT_ADD_WAVE); - break; + switch (events.ExecuteEvent()) + { + case EVENT_NEXT_WAVE: + ProcessEvent(NULL, EVENT_ADD_WAVE); + break; + case EVENT_SPAWN_ESCAPE_EVENT: + SpawnEscapeEvent(); + break; + } } - } - void ProcessEvent(WorldObject* /*go*/, uint32 eventId) OVERRIDE - { - switch (eventId) + void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override { - // spawning all wave npcs at once - case EVENT_SPAWN_WAVES: - _waveCount = 1; - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - { - std::list<uint32> possibilityList, tempList; - uint32 posIndex = 0; + switch (eventId) + { + // spawning all wave npcs at once + case EVENT_SPAWN_WAVES: + _waveCount = 1; + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + { + std::list<uint32> possibilityList, tempList; + uint32 posIndex = 0; - possibilityList.push_back(NPC_WAVE_MERCENARY); - possibilityList.push_back(NPC_WAVE_FOOTMAN); - possibilityList.push_back(NPC_WAVE_RIFLEMAN); - possibilityList.push_back(NPC_WAVE_PRIEST); - possibilityList.push_back(NPC_WAVE_MAGE); + possibilityList.push_back(NPC_WAVE_MERCENARY); + possibilityList.push_back(NPC_WAVE_FOOTMAN); + possibilityList.push_back(NPC_WAVE_RIFLEMAN); + possibilityList.push_back(NPC_WAVE_PRIEST); + possibilityList.push_back(NPC_WAVE_MAGE); - // iterate each wave - for (uint8 i = 0; i < 8; ++i) - { - tempList = possibilityList; + // iterate each wave + for (uint8 i = 0; i < 8; ++i) + { + tempList = possibilityList; - uint64 bossGuid = i <= 3 ? _falricGUID : _marwynGUID; + uint64 bossGuid = i <= 3 ? FalricGUID : MarwynGUID; - if (!i) - Trinity::Containers::RandomResizeList(tempList, 3); - else if (i < 6 && i != 3) - Trinity::Containers::RandomResizeList(tempList, 4); + if (!i) + Trinity::Containers::RandomResizeList(tempList, 3); + else if (i < 6 && i != 3) + Trinity::Containers::RandomResizeList(tempList, 4); - for (std::list<uint32>::const_iterator itr = tempList.begin(); itr != tempList.end(); ++itr) - { - if (Creature* boss = instance->GetCreature(bossGuid)) + for (uint32 entry : tempList) { - if (Creature* temp = boss->SummonCreature(*itr, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN)) + if (Creature* boss = instance->GetCreature(bossGuid)) { - temp->AI()->SetData(0, i); - waveGuidList[i].insert(temp->GetGUID()); + if (Creature* temp = boss->SummonCreature(entry, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN)) + { + temp->AI()->SetData(0, i); + waveGuidList[i].insert(temp->GetGUID()); + } } - } - ++posIndex; + ++posIndex; + } } } - } - events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); - break; - case EVENT_ADD_WAVE: - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - HandleGameObject(_entranceDoorGUID, false); - - if (_waveCount % 5) - { - uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2); - for (std::set<uint64>::const_iterator itr = waveGuidList[internalWaveId].begin(); itr != waveGuidList[internalWaveId].end(); ++itr) + events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + break; + case EVENT_ADD_WAVE: + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + HandleGameObject(EntranceDoorGUID, false); + + if (_waveCount % 5) { - if (Creature* temp = instance->GetCreature(*itr)) + uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2); + for (uint64 guid : waveGuidList[internalWaveId]) { - temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, true); - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_NOT_SELECTABLE); - temp->AI()->DoZoneInCombat(temp, 100.00f); + if (Creature* temp = instance->GetCreature(guid)) + { + temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false); + temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE); + temp->AI()->DoZoneInCombat(temp, 100.00f); + } } } - } - else - { - uint32 bossIndex = (_waveCount / 5) - 1; - if (GetBossState(DATA_FALRIC_EVENT + bossIndex) != DONE) + else + { + uint32 bossIndex = (_waveCount / 5) - 1; + if (GetBossState(DATA_FALRIC + bossIndex) != DONE) + { + if (Creature* boss = instance->GetCreature(bossIndex ? MarwynGUID : FalricGUID)) + boss->AI()->DoAction(ACTION_ENTER_COMBAT); + } + else if (_waveCount != 10) + { + ++_waveCount; + events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + } + } + break; + case EVENT_DO_WIPE: + _waveCount = 0; + events.Reset(); + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + HandleGameObject(EntranceDoorGUID, true); + + if (Creature* falric = instance->GetCreature(FalricGUID)) + falric->SetVisible(false); + if (Creature* marwyn = instance->GetCreature(MarwynGUID)) + marwyn->SetVisible(false); + // despawn wave npcs + for (uint8 i = 0; i < 8; ++i) { - if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID : _falricGUID)) - boss->AI()->DoAction(ACTION_ENTER_COMBAT); + for (uint64 guid : waveGuidList[i]) + if (Creature* creature = instance->GetCreature(guid)) + creature->DespawnOrUnsummon(1); + waveGuidList[i].clear(); } - else if (_waveCount != 10) + break; + // Gunship Outro + case EVENT_GUNSHIP_ARRIVAL: + if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + break; + + if (Transport* gunship = instance->GetTransport(GunshipGUID)) + gunship->EnableMovement(false); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL); + + if (Creature* captain = instance->GetCreature(CaptainGUID)) + captain->AI()->Talk(SAY_CAPTAIN_FIRE); + + for (uint64 guid : GunshipCannonGUIDs) { - ++_waveCount; - events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + uint32 entry = GUID_ENPART(guid); + if ((entry == NPC_WORLD_TRIGGER && _teamInInstance == ALLIANCE) || (entry == NPC_GUNSHIP_CANNON_HORDE && _teamInInstance == HORDE)) + if (Creature* cannon = instance->GetCreature(guid)) + cannon->CastSpell(cannon, SPELL_GUNSHIP_CANNON_FIRE, true); } - } - break; - case EVENT_DO_WIPE: - _waveCount = 0; - events.Reset(); - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - HandleGameObject(_entranceDoorGUID, true); - - if (Creature* falric = instance->GetCreature(_falricGUID)) - falric->SetVisible(false); - if (Creature* marwyn = instance->GetCreature(_marwynGUID)) - marwyn->SetVisible(false); - //despawn wave npcs - for (uint8 i = 0; i < 8; ++i) - { - for (std::set<uint64>::const_iterator itr = waveGuidList[i].begin(); itr != waveGuidList[i].end(); ++itr) - if (Creature* creature = instance->GetCreature(*itr)) - creature->DespawnOrUnsummon(1); - waveGuidList[i].clear(); - } - break; + break; + case EVENT_GUNSHIP_ARRIVAL_2: + if (Transport* gunship = instance->GetTransport(GunshipGUID)) + gunship->EnableMovement(false); + + for (uint64 guid : GunshipStairGUIDs) + if (GameObject* stairs = instance->GetGameObject(guid)) + stairs->SetRespawnTime(DAY); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL_2); + + if (Creature* captain = instance->GetCreature(CaptainGUID)) + captain->AI()->Talk(SAY_CAPTAIN_FINAL); + + break; + default: + break; + } } - } - uint32 GetData(uint32 type) const OVERRIDE - { - switch (type) + uint32 GetData(uint32 type) const override { - case DATA_WAVE_COUNT: - return _waveCount; - case DATA_TEAM_IN_INSTANCE: - return _teamInInstance; - case DATA_INTRO_EVENT: - return _introEvent; - case DATA_FROSWORN_EVENT: - return _frostwornGeneral; - case DATA_ESCAPE_EVENT: - return _escapeevent; - case DATA_SUMMONS: - return _mobsaticewall; - default: - break; - } + switch (type) + { + case DATA_WAVE_COUNT: + return _waveCount; + case DATA_TEAM_IN_INSTANCE: + return _teamInInstance; + case DATA_INTRO_EVENT: + return _introState; + case DATA_FROSTSWORN_GENERAL: + return _frostswornGeneralState; + default: + break; + } - return 0; - } + return 0; + } - uint64 GetData64(uint32 type) const OVERRIDE - { - switch (type) + uint64 GetData64(uint32 type) const override { - case DATA_FALRIC_EVENT: - return _falricGUID; - case DATA_MARWYN_EVENT: - return _marwynGUID; - case DATA_FROSWORN_EVENT: - return _frostwornGeneralGUID; - case DATA_FROSTWORN_DOOR: - return _frostwornDoorGUID; - case DATA_FROSTMOURNE: - return _frostmourneGUID; - case DATA_ESCAPE_LEADER: - return _jainaOrSylvanasPart2GUID; - case DATA_CAVE_IN: - return _caveGUID; - default: - break; - } + switch (type) + { + case DATA_FALRIC: + return FalricGUID; + case DATA_MARWYN: + return MarwynGUID; + case DATA_FROSTSWORN_GENERAL: + return FrostswornGeneralGUID; + case DATA_IMPENETRABLE_DOOR: + return ImpenetrableDoorGUID; + case DATA_FROSTMOURNE: + return FrostmourneGUID; + case DATA_ESCAPE_LEADER: + return JainaOrSylvanasEscapeGUID; + case DATA_KORELN_LORALEN: + return KorelnOrLoralenGUID; + case DATA_THE_LICH_KING_ESCAPE: + return TheLichKingEscapeGUID; + case DATA_GUNSHIP: + return GunshipGUID; + case DATA_ICEWALL: + return IcewallGUID; + case DATA_ICEWALL_TARGET: + return IcewallTargetGUID; + default: + break; + } - return 0; - } + return 0; + } - std::string GetSaveData() OVERRIDE - { - OUT_SAVE_INST_DATA; + std::string GetSaveData() override + { + OUT_SAVE_INST_DATA; - std::ostringstream saveStream; - saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral << ' ' << _escapeevent; + std::ostringstream saveStream; + saveStream << "H R " << GetBossSaveData() << _introState << ' ' << _frostswornGeneralState; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } - void Load(char const* in) OVERRIDE - { - if (!in) + void Load(char const* in) override { - OUT_LOAD_INST_DATA_FAIL; - return; - } + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } - OUT_LOAD_INST_DATA(in); + OUT_LOAD_INST_DATA(in); - char dataHead1, dataHead2; + char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; + std::istringstream loadStream(in); + loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'H' && dataHead2 == 'R') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + if (dataHead1 == 'H' && dataHead2 == 'R') { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; + for (uint8 i = 0; i < EncounterCount; ++i) + { + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState > SPECIAL) + tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } + SetBossState(i, EncounterState(tmpState)); + } - uint32 temp = 0; - loadStream >> temp; - if (temp == DONE) - SetData(DATA_INTRO_EVENT, DONE); - else - SetData(DATA_INTRO_EVENT, NOT_STARTED); + uint32 temp = 0; + loadStream >> temp; + if (temp == DONE) + SetData(DATA_INTRO_EVENT, DONE); + else + SetData(DATA_INTRO_EVENT, NOT_STARTED); - loadStream >> temp; - if (temp == DONE) - SetData(DATA_FROSWORN_EVENT, DONE); + loadStream >> temp; + if (temp == DONE) + SetData(DATA_FROSTSWORN_GENERAL, DONE); + else + SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED); + } else - SetData(DATA_FROSWORN_EVENT, NOT_STARTED); + OUT_LOAD_INST_DATA_FAIL; - loadStream >> temp; - if (temp == DONE) - SetData(DATA_ESCAPE_EVENT, DONE); - else - SetData(DATA_ESCAPE_EVENT, NOT_STARTED); + OUT_LOAD_INST_DATA_COMPLETE; } - else - OUT_LOAD_INST_DATA_FAIL; - OUT_LOAD_INST_DATA_COMPLETE; + private: + uint64 JainaOrSylvanasIntroGUID; // unused + uint64 KorelnOrLoralenGUID; + uint64 TheLichkingIntroGUID; // unused + uint64 FalricGUID; + uint64 MarwynGUID; + uint64 FrostmourneAltarBunnyGUID; + uint64 FrostswornGeneralGUID; + uint64 JainaOrSylvanasEscapeGUID; + uint64 TheLichKingEscapeGUID; + + uint64 FrostmourneGUID; + uint64 EntranceDoorGUID; + uint64 ImpenetrableDoorGUID; + uint64 ShadowThroneDoorGUID; + uint64 CaveInGUID; + + uint32 _teamInInstance; + uint32 _waveCount; + uint32 _introState; + uint32 _frostswornGeneralState; + + EventMap events; + std::set<uint64> waveGuidList[8]; + + uint64 GunshipGUID; + uint64 CaptainsChestGUID; + uint64 CaptainGUID; + uint64 IcewallGUID; + uint64 IcewallTargetGUID; + + std::set<uint64> GunshipCannonGUIDs; + std::set<uint64> GunshipStairGUIDs; + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_halls_of_reflection_InstanceMapScript(map); } - - private: - uint64 _falricGUID; - uint64 _marwynGUID; - uint64 _jainaOrSylvanasPart1GUID; - uint64 _jainaOrSylvanasPart2GUID; - uint64 _lichkingPart1GUID; - uint64 _frostwornGeneralGUID; - - uint64 _frostmourneGUID; - uint64 _entranceDoorGUID; - uint64 _frostwornDoorGUID; - uint64 _arthasDoorGUID; - uint64 _escapeDoorGUID; - uint64 _caveGUID; - - uint32 _teamInInstance; - uint32 _waveCount; - uint32 _introEvent; - uint32 _frostwornGeneral; - uint32 _escapeevent; - uint32 _mobsaticewall; - - EventMap events; - - std::set<uint64> waveGuidList[8]; - }; - - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE - { - return new instance_halls_of_reflection_InstanceMapScript(map); - } }; void AddSC_instance_halls_of_reflection() diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index fe2b818b325..783f9e245c8 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -84,7 +84,7 @@ class boss_garfrost : public CreatureScript { boss_garfrostAI(Creature* creature) : BossAI(creature, DATA_GARFROST) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.SetPhase(PHASE_ONE); @@ -92,7 +92,7 @@ class boss_garfrost : public CreatureScript _permafrostStack = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -101,23 +101,23 @@ class boss_garfrost : public CreatureScript events.ScheduleEvent(EVENT_THROW_SARONITE, 7000); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); me->RemoveAllGameObjects(); - if (Creature* tyrannus = me->GetCreature(*me, instance->GetData64(DATA_TYRANNUS))) + if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TYRANNUS))) tyrannus->AI()->Talk(SAY_TYRANNUS_DEATH); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(66)) { @@ -140,7 +140,7 @@ class boss_garfrost : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != EFFECT_MOTION_TYPE || id != POINT_FORGE) return; @@ -159,7 +159,7 @@ class boss_garfrost : public CreatureScript events.ScheduleEvent(EVENT_RESUME_ATTACK, 5000); } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { if (spell->Id == SPELL_PERMAFROST_HELPER) { @@ -168,12 +168,12 @@ class boss_garfrost : public CreatureScript } } - uint32 GetData(uint32 /*type*/) const OVERRIDE + uint32 GetData(uint32 /*type*/) const override { return _permafrostStack; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -233,7 +233,7 @@ class boss_garfrost : public CreatureScript uint32 _permafrostStack; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetPitOfSaronAI<boss_garfrostAI>(creature); } @@ -248,7 +248,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader { PrepareSpellScript(spell_garfrost_permafrost_SpellScript); - bool Load() OVERRIDE + bool Load() override { prevented = false; return true; @@ -294,7 +294,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { BeforeHit += SpellHitFn(spell_garfrost_permafrost_SpellScript::PreventHitByLoS); AfterHit += SpellHitFn(spell_garfrost_permafrost_SpellScript::RestoreImmunity); @@ -303,7 +303,7 @@ class spell_garfrost_permafrost : public SpellScriptLoader bool prevented; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_garfrost_permafrost_SpellScript(); } @@ -314,7 +314,7 @@ class achievement_doesnt_go_to_eleven : public AchievementCriteriaScript public: achievement_doesnt_go_to_eleven() : AchievementCriteriaScript("achievement_doesnt_go_to_eleven") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target) if (Creature* garfrost = target->ToCreature()) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 7720d4a4ca0..1c126bc54fd 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -142,7 +142,7 @@ class boss_ick : public CreatureScript ASSERT(_vehicle); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); instance->SetBossState(DATA_ICK, NOT_STARTED); @@ -153,7 +153,7 @@ class boss_ick : public CreatureScript return ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KRICK)); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -166,13 +166,13 @@ class boss_ick : public CreatureScript events.ScheduleEvent(EVENT_SPECIAL, urand(30000, 35000)); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->GetMotionMaster()->Clear(); ScriptedAI::EnterEvadeMode(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* krick = GetKrick()) { @@ -195,7 +195,7 @@ class boss_ick : public CreatureScript me->AddThreat(target, _tempThreat); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) return; @@ -271,7 +271,7 @@ class boss_ick : public CreatureScript float _tempThreat; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetPitOfSaronAI<boss_ickAI>(creature); } @@ -288,7 +288,7 @@ class boss_krick : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _phase = PHASE_COMBAT; @@ -304,7 +304,7 @@ class boss_krick : public CreatureScript return ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_ICK)); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -312,7 +312,7 @@ class boss_krick : public CreatureScript Talk(SAY_KRICK_SLAY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { _summons.Summon(summon); if (summon->GetEntry() == NPC_EXPLODING_ORB) @@ -322,7 +322,7 @@ class boss_krick : public CreatureScript } } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { if (actionId == ACTION_OUTRO) { @@ -338,7 +338,7 @@ class boss_krick : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != POINT_KRICK_INTRO) return; @@ -349,7 +349,7 @@ class boss_krick : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_1, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_phase != PHASE_OUTRO) return; @@ -362,7 +362,7 @@ class boss_krick : public CreatureScript { case EVENT_OUTRO_1: { - if (Creature* temp = me->GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_JAINA_SYLVANAS_1))) temp->DespawnOrUnsummon(); Creature* jainaOrSylvanas = NULL; @@ -410,7 +410,7 @@ class boss_krick : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_6, 1000); break; case EVENT_OUTRO_6: - if (Creature* tyrannus = me->GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT))) + if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _instanceScript->GetData64(DATA_TYRANNUS_EVENT))) { tyrannus->SetSpeed(MOVE_FLIGHT, 3.5f, true); tyrannus->GetMotionMaster()->MovePoint(1, outroPos[4]); @@ -491,7 +491,7 @@ class boss_krick : public CreatureScript uint64 _tyrannusGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetPitOfSaronAI<boss_krickAI>(creature); } @@ -520,13 +520,13 @@ class spell_krick_explosive_barrage : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_krick_explosive_barrage_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_krick_explosive_barrage_AuraScript(); } @@ -558,14 +558,14 @@ class spell_ick_explosive_barrage : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_ick_explosive_barrage_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_ick_explosive_barrage_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ick_explosive_barrage_AuraScript(); } @@ -594,13 +594,13 @@ class spell_exploding_orb_hasty_grow : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_exploding_orb_hasty_grow_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_SCALE, AURA_EFFECT_HANDLE_REAPPLY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_exploding_orb_hasty_grow_AuraScript(); } @@ -631,7 +631,7 @@ class spell_krick_pursuit : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_krick_pursuit_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } @@ -648,18 +648,18 @@ class spell_krick_pursuit : public SpellScriptLoader CAST_AI(boss_ick::boss_ickAI, creCaster->AI())->_ResetThreat(GetTarget()); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_krick_pursuit_AuraScript::HandleExtraEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_krick_pursuit_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_krick_pursuit_AuraScript(); } @@ -686,14 +686,14 @@ class spell_krick_pursuit_confusion : public SpellScriptLoader GetTarget()->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_krick_pursuit_confusion_AuraScript::OnApply, EFFECT_2, SPELL_AURA_LINKED, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_krick_pursuit_confusion_AuraScript::OnRemove, EFFECT_2, SPELL_AURA_LINKED, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_krick_pursuit_confusion_AuraScript(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 833c3765145..c4f46136bd9 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -25,12 +25,12 @@ enum Yells { - //Gorkun + // Gorkun SAY_GORKUN_INTRO_2 = 0, SAY_GORKUN_OUTRO_1 = 1, SAY_GORKUN_OUTRO_2 = 2, - //Tyrannus + // Tyrannus SAY_AMBUSH_1 = 3, SAY_AMBUSH_2 = 4, SAY_GAUNTLET_START = 5, @@ -44,12 +44,12 @@ enum Yells SAY_DARK_MIGHT_1 = 13, SAY_DARK_MIGHT_2 = 14, - //Jaina + // Jaina SAY_JAYNA_OUTRO_3 = 3, SAY_JAYNA_OUTRO_4 = 4, SAY_JAYNA_OUTRO_5 = 5, - //Sylvanas + // Sylvanas SAY_SYLVANAS_OUTRO_3 = 3, SAY_SYLVANAS_OUTRO_4 = 4 }; @@ -121,7 +121,7 @@ static const Position rimefangPos[10] = {1012.601f, 142.4965f, 665.0453f, 0.000000f}, }; -static const Position miscPos = {1018.376f, 167.2495f, 628.2811f, 0.000000f}; //tyrannus combat start position +static Position const miscPos = { 1018.376f, 167.2495f, 628.2811f, 0.000000f }; // tyrannus combat start position class boss_tyrannus : public CreatureScript { @@ -134,7 +134,7 @@ class boss_tyrannus : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (instance->GetBossState(DATA_TYRANNUS) != DONE) Reset(); @@ -142,7 +142,7 @@ class boss_tyrannus : public CreatureScript me->DespawnOrUnsummon(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.SetPhase(PHASE_NONE); @@ -156,12 +156,12 @@ class boss_tyrannus : public CreatureScript return ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RIMEFANG)); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -170,7 +170,7 @@ class boss_tyrannus : public CreatureScript me->GetMotionMaster()->MoveChase(victim); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->SetBossState(DATA_TYRANNUS, FAIL); if (Creature* rimefang = GetRimefang()) @@ -179,13 +179,13 @@ class boss_tyrannus : public CreatureScript me->DespawnOrUnsummon(); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetBossState(DATA_TYRANNUS, DONE); @@ -199,7 +199,7 @@ class boss_tyrannus : public CreatureScript rimefang->AI()->DoAction(ACTION_END_COMBAT); } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { if (actionId == ACTION_START_INTRO) { @@ -213,7 +213,7 @@ class boss_tyrannus : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO)) return; @@ -235,7 +235,7 @@ class boss_tyrannus : public CreatureScript me->GetMotionMaster()->MovePoint(0, miscPos); break; case EVENT_COMBAT_START: - if (Creature* rimefang = me->GetCreature(*me, instance->GetData64(DATA_RIMEFANG))) + if (Creature* rimefang = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RIMEFANG))) rimefang->AI()->DoAction(ACTION_START_RIMEFANG); //set rimefang also infight events.SetPhase(PHASE_COMBAT); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -277,7 +277,7 @@ class boss_tyrannus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetPitOfSaronAI<boss_tyrannusAI>(creature); } @@ -295,7 +295,7 @@ class boss_rimefang : public CreatureScript ASSERT(_vehicle); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.SetPhase(PHASE_NONE); @@ -306,12 +306,12 @@ class boss_rimefang : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _vehicle->InstallAllAccessories(false); } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { if (actionId == ACTION_START_RIMEFANG) { @@ -324,7 +324,7 @@ class boss_rimefang : public CreatureScript _EnterEvadeMode(); } - void SetGUID(uint64 guid, int32 type) OVERRIDE + void SetGUID(uint64 guid, int32 type) override { if (type == GUID_HOARFROST) { @@ -333,7 +333,7 @@ class boss_rimefang : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !_events.IsInPhase(PHASE_COMBAT)) return; @@ -357,7 +357,7 @@ class boss_rimefang : public CreatureScript _events.ScheduleEvent(EVENT_ICY_BLAST, 15000, 0, PHASE_COMBAT); break; case EVENT_HOARFROST: - if (Unit* target = me->GetUnit(*me, _hoarfrostTargetGUID)) + if (Unit* target = ObjectAccessor::GetUnit(*me, _hoarfrostTargetGUID)) { DoCast(target, SPELL_HOARFROST); _hoarfrostTargetGUID = 0; @@ -376,7 +376,7 @@ class boss_rimefang : public CreatureScript uint8 _currentWaypoint; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_rimefangAI(creature); } @@ -387,20 +387,20 @@ class player_overlord_brandAI : public PlayerAI public: player_overlord_brandAI(Player* player, uint64 casterGUID) : PlayerAI(player), _tyrannusGUID(casterGUID) { } - void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/) OVERRIDE + void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/) override { if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID)) if (Unit* victim = tyrannus->GetVictim()) me->CastCustomSpell(SPELL_OVERLORD_BRAND_DAMAGE, SPELLVALUE_BASE_POINT0, damage, victim, true, NULL, NULL, tyrannus->GetGUID()); } - void HealDone(Unit* /*target*/, uint32& addHealth) OVERRIDE + void HealDone(Unit* /*target*/, uint32& addHealth) override { if (Creature* tyrannus = ObjectAccessor::GetCreature(*me, _tyrannusGUID)) me->CastCustomSpell(SPELL_OVERLORD_BRAND_HEAL, SPELLVALUE_BASE_POINT0, int32(addHealth * 5.5f), tyrannus, true, NULL, NULL, tyrannus->GetGUID()); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: uint64 _tyrannusGUID; @@ -415,7 +415,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader { PrepareAuraScript(spell_tyrannus_overlord_brand_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster() && GetCaster()->GetEntry() == NPC_TYRANNUS; } @@ -442,7 +442,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader delete thisAI; } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_tyrannus_overlord_brand_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_tyrannus_overlord_brand_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -452,7 +452,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader bool oldAIState; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_tyrannus_overlord_brand_AuraScript(); } @@ -478,24 +478,61 @@ class spell_tyrannus_mark_of_rimefang : public SpellScriptLoader rimefang->AI()->SetGUID(GetTarget()->GetGUID(), GUID_HOARFROST); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_tyrannus_mark_of_rimefang_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_tyrannus_mark_of_rimefang_AuraScript(); } }; +// 69232 - Icy Blast +class spell_tyrannus_rimefang_icy_blast : public SpellScriptLoader +{ + public: + spell_tyrannus_rimefang_icy_blast() : SpellScriptLoader("spell_tyrannus_rimefang_icy_blast") { } + + class spell_tyrannus_rimefang_icy_blast_SpellScript : public SpellScript + { + PrepareSpellScript(spell_tyrannus_rimefang_icy_blast_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_ICY_BLAST_AURA)) + return false; + return true; + } + + void HandleTriggerMissile(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Position const* pos = GetHitDest()) + if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICY_BLAST, *pos, TEMPSUMMON_TIMED_DESPAWN, 60000)) + summon->CastSpell(summon, SPELL_ICY_BLAST_AURA, true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_tyrannus_rimefang_icy_blast_SpellScript::HandleTriggerMissile, EFFECT_1, SPELL_EFFECT_TRIGGER_MISSILE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_tyrannus_rimefang_icy_blast_SpellScript(); + } +}; + class at_tyrannus_event_starter : public AreaTriggerScript { public: at_tyrannus_event_starter() : AreaTriggerScript("at_tyrannus_event_starter") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { InstanceScript* instance = player->GetInstanceScript(); if (player->IsGameMaster() || !instance) @@ -518,5 +555,6 @@ void AddSC_boss_tyrannus() new boss_rimefang(); new spell_tyrannus_overlord_brand(); new spell_tyrannus_mark_of_rimefang(); + new spell_tyrannus_rimefang_icy_blast(); new at_tyrannus_event_starter(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index 364246e05f1..c2df16f03e1 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -53,13 +53,13 @@ class instance_pit_of_saron : public InstanceMapScript _teamInInstance = 0; } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (!_teamInInstance) _teamInInstance = player->GetTeam(); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (!_teamInInstance) { @@ -91,80 +91,80 @@ class instance_pit_of_saron : public InstanceMapScript break; case NPC_SYLVANAS_PART1: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE); + creature->UpdateEntry(NPC_JAINA_PART1); _jainaOrSylvanas1GUID = creature->GetGUID(); break; case NPC_SYLVANAS_PART2: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_JAINA_PART2, ALLIANCE); + creature->UpdateEntry(NPC_JAINA_PART2); _jainaOrSylvanas2GUID = creature->GetGUID(); break; case NPC_KILARA: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ELANDRA, ALLIANCE); + creature->UpdateEntry(NPC_ELANDRA); break; case NPC_KORALEN: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_KORLAEN, ALLIANCE); + creature->UpdateEntry(NPC_KORLAEN); break; case NPC_CHAMPION_1_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE); break; case NPC_CHAMPION_2_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE); break; case NPC_CHAMPION_3_HORDE: // No 3rd set for Alliance? if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE); break; case NPC_HORDE_SLAVE_1: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALLIANCE_SLAVE_1, ALLIANCE); + creature->UpdateEntry(NPC_ALLIANCE_SLAVE_1); break; case NPC_HORDE_SLAVE_2: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALLIANCE_SLAVE_2, ALLIANCE); + creature->UpdateEntry(NPC_ALLIANCE_SLAVE_2); break; case NPC_HORDE_SLAVE_3: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALLIANCE_SLAVE_3, ALLIANCE); + creature->UpdateEntry(NPC_ALLIANCE_SLAVE_3); break; case NPC_HORDE_SLAVE_4: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALLIANCE_SLAVE_4, ALLIANCE); + creature->UpdateEntry(NPC_ALLIANCE_SLAVE_4); break; case NPC_FREED_SLAVE_1_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_FREED_SLAVE_1_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_FREED_SLAVE_1_ALLIANCE); break; case NPC_FREED_SLAVE_2_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_FREED_SLAVE_2_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_FREED_SLAVE_2_ALLIANCE); break; case NPC_FREED_SLAVE_3_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_FREED_SLAVE_3_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_FREED_SLAVE_3_ALLIANCE); break; case NPC_RESCUED_SLAVE_HORDE: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_RESCUED_SLAVE_ALLIANCE, ALLIANCE); + creature->UpdateEntry(NPC_RESCUED_SLAVE_ALLIANCE); break; case NPC_MARTIN_VICTUS_1: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_MARTIN_VICTUS_1, ALLIANCE); + creature->UpdateEntry(NPC_MARTIN_VICTUS_1); break; case NPC_MARTIN_VICTUS_2: if (_teamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_MARTIN_VICTUS_2, ALLIANCE); + creature->UpdateEntry(NPC_MARTIN_VICTUS_2); break; default: break; } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -175,7 +175,7 @@ class instance_pit_of_saron : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -186,7 +186,7 @@ class instance_pit_of_saron : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -224,7 +224,7 @@ class instance_pit_of_saron : public InstanceMapScript return true; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -237,7 +237,7 @@ class instance_pit_of_saron : public InstanceMapScript return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -264,7 +264,7 @@ class instance_pit_of_saron : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -275,7 +275,7 @@ class instance_pit_of_saron : public InstanceMapScript return saveStream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -322,7 +322,7 @@ class instance_pit_of_saron : public InstanceMapScript uint32 _teamInInstance; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_pit_of_saron_InstanceScript(map); } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index bce9e067ae1..7bd9325dd97 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -49,18 +49,18 @@ class npc_ymirjar_flamebearer : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _events.ScheduleEvent(EVENT_FIREBALL, 4000); _events.ScheduleEvent(EVENT_TACTICAL_BLINK, 15000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -97,7 +97,7 @@ class npc_ymirjar_flamebearer : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ymirjar_flamebearerAI(creature); } @@ -115,17 +115,17 @@ class npc_iceborn_protodrake : public CreatureScript ASSERT(_vehicle); } - void Reset() OVERRIDE + void Reset() override { _frostBreathCooldown = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _vehicle->RemoveAllPassengers(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -146,7 +146,7 @@ class npc_iceborn_protodrake : public CreatureScript uint32 _frostBreathCooldown; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_iceborn_protodrakeAI(creature); } @@ -163,12 +163,12 @@ class npc_geist_ambusher : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _leapingFaceMaulCooldown = 9000; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (who->GetTypeId() != TYPEID_PLAYER) return; @@ -178,7 +178,7 @@ class npc_geist_ambusher : public CreatureScript DoCast(who, SPELL_LEAPING_FACE_MAUL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -199,7 +199,7 @@ class npc_geist_ambusher : public CreatureScript uint32 _leapingFaceMaulCooldown; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_geist_ambusherAI(creature); } @@ -223,13 +223,13 @@ class spell_trash_npc_glacial_strike : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_trash_npc_glacial_strike_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_trash_npc_glacial_strike_AuraScript(); } diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 46912eeb898..b02a319abdc 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -86,13 +86,13 @@ class boss_drakkari_colossus : public CreatureScript introDone = false; } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (!me->isDead()) Reset(); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -113,7 +113,7 @@ class boss_drakkari_colossus : public CreatureScript instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -124,7 +124,7 @@ class boss_drakkari_colossus : public CreatureScript instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -133,14 +133,14 @@ class boss_drakkari_colossus : public CreatureScript instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, DONE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { // Note: This should not be called, but before use SetBossState function we should use BossAI // in all the bosses of the instance instance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, FAIL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -173,7 +173,7 @@ class boss_drakkari_colossus : public CreatureScript } } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) damage = 0; @@ -192,7 +192,7 @@ class boss_drakkari_colossus : public CreatureScript } } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { if (data == DATA_COLOSSUS_PHASE) return phase; @@ -202,13 +202,13 @@ class boss_drakkari_colossus : public CreatureScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_INTRO_DONE) introDone = data; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -233,7 +233,7 @@ class boss_drakkari_colossus : public CreatureScript DoMeleeAttackIfReady(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->SetInCombatWithZone(); @@ -246,7 +246,7 @@ class boss_drakkari_colossus : public CreatureScript bool introDone; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_drakkari_colossusAI>(creature); } @@ -265,7 +265,7 @@ class boss_drakkari_elemental : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_SURGE, urand(5000, 15000)); @@ -273,16 +273,16 @@ class boss_drakkari_elemental : public CreatureScript me->AddAura(SPELL_MOJO_VOLLEY, me); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer == me) return; - if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) + if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) killer->Kill(colossus); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -308,24 +308,24 @@ class boss_drakkari_elemental : public CreatureScript DoMeleeAttackIfReady(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { case ACTION_RETURN_TO_COLOSSUS: DoCast(SPELL_SURGE_VISUAL); - if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) + if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) // what if the elemental is more than 80 yards from drakkari colossus ? DoCast(colossus, SPELL_MERGE, true); break; } } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (HealthBelowPct(50) && instance) { - if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) + if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) { if (colossus->AI()->GetData(DATA_COLOSSUS_PHASE) == COLOSSUS_PHASE_FIRST_ELEMENTAL_SUMMON) { @@ -351,12 +351,12 @@ class boss_drakkari_elemental : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->DespawnOrUnsummon(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_MERGE) { @@ -373,7 +373,7 @@ class boss_drakkari_elemental : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_drakkari_elementalAI>(creature); } @@ -384,7 +384,7 @@ class npc_living_mojo : public CreatureScript public: npc_living_mojo() : CreatureScript("npc_living_mojo") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_living_mojoAI>(creature); } @@ -396,7 +396,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { mojoWaveTimer = 2*IN_MILLISECONDS; mojoPuddleTimer = 7*IN_MILLISECONDS; @@ -416,14 +416,14 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; if (id == 1) { - if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) + if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) { colossus->AI()->DoAction(ACTION_UNFREEZE_COLOSSUS); if (!colossus->AI()->GetData(DATA_INTRO_DONE)) @@ -434,7 +434,7 @@ public: } } - void AttackStart(Unit* attacker) OVERRIDE + void AttackStart(Unit* attacker) override { if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) return; @@ -442,11 +442,9 @@ public: // we do this checks to see if the creature is one of the creatures that sorround the boss if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS))) { - Position homePosition; - me->GetHomePosition().GetPosition(&homePosition); + Position homePosition = me->GetHomePosition(); - Position colossusHomePosition; - colossus->GetHomePosition().GetPosition(&colossusHomePosition); + Position colossusHomePosition = colossus->GetHomePosition(); float distance = homePosition.GetExactDist(colossusHomePosition.GetPositionX(), colossusHomePosition.GetPositionY(), colossusHomePosition.GetPositionZ()); @@ -460,7 +458,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index e8791c6e97e..8e0ff54e161 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -35,7 +35,7 @@ class boss_eck : public CreatureScript public: boss_eck() : CreatureScript("boss_eck") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_eckAI>(creature); } @@ -56,7 +56,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiBerserkTimer = urand(60*IN_MILLISECONDS, 90*IN_MILLISECONDS); //60-90 secs according to wowwiki uiBiteTimer = 5*IN_MILLISECONDS; @@ -68,12 +68,12 @@ public: instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -123,7 +123,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ECK_THE_FEROCIOUS_EVENT, DONE); } @@ -136,7 +136,7 @@ class npc_ruins_dweller : public CreatureScript public: npc_ruins_dweller() : CreatureScript("npc_ruins_dweller") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ruins_dwellerAI>(creature); } @@ -150,7 +150,7 @@ public: InstanceScript* instance; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData64(DATA_RUIN_DWELLER_DIED, me->GetGUID()); if (instance->GetData(DATA_ALIVE_RUIN_DWELLERS) == 0) diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 4cf9eea8734..f1c246dbbea 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -68,7 +68,7 @@ class boss_gal_darah : public CreatureScript public: boss_gal_darah() : CreatureScript("boss_gal_darah") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gal_darahAI>(creature); } @@ -98,7 +98,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiStampedeTimer = 10*IN_MILLISECONDS; uiWhirlingSlashTimer = 21*IN_MILLISECONDS; @@ -121,14 +121,14 @@ public: instance->SetData(DATA_GAL_DARAH_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_GAL_DARAH_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -255,7 +255,7 @@ public: impaledList.push_back(guid); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_SHARE_THE_LOVE) return shareTheLove; @@ -263,14 +263,14 @@ public: return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_GAL_DARAH_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -288,7 +288,7 @@ class achievement_share_the_love : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 25580efb9e0..7645d984aac 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -52,7 +52,7 @@ class boss_moorabi : public CreatureScript public: boss_moorabi() : CreatureScript("boss_moorabi") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_moorabiAI>(creature); } @@ -73,7 +73,7 @@ public: uint32 uiDeterminedStabTimer; uint32 uiTransformationTImer; - void Reset() OVERRIDE + void Reset() override { uiGroundTremorTimer = 18*IN_MILLISECONDS; uiNumblingShoutTimer = 10*IN_MILLISECONDS; @@ -84,7 +84,7 @@ public: instance->SetData(DATA_MOORABI_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoCast(me, SPELL_MOJO_FRENZY, true); @@ -92,7 +92,7 @@ public: instance->SetData(DATA_MOORABI_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -143,7 +143,7 @@ public: DoMeleeAttackIfReady(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_LESS_RABI) return bPhase ? 0 : 1; @@ -151,14 +151,14 @@ public: return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_MOORABI_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -176,7 +176,7 @@ class achievement_less_rabi : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index dd1d35e639e..a8e539b02fd 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -74,7 +74,7 @@ class boss_slad_ran : public CreatureScript public: boss_slad_ran() : CreatureScript("boss_slad_ran") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_slad_ranAI>(creature); } @@ -98,7 +98,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiPoisonNovaTimer = 10*IN_MILLISECONDS; uiPowerfullBiteTimer = 3*IN_MILLISECONDS; @@ -112,14 +112,14 @@ public: instance->SetData(DATA_SLAD_RAN_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_SLAD_RAN_EVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -173,7 +173,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); lSummons.DespawnAll(); @@ -181,19 +181,19 @@ public: instance->SetData(DATA_SLAD_RAN_EVENT, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); lSummons.Summon(summoned); } - void SetGUID(uint64 guid, int32 type) OVERRIDE + void SetGUID(uint64 guid, int32 type) override { if (type == DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES) lWrappedPlayers.insert(guid); @@ -212,23 +212,26 @@ class npc_slad_ran_constrictor : public CreatureScript public: npc_slad_ran_constrictor() : CreatureScript("npc_slad_ran_constrictor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_slad_ran_constrictorAI(creature); } struct npc_slad_ran_constrictorAI : public ScriptedAI { - npc_slad_ran_constrictorAI(Creature* creature) : ScriptedAI(creature) { } + npc_slad_ran_constrictorAI(Creature* creature) : ScriptedAI(creature) + { + uiGripOfSladRanTimer = 1 * IN_MILLISECONDS; + } uint32 uiGripOfSladRanTimer; - void Reset() OVERRIDE + void Reset() override { uiGripOfSladRanTimer = 1*IN_MILLISECONDS; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -247,8 +250,9 @@ public: target->CastSpell(target, SPELL_SNAKE_WRAP, true); if (TempSummon* _me = me->ToTempSummon()) - if (Creature* sladran = _me->GetSummoner()->ToCreature()) - sladran->AI()->SetGUID(target->GetGUID(), DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES); + if (Unit* summoner = _me->GetSummoner()) + if (Creature* sladran = summoner->ToCreature()) + sladran->AI()->SetGUID(target->GetGUID(), DATA_SNAKES_WHYD_IT_HAVE_TO_BE_SNAKES); me->DespawnOrUnsummon(); } @@ -263,23 +267,26 @@ class npc_slad_ran_viper : public CreatureScript public: npc_slad_ran_viper() : CreatureScript("npc_slad_ran_viper") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_slad_ran_viperAI(creature); } struct npc_slad_ran_viperAI : public ScriptedAI { - npc_slad_ran_viperAI(Creature* creature) : ScriptedAI(creature) { } + npc_slad_ran_viperAI(Creature* creature) : ScriptedAI(creature) + { + uiVenomousBiteTimer = 2 * IN_MILLISECONDS; + } uint32 uiVenomousBiteTimer; - void Reset() OVERRIDE + void Reset() override { uiVenomousBiteTimer = 2*IN_MILLISECONDS; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -301,7 +308,7 @@ class achievement_snakes_whyd_it_have_to_be_snakes : public AchievementCriteriaS { } - bool OnCheck(Player* player, Unit* target) OVERRIDE + bool OnCheck(Player* player, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 3ac3c32916e..273cc4361af 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -36,7 +36,7 @@ class instance_gundrak : public InstanceMapScript public: instance_gundrak() : InstanceMapScript("instance_gundrak", 604) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_gundrak_InstanceMapScript(map); } @@ -89,7 +89,7 @@ public: std::string str_data; - void Initialize() OVERRIDE + void Initialize() override { spawnSupport = false; @@ -133,7 +133,7 @@ public: memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -142,7 +142,7 @@ public: return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -168,7 +168,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -273,7 +273,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -326,7 +326,7 @@ public: SaveToDB(); } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { if (type == DATA_RUIN_DWELLER_DIED) DwellerGUIDs.erase(data); @@ -338,7 +338,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -359,7 +359,7 @@ public: return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -384,7 +384,7 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -401,7 +401,7 @@ public: return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -440,7 +440,7 @@ public: OUT_LOAD_INST_DATA_COMPLETE; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { // Spawn the support for the bridge if necessary if (spawnSupport) @@ -542,7 +542,7 @@ class go_gundrak_altar : public GameObjectScript public: go_gundrak_altar() : GameObjectScript("go_gundrak_altar") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); uint64 statueGUID = 0; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index b053f0a0258..a9088207ebe 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -184,7 +184,7 @@ class boss_blood_council_controller : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); me->SetReactState(REACT_PASSIVE); @@ -194,7 +194,7 @@ class boss_blood_council_controller : public CreatureScript instance->SetBossState(DATA_BLOOD_PRINCE_COUNCIL, NOT_STARTED); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (instance->GetBossState(DATA_BLOOD_PRINCE_COUNCIL) == IN_PROGRESS) return; @@ -243,14 +243,14 @@ class boss_blood_council_controller : public CreatureScript } } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { _resetCounter += uint8(data); if (_resetCounter == 3) EnterEvadeMode(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _resetCounter = 0; if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_KELESETH_GUID))) @@ -263,7 +263,7 @@ class boss_blood_council_controller : public CreatureScript valanar->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _JustDied(); // kill all prices @@ -282,7 +282,7 @@ class boss_blood_council_controller : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -349,7 +349,7 @@ class boss_blood_council_controller : public CreatureScript uint32 _resetCounter; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_blood_council_controllerAI>(creature); } @@ -368,7 +368,7 @@ class boss_prince_keleseth_icc : public CreatureScript _spawnHealth = creature->GetMaxHealth(); } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) if (data->curhealth) @@ -380,7 +380,7 @@ class boss_prince_keleseth_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); summons.DespawnAll(); @@ -392,7 +392,7 @@ class boss_prince_keleseth_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL))) DoZoneInCombat(controller); @@ -408,7 +408,7 @@ class boss_prince_keleseth_icc : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { events.Reset(); summons.DespawnAll(); @@ -417,7 +417,7 @@ class boss_prince_keleseth_icc : public CreatureScript instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); me->SetHealth(_spawnHealth); @@ -429,23 +429,22 @@ class boss_prince_keleseth_icc : public CreatureScript } } - void JustRespawned() OVERRIDE + void JustRespawned() override { DoCast(me, SPELL_FEIGN_DEATH); me->SetHealth(_spawnHealth); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_INVOCATION_OF_BLOOD_KELESETH) DoAction(ACTION_CAST_INVOCATION); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); - Position pos; - me->GetPosition(&pos); + Position pos = me->GetPosition(); float maxRange = me->GetDistance2d(summon); float angle = me->GetAngle(summon); me->MovePositionToFirstCollision(pos, maxRange, angle); @@ -453,7 +452,7 @@ class boss_prince_keleseth_icc : public CreatureScript summon->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN); } - void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE + void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override { if (damageType != SPELL_DIRECT_DAMAGE) return; @@ -462,7 +461,7 @@ class boss_prince_keleseth_icc : public CreatureScript instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false)); } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (!_isEmpowered) { @@ -471,13 +470,13 @@ class boss_prince_keleseth_icc : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KELESETH_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -522,7 +521,7 @@ class boss_prince_keleseth_icc : public CreatureScript return true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckRoom()) return; @@ -565,7 +564,7 @@ class boss_prince_keleseth_icc : public CreatureScript bool _isEmpowered; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_prince_kelesethAI>(creature); } @@ -584,7 +583,7 @@ class boss_prince_taldaram_icc : public CreatureScript _spawnHealth = creature->GetMaxHealth(); } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) if (data->curhealth) @@ -596,7 +595,7 @@ class boss_prince_taldaram_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); summons.DespawnAll(); @@ -608,12 +607,12 @@ class boss_prince_taldaram_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL))) DoZoneInCombat(controller); @@ -625,7 +624,7 @@ class boss_prince_taldaram_icc : public CreatureScript me->AddAura(SPELL_SHADOW_PRISON, me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { events.Reset(); summons.DespawnAll(); @@ -634,7 +633,7 @@ class boss_prince_taldaram_icc : public CreatureScript instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); me->SetHealth(_spawnHealth); @@ -646,19 +645,19 @@ class boss_prince_taldaram_icc : public CreatureScript } } - void JustRespawned() OVERRIDE + void JustRespawned() override { DoCast(me, SPELL_FEIGN_DEATH); me->SetHealth(_spawnHealth); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_INVOCATION_OF_BLOOD_TALDARAM) DoAction(ACTION_CAST_INVOCATION); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, -10.0f, true); // first try at distance @@ -672,7 +671,7 @@ class boss_prince_taldaram_icc : public CreatureScript summon->AI()->SetGUID(target->GetGUID()); } - void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE + void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override { if (damageType != SPELL_DIRECT_DAMAGE) return; @@ -681,7 +680,7 @@ class boss_prince_taldaram_icc : public CreatureScript instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false)); } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (!_isEmpowered) { @@ -690,13 +689,13 @@ class boss_prince_taldaram_icc : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_TALDARAM_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -741,7 +740,7 @@ class boss_prince_taldaram_icc : public CreatureScript return true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckRoom()) return; @@ -789,7 +788,7 @@ class boss_prince_taldaram_icc : public CreatureScript bool _isEmpowered; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_prince_taldaramAI>(creature); } @@ -808,7 +807,7 @@ class boss_prince_valanar_icc : public CreatureScript _spawnHealth = creature->GetMaxHealth(); } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) if (data->curhealth) @@ -820,7 +819,7 @@ class boss_prince_valanar_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); summons.DespawnAll(); @@ -832,12 +831,12 @@ class boss_prince_valanar_icc : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BLOOD_PRINCES_CONTROL))) DoZoneInCombat(controller); @@ -849,7 +848,7 @@ class boss_prince_valanar_icc : public CreatureScript me->AddAura(SPELL_SHADOW_PRISON, me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { events.Reset(); summons.DespawnAll(); @@ -858,7 +857,7 @@ class boss_prince_valanar_icc : public CreatureScript instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); me->SetHealth(me->GetMaxHealth()); @@ -870,13 +869,13 @@ class boss_prince_valanar_icc : public CreatureScript } } - void JustRespawned() OVERRIDE + void JustRespawned() override { DoCast(me, SPELL_FEIGN_DEATH); me->SetHealth(_spawnHealth); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { switch (summon->GetEntry()) { @@ -905,13 +904,13 @@ class boss_prince_valanar_icc : public CreatureScript DoZoneInCombat(summon); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_INVOCATION_OF_BLOOD_VALANAR) DoAction(ACTION_CAST_INVOCATION); } - void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE + void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override { if (damageType != SPELL_DIRECT_DAMAGE) return; @@ -920,7 +919,7 @@ class boss_prince_valanar_icc : public CreatureScript instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false)); } - void DamageTaken(Unit* attacker, uint32& damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32& damage) override { if (!_isEmpowered) { @@ -929,13 +928,13 @@ class boss_prince_valanar_icc : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_VALANAR_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -980,7 +979,7 @@ class boss_prince_valanar_icc : public CreatureScript return true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckRoom()) return; @@ -1033,7 +1032,7 @@ class boss_prince_valanar_icc : public CreatureScript bool _isEmpowered; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_prince_valanarAI>(creature); } @@ -1052,7 +1051,7 @@ class npc_blood_queen_lana_thel : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); me->SetDisableGravity(true); @@ -1065,7 +1064,7 @@ class npc_blood_queen_lana_thel : public CreatureScript me->SetVisible(true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (_introDone) @@ -1087,13 +1086,13 @@ class npc_blood_queen_lana_thel : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == POINT_INTRO_DESPAWN) me->SetVisible(false); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_events.GetPhaseMask()) return; @@ -1127,7 +1126,7 @@ class npc_blood_queen_lana_thel : public CreatureScript bool _introDone; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_blood_queen_lana_thelAI>(creature); } @@ -1145,7 +1144,7 @@ class npc_ball_of_flame : public CreatureScript _despawnTimer = 0; } - void Reset() OVERRIDE + void Reset() override { me->CastSpell(me, SPELL_BALL_OF_FLAMES_VISUAL, true); if (me->GetEntry() == NPC_BALL_OF_INFERNO_FLAME) @@ -1155,7 +1154,7 @@ class npc_ball_of_flame : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == CHASE_MOTION_TYPE && id == GUID_LOPART(_chaseGUID) && _chaseGUID) { @@ -1166,12 +1165,12 @@ class npc_ball_of_flame : public CreatureScript } } - void SetGUID(uint64 guid, int32 /*type*/) OVERRIDE + void SetGUID(uint64 guid, int32 /*type*/) override { _chaseGUID = guid; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_FLAME_BALL_CHASE) if (Player* target = ObjectAccessor::GetPlayer(*me, _chaseGUID)) @@ -1183,7 +1182,7 @@ class npc_ball_of_flame : public CreatureScript } } - void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) OVERRIDE + void DamageDealt(Unit* /*target*/, uint32& damage, DamageEffectType damageType) override { if (damageType != SPELL_DIRECT_DAMAGE) return; @@ -1192,7 +1191,7 @@ class npc_ball_of_flame : public CreatureScript _instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(false)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_despawnTimer) return; @@ -1212,7 +1211,7 @@ class npc_ball_of_flame : public CreatureScript uint32 _despawnTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_ball_of_flameAI>(creature); } @@ -1227,7 +1226,7 @@ class npc_kinetic_bomb : public CreatureScript { npc_kinetic_bombAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); me->SetWalk(true); @@ -1239,7 +1238,7 @@ class npc_kinetic_bomb : public CreatureScript _groundZ = me->GetMap()->GetHeight(me->GetPhaseMask(), _x, _y, _groundZ, true, 500.0f); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == SPELL_KINETIC_BOMB_EXPLOSION) _events.ScheduleEvent(EVENT_BOMB_DESPAWN, 1000); @@ -1251,7 +1250,7 @@ class npc_kinetic_bomb : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -1279,7 +1278,7 @@ class npc_kinetic_bomb : public CreatureScript float _groundZ; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_kinetic_bombAI>(creature); } @@ -1298,13 +1297,13 @@ class npc_dark_nucleus : public CreatureScript _targetAuraCheck = 0; } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_DEFENSIVE); me->CastSpell(me, SPELL_SHADOW_RESONANCE_AURA, true); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _targetAuraCheck = 1000; if (me->GetDistance(who) >= 15.0f) @@ -1317,13 +1316,13 @@ class npc_dark_nucleus : public CreatureScript me->ClearUnitState(UNIT_STATE_CASTING); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); } - void DamageTaken(Unit* attacker, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* attacker, uint32& /*damage*/) override { if (attacker == me) return; @@ -1332,7 +1331,7 @@ class npc_dark_nucleus : public CreatureScript me->AddThreat(attacker, 500000000.0f); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1361,7 +1360,7 @@ class npc_dark_nucleus : public CreatureScript bool _lockedTarget; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_dark_nucleusAI>(creature); } @@ -1382,13 +1381,13 @@ class spell_taldaram_glittering_sparks : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_taldaram_glittering_sparks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_taldaram_glittering_sparks_SpellScript(); } @@ -1409,13 +1408,13 @@ class spell_taldaram_summon_flame_ball : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_taldaram_summon_flame_ball_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_taldaram_summon_flame_ball_SpellScript(); } @@ -1430,7 +1429,7 @@ class spell_taldaram_flame_ball_visual : public SpellScriptLoader { PrepareAuraScript(spell_flame_ball_visual_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (GetCaster()->GetEntry() == NPC_BALL_OF_FLAME || GetCaster()->GetEntry() == NPC_BALL_OF_INFERNO_FLAME) return true; @@ -1453,13 +1452,13 @@ class spell_taldaram_flame_ball_visual : public SpellScriptLoader target->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_flame_ball_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_flame_ball_visual_AuraScript(); } @@ -1480,13 +1479,13 @@ class spell_taldaram_ball_of_inferno_flame : public SpellScriptLoader aur->SetStackAmount(uint8(GetSpellInfo()->StackAmount)); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_taldaram_ball_of_inferno_flame_SpellScript::ModAuraStack); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_taldaram_ball_of_inferno_flame_SpellScript(); } @@ -1508,7 +1507,7 @@ class spell_valanar_kinetic_bomb : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_valanar_kinetic_bomb_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER); } @@ -1533,18 +1532,18 @@ class spell_valanar_kinetic_bomb : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_valanar_kinetic_bomb_AuraScript::HandleDummyTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_valanar_kinetic_bomb_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_valanar_kinetic_bomb_AuraScript(); } @@ -1565,13 +1564,13 @@ class spell_valanar_kinetic_bomb_knockback : public SpellScriptLoader target->AI()->DoAction(ACTION_KINETIC_BOMB_JUMP); } - void Register() OVERRIDE + void Register() override { BeforeHit += SpellHitFn(spell_valanar_kinetic_bomb_knockback_SpellScript::KnockIntoAir); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_valanar_kinetic_bomb_knockback_SpellScript(); } @@ -1593,13 +1592,13 @@ class spell_valanar_kinetic_bomb_absorb : public SpellScriptLoader dmgInfo.AbsorbDamage(absorbAmount); } - void Register() OVERRIDE + void Register() override { OnEffectAbsorb += AuraEffectAbsorbFn(spell_valanar_kinetic_bomb_absorb_AuraScript::OnAbsorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_valanar_kinetic_bomb_absorb_AuraScript(); } @@ -1620,13 +1619,13 @@ class spell_blood_council_shadow_prison : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_PRISON_DAMAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_blood_council_shadow_prison_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_blood_council_shadow_prison_AuraScript(); } @@ -1648,13 +1647,13 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader SetHitDamage(GetHitDamage() + eff->GetAmount()); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_blood_council_shadow_prison_SpellScript::AddExtraDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_blood_council_shadow_prison_SpellScript(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 3d4ee279685..104a8357917 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -145,7 +145,7 @@ class boss_blood_queen_lana_thel : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_BERSERK, 330000); @@ -163,7 +163,7 @@ class boss_blood_queen_lana_thel : public CreatureScript _killMinchar = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer())) { @@ -183,7 +183,7 @@ class boss_blood_queen_lana_thel : public CreatureScript _creditBloodQuickening = instance->GetData(DATA_BLOOD_QUICKENING_STATE) == IN_PROGRESS; } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _JustDied(); Talk(SAY_DEATH); @@ -223,7 +223,7 @@ class boss_blood_queen_lana_thel : public CreatureScript instance->DoRemoveAurasDueToSpellOnPlayers(PRESENCE_OF_THE_DARKFALLEN); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_KILL_MINCHAR) return; @@ -238,7 +238,7 @@ class boss_blood_queen_lana_thel : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { _EnterEvadeMode(); CleanAuras(); @@ -256,7 +256,7 @@ class boss_blood_queen_lana_thel : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetDisableGravity(false); me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); @@ -266,13 +266,13 @@ class boss_blood_queen_lana_thel : public CreatureScript instance->SetBossState(DATA_BLOOD_QUEEN_LANA_THEL, FAIL); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void SetGUID(uint64 guid, int32 type = 0) OVERRIDE + void SetGUID(uint64 guid, int32 type = 0) override { switch (type) { @@ -287,7 +287,7 @@ class boss_blood_queen_lana_thel : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -325,7 +325,7 @@ class boss_blood_queen_lana_thel : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -374,7 +374,7 @@ class boss_blood_queen_lana_thel : public CreatureScript // both spells have SPELL_ATTR5_SINGLE_TARGET_SPELL, no manual removal needed newOfftank->CastSpell(me->GetVictim(), SPELL_BLOOD_MIRROR_DAMAGE, true); - me->GetVictim()->CastSpell(newOfftank, SPELL_BLOOD_MIRROR_DUMMY, true); + me->EnsureVictim()->CastSpell(newOfftank, SPELL_BLOOD_MIRROR_DUMMY, true); DoCastVictim(SPELL_BLOOD_MIRROR_VISUAL); if (Is25ManRaid() && newOfftank->GetQuestStatus(QUEST_BLOOD_INFUSION) == QUEST_STATUS_INCOMPLETE && newOfftank->HasAura(SPELL_UNSATED_CRAVING) && !newOfftank->HasAura(SPELL_THIRST_QUENCHED) && @@ -502,7 +502,7 @@ class boss_blood_queen_lana_thel : public CreatureScript bool _killMinchar; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_blood_queen_lana_thelAI>(creature); } @@ -520,7 +520,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader { PrepareSpellScript(spell_blood_queen_vampiric_bite_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR)) return false; @@ -574,7 +574,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), SPELL_PRESENCE_OF_THE_DARKFALLEN_2, TRIGGERED_FULL_MASK); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_blood_queen_vampiric_bite_SpellScript::CheckTarget); BeforeHit += SpellHitFn(spell_blood_queen_vampiric_bite_SpellScript::OnCast); @@ -582,7 +582,7 @@ class spell_blood_queen_vampiric_bite : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_blood_queen_vampiric_bite_SpellScript(); } @@ -620,14 +620,14 @@ class spell_blood_queen_frenzied_bloodthirst : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_blood_queen_frenzied_bloodthirst_AuraScript::OnApply, EFFECT_0, SPELL_AURA_OVERRIDE_SPELLS, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_blood_queen_frenzied_bloodthirst_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_OVERRIDE_SPELLS, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_blood_queen_frenzied_bloodthirst_AuraScript(); } @@ -656,14 +656,14 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader { PrepareSpellScript(spell_blood_queen_bloodbolt_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TWILIGHT_BLOODBOLT)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetEntry() == NPC_BLOOD_QUEEN_LANA_THEL; } @@ -684,14 +684,14 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), SPELL_TWILIGHT_BLOODBOLT, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_bloodbolt_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_blood_queen_bloodbolt_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_blood_queen_bloodbolt_SpellScript(); } @@ -707,7 +707,7 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader { PrepareAuraScript(spell_blood_queen_essence_of_the_blood_queen_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL)) return false; @@ -721,13 +721,13 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), TRIGGERED_FULL_MASK, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_blood_queen_essence_of_the_blood_queen_AuraScript::OnProc, EFFECT_1, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_blood_queen_essence_of_the_blood_queen_AuraScript(); } @@ -769,13 +769,13 @@ class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_pact_of_the_darkfallen_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_blood_queen_pact_of_the_darkfallen_SpellScript(); } @@ -790,7 +790,7 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader { PrepareAuraScript(spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE)) return false; @@ -800,20 +800,20 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg : public SpellScriptLoader // this is an additional effect to be executed void PeriodicTick(AuraEffect const* aurEff) { - SpellInfo const* damageSpell = sSpellMgr->GetSpellInfo(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE); + SpellInfo const* damageSpell = sSpellMgr->EnsureSpellInfo(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE); int32 damage = damageSpell->Effects[EFFECT_0].CalcValue(); float multiplier = 0.3375f + 0.1f * uint32(aurEff->GetTickNumber()/10); // do not convert to 0.01f - we need tick number/10 as INT (damage increases every 10 ticks) damage = int32(damage * multiplier); GetTarget()->CastCustomSpell(SPELL_PACT_OF_THE_DARKFALLEN_DAMAGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_blood_queen_pact_of_the_darkfallen_dmg_AuraScript(); } @@ -834,13 +834,13 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg_target : public SpellScriptLo unitList.push_back(GetCaster()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blood_queen_pact_of_the_darkfallen_dmg_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_blood_queen_pact_of_the_darkfallen_dmg_SpellScript(); } @@ -851,7 +851,7 @@ class achievement_once_bitten_twice_shy_n : public AchievementCriteriaScript public: achievement_once_bitten_twice_shy_n() : AchievementCriteriaScript("achievement_once_bitten_twice_shy_n") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (!target) return false; @@ -867,7 +867,7 @@ class achievement_once_bitten_twice_shy_v : public AchievementCriteriaScript public: achievement_once_bitten_twice_shy_v() : AchievementCriteriaScript("achievement_once_bitten_twice_shy_v") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 7be766c0a0e..e1658e564ec 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -254,7 +254,7 @@ class boss_deathbringer_saurfang : public CreatureScript _fallenChampionCastCount = 0; } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_DEFENSIVE); @@ -271,7 +271,7 @@ class boss_deathbringer_saurfang : public CreatureScript me->RemoveAurasDueToSpell(SPELL_FRENZY); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (_dead) return; @@ -311,11 +311,11 @@ class boss_deathbringer_saurfang : public CreatureScript instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) return; @@ -323,27 +323,28 @@ class boss_deathbringer_saurfang : public CreatureScript ScriptedAI::AttackStart(victim); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); if (_introDone) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); + Reset(); instance->SetBossState(DATA_DEATHBRINGER_SAURFANG, FAIL); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MARK_OF_THE_FALLEN_CHAMPION); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (damage >= me->GetHealth()) damage = me->GetHealth() - 1; @@ -373,10 +374,19 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) + { + if (target->GetTransport()) + { + summon->DespawnOrUnsummon(1); + EnterEvadeMode(); + return; + } + summon->AI()->AttackStart(target); + } summon->CastSpell(summon, SPELL_BLOOD_LINK_BEAST, true); summon->CastSpell(summon, SPELL_RESISTANT_SKIN, true); @@ -384,12 +394,12 @@ class boss_deathbringer_saurfang : public CreatureScript DoZoneInCombat(summon); } - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override { summons.Despawn(summon); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE && id != POINT_SAURFANG) return; @@ -397,8 +407,14 @@ class boss_deathbringer_saurfang : public CreatureScript instance->HandleGameObject(instance->GetData64(GO_SAURFANG_S_DOOR), false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { + if (target->GetTransport()) + { + EnterEvadeMode(); + return; + } + switch (spell->Id) { case SPELL_MARK_OF_THE_FALLEN_CHAMPION: @@ -416,14 +432,14 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_BLOOD_LINK_POWER) if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) bloodPower->RecalculateAmountOfEffects(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !(events.IsInPhase(PHASE_INTRO_A) || events.IsInPhase(PHASE_INTRO_H))) return; @@ -505,7 +521,7 @@ class boss_deathbringer_saurfang : public CreatureScript DoMeleeAttackIfReady(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_MADE_A_MESS) if (_fallenChampionCastCount < RAID_MODE<uint32>(3, 5, 3, 5)) @@ -515,7 +531,7 @@ class boss_deathbringer_saurfang : public CreatureScript } // intro setup - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -571,6 +587,14 @@ class boss_deathbringer_saurfang : public CreatureScript } } + bool CanAIAttack(Unit const* target) const override + { + if (target->GetTransport()) + return false; + + return true; + } + static uint32 const FightWonValue; private: @@ -580,7 +604,7 @@ class boss_deathbringer_saurfang : public CreatureScript bool _dead; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_deathbringer_saurfangAI>(creature); } @@ -601,12 +625,12 @@ class npc_high_overlord_saurfang_icc : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -657,7 +681,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { @@ -666,7 +690,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE) { @@ -711,7 +735,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) @@ -770,7 +794,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript std::list<Creature*> _guardList; }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) @@ -782,7 +806,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); player->CLOSE_GOSSIP_MENU(); @@ -792,7 +816,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_high_overlord_saurfangAI>(creature); } @@ -810,12 +834,12 @@ class npc_muradin_bronzebeard_icc : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -862,7 +886,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { @@ -871,7 +895,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == POINT_FIRST_STEP) { @@ -891,7 +915,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) @@ -918,7 +942,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript std::list<Creature*> _guardList; }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) @@ -930,7 +954,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); player->CLOSE_GOSSIP_MENU(); @@ -940,7 +964,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_muradin_bronzebeard_iccAI>(creature); } @@ -958,13 +982,13 @@ class npc_saurfang_event : public CreatureScript _index = 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { ASSERT(!type && data && data < 6); _index = data; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_GRIP_OF_AGONY) { @@ -973,7 +997,7 @@ class npc_saurfang_event : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_CHARGE && _index) me->GetMotionMaster()->MoveCharge(chargePos[_index].GetPositionX(), chargePos[_index].GetPositionY(), chargePos[_index].GetPositionZ(), 13.0f, POINT_CHARGE); @@ -985,7 +1009,7 @@ class npc_saurfang_event : public CreatureScript uint32 _index; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_saurfang_eventAI>(creature); } @@ -1000,7 +1024,7 @@ class spell_deathbringer_blood_link : public SpellScriptLoader { PrepareSpellScript(spell_deathbringer_blood_link_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_POWER)) return false; @@ -1015,13 +1039,13 @@ class spell_deathbringer_blood_link : public SpellScriptLoader PreventHitDefaultEffect(EFFECT_0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_deathbringer_blood_link_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_blood_link_SpellScript(); } @@ -1036,7 +1060,7 @@ class spell_deathbringer_blood_link_aura : public SpellScriptLoader { PrepareAuraScript(spell_deathbringer_blood_link_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_THE_FALLEN_CHAMPION)) return false; @@ -1051,13 +1075,13 @@ class spell_deathbringer_blood_link_aura : public SpellScriptLoader saurfang->AI()->DoAction(ACTION_MARK_OF_THE_FALLEN_CHAMPION); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_deathbringer_blood_link_AuraScript::HandlePeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_deathbringer_blood_link_AuraScript(); } @@ -1078,7 +1102,7 @@ class spell_deathbringer_blood_power : public SpellScriptLoader aura->RecalculateAmountOfEffects(); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_deathbringer_blood_power_SpellScript::ModAuraValue); } @@ -1094,19 +1118,19 @@ class spell_deathbringer_blood_power : public SpellScriptLoader canBeRecalculated = true; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_0, SPELL_AURA_MOD_SCALE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_blood_power_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_deathbringer_blood_power_AuraScript(); } @@ -1121,7 +1145,7 @@ class spell_deathbringer_rune_of_blood : public SpellScriptLoader { PrepareSpellScript(spell_deathbringer_rune_of_blood_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_DUMMY)) return false; @@ -1135,13 +1159,13 @@ class spell_deathbringer_rune_of_blood : public SpellScriptLoader GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 1, GetCaster(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_deathbringer_rune_of_blood_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_rune_of_blood_SpellScript(); } @@ -1156,7 +1180,7 @@ class spell_deathbringer_blood_nova : public SpellScriptLoader { PrepareSpellScript(spell_deathbringer_blood_nova_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BLOOD_LINK_DUMMY)) return false; @@ -1170,13 +1194,13 @@ class spell_deathbringer_blood_nova : public SpellScriptLoader GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_DUMMY, SPELLVALUE_BASE_POINT0, 2, GetCaster(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_deathbringer_blood_nova_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_blood_nova_SpellScript(); } @@ -1191,7 +1215,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader { PrepareSpellScript(spell_deathbringer_blood_nova_targeting_SpellScript); - bool Load() OVERRIDE + bool Load() override { // initialize variable target = NULL; @@ -1203,9 +1227,9 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader if (targets.empty()) return; - // select one random target, with preference of ranged targets + // select one random target, preferring ranged targets uint32 targetsAtRange = 0; - uint32 const minTargets = uint32(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 10 : 4); + uint32 const minTargets = uint32(GetCaster()->GetMap()->Is25ManRaid() ? 10 : 4); targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false)); // get target count at range @@ -1213,18 +1237,12 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader if ((*itr)->GetDistance(GetCaster()) < 12.0f) break; - // set the upper cap + // If not enough ranged targets are present just select anyone if (targetsAtRange < minTargets) - targetsAtRange = std::min<uint32>(targets.size() - 1, minTargets); - - if (!targetsAtRange) - { - targets.clear(); - return; - } + targetsAtRange = uint32(targets.size()); std::list<WorldObject*>::const_iterator itr = targets.begin(); - std::advance(itr, urand(0, targetsAtRange)); + std::advance(itr, urand(0, targetsAtRange - 1)); target = *itr; targets.clear(); targets.push_back(target); @@ -1245,7 +1263,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_FULL_MASK); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_blood_nova_targeting_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_blood_nova_targeting_SpellScript::FilterTargetsSubsequent, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -1255,7 +1273,7 @@ class spell_deathbringer_blood_nova_targeting : public SpellScriptLoader WorldObject* target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_blood_nova_targeting_SpellScript(); } @@ -1270,7 +1288,7 @@ class spell_deathbringer_boiling_blood : public SpellScriptLoader { PrepareSpellScript(spell_deathbringer_boiling_blood_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1286,13 +1304,13 @@ class spell_deathbringer_boiling_blood : public SpellScriptLoader targets.push_back(target); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_deathbringer_boiling_blood_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_boiling_blood_SpellScript(); } @@ -1313,13 +1331,13 @@ class spell_deathbringer_remove_marks : public SpellScriptLoader GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_deathbringer_remove_marks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_deathbringer_remove_marks_SpellScript(); } @@ -1330,7 +1348,7 @@ class achievement_ive_gone_and_made_a_mess : public AchievementCriteriaScript public: achievement_ive_gone_and_made_a_mess() : AchievementCriteriaScript("achievement_ive_gone_and_made_a_mess") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target) if (Creature* saurfang = target->ToCreature()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 884baaf39c7..4e45d72cadf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -90,7 +90,7 @@ class boss_festergut : public CreatureScript _gasDummyGUID = 0; } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_DEFENSIVE); @@ -112,7 +112,7 @@ class boss_festergut : public CreatureScript } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer())) { @@ -130,7 +130,7 @@ class boss_festergut : public CreatureScript DoZoneInCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -140,32 +140,32 @@ class boss_festergut : public CreatureScript RemoveBlight(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_FESTERGUT, FAIL); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->EnterEvadeMode(); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == PUNGENT_BLIGHT_HELPER) target->RemoveAurasDueToSpell(INOCULATED_HELPER); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -253,13 +253,13 @@ class boss_festergut : public CreatureScript DoMeleeAttackIfReady(); } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_INOCULATED_STACK && data > _maxInoculatedStack) _maxInoculatedStack = data; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_INOCULATED_STACK) return uint32(_maxInoculatedStack); @@ -283,7 +283,7 @@ class boss_festergut : public CreatureScript uint32 _inhaleCounter; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_festergutAI>(creature); } @@ -301,19 +301,19 @@ class npc_stinky_icc : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); _events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(3000, 7000)); } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { DoCast(me, SPELL_PLAGUE_STENCH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -343,9 +343,9 @@ class npc_stinky_icc : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* festergut = me->GetCreature(*me, _instance->GetData64(DATA_FESTERGUT))) + if (Creature* festergut = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FESTERGUT))) if (festergut->IsAlive()) festergut->AI()->Talk(SAY_STINKY_DEAD); } @@ -355,7 +355,7 @@ class npc_stinky_icc : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_stinky_iccAI>(creature); } @@ -370,7 +370,7 @@ class spell_festergut_pungent_blight : public SpellScriptLoader { PrepareSpellScript(spell_festergut_pungent_blight_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -385,13 +385,13 @@ class spell_festergut_pungent_blight : public SpellScriptLoader GetCaster()->ToCreature()->AI()->Talk(EMOTE_PUNGENT_BLIGHT); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_festergut_pungent_blight_SpellScript(); } @@ -406,7 +406,7 @@ class spell_festergut_gastric_bloat : public SpellScriptLoader { PrepareSpellScript(spell_festergut_gastric_bloat_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GASTRIC_EXPLOSION)) return false; @@ -423,13 +423,13 @@ class spell_festergut_gastric_bloat : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), SPELL_GASTRIC_EXPLOSION, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_festergut_gastric_bloat_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_festergut_gastric_bloat_SpellScript(); } @@ -444,7 +444,7 @@ class spell_festergut_blighted_spores : public SpellScriptLoader { PrepareAuraScript(spell_festergut_blighted_spores_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_INOCULATED)) return false; @@ -459,13 +459,13 @@ class spell_festergut_blighted_spores : public SpellScriptLoader festergut->AI()->SetData(DATA_INOCULATED_STACK, GetStackAmount()); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_festergut_blighted_spores_AuraScript::ExtraEffect, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_festergut_blighted_spores_AuraScript(); } @@ -476,7 +476,7 @@ class achievement_flu_shot_shortage : public AchievementCriteriaScript public: achievement_flu_shot_shortage() : AchievementCriteriaScript("achievement_flu_shot_shortage") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target && target->GetTypeId() == TYPEID_UNIT) return target->ToCreature()->AI()->GetData(DATA_INOCULATED_STACK) < 3; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp new file mode 100644 index 00000000000..c0c909e4878 --- /dev/null +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -0,0 +1,2484 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#include "CellImpl.h" +#include "CreatureTextMgr.h" +#include "GridNotifiersImpl.h" +#include "GossipDef.h" +#include "MoveSpline.h" +#include "MoveSplineInit.h" +#include "PassiveAI.h" +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellAuraEffects.h" +#include "SpellScript.h" +#include "Transport.h" +#include "TransportMgr.h" +#include "Vehicle.h" +#include "icecrown_citadel.h" + +enum Texts +{ + // High Overlord Saurfang + SAY_SAURFANG_INTRO_1 = 0, + SAY_SAURFANG_INTRO_2 = 1, + SAY_SAURFANG_INTRO_3 = 2, + SAY_SAURFANG_INTRO_4 = 3, + SAY_SAURFANG_INTRO_5 = 4, + SAY_SAURFANG_INTRO_6 = 5, + SAY_SAURFANG_INTRO_A = 6, + SAY_SAURFANG_BOARD = 7, + SAY_SAURFANG_ENTER_SKYBREAKER = 8, + SAY_SAURFANG_AXETHROWERS = 9, + SAY_SAURFANG_ROCKETEERS = 10, + SAY_SAURFANG_MAGES = 11, + SAY_SAURFANG_VICTORY = 12, + SAY_SAURFANG_WIPE = 13, + + // Muradin Bronzebeard + SAY_MURADIN_INTRO_1 = 0, + SAY_MURADIN_INTRO_2 = 1, + SAY_MURADIN_INTRO_3 = 2, + SAY_MURADIN_INTRO_4 = 3, + SAY_MURADIN_INTRO_5 = 4, + SAY_MURADIN_INTRO_6 = 5, + SAY_MURADIN_INTRO_7 = 6, + SAY_MURADIN_INTRO_H = 7, + SAY_MURADIN_BOARD = 8, + SAY_MURADIN_ENTER_ORGRIMMS_HAMMER = 9, + SAY_MURADIN_RIFLEMAN = 10, + SAY_MURADIN_MORTAR = 11, + SAY_MURADIN_SORCERERS = 12, + SAY_MURADIN_VICTORY = 13, + SAY_MURADIN_WIPE = 14, + + SAY_ZAFOD_ROCKET_PACK_ACTIVE = 0, + SAY_ZAFOD_ROCKET_PACK_DISABLED = 1, + + SAY_OVERHEAT = 0 +}; + +enum Events +{ + // High Overlord Saurfang + EVENT_INTRO_H_1 = 1, + EVENT_INTRO_H_2 = 2, + EVENT_INTRO_SUMMON_SKYBREAKER = 3, + EVENT_INTRO_H_3 = 4, + EVENT_INTRO_H_4 = 5, + EVENT_INTRO_H_5 = 6, + EVENT_INTRO_H_6 = 7, + + // Muradin Bronzebeard + EVENT_INTRO_A_1 = 1, + EVENT_INTRO_A_2 = 2, + EVENT_INTRO_SUMMON_ORGRIMS_HAMMER = 3, + EVENT_INTRO_A_3 = 4, + EVENT_INTRO_A_4 = 5, + EVENT_INTRO_A_5 = 6, + EVENT_INTRO_A_6 = 7, + EVENT_INTRO_A_7 = 8, + + EVENT_KEEP_PLAYER_IN_COMBAT = 9, + EVENT_SUMMON_MAGE = 10, + EVENT_ADDS = 11, + EVENT_ADDS_BOARD_YELL = 12, + EVENT_CHECK_RIFLEMAN = 13, + EVENT_CHECK_MORTAR = 14, + EVENT_CLEAVE = 15, + + EVENT_BLADESTORM = 16, + EVENT_WOUNDING_STRIKE = 17 +}; + +enum Spells +{ + // Applied on friendly transport NPCs + SPELL_FRIENDLY_BOSS_DAMAGE_MOD = 70339, + SPELL_CHECK_FOR_PLAYERS = 70332, + SPELL_GUNSHIP_FALL_TELEPORT = 67335, + SPELL_TELEPORT_PLAYERS_ON_RESET_A = 70446, + SPELL_TELEPORT_PLAYERS_ON_RESET_H = 71284, + SPELL_TELEPORT_PLAYERS_ON_VICTORY = 72340, + SPELL_ACHIEVEMENT = 72959, + SPELL_AWARD_REPUTATION_BOSS_KILL = 73843, + + // Murading Bronzebeard + // High Overlord Saurfang + SPELL_BATTLE_FURY = 69637, + SPELL_RENDING_THROW = 70309, + SPELL_CLEAVE = 15284, + SPELL_TASTE_OF_BLOOD = 69634, + + // Applied on enemy NPCs + SPELL_MELEE_TARGETING_ON_SKYBREAKER = 70219, + SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER = 70294, + + // Gunship Hull + SPELL_EXPLOSION_WIPE = 72134, + SPELL_EXPLOSION_VICTORY = 72137, + + // Hostile NPCs + SPELL_TELEPORT_TO_ENEMY_SHIP = 70104, + SPELL_BATTLE_EXPERIENCE = 71201, + SPELL_EXPERIENCED = 71188, + SPELL_VETERAN = 71193, + SPELL_ELITE = 71195, + SPELL_ADDS_BERSERK = 72525, + + // Skybreaker Sorcerer + // Kor'kron Battle-Mage + SPELL_SHADOW_CHANNELING = 43897, + SPELL_BELOW_ZERO = 69705, + + // Skybreaker Rifleman + // Kor'kron Axethrower + SPELL_SHOOT = 70162, + SPELL_HURL_AXE = 70161, + SPELL_BURNING_PITCH_A = 70403, + SPELL_BURNING_PITCH_H = 70397, + SPELL_BURNING_PITCH = 69660, + + // Skybreaker Mortar Soldier + // Kor'kron Rocketeer + SPELL_ROCKET_ARTILLERY_A = 70609, + SPELL_ROCKET_ARTILLERY_H = 69678, + SPELL_BURNING_PITCH_DAMAGE_A = 70383, + SPELL_BURNING_PITCH_DAMAGE_H = 70374, + + // Skybreaker Marine + // Kor'kron Reaver + SPELL_DESPERATE_RESOLVE = 69647, + + // Skybreaker Sergeant + // Kor'kron Sergeant + SPELL_BLADESTORM = 69652, + SPELL_WOUNDING_STRIKE = 69651, + + // + SPELL_LOCK_PLAYERS_AND_TAP_CHEST = 72347, + SPELL_ON_SKYBREAKER_DECK = 70120, + SPELL_ON_ORGRIMS_HAMMER_DECK = 70121, + + // Rocket Pack + SPELL_ROCKET_PACK_DAMAGE = 69193, + SPELL_ROCKET_BURST = 69192, + SPELL_ROCKET_PACK_USEABLE = 70348, + + // Alliance Gunship Cannon + // Horde Gunship Cannon + SPELL_OVERHEAT = 69487, + SPELL_EJECT_ALL_PASSENGERS_BELOW_ZERO = 68576, + SPELL_EJECT_ALL_PASSENGERS_WIPE = 50630 +}; + +enum MiscData +{ + ITEM_GOBLIN_ROCKET_PACK = 49278, + + PHASE_COMBAT = 0, + PHASE_INTRO = 1, + + MUSIC_ENCOUNTER = 17289 +}; + +enum EncounterActions +{ + ACTION_SPAWN_MAGE = 1, + ACTION_SPAWN_ALL_ADDS = 2, + ACTION_CLEAR_SLOT = 3, + ACTION_SET_SLOT = 4, + ACTION_SHIP_VISITS = 5 +}; + +Position const SkybreakerAddsSpawnPos = { 15.91131f, 0.0f, 20.4628f, M_PI }; +Position const OrgrimsHammerAddsSpawnPos = { 60.728395f, 0.0f, 38.93467f, M_PI }; + +// Horde encounter +Position const SkybreakerTeleportPortal = { 6.666975f, 0.013001f, 20.87888f, 0.0f }; +Position const OrgrimsHammerTeleportExit = { 7.461699f, 0.158853f, 35.72989f, 0.0f }; + +// Alliance encounter +Position const OrgrimsHammerTeleportPortal = { 47.550990f, -0.101778f, 37.61111f, 0.0f }; +Position const SkybreakerTeleportExit = { -17.55738f, -0.090421f, 21.18366f, 0.0f }; + +uint32 const MuradinExitPathSize = 10; +G3D::Vector3 const MuradinExitPath[MuradinExitPathSize] = +{ + { 8.130936f, -0.2699585f, 20.31728f }, + { 6.380936f, -0.2699585f, 20.31728f }, + { 3.507703f, 0.02986573f, 20.78463f }, + { -2.767633f, 3.743143f, 20.37663f }, + { -4.017633f, 4.493143f, 20.12663f }, + { -7.242224f, 6.856013f, 20.03468f }, + { -7.742224f, 8.606013f, 20.78468f }, + { -7.992224f, 9.856013f, 21.28468f }, + { -12.24222f, 23.10601f, 21.28468f }, + { -14.88477f, 25.20844f, 21.59985f }, +}; + +uint32 const SaurfangExitPathSize = 13; +G3D::Vector3 const SaurfangExitPath[SaurfangExitPathSize] = +{ + { 30.43987f, 0.1475817f, 36.10674f }, + { 21.36141f, -3.056458f, 35.42970f }, + { 19.11141f, -3.806458f, 35.42970f }, + { 19.01736f, -3.299440f, 35.39428f }, + { 18.6747f, -5.862823f, 35.66611f }, + { 18.6747f, -7.862823f, 35.66611f }, + { 18.1747f, -17.36282f, 35.66611f }, + { 18.1747f, -22.61282f, 35.66611f }, + { 17.9247f, -24.36282f, 35.41611f }, + { 17.9247f, -26.61282f, 35.66611f }, + { 17.9247f, -27.86282f, 35.66611f }, + { 17.9247f, -29.36282f, 35.66611f }, + { 15.33203f, -30.42621f, 35.93796f } +}; + +enum PassengerSlots +{ + // Freezing the cannons + SLOT_FREEZE_MAGE = 0, + + // Channeling the portal, refilled with adds that board player's ship + SLOT_MAGE_1 = 1, + SLOT_MAGE_2 = 2, + + // Rifleman + SLOT_RIFLEMAN_1 = 3, + SLOT_RIFLEMAN_2 = 4, + SLOT_RIFLEMAN_3 = 5, + SLOT_RIFLEMAN_4 = 6, + + // Additional Rifleman on 25 man + SLOT_RIFLEMAN_5 = 7, + SLOT_RIFLEMAN_6 = 8, + SLOT_RIFLEMAN_7 = 9, + SLOT_RIFLEMAN_8 = 10, + + // Mortar + SLOT_MORTAR_1 = 11, + SLOT_MORTAR_2 = 12, + + // Additional spawns on 25 man + SLOT_MORTAR_3 = 13, + SLOT_MORTAR_4 = 14, + + // Marines + SLOT_MARINE_1 = 15, + SLOT_MARINE_2 = 16, + + // Additional spawns on 25 man + SLOT_MARINE_3 = 17, + SLOT_MARINE_4 = 18, + + // Sergeants + SLOT_SERGEANT_1 = 19, + + // Additional spawns on 25 man + SLOT_SERGEANT_2 = 20, + + MAX_SLOTS +}; + +struct SlotInfo +{ + uint32 Entry; + Position TargetPosition; + uint32 Cooldown; +}; + +SlotInfo const SkybreakerSlotInfo[MAX_SLOTS] = +{ + { NPC_SKYBREAKER_SORCERER, { -9.479858f, 0.05663967f, 20.77026f, 4.729842f }, 0 }, + + { NPC_SKYBREAKER_SORCERER, { 6.385986f, 4.978760f, 20.55417f, 4.694936f }, 0 }, + { NPC_SKYBREAKER_SORCERER, { 6.579102f, -4.674561f, 20.55060f, 1.553343f }, 0 }, + + { NPC_SKYBREAKER_RIFLEMAN, { -29.563900f, -17.95801f, 20.73837f, 4.747295f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -18.017210f, -18.82056f, 20.79150f, 4.747295f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -9.1193850f, -18.79102f, 20.58887f, 4.712389f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -0.3364258f, -18.87183f, 20.56824f, 4.712389f }, 30 }, + + { NPC_SKYBREAKER_RIFLEMAN, { -34.705810f, -17.67261f, 20.51523f, 4.729842f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -23.562010f, -18.28564f, 20.67859f, 4.729842f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -13.602780f, -18.74268f, 20.59622f, 4.712389f }, 30 }, + { NPC_SKYBREAKER_RIFLEMAN, { -4.3350220f, -18.84619f, 20.58234f, 4.712389f }, 30 }, + + { NPC_SKYBREAKER_MORTAR_SOLDIER, { -31.70142f, 18.02783f, 20.77197f, 4.712389f }, 30 }, + { NPC_SKYBREAKER_MORTAR_SOLDIER, { -9.368652f, 18.75806f, 20.65335f, 4.712389f }, 30 }, + + { NPC_SKYBREAKER_MORTAR_SOLDIER, { -20.40851f, 18.40381f, 20.50647f, 4.694936f }, 30 }, + { NPC_SKYBREAKER_MORTAR_SOLDIER, { 0.1585693f, 18.11523f, 20.41949f, 4.729842f }, 30 }, + + { NPC_SKYBREAKER_MARINE, SkybreakerTeleportPortal, 0 }, + { NPC_SKYBREAKER_MARINE, SkybreakerTeleportPortal, 0 }, + + { NPC_SKYBREAKER_MARINE, SkybreakerTeleportPortal, 0 }, + { NPC_SKYBREAKER_MARINE, SkybreakerTeleportPortal, 0 }, + + { NPC_SKYBREAKER_SERGEANT, SkybreakerTeleportPortal, 0 }, + + { NPC_SKYBREAKER_SERGEANT, SkybreakerTeleportPortal, 0 } +}; + +SlotInfo const OrgrimsHammerSlotInfo[MAX_SLOTS] = +{ + { NPC_KOR_KRON_BATTLE_MAGE, { 13.58548f, 0.3867192f, 34.99243f, 1.53589f }, 0 }, + + { NPC_KOR_KRON_BATTLE_MAGE, { 47.29290f, -4.308941f, 37.55550f, 1.570796f }, 0 }, + { NPC_KOR_KRON_BATTLE_MAGE, { 47.34621f, 4.032004f, 37.70952f, 4.817109f }, 0 }, + + { NPC_KOR_KRON_AXETHROWER, { -12.09280f, 27.65942f, 33.58557f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { -3.170555f, 28.30652f, 34.21082f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { 14.928040f, 26.18018f, 35.47803f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { 24.703310f, 25.36584f, 35.97845f, 1.53589f }, 30 }, + + { NPC_KOR_KRON_AXETHROWER, { -16.65302f, 27.59668f, 33.18726f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { -8.084572f, 28.21448f, 33.93805f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { 7.594765f, 27.41968f, 35.00775f, 1.53589f }, 30 }, + { NPC_KOR_KRON_AXETHROWER, { 20.763390f, 25.58215f, 35.75287f, 1.53589f }, 30 }, + + { NPC_KOR_KRON_ROCKETEER, { -11.44849f, -25.71838f, 33.64343f, 1.518436f }, 30 }, + { NPC_KOR_KRON_ROCKETEER, { 12.30336f, -25.69653f, 35.32373f, 1.518436f }, 30 }, + + { NPC_KOR_KRON_ROCKETEER, { -0.05931854f, -25.46399f, 34.50592f, 1.518436f }, 30 }, + { NPC_KOR_KRON_ROCKETEER, { 27.62149000f, -23.48108f, 36.12708f, 1.518436f }, 30 }, + + { NPC_KOR_KRON_REAVER, OrgrimsHammerTeleportPortal, 0 }, + { NPC_KOR_KRON_REAVER, OrgrimsHammerTeleportPortal, 0 }, + + { NPC_KOR_KRON_REAVER, OrgrimsHammerTeleportPortal, 0 }, + { NPC_KOR_KRON_REAVER, OrgrimsHammerTeleportPortal, 0 }, + + { NPC_KOR_KRON_SERGEANT, OrgrimsHammerTeleportPortal, 0 }, + + { NPC_KOR_KRON_SERGEANT, OrgrimsHammerTeleportPortal, 0 } +}; + +class PassengerController +{ +public: + PassengerController() + { + ResetSlots(HORDE); + } + + void SetTransport(Transport* transport) { _transport = transport; } + + void ResetSlots(uint32 team) + { + _transport = NULL; + memset(_controlledSlots, 0, sizeof(uint64)* MAX_SLOTS); + memset(_respawnCooldowns, 0, sizeof(time_t)* MAX_SLOTS); + _spawnPoint = team == HORDE ? &OrgrimsHammerAddsSpawnPos : &SkybreakerAddsSpawnPos; + _slotInfo = team == HORDE ? OrgrimsHammerSlotInfo : SkybreakerSlotInfo; + } + + bool SummonCreatures(PassengerSlots first, PassengerSlots last) + { + if (!_transport) + return false; + + bool summoned = false; + time_t now = time(NULL); + for (int32 i = first; i <= last; ++i) + { + if (_respawnCooldowns[i] > now) + continue; + + if (_controlledSlots[i]) + { + Creature* current = ObjectAccessor::GetCreature(*_transport, _controlledSlots[i]); + if (current && current->IsAlive()) + continue; + } + + if (Creature* passenger = _transport->SummonPassenger(_slotInfo[i].Entry, SelectSpawnPoint(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, NULL, 15000)) + { + _controlledSlots[i] = passenger->GetGUID(); + _respawnCooldowns[i] = time_t(0); + passenger->AI()->SetData(ACTION_SET_SLOT, i); + summoned = true; + } + } + + return summoned; + } + + void ClearSlot(PassengerSlots slot) + { + _controlledSlots[slot] = 0; + _respawnCooldowns[slot] = time(NULL) + _slotInfo[slot].Cooldown; + } + + bool SlotsNeedRefill(PassengerSlots first, PassengerSlots last) const + { + for (int32 i = first; i <= last; ++i) + if (!_controlledSlots[i]) + return true; + + return false; + } + +private: + Position SelectSpawnPoint() const + { + Position newPos; + float angle = frand(-M_PI * 0.5f, M_PI * 0.5f); + newPos.m_positionX = _spawnPoint->GetPositionX() + 2.0f * std::cos(angle); + newPos.m_positionY = _spawnPoint->GetPositionY() + 2.0f * std::sin(angle); + newPos.m_positionZ = _spawnPoint->GetPositionZ(); + newPos.SetOrientation(_spawnPoint->GetOrientation()); + return newPos; + } + + Transport* _transport; + uint64 _controlledSlots[MAX_SLOTS]; + time_t _respawnCooldowns[MAX_SLOTS]; + Position const* _spawnPoint; + SlotInfo const* _slotInfo; +}; + +class DelayedMovementEvent : public BasicEvent +{ +public: + DelayedMovementEvent(Creature* owner, Position const& dest) : _owner(owner), _dest(dest) { } + + bool Execute(uint64, uint32) override + { + if (!_owner->IsAlive()) + return true; + + _owner->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, *_owner, false); + + Movement::MoveSplineInit init(_owner); + init.DisableTransportPathTransformations(); + init.MoveTo(_dest.GetPositionX(), _dest.GetPositionY(), _dest.GetPositionZ(), false); + init.Launch(); + + return true; + } + +private: + Creature* _owner; + Position const& _dest; +}; + +class ResetEncounterEvent : public BasicEvent +{ +public: + ResetEncounterEvent(Unit* caster, uint32 spellId, uint64 otherTransport) : _caster(caster), _spellId(spellId), _otherTransport(otherTransport) { } + + bool Execute(uint64, uint32) override + { + _caster->CastSpell(_caster, _spellId, true); + _caster->GetTransport()->AddObjectToRemoveList(); + + if (GameObject* go = HashMapHolder<GameObject>::Find(_otherTransport)) + go->AddObjectToRemoveList(); + + return true; + } + +private: + Unit* _caster; + uint32 _spellId; + uint64 _otherTransport; +}; + +class BattleExperienceEvent : public BasicEvent +{ +public: + static uint32 const ExperiencedSpells[5]; + static uint32 const ExperiencedTimes[5]; + + BattleExperienceEvent(Creature* creature) : _creature(creature), _level(0) { } + + bool Execute(uint64 timer, uint32 /*diff*/) override + { + if (!_creature->IsAlive()) + return true; + + _creature->RemoveAurasDueToSpell(ExperiencedSpells[_level]); + ++_level; + + _creature->CastSpell(_creature, ExperiencedSpells[_level], TRIGGERED_FULL_MASK); + if (_level < (_creature->GetMap()->IsHeroic() ? 4 : 3)) + { + _creature->m_Events.AddEvent(this, timer + ExperiencedTimes[_level]); + return false; + } + + return true; + } + +private: + Creature* _creature; + int32 _level; +}; + +uint32 const BattleExperienceEvent::ExperiencedSpells[5] = { 0, SPELL_EXPERIENCED, SPELL_VETERAN, SPELL_ELITE, SPELL_ADDS_BERSERK }; +uint32 const BattleExperienceEvent::ExperiencedTimes[5] = { 100000, 70000, 60000, 90000, 0 }; + +struct gunship_npc_AI : public ScriptedAI +{ + gunship_npc_AI(Creature* creature) : ScriptedAI(creature), + Instance(creature->GetInstanceScript()), Slot(NULL), Index(uint32(-1)) + { + BurningPitchId = Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_A : SPELL_BURNING_PITCH_H; + me->setRegeneratingHealth(false); + } + + void SetData(uint32 type, uint32 data) override + { + if (type == ACTION_SET_SLOT && data < MAX_SLOTS) + { + SetSlotInfo(data); + + me->SetReactState(REACT_PASSIVE); + + float x, y, z, o; + Slot->TargetPosition.GetPosition(x, y, z, o); + + me->SetTransportHomePosition(Slot->TargetPosition); + float hx = x, hy = y, hz = z, ho = o; + me->GetTransport()->CalculatePassengerPosition(hx, hy, hz, &ho); + me->SetHomePosition(hx, hy, hz, ho); + + me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, Slot->TargetPosition, false); + + Movement::MoveSplineInit init(me); + init.DisableTransportPathTransformations(); + init.MoveTo(x, y, z, false); + init.Launch(); + } + } + + void EnterEvadeMode() override + { + if (!me->IsAlive() || !me->IsInCombat()) + return; + + me->DeleteThreatList(); + me->CombatStop(true); + me->GetMotionMaster()->MoveTargetedHome(); + } + + void JustDied(Unit* /*killer*/) override + { + if (Slot) + if (Creature* captain = me->FindNearestCreature(Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_IGB_MURADIN_BRONZEBEARD : NPC_IGB_HIGH_OVERLORD_SAURFANG, 200.0f)) + captain->AI()->SetData(ACTION_CLEAR_SLOT, Index); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (pointId == EVENT_CHARGE_PREPATH && Slot) + { + me->SetFacingTo(Slot->TargetPosition.GetOrientation()); + me->m_Events.AddEvent(new BattleExperienceEvent(me), me->m_Events.CalculateTime(BattleExperienceEvent::ExperiencedTimes[0])); + DoCast(me, SPELL_BATTLE_EXPERIENCE, true); + me->SetReactState(REACT_AGGRESSIVE); + } + } + + bool CanAIAttack(Unit const* target) const override + { + if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + return false; + return target->HasAura(Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); + } + +protected: + void SetSlotInfo(uint32 index) + { + Index = index; + Slot = &((Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SkybreakerSlotInfo : OrgrimsHammerSlotInfo)[Index]); + } + + bool SelectVictim() + { + if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + { + EnterEvadeMode(); + return false; + } + + if (!me->HasReactState(REACT_PASSIVE)) + { + if (Unit* victim = me->SelectVictim()) + AttackStart(victim); + return me->GetVictim(); + } + else if (me->getThreatManager().isThreatListEmpty()) + { + EnterEvadeMode(); + return false; + } + + return true; + } + + void TriggerBurningPitch() + { + if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == IN_PROGRESS && + !me->HasUnitState(UNIT_STATE_CASTING) && !me->HasReactState(REACT_PASSIVE) && + !me->HasSpellCooldown(BurningPitchId)) + { + DoCastAOE(BurningPitchId, true); + me->_AddCreatureSpellCooldown(BurningPitchId, time(NULL) + urand(3000, 4000) / IN_MILLISECONDS); + } + } + + InstanceScript* Instance; + SlotInfo const* Slot; + uint32 Index; + uint32 BurningPitchId; +}; + +class npc_gunship : public CreatureScript +{ + public: + npc_gunship() : CreatureScript("npc_gunship") { } + + struct npc_gunshipAI : public NullCreatureAI + { + npc_gunshipAI(Creature* creature) : NullCreatureAI(creature), + _teamInInstance(creature->GetInstanceScript()->GetData(DATA_TEAM_IN_INSTANCE)), + _summonedFirstMage(false), _died(false) + { + me->setRegeneratingHealth(false); + } + + void DamageTaken(Unit* /*source*/, uint32& damage) override + { + if (damage >= me->GetHealth()) + { + JustDied(NULL); + damage = me->GetHealth() - 1; + return; + } + + if (_summonedFirstMage) + return; + + if (me->GetTransport()->GetEntry() != uint32(_teamInInstance == HORDE ? GO_THE_SKYBREAKER_H : GO_ORGRIMS_HAMMER_A)) + return; + + if (!me->HealthBelowPctDamaged(90, damage)) + return; + + _summonedFirstMage = true; + if (Creature* captain = me->FindNearestCreature(_teamInInstance == HORDE ? NPC_IGB_MURADIN_BRONZEBEARD : NPC_IGB_HIGH_OVERLORD_SAURFANG, 100.0f)) + captain->AI()->DoAction(ACTION_SPAWN_MAGE); + } + + void JustDied(Unit* /*killer*/) override + { + if (_died) + return; + + _died = true; + + bool isVictory = me->GetTransport()->GetEntry() == GO_THE_SKYBREAKER_H || me->GetTransport()->GetEntry() == GO_ORGRIMS_HAMMER_A; + InstanceScript* instance = me->GetInstanceScript(); + instance->SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, isVictory ? DONE : FAIL); + if (Creature* creature = me->FindNearestCreature(me->GetEntry() == NPC_ORGRIMS_HAMMER ? NPC_THE_SKYBREAKER : NPC_ORGRIMS_HAMMER, 200.0f)) + { + instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, creature); + creature->RemoveAurasDueToSpell(SPELL_CHECK_FOR_PLAYERS); + } + + instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); + me->RemoveAurasDueToSpell(SPELL_CHECK_FOR_PLAYERS); + + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, 0); + std::list<Creature*> creatures; + GetCreatureListWithEntryInGrid(creatures, me, NPC_MARTYR_STALKER_IGB_SAURFANG, SIZE_OF_GRIDS); + for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr) + { + Creature* stalker = *itr; + stalker->RemoveAllAuras(); + stalker->DeleteThreatList(); + stalker->CombatStop(true); + } + + uint32 explosionSpell = isVictory ? SPELL_EXPLOSION_VICTORY : SPELL_EXPLOSION_WIPE; + creatures.clear(); + GetCreatureListWithEntryInGrid(creatures, me, NPC_GUNSHIP_HULL, 200.0f); + for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr) + { + Creature* hull = *itr; + if (hull->GetTransport() != me->GetTransport()) + continue; + + hull->CastSpell(hull, explosionSpell, TRIGGERED_FULL_MASK); + } + + creatures.clear(); + GetCreatureListWithEntryInGrid(creatures, me, _teamInInstance == HORDE ? NPC_HORDE_GUNSHIP_CANNON : NPC_ALLIANCE_GUNSHIP_CANNON, 200.0f); + for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr) + { + Creature* cannon = *itr; + if (isVictory) + { + cannon->CastSpell(cannon, SPELL_EJECT_ALL_PASSENGERS_BELOW_ZERO, TRIGGERED_FULL_MASK); + + WorldPacket data(SMSG_PLAYER_VEHICLE_DATA, cannon->GetPackGUID().size() + 4); + data.append(cannon->GetPackGUID()); + data << uint32(0); + cannon->SendMessageToSet(&data, true); + + cannon->RemoveVehicleKit(); + } + else + cannon->CastSpell(cannon, SPELL_EJECT_ALL_PASSENGERS_WIPE, TRIGGERED_FULL_MASK); + } + + uint32 creatureEntry = NPC_IGB_MURADIN_BRONZEBEARD; + uint8 textId = isVictory ? SAY_MURADIN_VICTORY : SAY_MURADIN_WIPE; + if (_teamInInstance == HORDE) + { + creatureEntry = NPC_IGB_HIGH_OVERLORD_SAURFANG; + textId = isVictory ? SAY_SAURFANG_VICTORY : SAY_SAURFANG_WIPE; + } + + if (Creature* creature = me->FindNearestCreature(creatureEntry, 100.0f)) + creature->AI()->Talk(textId); + + if (isVictory) + { + if (GameObject* go = HashMapHolder<GameObject>::Find(instance->GetData64(DATA_ICECROWN_GUNSHIP_BATTLE))) + if (Transport* otherTransport = go->ToTransport()) + otherTransport->EnableMovement(true); + + me->GetTransport()->EnableMovement(true); + + if (Creature* ship = me->FindNearestCreature(_teamInInstance == HORDE ? NPC_ORGRIMS_HAMMER : NPC_THE_SKYBREAKER, 200.0f)) + { + ship->CastSpell(ship, SPELL_TELEPORT_PLAYERS_ON_VICTORY, TRIGGERED_FULL_MASK); + ship->CastSpell(ship, SPELL_ACHIEVEMENT, TRIGGERED_FULL_MASK); + ship->CastSpell(ship, SPELL_AWARD_REPUTATION_BOSS_KILL, TRIGGERED_FULL_MASK); + } + + creatures.clear(); + GetCreatureListWithEntryInGrid(creatures, me, NPC_SKYBREAKER_MARINE, 200.0f); + GetCreatureListWithEntryInGrid(creatures, me, NPC_SKYBREAKER_SERGEANT, 200.0f); + GetCreatureListWithEntryInGrid(creatures, me, NPC_KOR_KRON_REAVER, 200.0f); + GetCreatureListWithEntryInGrid(creatures, me, NPC_KOR_KRON_SERGEANT, 200.0f); + for (std::list<Creature*>::iterator itr = creatures.begin(); itr != creatures.end(); ++itr) + (*itr)->DespawnOrUnsummon(1); + } + else + { + uint32 teleportSpellId = _teamInInstance == HORDE ? SPELL_TELEPORT_PLAYERS_ON_RESET_H : SPELL_TELEPORT_PLAYERS_ON_RESET_A; + me->m_Events.AddEvent(new ResetEncounterEvent(me, teleportSpellId, me->GetInstanceScript()->GetData64(DATA_ENEMY_GUNSHIP)), + me->m_Events.CalculateTime(8000)); + } + } + + void SetGUID(uint64 guid, int32 id/* = 0*/) override + { + if (id != ACTION_SHIP_VISITS) + return; + + std::map<uint64, uint32>::iterator itr = _shipVisits.find(guid); + if (itr == _shipVisits.end()) + _shipVisits[guid] = 1; + else + ++itr->second; + } + + uint32 GetData(uint32 id) const override + { + if (id != ACTION_SHIP_VISITS) + return 0; + + uint32 max = 0; + for (std::map<uint64, uint32>::const_iterator itr = _shipVisits.begin(); itr != _shipVisits.end(); ++itr) + max = std::max(max, itr->second); + + return max; + } + + private: + uint32 _teamInInstance; + std::map<uint64, uint32> _shipVisits; + bool _summonedFirstMage; + bool _died; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + if (!creature->GetTransport()) + return NULL; + + return GetIcecrownCitadelAI<npc_gunshipAI>(creature); + } +}; + +class npc_high_overlord_saurfang_igb : public CreatureScript +{ + public: + npc_high_overlord_saurfang_igb() : CreatureScript("npc_high_overlord_saurfang_igb") { } + + struct npc_high_overlord_saurfang_igbAI : public ScriptedAI + { + npc_high_overlord_saurfang_igbAI(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()) + { + _controller.ResetSlots(HORDE); + _controller.SetTransport(creature->GetTransport()); + me->setRegeneratingHealth(false); + me->m_CombatDistance = 70.0f; + _firstMageCooldown = time(NULL) + 60; + _axethrowersYellCooldown = time_t(0); + _rocketeersYellCooldown = time_t(0); + } + + void InitializeAI() override + { + ScriptedAI::InitializeAI(); + + _events.Reset(); + _firstMageCooldown = time(NULL) + 60; + _axethrowersYellCooldown = time_t(0); + _rocketeersYellCooldown = time_t(0); + } + + void EnterCombat(Unit* /*target*/) override + { + _events.SetPhase(PHASE_COMBAT); + DoCast(me, _instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_FRIENDLY_BOSS_DAMAGE_MOD : SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER, true); + DoCast(me, SPELL_BATTLE_FURY, true); + _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); + } + + void EnterEvadeMode() override + { + if (!me->IsAlive()) + return; + + me->DeleteThreatList(); + me->CombatStop(true); + me->GetMotionMaster()->MoveTargetedHome(); + + Reset(); + } + + void DoAction(int32 action) override + { + if (action == ACTION_ENEMY_GUNSHIP_TALK) + { + if (Creature* muradin = me->FindNearestCreature(NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + muradin->AI()->DoAction(ACTION_SPAWN_ALL_ADDS); + + Talk(SAY_SAURFANG_INTRO_5); + _events.ScheduleEvent(EVENT_INTRO_H_5, 4000); + _events.ScheduleEvent(EVENT_INTRO_H_6, 11000); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1); + + _instance->SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, IN_PROGRESS); + // Combat starts now + if (Creature* skybreaker = me->FindNearestCreature(NPC_THE_SKYBREAKER, 100.0f)) + _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, skybreaker, 1); + + if (Creature* orgrimsHammer = me->FindNearestCreature(NPC_ORGRIMS_HAMMER, 100.0f)) + { + _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, orgrimsHammer, 2); + orgrimsHammer->CastSpell(orgrimsHammer, SPELL_CHECK_FOR_PLAYERS, TRIGGERED_FULL_MASK); + } + + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_ENCOUNTER); + } + else if (action == ACTION_SPAWN_MAGE) + { + time_t now = time(NULL); + if (_firstMageCooldown > now) + _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); + else + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1); + } + else if (action == ACTION_SPAWN_ALL_ADDS) + { + _events.ScheduleEvent(EVENT_ADDS, 12000); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13000); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13000); + if (Is25ManRaid()) + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MORTAR_4); + else + { + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MAGE_2); + _controller.SummonCreatures(SLOT_MORTAR_1, SLOT_MORTAR_2); + _controller.SummonCreatures(SLOT_RIFLEMAN_1, SLOT_RIFLEMAN_4); + } + } + else if (action == ACTION_EXIT_SHIP) + { + Position pos; + pos.Relocate(SaurfangExitPath[SaurfangExitPathSize - 1].x, SaurfangExitPath[SaurfangExitPathSize - 1].y, SaurfangExitPath[SaurfangExitPathSize - 1].z); + me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, pos, false); + + Movement::PointsArray path(SaurfangExitPath, SaurfangExitPath + SaurfangExitPathSize); + + Movement::MoveSplineInit init(me); + init.DisableTransportPathTransformations(); + init.MovebyPath(path, 0); + init.Launch(); + + me->DespawnOrUnsummon(18000); + } + } + + void SetData(uint32 type, uint32 data) override + { + if (type == ACTION_CLEAR_SLOT) + { + _controller.ClearSlot(PassengerSlots(data)); + if (data == SLOT_FREEZE_MAGE) + _events.ScheduleEvent(EVENT_SUMMON_MAGE, urand(30000, 33500)); + } + } + + void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override + { + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->GetTransport()->EnableMovement(true); + _events.SetPhase(PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_H_1, 5000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_H_2, 16000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_SUMMON_SKYBREAKER, 24600, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_H_3, 29600, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_H_4, 39200, 0, PHASE_INTRO); + } + + void DamageTaken(Unit* , uint32& damage) override + { + if (me->HealthBelowPctDamaged(65, damage) && !me->HasAura(SPELL_TASTE_OF_BLOOD)) + DoCast(me, SPELL_TASTE_OF_BLOOD, true); + + if (damage >= me->GetHealth()) + damage = me->GetHealth() - 1; + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim() && !_events.IsInPhase(PHASE_INTRO) && _instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INTRO_H_1: + Talk(SAY_SAURFANG_INTRO_1); + break; + case EVENT_INTRO_H_2: + Talk(SAY_SAURFANG_INTRO_2); + break; + case EVENT_INTRO_SUMMON_SKYBREAKER: + sTransportMgr->CreateTransport(GO_THE_SKYBREAKER_H, 0, me->GetMap()); + break; + case EVENT_INTRO_H_3: + Talk(SAY_SAURFANG_INTRO_3); + break; + case EVENT_INTRO_H_4: + Talk(SAY_SAURFANG_INTRO_4); + break; + case EVENT_INTRO_H_5: + if (Creature* muradin = me->FindNearestCreature(NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + muradin->AI()->Talk(SAY_MURADIN_INTRO_H); + break; + case EVENT_INTRO_H_6: + Talk(SAY_SAURFANG_INTRO_6); + break; + case EVENT_KEEP_PLAYER_IN_COMBAT: + if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == IN_PROGRESS) + { + _instance->DoCastSpellOnPlayers(SPELL_LOCK_PLAYERS_AND_TAP_CHEST); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, urand(5000, 8000)); + } + break; + case EVENT_SUMMON_MAGE: + Talk(SAY_SAURFANG_MAGES); + _controller.SummonCreatures(SLOT_FREEZE_MAGE, SLOT_FREEZE_MAGE); + break; + case EVENT_ADDS: + Talk(SAY_SAURFANG_ENTER_SKYBREAKER); + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MAGE_2); + _controller.SummonCreatures(SLOT_MARINE_1, Is25ManRaid() ? SLOT_MARINE_4 : SLOT_MARINE_2); + _controller.SummonCreatures(SLOT_SERGEANT_1, Is25ManRaid() ? SLOT_SERGEANT_2 : SLOT_SERGEANT_1); + if (Transport* orgrimsHammer = me->GetTransport()) + orgrimsHammer->SummonPassenger(NPC_TELEPORT_PORTAL, OrgrimsHammerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000); + + if (GameObject* go = HashMapHolder<GameObject>::Find(_instance->GetData64(DATA_ICECROWN_GUNSHIP_BATTLE))) + if (Transport* skybreaker = go->ToTransport()) + skybreaker->SummonPassenger(NPC_TELEPORT_EXIT, SkybreakerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); + + _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); + _events.ScheduleEvent(EVENT_ADDS, 60000); + break; + case EVENT_ADDS_BOARD_YELL: + if (Creature* muradin = me->FindNearestCreature(NPC_IGB_MURADIN_BRONZEBEARD, 200.0f)) + muradin->AI()->Talk(SAY_MURADIN_BOARD); + break; + case EVENT_CHECK_RIFLEMAN: + if (_controller.SummonCreatures(SLOT_RIFLEMAN_1, Is25ManRaid() ? SLOT_RIFLEMAN_8 : SLOT_RIFLEMAN_4)) + { + if (_axethrowersYellCooldown < time(NULL)) + { + Talk(SAY_SAURFANG_AXETHROWERS); + _axethrowersYellCooldown = time(NULL) + 5; + } + } + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1000); + break; + case EVENT_CHECK_MORTAR: + if (_controller.SummonCreatures(SLOT_MORTAR_1, Is25ManRaid() ? SLOT_MORTAR_4 : SLOT_MORTAR_2)) + { + if (_rocketeersYellCooldown < time(NULL)) + { + Talk(SAY_SAURFANG_ROCKETEERS); + _rocketeersYellCooldown = time(NULL) + 5; + } + } + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1000); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); + break; + default: + break; + } + } + + if (me->IsWithinMeleeRange(me->GetVictim())) + DoMeleeAttackIfReady(); + else if (me->isAttackReady()) + { + DoCastVictim(SPELL_RENDING_THROW); + me->resetAttackTimer(); + } + } + + bool CanAIAttack(Unit const* target) const override + { + if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + return false; + return target->HasAura(SPELL_ON_ORGRIMS_HAMMER_DECK) || target->GetEntry() == NPC_SKYBREAKER_MARINE || target->GetEntry() == NPC_SKYBREAKER_SERGEANT; + } + + private: + EventMap _events; + PassengerController _controller; + InstanceScript* _instance; + time_t _firstMageCooldown; + time_t _axethrowersYellCooldown; + time_t _rocketeersYellCooldown; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_high_overlord_saurfang_igbAI>(creature); + } +}; + +class npc_muradin_bronzebeard_igb : public CreatureScript +{ + public: + npc_muradin_bronzebeard_igb() : CreatureScript("npc_muradin_bronzebeard_igb") { } + + struct npc_muradin_bronzebeard_igbAI : public ScriptedAI + { + npc_muradin_bronzebeard_igbAI(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()) + { + _controller.ResetSlots(ALLIANCE); + _controller.SetTransport(creature->GetTransport()); + me->setRegeneratingHealth(false); + me->m_CombatDistance = 70.0f; + _firstMageCooldown = time(NULL) + 60; + _riflemanYellCooldown = time_t(0); + _mortarYellCooldown = time_t(0); + } + + void InitializeAI() override + { + ScriptedAI::InitializeAI(); + + _events.Reset(); + _firstMageCooldown = time(NULL) + 60; + _riflemanYellCooldown = time_t(0); + _mortarYellCooldown = time_t(0); + } + + void EnterCombat(Unit* /*target*/) override + { + _events.SetPhase(PHASE_COMBAT); + DoCast(me, _instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE ? SPELL_FRIENDLY_BOSS_DAMAGE_MOD : SPELL_MELEE_TARGETING_ON_SKYBREAKER, true); + DoCast(me, SPELL_BATTLE_FURY, true); + _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); + } + + void EnterEvadeMode() override + { + if (!me->IsAlive()) + return; + + me->DeleteThreatList(); + me->CombatStop(true); + me->GetMotionMaster()->MoveTargetedHome(); + + Reset(); + } + + void DoAction(int32 action) override + { + if (action == ACTION_ENEMY_GUNSHIP_TALK) + { + if (Creature* muradin = me->FindNearestCreature(NPC_IGB_HIGH_OVERLORD_SAURFANG, 100.0f)) + muradin->AI()->DoAction(ACTION_SPAWN_ALL_ADDS); + + Talk(SAY_MURADIN_INTRO_6); + _events.ScheduleEvent(EVENT_INTRO_A_6, 5000); + _events.ScheduleEvent(EVENT_INTRO_A_7, 11000); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1); + + _instance->SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, IN_PROGRESS); + // Combat starts now + if (Creature* orgrimsHammer = me->FindNearestCreature(NPC_ORGRIMS_HAMMER, 100.0f)) + _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, orgrimsHammer, 1); + + if (Creature* skybreaker = me->FindNearestCreature(NPC_THE_SKYBREAKER, 100.0f)) + { + _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, skybreaker, 2); + skybreaker->CastSpell(skybreaker, SPELL_CHECK_FOR_PLAYERS, TRIGGERED_FULL_MASK); + } + + me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_ENCOUNTER); + } + else if (action == ACTION_SPAWN_MAGE) + { + time_t now = time(NULL); + if (_firstMageCooldown > now) + _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); + else + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1); + } + else if (action == ACTION_SPAWN_ALL_ADDS) + { + _events.ScheduleEvent(EVENT_ADDS, 12000); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13000); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13000); + if (Is25ManRaid()) + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MORTAR_4); + else + { + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MAGE_2); + _controller.SummonCreatures(SLOT_MORTAR_1, SLOT_MORTAR_2); + _controller.SummonCreatures(SLOT_RIFLEMAN_1, SLOT_RIFLEMAN_4); + } + } + else if (action == ACTION_EXIT_SHIP) + { + Position pos; + pos.Relocate(MuradinExitPath[MuradinExitPathSize - 1].x, MuradinExitPath[MuradinExitPathSize - 1].y, MuradinExitPath[MuradinExitPathSize - 1].z); + me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, pos, false); + + Movement::PointsArray path(MuradinExitPath, MuradinExitPath + MuradinExitPathSize); + + Movement::MoveSplineInit init(me); + init.DisableTransportPathTransformations(); + init.MovebyPath(path, 0); + init.Launch(); + + me->DespawnOrUnsummon(18000); + } + } + + void SetData(uint32 type, uint32 data) override + { + if (type == ACTION_CLEAR_SLOT) + { + _controller.ClearSlot(PassengerSlots(data)); + if (data == SLOT_FREEZE_MAGE) + _events.ScheduleEvent(EVENT_SUMMON_MAGE, urand(30000, 33500)); + } + } + + void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override + { + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->GetTransport()->EnableMovement(true); + _events.SetPhase(PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_A_1, 5000); + _events.ScheduleEvent(EVENT_INTRO_A_2, 10000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_SUMMON_ORGRIMS_HAMMER, 28000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_A_3, 33000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_A_4, 39000, 0, PHASE_INTRO); + _events.ScheduleEvent(EVENT_INTRO_A_5, 45000, 0, PHASE_INTRO); + } + + void DamageTaken(Unit* , uint32& damage) override + { + if (me->HealthBelowPctDamaged(65, damage) && me->HasAura(SPELL_TASTE_OF_BLOOD)) + DoCast(me, SPELL_TASTE_OF_BLOOD, true); + + if (damage >= me->GetHealth()) + damage = me->GetHealth() - 1; + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim() && !_events.IsInPhase(PHASE_INTRO) && _instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_INTRO_A_1: + Talk(SAY_MURADIN_INTRO_1); + break; + case EVENT_INTRO_A_2: + Talk(SAY_MURADIN_INTRO_2); + break; + case EVENT_INTRO_SUMMON_ORGRIMS_HAMMER: + sTransportMgr->CreateTransport(GO_ORGRIMS_HAMMER_A, 0, me->GetMap()); + break; + case EVENT_INTRO_A_3: + Talk(SAY_MURADIN_INTRO_3); + break; + case EVENT_INTRO_A_4: + Talk(SAY_MURADIN_INTRO_4); + break; + case EVENT_INTRO_A_5: + Talk(SAY_MURADIN_INTRO_5); + break; + case EVENT_INTRO_A_6: + if (Creature* saurfang = me->FindNearestCreature(NPC_IGB_HIGH_OVERLORD_SAURFANG, 100.0f)) + saurfang->AI()->Talk(SAY_SAURFANG_INTRO_A); + break; + case EVENT_INTRO_A_7: + Talk(SAY_MURADIN_INTRO_7); + break; + case EVENT_KEEP_PLAYER_IN_COMBAT: + if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == IN_PROGRESS) + { + _instance->DoCastSpellOnPlayers(SPELL_LOCK_PLAYERS_AND_TAP_CHEST); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, urand(5000, 8000)); + } + break; + case EVENT_SUMMON_MAGE: + Talk(SAY_MURADIN_SORCERERS); + _controller.SummonCreatures(SLOT_FREEZE_MAGE, SLOT_FREEZE_MAGE); + break; + case EVENT_ADDS: + Talk(SAY_MURADIN_ENTER_ORGRIMMS_HAMMER); + _controller.SummonCreatures(SLOT_MAGE_1, SLOT_MAGE_2); + _controller.SummonCreatures(SLOT_MARINE_1, Is25ManRaid() ? SLOT_MARINE_4 : SLOT_MARINE_2); + _controller.SummonCreatures(SLOT_SERGEANT_1, Is25ManRaid() ? SLOT_SERGEANT_2 : SLOT_SERGEANT_1); + if (Transport* skybreaker = me->GetTransport()) + skybreaker->SummonPassenger(NPC_TELEPORT_PORTAL, SkybreakerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000); + + if (GameObject* go = HashMapHolder<GameObject>::Find(_instance->GetData64(DATA_ICECROWN_GUNSHIP_BATTLE))) + if (Transport* orgrimsHammer = go->ToTransport()) + orgrimsHammer->SummonPassenger(NPC_TELEPORT_EXIT, OrgrimsHammerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); + + _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); + _events.ScheduleEvent(EVENT_ADDS, 60000); + break; + case EVENT_ADDS_BOARD_YELL: + if (Creature* saurfang = me->FindNearestCreature(NPC_IGB_HIGH_OVERLORD_SAURFANG, 200.0f)) + saurfang->AI()->Talk(SAY_SAURFANG_BOARD); + break; + case EVENT_CHECK_RIFLEMAN: + if (_controller.SummonCreatures(SLOT_RIFLEMAN_1, Is25ManRaid() ? SLOT_RIFLEMAN_8 : SLOT_RIFLEMAN_4)) + { + if (_riflemanYellCooldown < time(NULL)) + { + Talk(SAY_MURADIN_RIFLEMAN); + _riflemanYellCooldown = time(NULL) + 5; + } + } + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1000); + break; + case EVENT_CHECK_MORTAR: + if (_controller.SummonCreatures(SLOT_MORTAR_1, Is25ManRaid() ? SLOT_MORTAR_4 : SLOT_MORTAR_2)) + { + if (_mortarYellCooldown < time(NULL)) + { + Talk(SAY_MURADIN_MORTAR); + _mortarYellCooldown = time(NULL) + 5; + } + } + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1000); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); + break; + default: + break; + } + } + + if (me->IsWithinMeleeRange(me->GetVictim())) + DoMeleeAttackIfReady(); + else if (me->isAttackReady()) + { + DoCastVictim(SPELL_RENDING_THROW); + me->resetAttackTimer(); + } + } + + bool CanAIAttack(Unit const* target) const override + { + if (_instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) + return false; + return target->HasAura(SPELL_ON_SKYBREAKER_DECK) || target->GetEntry() == NPC_KOR_KRON_REAVER || target->GetEntry() == NPC_KOR_KRON_SERGEANT; + } + + private: + EventMap _events; + PassengerController _controller; + InstanceScript* _instance; + time_t _firstMageCooldown; + time_t _riflemanYellCooldown; + time_t _mortarYellCooldown; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_muradin_bronzebeard_igbAI>(creature); + } +}; + +class npc_zafod_boombox : public CreatureScript +{ + public: + npc_zafod_boombox() : CreatureScript("npc_zafod_boombox") { } + + struct npc_zafod_boomboxAI : public gunship_npc_AI + { + npc_zafod_boomboxAI(Creature* creature) : gunship_npc_AI(creature) + { + } + + void Reset() override + { + me->SetReactState(REACT_PASSIVE); + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + { + player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1); + player->PlayerTalkClass->SendCloseGossip(); + } + + void UpdateAI(uint32 /*diff*/) override + { + UpdateVictim(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_zafod_boomboxAI>(creature); + } +}; + +struct npc_gunship_boarding_addAI : public gunship_npc_AI +{ + npc_gunship_boarding_addAI(Creature* creature) : gunship_npc_AI(creature) + { + me->m_CombatDistance = 80.0f; + _usedDesperateResolve = false; + } + + void SetData(uint32 type, uint32 data) override + { + // detach from captain + if (type == ACTION_SET_SLOT) + { + SetSlotInfo(data); + + me->SetReactState(REACT_PASSIVE); + + me->m_Events.AddEvent(new DelayedMovementEvent(me, Slot->TargetPosition), me->m_Events.CalculateTime(3000 * (Index - SLOT_MARINE_1))); + + if (Creature* captain = me->FindNearestCreature(Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? NPC_IGB_MURADIN_BRONZEBEARD : NPC_IGB_HIGH_OVERLORD_SAURFANG, 200.0f)) + captain->AI()->SetData(ACTION_CLEAR_SLOT, Index); + } + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (pointId == EVENT_CHARGE_PREPATH && Slot) + { + Position const& otherTransportPos = Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? OrgrimsHammerTeleportExit : SkybreakerTeleportExit; + float x, y, z, o; + otherTransportPos.GetPosition(x, y, z, o); + + Transport* myTransport = me->GetTransport(); + if (!myTransport) + return; + + if (GameObject* go = HashMapHolder<GameObject>::Find(Instance->GetData64(DATA_ICECROWN_GUNSHIP_BATTLE))) + if (Transport* destTransport = go->ToTransport()) + destTransport->CalculatePassengerPosition(x, y, z, &o); + + float angle = frand(0, M_PI * 2.0f); + x += 2.0f * std::cos(angle); + y += 2.0f * std::sin(angle); + + me->SetHomePosition(x, y, z, o); + myTransport->CalculatePassengerOffset(x, y, z, &o); + me->SetTransportHomePosition(x, y, z, o); + + me->m_Events.AddEvent(new BattleExperienceEvent(me), me->m_Events.CalculateTime(BattleExperienceEvent::ExperiencedTimes[0])); + DoCast(me, SPELL_BATTLE_EXPERIENCE, true); + DoCast(me, SPELL_TELEPORT_TO_ENEMY_SHIP, true); + DoCast(me, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER : SPELL_MELEE_TARGETING_ON_SKYBREAKER, true); + me->_AddCreatureSpellCooldown(BurningPitchId, time(NULL) + 3); + + std::list<Player*> players; + Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); + Trinity::PlayerListSearcher<Trinity::UnitAuraCheck> searcher(me, players, check); + me->VisitNearbyWorldObject(200.0f, searcher); + + players.remove_if([this](Player* player) + { + return !me->_IsTargetAcceptable(player) || !me->CanStartAttack(player, true); + }); + + if (!players.empty()) + { + players.sort(Trinity::ObjectDistanceOrderPred(me)); + for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr) + me->AddThreat(*itr, 1.0f); + + AttackStart(players.front()); + } + + me->SetReactState(REACT_AGGRESSIVE); + } + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (_usedDesperateResolve) + return; + + if (!me->HealthBelowPctDamaged(25, damage)) + return; + + _usedDesperateResolve = true; + DoCast(me, SPELL_DESPERATE_RESOLVE, true); + } + + void UpdateAI(uint32 /*diff*/) override + { + if (!SelectVictim()) + { + TriggerBurningPitch(); + return; + } + + if (!HasAttackablePlayerNearby()) + TriggerBurningPitch(); + + DoMeleeAttackIfReady(); + } + + bool CanAIAttack(Unit const* target) const override + { + uint32 spellId = SPELL_ON_SKYBREAKER_DECK; + uint32 creatureEntry = NPC_IGB_MURADIN_BRONZEBEARD; + if (Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + { + spellId = SPELL_ON_ORGRIMS_HAMMER_DECK; + creatureEntry = NPC_IGB_HIGH_OVERLORD_SAURFANG; + } + + return target->HasAura(spellId) || target->GetEntry() == creatureEntry; + } + + bool HasAttackablePlayerNearby() + { + std::list<Player*> players; + Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); + Trinity::PlayerListSearcher<Trinity::UnitAuraCheck> searcher(me, players, check); + me->VisitNearbyWorldObject(200.0f, searcher); + + players.remove_if([this](Player* player) + { + return !me->_IsTargetAcceptable(player) || !me->CanStartAttack(player, true); + }); + + return !players.empty(); + } + +private: + bool _usedDesperateResolve; +}; + +class npc_gunship_boarding_leader : public CreatureScript +{ + public: + npc_gunship_boarding_leader() : CreatureScript("npc_gunship_boarding_leader") { } + + struct npc_gunship_boarding_leaderAI : public npc_gunship_boarding_addAI + { + npc_gunship_boarding_leaderAI(Creature* creature) : npc_gunship_boarding_addAI(creature) + { + } + + void EnterCombat(Unit* target) override + { + npc_gunship_boarding_addAI::EnterCombat(target); + _events.ScheduleEvent(EVENT_BLADESTORM, urand(13000, 18000)); + _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(8000, 10000)); + } + + void UpdateAI(uint32 diff) override + { + if (!SelectVictim()) + { + TriggerBurningPitch(); + return; + } + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING) || me->HasAura(SPELL_BLADESTORM)) + return; + + if (!HasAttackablePlayerNearby()) + TriggerBurningPitch(); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_BLADESTORM: + DoCastAOE(SPELL_BLADESTORM); + _events.ScheduleEvent(EVENT_BLADESTORM, urand(25000, 30000)); + break; + case EVENT_WOUNDING_STRIKE: + DoCastVictim(SPELL_WOUNDING_STRIKE); + _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(9000, 13000)); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_gunship_boarding_leaderAI>(creature); + } +}; + +class npc_gunship_boarding_add : public CreatureScript +{ + public: + npc_gunship_boarding_add() : CreatureScript("npc_gunship_boarding_add") { } + + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_gunship_boarding_addAI>(creature); + } +}; + +class npc_gunship_gunner : public CreatureScript +{ + public: + npc_gunship_gunner() : CreatureScript("npc_gunship_gunner") { } + + struct npc_gunship_gunnerAI : public gunship_npc_AI + { + npc_gunship_gunnerAI(Creature* creature) : gunship_npc_AI(creature) + { + creature->m_CombatDistance = 200.0f; + } + + void AttackStart(Unit* target) override + { + me->Attack(target, false); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + gunship_npc_AI::MovementInform(type, pointId); + if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH) + me->SetControlled(true, UNIT_STATE_ROOT); + } + + void UpdateAI(uint32 /*diff*/) override + { + if (!SelectVictim()) + { + TriggerBurningPitch(); + return; + } + + DoSpellAttackIfReady(me->GetEntry() == NPC_SKYBREAKER_RIFLEMAN ? SPELL_SHOOT : SPELL_HURL_AXE); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_gunship_gunnerAI>(creature); + } +}; + +class npc_gunship_rocketeer : public CreatureScript +{ + public: + npc_gunship_rocketeer() : CreatureScript("npc_gunship_rocketeer") { } + + struct npc_gunship_rocketeerAI : public gunship_npc_AI + { + npc_gunship_rocketeerAI(Creature* creature) : gunship_npc_AI(creature) + { + creature->m_CombatDistance = 200.0f; + } + + void MovementInform(uint32 type, uint32 pointId) override + { + gunship_npc_AI::MovementInform(type, pointId); + if (type == POINT_MOTION_TYPE && pointId == EVENT_CHARGE_PREPATH) + me->SetControlled(true, UNIT_STATE_ROOT); + } + + void UpdateAI(uint32 /*diff*/) override + { + if (!SelectVictim()) + return; + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + uint32 spellId = me->GetEntry() == NPC_SKYBREAKER_MORTAR_SOLDIER ? SPELL_ROCKET_ARTILLERY_A : SPELL_ROCKET_ARTILLERY_H; + if (me->HasSpellCooldown(spellId)) + return; + + DoCastAOE(spellId, true); + me->_AddCreatureSpellCooldown(spellId, time(NULL) + 9); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_gunship_rocketeerAI>(creature); + } +}; + +class npc_gunship_mage : public CreatureScript +{ + public: + npc_gunship_mage() : CreatureScript("npc_gunship_mage") { } + + struct npc_gunship_mageAI : public gunship_npc_AI + { + npc_gunship_mageAI(Creature* creature) : gunship_npc_AI(creature) + { + me->SetReactState(REACT_PASSIVE); + } + + void EnterEvadeMode() override + { + ScriptedAI::EnterEvadeMode(); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (pointId == EVENT_CHARGE_PREPATH && Slot) + { + SlotInfo const* slots = Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SkybreakerSlotInfo : OrgrimsHammerSlotInfo; + me->SetFacingTo(slots[Index].TargetPosition.GetOrientation()); + switch (Index) + { + case SLOT_FREEZE_MAGE: + DoCastAOE(SPELL_BELOW_ZERO); + break; + case SLOT_MAGE_1: + case SLOT_MAGE_2: + DoCastAOE(SPELL_SHADOW_CHANNELING); + break; + default: + break; + } + + me->SetControlled(true, UNIT_STATE_ROOT); + } + } + + void UpdateAI(uint32 /*diff*/) override + { + UpdateVictim(); + } + + bool CanAIAttack(Unit const* /*target*/) const override + { + return true; + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetIcecrownCitadelAI<npc_gunship_mageAI>(creature); + } +}; + +/** @HACK This AI only resets MOVEMENTFLAG_ROOT on the vehicle. + Currently the core always removes MOVEMENTFLAG_ROOT sent from client packets to prevent cheaters from freezing clients of other players + but it actually is a valid flag - needs more research to fix both freezes and keep the flag as is (see WorldSession::ReadMovementInfo) + +Example packet: +ClientToServer: CMSG_FORCE_MOVE_ROOT_ACK (0x00E9) Length: 67 ConnectionIndex: 0 Time: 03/04/2010 03:57:55.000 Number: 471326 +Guid: +Movement Counter: 80 +Movement Flags: OnTransport, Root (2560) +Extra Movement Flags: None (0) +Time: 52291611 +Position: X: -396.0302 Y: 2482.906 Z: 249.86 +Orientation: 1.468665 +Transport GUID: Full: 0x1FC0000000000460 Type: MOTransport Low: 1120 +Transport Position: X: -6.152398 Y: -23.49037 Z: 21.64464 O: 4.827727 +Transport Time: 9926 +Transport Seat: 255 +Fall Time: 824 +*/ +class npc_gunship_cannon : public CreatureScript +{ + public: + npc_gunship_cannon() : CreatureScript("npc_gunship_cannon") { } + + struct npc_gunship_cannonAI : public PassiveAI + { + npc_gunship_cannonAI(Creature* creature) : PassiveAI(creature) + { + } + + void OnCharmed(bool /*apply*/) override { } + + void PassengerBoarded(Unit* /*passenger*/, int8 /*seat*/, bool apply) override + { + if (!apply) + { + me->SetControlled(false, UNIT_STATE_ROOT); + me->SetControlled(true, UNIT_STATE_ROOT); + } + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_gunship_cannonAI(creature); + } +}; + +class spell_igb_rocket_pack : public SpellScriptLoader +{ + public: + spell_igb_rocket_pack() : SpellScriptLoader("spell_igb_rocket_pack") { } + + class spell_igb_rocket_pack_AuraScript : public AuraScript + { + PrepareAuraScript(spell_igb_rocket_pack_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_ROCKET_PACK_DAMAGE) || + !sSpellMgr->GetSpellInfo(SPELL_ROCKET_BURST)) + return false; + + return true; + } + + void HandlePeriodic(AuraEffect const* /*aurEff*/) + { + if (GetTarget()->movespline->Finalized()) + Remove(AURA_REMOVE_BY_EXPIRE); + } + + void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + SpellInfo const* damageInfo = sSpellMgr->EnsureSpellInfo(SPELL_ROCKET_PACK_DAMAGE); + GetTarget()->CastCustomSpell(SPELL_ROCKET_PACK_DAMAGE, SPELLVALUE_BASE_POINT0, 2 * (damageInfo->Effects[EFFECT_0].CalcValue() + aurEff->GetTickNumber() * aurEff->GetAmplitude()), NULL, TRIGGERED_FULL_MASK); + GetTarget()->CastSpell(NULL, SPELL_ROCKET_BURST, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_igb_rocket_pack_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + OnEffectRemove += AuraEffectRemoveFn(spell_igb_rocket_pack_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_igb_rocket_pack_AuraScript(); + } +}; + +class spell_igb_rocket_pack_useable : public SpellScriptLoader +{ + public: + spell_igb_rocket_pack_useable() : SpellScriptLoader("spell_igb_rocket_pack_useable") { } + + class spell_igb_rocket_pack_useable_AuraScript : public AuraScript + { + PrepareAuraScript(spell_igb_rocket_pack_useable_AuraScript); + + bool Load() + { + return GetOwner()->GetInstanceScript(); + } + + bool CheckAreaTarget(Unit* target) + { + return target->GetTypeId() == TYPEID_PLAYER && GetOwner()->GetInstanceScript()->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE; + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Creature* owner = GetOwner()->ToCreature()) + if (Player* target = GetTarget()->ToPlayer()) + if (target->HasItemCount(ITEM_GOBLIN_ROCKET_PACK, 1)) + sCreatureTextMgr->SendChat(owner, SAY_ZAFOD_ROCKET_PACK_ACTIVE, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, target); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Creature* owner = GetOwner()->ToCreature()) + if (Player* target = GetTarget()->ToPlayer()) + if (target->HasItemCount(ITEM_GOBLIN_ROCKET_PACK, 1)) + sCreatureTextMgr->SendChat(owner, SAY_ZAFOD_ROCKET_PACK_DISABLED, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, target); + } + + void Register() override + { + DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_igb_rocket_pack_useable_AuraScript::CheckAreaTarget); + AfterEffectApply += AuraEffectApplyFn(spell_igb_rocket_pack_useable_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_igb_rocket_pack_useable_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_igb_rocket_pack_useable_AuraScript(); + } +}; + +class spell_igb_on_gunship_deck : public SpellScriptLoader +{ + public: + spell_igb_on_gunship_deck() : SpellScriptLoader("spell_igb_on_gunship_deck") { } + + class spell_igb_on_gunship_deck_AuraScript : public AuraScript + { + PrepareAuraScript(spell_igb_on_gunship_deck_AuraScript); + + bool Load() override + { + if (InstanceScript* instance = GetOwner()->GetInstanceScript()) + _teamInInstance = instance->GetData(DATA_TEAM_IN_INSTANCE); + else + _teamInInstance = 0; + return true; + } + + bool CheckAreaTarget(Unit* unit) + { + return unit->GetTypeId() == TYPEID_PLAYER; + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetSpellInfo()->Id == uint32(_teamInInstance == HORDE ? SPELL_ON_SKYBREAKER_DECK : SPELL_ON_ORGRIMS_HAMMER_DECK)) + if (Creature* gunship = GetOwner()->FindNearestCreature(_teamInInstance == HORDE ? NPC_ORGRIMS_HAMMER : NPC_THE_SKYBREAKER, 200.0f)) + gunship->AI()->SetGUID(GetTarget()->GetGUID(), ACTION_SHIP_VISITS); + } + + void Register() override + { + DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_igb_on_gunship_deck_AuraScript::CheckAreaTarget); + AfterEffectApply += AuraEffectApplyFn(spell_igb_on_gunship_deck_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + + uint32 _teamInInstance; + }; + + AuraScript* GetAuraScript() const override + { + return new spell_igb_on_gunship_deck_AuraScript(); + } +}; + +class spell_igb_periodic_trigger_with_power_cost : public SpellScriptLoader +{ + public: + spell_igb_periodic_trigger_with_power_cost() : SpellScriptLoader("spell_igb_periodic_trigger_with_power_cost") { } + + class spell_igb_periodic_trigger_with_power_cost_AuraScript : public AuraScript + { + PrepareAuraScript(spell_igb_periodic_trigger_with_power_cost_AuraScript); + + void HandlePeriodicTick(AuraEffect const* /*aurEff*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST)); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_igb_periodic_trigger_with_power_cost_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_igb_periodic_trigger_with_power_cost_AuraScript(); + } +}; + +class spell_igb_cannon_blast : public SpellScriptLoader +{ + public: + spell_igb_cannon_blast() : SpellScriptLoader("spell_igb_cannon_blast") { } + + class spell_igb_cannon_blast_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_cannon_blast_SpellScript); + + bool Load() + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void CheckEnergy() + { + if (GetCaster()->GetPower(POWER_ENERGY) >= 100) + { + GetCaster()->CastSpell(GetCaster(), SPELL_OVERHEAT, TRIGGERED_FULL_MASK); + if (Vehicle* vehicle = GetCaster()->GetVehicleKit()) + if (Unit* passenger = vehicle->GetPassenger(0)) + sCreatureTextMgr->SendChat(GetCaster()->ToCreature(), SAY_OVERHEAT, passenger); + } + } + + void Register() override + { + AfterHit += SpellHitFn(spell_igb_cannon_blast_SpellScript::CheckEnergy); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_cannon_blast_SpellScript(); + } +}; + +class spell_igb_incinerating_blast : public SpellScriptLoader +{ + public: + spell_igb_incinerating_blast() : SpellScriptLoader("spell_igb_incinerating_blast") { } + + class spell_igb_incinerating_blast_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_incinerating_blast_SpellScript); + + void StoreEnergy() + { + _energyLeft = GetCaster()->GetPower(POWER_ENERGY) - 10; + } + + void RemoveEnergy() + { + GetCaster()->SetPower(POWER_ENERGY, 0); + } + + void CalculateDamage(SpellEffIndex /*effIndex*/) + { + SetEffectValue(GetEffectValue() + _energyLeft * _energyLeft * 8); + } + + void Register() override + { + OnCast += SpellCastFn(spell_igb_incinerating_blast_SpellScript::StoreEnergy); + AfterCast += SpellCastFn(spell_igb_incinerating_blast_SpellScript::RemoveEnergy); + OnEffectLaunchTarget += SpellEffectFn(spell_igb_incinerating_blast_SpellScript::CalculateDamage, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); + } + + uint32 _energyLeft; + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_incinerating_blast_SpellScript(); + } +}; + +class spell_igb_overheat : public SpellScriptLoader +{ + public: + spell_igb_overheat() : SpellScriptLoader("spell_igb_overheat") { } + + class spell_igb_overheat_AuraScript : public AuraScript + { + PrepareAuraScript(spell_igb_overheat_AuraScript); + + bool Load() override + { + if (GetAura()->GetType() != UNIT_AURA_TYPE) + return false; + return GetUnitOwner()->IsVehicle(); + } + + void SendClientControl(uint8 value) + { + if (Vehicle* vehicle = GetUnitOwner()->GetVehicleKit()) + { + if (Unit* passenger = vehicle->GetPassenger(0)) + { + if (Player* player = passenger->ToPlayer()) + { + WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, GetUnitOwner()->GetPackGUID().size() + 1); + data.append(GetUnitOwner()->GetPackGUID()); + data << uint8(value); + player->GetSession()->SendPacket(&data); + } + } + } + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + SendClientControl(0); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + SendClientControl(1); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_igb_overheat_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_igb_overheat_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_igb_overheat_AuraScript(); + } +}; + +class spell_igb_below_zero : public SpellScriptLoader +{ + public: + spell_igb_below_zero() : SpellScriptLoader("spell_igb_below_zero") { } + + class spell_igb_below_zero_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_below_zero_SpellScript); + + void RemovePassengers() + { + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_EJECT_ALL_PASSENGERS_BELOW_ZERO, TRIGGERED_FULL_MASK); + } + + void Register() override + { + BeforeHit += SpellHitFn(spell_igb_below_zero_SpellScript::RemovePassengers); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_below_zero_SpellScript(); + } +}; + +class spell_igb_teleport_to_enemy_ship : public SpellScriptLoader +{ + public: + spell_igb_teleport_to_enemy_ship() : SpellScriptLoader("spell_igb_teleport_to_enemy_ship") { } + + class spell_igb_teleport_to_enemy_ship_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_teleport_to_enemy_ship_SpellScript); + + void RelocateTransportOffset(SpellEffIndex /*effIndex*/) + { + WorldLocation const* dest = GetHitDest(); + Unit* target = GetHitUnit(); + if (!dest || !target || !target->GetTransport()) + return; + + float x, y, z, o; + dest->GetPosition(x, y, z, o); + target->GetTransport()->CalculatePassengerOffset(x, y, z, &o); + target->m_movementInfo.transport.pos.Relocate(x, y, z, o); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_igb_teleport_to_enemy_ship_SpellScript::RelocateTransportOffset, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_teleport_to_enemy_ship_SpellScript(); + } +}; + +class spell_igb_burning_pitch_selector : public SpellScriptLoader +{ + public: + spell_igb_burning_pitch_selector() : SpellScriptLoader("spell_igb_burning_pitch_selector") { } + + class spell_igb_burning_pitch_selector_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_burning_pitch_selector_SpellScript); + + void FilterTargets(std::list<WorldObject*>& targets) + { + uint32 team = HORDE; + if (InstanceScript* instance = GetCaster()->GetInstanceScript()) + team = instance->GetData(DATA_TEAM_IN_INSTANCE); + + targets.remove_if([team](WorldObject* target) -> bool + { + if (Transport* transport = target->GetTransport()) + return transport->GetEntry() != uint32(team == HORDE ? GO_ORGRIMS_HAMMER_H : GO_THE_SKYBREAKER_A); + return true; + }); + + if (!targets.empty()) + { + WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + } + } + + void HandleDummy(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_NONE); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_burning_pitch_selector_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); + OnEffectHitTarget += SpellEffectFn(spell_igb_burning_pitch_selector_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_burning_pitch_selector_SpellScript(); + } +}; + +class spell_igb_burning_pitch : public SpellScriptLoader +{ + public: + spell_igb_burning_pitch() : SpellScriptLoader("spell_igb_burning_pitch") { } + + class spell_igb_burning_pitch_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_burning_pitch_SpellScript); + + void HandleDummy(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastCustomSpell(uint32(GetEffectValue()), SPELLVALUE_BASE_POINT0, 8000, NULL, TRIGGERED_FULL_MASK); + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_BURNING_PITCH, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_igb_burning_pitch_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_burning_pitch_SpellScript(); + } +}; + +class spell_igb_rocket_artillery : public SpellScriptLoader +{ + public: + spell_igb_rocket_artillery() : SpellScriptLoader("spell_igb_rocket_artillery") { } + + class spell_igb_rocket_artillery_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_rocket_artillery_SpellScript); + + void SelectRandomTarget(std::list<WorldObject*>& targets) + { + if (!targets.empty()) + { + WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + } + } + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), TRIGGERED_NONE); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_rocket_artillery_SpellScript::SelectRandomTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_igb_rocket_artillery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_rocket_artillery_SpellScript(); + } +}; + +class spell_igb_rocket_artillery_explosion : public SpellScriptLoader +{ + public: + spell_igb_rocket_artillery_explosion() : SpellScriptLoader("spell_igb_rocket_artillery_explosion") { } + + class spell_igb_rocket_artillery_explosion_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_rocket_artillery_explosion_SpellScript); + + void DamageGunship(SpellEffIndex /*effIndex*/) + { + if (InstanceScript* instance = GetCaster()->GetInstanceScript()) + GetCaster()->CastCustomSpell(instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_BURNING_PITCH_DAMAGE_A : SPELL_BURNING_PITCH_DAMAGE_H, SPELLVALUE_BASE_POINT0, 5000, NULL, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_igb_rocket_artillery_explosion_SpellScript::DamageGunship, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_rocket_artillery_explosion_SpellScript(); + } +}; + +class spell_igb_gunship_fall_teleport : public SpellScriptLoader +{ + public: + spell_igb_gunship_fall_teleport() : SpellScriptLoader("spell_igb_gunship_fall_teleport") { } + + class spell_igb_gunship_fall_teleport_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_gunship_fall_teleport_SpellScript); + + bool Load() + { + return GetCaster()->GetInstanceScript(); + } + + void SelectTransport(WorldObject*& target) + { + if (InstanceScript* instance = target->GetInstanceScript()) + target = HashMapHolder<GameObject>::Find(instance->GetData64(DATA_ICECROWN_GUNSHIP_BATTLE)); + } + + void RelocateDest(SpellEffIndex /*effIndex*/) + { + if (GetCaster()->GetInstanceScript()->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + GetHitDest()->RelocateOffset({ 0.0f, 0.0f, 36.0f, 0.0f }); + else + GetHitDest()->RelocateOffset({ 0.0f, 0.0f, 21.0f, 0.0f }); + } + + void Register() override + { + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_igb_gunship_fall_teleport_SpellScript::SelectTransport, EFFECT_0, TARGET_DEST_NEARBY_ENTRY); + OnEffectLaunch += SpellEffectFn(spell_igb_gunship_fall_teleport_SpellScript::RelocateDest, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_gunship_fall_teleport_SpellScript(); + } +}; + +class spell_igb_check_for_players : public SpellScriptLoader +{ + public: + spell_igb_check_for_players() : SpellScriptLoader("spell_igb_check_for_players") { } + + class spell_igb_check_for_players_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_check_for_players_SpellScript); + + bool Load() override + { + _playerCount = 0; + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void CountTargets(std::list<WorldObject*>& targets) + { + _playerCount = targets.size(); + } + + void TriggerWipe() + { + if (!_playerCount) + GetCaster()->ToCreature()->AI()->JustDied(NULL); + } + + void TeleportPlayer(SpellEffIndex /*effIndex*/) + { + if (GetHitUnit()->GetPositionZ() < GetCaster()->GetPositionZ() - 10.0f) + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_GUNSHIP_FALL_TELEPORT, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_check_for_players_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); + AfterCast += SpellCastFn(spell_igb_check_for_players_SpellScript::TriggerWipe); + OnEffectHitTarget += SpellEffectFn(spell_igb_check_for_players_SpellScript::TeleportPlayer, EFFECT_0, SPELL_EFFECT_DUMMY); + } + + uint32 _playerCount; + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_check_for_players_SpellScript(); + } +}; + +class spell_igb_teleport_players_on_victory : public SpellScriptLoader +{ + public: + spell_igb_teleport_players_on_victory() : SpellScriptLoader("spell_igb_teleport_players_on_victory") { } + + class spell_igb_teleport_players_on_victory_SpellScript : public SpellScript + { + PrepareSpellScript(spell_igb_teleport_players_on_victory_SpellScript); + + bool Load() override + { + return GetCaster()->GetInstanceScript(); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + InstanceScript* instance = GetCaster()->GetInstanceScript(); + targets.remove_if([instance](WorldObject* target) -> bool + { + return target->GetTransGUID() != instance->GetData64(DATA_ENEMY_GUNSHIP); + }); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_igb_teleport_players_on_victory_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_igb_teleport_players_on_victory_SpellScript(); + } +}; + +class achievement_im_on_a_boat : public AchievementCriteriaScript +{ + public: + achievement_im_on_a_boat() : AchievementCriteriaScript("achievement_im_on_a_boat") { } + + bool OnCheck(Player* /*source*/, Unit* target) override + { + return target->GetAI() && target->GetAI()->GetData(ACTION_SHIP_VISITS) <= 2; + } +}; + +void AddSC_boss_icecrown_gunship_battle() +{ + new npc_gunship(); + new npc_high_overlord_saurfang_igb(); + new npc_muradin_bronzebeard_igb(); + new npc_zafod_boombox(); + new npc_gunship_boarding_leader(); + new npc_gunship_boarding_add(); + new npc_gunship_gunner(); + new npc_gunship_rocketeer(); + new npc_gunship_mage(); + new npc_gunship_cannon(); + new spell_igb_rocket_pack(); + new spell_igb_rocket_pack_useable(); + new spell_igb_on_gunship_deck(); + new spell_igb_periodic_trigger_with_power_cost(); + new spell_igb_cannon_blast(); + new spell_igb_incinerating_blast(); + new spell_igb_overheat(); + new spell_igb_below_zero(); + new spell_igb_teleport_to_enemy_ship(); + new spell_igb_burning_pitch_selector(); + new spell_igb_burning_pitch(); + new spell_igb_rocket_artillery(); + new spell_igb_rocket_artillery_explosion(); + new spell_igb_gunship_fall_teleport(); + new spell_igb_check_for_players(); + new spell_igb_teleport_players_on_victory(); + new achievement_im_on_a_boat(); +} diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index f05f2c20b12..d59e723d070 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -220,7 +220,7 @@ class boss_lady_deathwhisper : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetPower(POWER_MANA, me->GetMaxPower(POWER_MANA)); @@ -235,7 +235,7 @@ class boss_lady_deathwhisper : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!_introDone && me->IsWithinDistInMap(who, 110.0f)) @@ -252,7 +252,7 @@ class boss_lady_deathwhisper : public CreatureScript } } - void AttackStart(Unit* victim) OVERRIDE + void AttackStart(Unit* victim) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -261,7 +261,7 @@ class boss_lady_deathwhisper : public CreatureScript me->GetMotionMaster()->MoveChase(victim); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance->CheckRequiredBosses(DATA_LADY_DEATHWHISPER, who->ToPlayer())) { @@ -293,7 +293,7 @@ class boss_lady_deathwhisper : public CreatureScript instance->SetBossState(DATA_LADY_DEATHWHISPER, IN_PROGRESS); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Talk(SAY_DEATH); @@ -334,7 +334,7 @@ class boss_lady_deathwhisper : public CreatureScript _JustDied(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_LADY_DEATHWHISPER, FAIL); @@ -347,13 +347,13 @@ class boss_lady_deathwhisper : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void DamageTaken(Unit* /*damageDealer*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*damageDealer*/, uint32& damage) override { // phase transition if (events.IsInPhase(PHASE_ONE) && damage > me->GetPower(POWER_MANA)) @@ -379,7 +379,7 @@ class boss_lady_deathwhisper : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_DARNAVAN) _darnavanGUID = summon->GetGUID(); @@ -402,7 +402,7 @@ class boss_lady_deathwhisper : public CreatureScript summon->CastSpell(summon, SPELL_ADHERENT_S_DETERMINATION, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if ((!UpdateVictim() && !events.IsInPhase(PHASE_INTRO)) || !CheckInRoom()) return; @@ -545,10 +545,10 @@ class boss_lady_deathwhisper : public CreatureScript void Summon(uint32 entry, const Position& pos) { if (TempSummon* summon = me->SummonCreature(entry, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000)) - summon->AI()->DoCast(summon, SPELL_TELEPORT_VISUAL); + summon->CastSpell(summon, SPELL_TELEPORT_VISUAL); } - void SetGUID(uint64 guid, int32 id/* = 0*/) OVERRIDE + void SetGUID(uint64 guid, int32 id/* = 0*/) override { if (id != GUID_CULTIST) return; @@ -572,12 +572,11 @@ class boss_lady_deathwhisper : public CreatureScript DoCast(cultist, SPELL_DARK_MARTYRDOM_T); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_DARK_MARTYRDOM_T) { - Position pos; - target->GetPosition(&pos); + Position pos = target->GetPosition(); if (target->GetEntry() == NPC_CULT_FANATIC) me->SummonCreature(NPC_REANIMATED_FANATIC, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); else @@ -618,7 +617,7 @@ class boss_lady_deathwhisper : public CreatureScript bool _introDone; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_lady_deathwhisperAI>(creature); } @@ -635,7 +634,7 @@ class npc_cult_fanatic : public CreatureScript { npc_cult_fanaticAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_FANATIC_NECROTIC_STRIKE, urand(10000, 12000)); @@ -645,7 +644,7 @@ class npc_cult_fanatic : public CreatureScript Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DARK_TRANSFORMATION) me->UpdateEntry(NPC_DEFORMED_FANATIC); @@ -657,7 +656,7 @@ class npc_cult_fanatic : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -697,7 +696,7 @@ class npc_cult_fanatic : public CreatureScript EventMap Events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_cult_fanaticAI>(creature); } @@ -712,7 +711,7 @@ class npc_cult_adherent : public CreatureScript { npc_cult_adherentAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_ADHERENT_FROST_FEVER, urand(10000, 12000)); @@ -723,7 +722,7 @@ class npc_cult_adherent : public CreatureScript Events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM, urand(18000, 32000)); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DARK_EMPOWERMENT) me->UpdateEntry(NPC_EMPOWERED_ADHERENT); @@ -735,7 +734,7 @@ class npc_cult_adherent : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -783,7 +782,7 @@ class npc_cult_adherent : public CreatureScript EventMap Events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_cult_adherentAI>(creature); } @@ -802,12 +801,12 @@ class npc_vengeful_shade : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void Reset() OVERRIDE + void Reset() override { me->AddAura(SPELL_VENGEFUL_BLAST_PASSIVE, me); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -823,7 +822,7 @@ class npc_vengeful_shade : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_vengeful_shadeAI>(creature); } @@ -840,7 +839,7 @@ class npc_darnavan : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, 10000); @@ -851,7 +850,7 @@ class npc_darnavan : public CreatureScript _canShatter = true; } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _events.Reset(); if (Player* owner = killer->GetCharmerOrOwnerPlayerOrPlayerItself()) @@ -867,7 +866,7 @@ class npc_darnavan : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != POINT_DESPAWN) return; @@ -875,12 +874,12 @@ class npc_darnavan : public CreatureScript me->DespawnOrUnsummon(); } - void EnterCombat(Unit* /*victim*/) OVERRIDE + void EnterCombat(Unit* /*victim*/) override { Talk(SAY_DARNAVAN_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -890,7 +889,7 @@ class npc_darnavan : public CreatureScript if (me->HasUnitState(UNIT_STATE_CASTING)) return; - if (_canShatter && me->GetVictim() && me->GetVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL)) + if (_canShatter && me->GetVictim() && me->EnsureVictim()->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL)) { DoCastVictim(SPELL_SHATTERING_THROW); _canShatter = false; @@ -944,7 +943,7 @@ class npc_darnavan : public CreatureScript bool _canShatter; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_darnavanAI>(creature); } @@ -970,13 +969,13 @@ class spell_deathwhisper_mana_barrier : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_deathwhisper_mana_barrier_AuraScript::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_deathwhisper_mana_barrier_AuraScript(); } @@ -1001,13 +1000,13 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader GetCaster()->SetDisplayId(uint32(GetCaster()->GetEntry() == NPC_CULT_FANATIC ? 38009 : 38010)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_cultist_dark_martyrdom_SpellScript::HandleEffect, EFFECT_2, SPELL_EFFECT_FORCE_DESELECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_cultist_dark_martyrdom_SpellScript(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 162382e91b0..5022cd4f645 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -135,7 +135,7 @@ class boss_lord_marrowgar : public CreatureScript _boneSlice = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetSpeed(MOVE_RUN, _baseSpeed, true); @@ -150,7 +150,7 @@ class boss_lord_marrowgar : public CreatureScript _boneSpikeImmune.clear(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -159,27 +159,27 @@ class boss_lord_marrowgar : public CreatureScript instance->SetBossState(DATA_LORD_MARROWGAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_LORD_MARROWGAR, FAIL); instance->SetData(DATA_BONED_ACHIEVEMENT, uint32(true)); // reset } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!_introDone && me->IsWithinDistInMap(who, 70.0f)) @@ -189,7 +189,7 @@ class boss_lord_marrowgar : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -274,7 +274,7 @@ class boss_lord_marrowgar : public CreatureScript DoMeleeAttackIfReady(); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != POINT_TARGET_BONESTORM_PLAYER) return; @@ -288,7 +288,7 @@ class boss_lord_marrowgar : public CreatureScript return &_coldflameLastPos; } - uint64 GetGUID(int32 type /*= 0 */) const OVERRIDE + uint64 GetGUID(int32 type /*= 0 */) const override { switch (type) { @@ -309,7 +309,7 @@ class boss_lord_marrowgar : public CreatureScript return 0LL; } - void SetGUID(uint64 guid, int32 type /*= 0 */) OVERRIDE + void SetGUID(uint64 guid, int32 type /*= 0 */) override { switch (type) { @@ -322,7 +322,7 @@ class boss_lord_marrowgar : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_CLEAR_SPIKE_IMMUNITIES) return; @@ -340,7 +340,7 @@ class boss_lord_marrowgar : public CreatureScript bool _boneSlice; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_lord_marrowgarAI>(creature); } @@ -359,7 +359,7 @@ class npc_coldflame : public CreatureScript { } - void IsSummonedBy(Unit* owner) OVERRIDE + void IsSummonedBy(Unit* owner) override { if (owner->GetTypeId() != TYPEID_UNIT) return; @@ -395,14 +395,13 @@ class npc_coldflame : public CreatureScript _events.ScheduleEvent(EVENT_COLDFLAME_TRIGGER, 500); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); if (_events.ExecuteEvent() == EVENT_COLDFLAME_TRIGGER) { - Position newPos; - me->GetNearPosition(newPos, 5.0f, 0.0f); + Position newPos = me->GetNearPosition(5.0f, 0.0f); me->NearTeleportTo(newPos.GetPositionX(), newPos.GetPositionY(), me->GetPositionZ(), me->GetOrientation()); DoCast(SPELL_COLDFLAME_SUMMON); _events.ScheduleEvent(EVENT_COLDFLAME_TRIGGER, 500); @@ -413,7 +412,7 @@ class npc_coldflame : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_coldflameAI>(creature); } @@ -433,7 +432,7 @@ class npc_bone_spike : public CreatureScript SetCombatMovement(false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (TempSummon* summ = me->ToTempSummon()) if (Unit* trapped = summ->GetSummoner()) @@ -442,13 +441,13 @@ class npc_bone_spike : public CreatureScript me->DespawnOrUnsummon(); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { me->DespawnOrUnsummon(); victim->RemoveAurasDueToSpell(SPELL_IMPALED); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { DoCast(summoner, SPELL_IMPALED); summoner->CastSpell(me, SPELL_RIDE_VEHICLE, true); @@ -456,7 +455,7 @@ class npc_bone_spike : public CreatureScript _hasTrappedUnit = true; } - void PassengerBoarded(Unit* passenger, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* passenger, int8 /*seat*/, bool apply) override { if (!apply) return; @@ -470,7 +469,7 @@ class npc_bone_spike : public CreatureScript init.Launch(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_hasTrappedUnit) return; @@ -487,7 +486,7 @@ class npc_bone_spike : public CreatureScript bool _hasTrappedUnit; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_bone_spikeAI>(creature); } @@ -522,14 +521,14 @@ class spell_marrowgar_coldflame : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_marrowgar_coldflame_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_marrowgar_coldflame_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_marrowgar_coldflame_SpellScript(); } @@ -551,13 +550,13 @@ class spell_marrowgar_coldflame_bonestorm : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue() + i), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_marrowgar_coldflame_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_marrowgar_coldflame_SpellScript(); } @@ -587,13 +586,13 @@ class spell_marrowgar_coldflame_damage : public SpellScriptLoader return true; } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_marrowgar_coldflame_damage_AuraScript::CanBeAppliedOn); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_marrowgar_coldflame_damage_AuraScript(); } @@ -608,7 +607,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader { PrepareSpellScript(spell_marrowgar_bone_spike_graveyard_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { for (uint32 i = 0; i < 3; ++i) if (!sSpellMgr->GetSpellInfo(BoneSpikeSummonId[i])) @@ -617,7 +616,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled; } @@ -651,14 +650,14 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_marrowgar_bone_spike_graveyard_SpellScript::CheckCast); OnEffectHitTarget += SpellEffectFn(spell_marrowgar_bone_spike_graveyard_SpellScript::HandleSpikes, EFFECT_1, SPELL_EFFECT_APPLY_AURA); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_marrowgar_bone_spike_graveyard_SpellScript(); } @@ -678,13 +677,13 @@ class spell_marrowgar_bone_storm : public SpellScriptLoader SetHitDamage(int32(GetHitDamage() / std::max(sqrtf(GetHitUnit()->GetExactDist2d(GetCaster())), 1.0f))); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_marrowgar_bone_storm_SpellScript::RecalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_marrowgar_bone_storm_SpellScript(); } @@ -699,7 +698,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader { PrepareSpellScript(spell_marrowgar_bone_slice_SpellScript); - bool Load() OVERRIDE + bool Load() override { _targetCount = 0; return true; @@ -726,7 +725,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader SetHitDamage(GetHitDamage() / _targetCount); } - void Register() OVERRIDE + void Register() override { BeforeCast += SpellCastFn(spell_marrowgar_bone_slice_SpellScript::ClearSpikeImmunities); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_marrowgar_bone_slice_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); @@ -736,7 +735,7 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader uint32 _targetCount; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_marrowgar_bone_slice_SpellScript(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index ac4d18adb8b..3bf8fd8d305 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -225,7 +225,7 @@ class boss_professor_putricide : public CreatureScript _phase = PHASE_NONE; } - void Reset() OVERRIDE + void Reset() override { if (!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT))) instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, NOT_STARTED); @@ -244,7 +244,7 @@ class boss_professor_putricide : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) return; @@ -272,7 +272,7 @@ class boss_professor_putricide : public CreatureScript instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, IN_PROGRESS); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); me->SetWalk(false); @@ -280,13 +280,13 @@ class boss_professor_putricide : public CreatureScript instance->SetBossState(DATA_PROFESSOR_PUTRICIDE, FAIL); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -297,7 +297,7 @@ class boss_professor_putricide : public CreatureScript DoCast(SPELL_MUTATED_PLAGUE_CLEAR); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); switch (summon->GetEntry()) @@ -341,7 +341,7 @@ class boss_professor_putricide : public CreatureScript DoZoneInCombat(summon); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { switch (_phase) { @@ -362,7 +362,7 @@ class boss_professor_putricide : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -372,7 +372,7 @@ class boss_professor_putricide : public CreatureScript instance->SetBossState(DATA_FESTERGUT, IN_PROGRESS); // needed here for delayed gate close me->SetSpeed(MOVE_RUN, _baseSpeed, true); DoAction(ACTION_FESTERGUT_GAS); - if (Creature* festergut = Unit::GetCreature(*me, instance->GetData64(DATA_FESTERGUT))) + if (Creature* festergut = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FESTERGUT))) festergut->CastSpell(festergut, SPELL_GASEOUS_BLIGHT_LARGE, false, NULL, NULL, festergut->GetGUID()); break; case POINT_ROTFACE: @@ -413,7 +413,7 @@ class boss_professor_putricide : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -442,7 +442,7 @@ class boss_professor_putricide : public CreatureScript _oozeFloodStage = 0; DoZoneInCombat(me); // init random sequence of floods - if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) + if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) { std::list<Creature*> list; GetCreatureListWithEntryInGrid(list, rotface, NPC_PUDDLE_STALKER, 50.0f); @@ -469,7 +469,7 @@ class boss_professor_putricide : public CreatureScript } case ACTION_ROTFACE_OOZE: Talk(SAY_ROTFACE_OOZE_FLOOD); - if (Creature* dummy = Unit::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage])) + if (Creature* dummy = ObjectAccessor::GetCreature(*me, _oozeFloodDummyGUIDs[_oozeFloodStage])) dummy->CastSpell(dummy, oozeFloodSpells[_oozeFloodStage], true, NULL, NULL, me->GetGUID()); // cast from self for LoS (with prof's GUID for logs) if (++_oozeFloodStage == 4) _oozeFloodStage = 0; @@ -538,7 +538,7 @@ class boss_professor_putricide : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -555,13 +555,13 @@ class boss_professor_putricide : public CreatureScript return 0; } - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { if (id == DATA_EXPERIMENT_STAGE) _experimentState = bool(data); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if ((!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim()) || !CheckInRoom()) return; @@ -708,7 +708,7 @@ class boss_professor_putricide : public CreatureScript bool _experimentState; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_professor_putricideAI>(creature); } @@ -722,19 +722,19 @@ class npc_putricide_oozeAI : public ScriptedAI { } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { if (!_newTargetSelectTimer && spell->Id == sSpellMgr->GetSpellIdForDifficulty(_hitTargetSpellId, me)) _newTargetSelectTimer = 1000; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_TEAR_GAS_CREATURE) _newTargetSelectTimer = 1000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !_newTargetSelectTimer) return; @@ -783,7 +783,7 @@ class npc_volatile_ooze : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_volatile_oozeAI>(creature); } @@ -810,7 +810,7 @@ class npc_gas_cloud : public CreatureScript uint32 _newTargetSelectTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_gas_cloudAI>(creature); } @@ -836,13 +836,13 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_putricide_gaseous_bloat_AuraScript::HandleExtraEffect, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_putricide_gaseous_bloat_AuraScript(); } @@ -857,7 +857,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader { PrepareSpellScript(spell_putricide_ooze_channel_SpellScript); - bool Validate(SpellInfo const* spell) OVERRIDE + bool Validate(SpellInfo const* spell) override { if (!spell->ExcludeTargetAuraSpell) return false; @@ -868,7 +868,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader // set up initial variables and check if caster is creature // this will let use safely use ToCreature() casts in entire script - bool Load() OVERRIDE + bool Load() override { _target = NULL; return GetCaster()->GetTypeId() == TYPEID_UNIT; @@ -904,7 +904,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader GetCaster()->AddThreat(GetHitUnit(), 500000000.0f); // value seen in sniff } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_ooze_channel_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_ooze_channel_SpellScript::SetTarget, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -915,7 +915,7 @@ class spell_putricide_ooze_channel : public SpellScriptLoader WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_ooze_channel_SpellScript(); } @@ -950,14 +950,14 @@ class spell_putricide_slime_puddle : public SpellScriptLoader targets.remove_if(ExactDistanceCheck(GetCaster(), 2.5f * GetCaster()->GetObjectScale())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_slime_puddle_SpellScript::ScaleRange, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_slime_puddle_SpellScript(); } @@ -979,13 +979,13 @@ class spell_putricide_slime_puddle_aura : public SpellScriptLoader GetCaster()->AddAura((GetCaster()->GetMap()->GetSpawnMode() & 1) ? 72456 : 70346, target); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_putricide_slime_puddle_aura_SpellScript::ReplaceAura); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_slime_puddle_aura_SpellScript(); } @@ -1027,13 +1027,13 @@ class spell_putricide_unstable_experiment : public SpellScriptLoader GetCaster()->CastSpell(target, uint32(GetSpellInfo()->Effects[stage].CalcValue()), true, NULL, NULL, GetCaster()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_unstable_experiment_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_unstable_experiment_SpellScript(); } @@ -1058,13 +1058,13 @@ class spell_putricide_ooze_eruption_searcher : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_ooze_eruption_searcher_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_ooze_eruption_searcher_SpellScript(); } @@ -1092,13 +1092,13 @@ class spell_putricide_choking_gas_bomb : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_choking_gas_bomb_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_choking_gas_bomb_SpellScript(); } @@ -1113,7 +1113,7 @@ class spell_putricide_unbound_plague : public SpellScriptLoader { PrepareSpellScript(spell_putricide_unbound_plague_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_UNBOUND_PLAGUE)) return false; @@ -1170,14 +1170,14 @@ class spell_putricide_unbound_plague : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_unbound_plague_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); OnEffectHitTarget += SpellEffectFn(spell_putricide_unbound_plague_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_unbound_plague_SpellScript(); } @@ -1222,14 +1222,14 @@ class spell_putricide_eat_ooze : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_eat_ooze_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_eat_ooze_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_eat_ooze_SpellScript(); } @@ -1272,14 +1272,14 @@ class spell_putricide_mutated_plague : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), healSpell, true, NULL, NULL, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_putricide_mutated_plague_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutated_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_putricide_mutated_plague_AuraScript(); } @@ -1338,7 +1338,7 @@ class spell_putricide_mutation_init : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_putricide_mutation_init_SpellScript::CheckRequirement); } @@ -1357,18 +1357,18 @@ class spell_putricide_mutation_init : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), spellId, true); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutation_init_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_mutation_init_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_putricide_mutation_init_AuraScript(); } @@ -1389,13 +1389,13 @@ class spell_putricide_mutated_transformation_dismiss : public SpellScriptLoader veh->RemoveAllPassengers(); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_putricide_mutated_transformation_dismiss_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_putricide_mutated_transformation_dismiss_AuraScript(); } @@ -1436,8 +1436,7 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetSpellInfo()->Effects[effIndex].MiscValueB)); uint32 duration = uint32(GetSpellInfo()->GetDuration()); - Position pos; - caster->GetPosition(&pos); + Position pos = caster->GetPosition(); TempSummon* summon = caster->GetMap()->SummonCreature(entry, pos, properties, duration, caster, GetSpellInfo()->Id); if (!summon || !summon->IsVehicle()) return; @@ -1451,13 +1450,13 @@ class spell_putricide_mutated_transformation : public SpellScriptLoader putricide->AI()->JustSummoned(summon); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_putricide_mutated_transformation_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_mutated_transformation_SpellScript(); } @@ -1478,13 +1477,13 @@ class spell_putricide_mutated_transformation_dmg : public SpellScriptLoader targets.remove(owner); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_putricide_mutated_transformation_dmg_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_mutated_transformation_dmg_SpellScript(); } @@ -1506,13 +1505,13 @@ class spell_putricide_regurgitated_ooze : public SpellScriptLoader instance->SetData(DATA_NAUSEA_ACHIEVEMENT, uint32(false)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_regurgitated_ooze_SpellScript::ExtraEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_regurgitated_ooze_SpellScript(); } @@ -1535,13 +1534,13 @@ class spell_putricide_clear_aura_effect_value : public SpellScriptLoader GetHitUnit()->RemoveAurasDueToSpell(auraId); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_putricide_clear_aura_effect_value_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_putricide_clear_aura_effect_value_SpellScript(); } @@ -1566,13 +1565,13 @@ class spell_stinky_precious_decimate : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_stinky_precious_decimate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_stinky_precious_decimate_SpellScript(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index e3c21c6b88e..c1ee616218c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -102,7 +102,7 @@ class boss_rotface : public CreatureScript infectionCooldown = 14000; } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_SLIME_SPRAY, 20000); @@ -115,7 +115,7 @@ class boss_rotface : public CreatureScript infectionCooldown = 14000; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer())) { @@ -126,61 +126,61 @@ class boss_rotface : public CreatureScript me->setActive(true); Talk(SAY_AGGRO); - if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) + if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->DoAction(ACTION_ROTFACE_COMBAT); DoZoneInCombat(); DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION); _JustDied(); Talk(SAY_DEATH); - if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) + if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->DoAction(ACTION_ROTFACE_DEATH); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_ROTFACE, FAIL); instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(true)); // reset } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { ScriptedAI::EnterEvadeMode(); - if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) + if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->EnterEvadeMode(); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { if (spell->Id == SPELL_SLIME_SPRAY) Talk(SAY_SLIME_SPRAY); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { // don't enter combat } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_VILE_GAS_STALKER) - if (Creature* professor = Unit::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) + if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PROFESSOR_PUTRICIDE))) professor->CastSpell(summon, SPELL_VILE_GAS_H, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -231,7 +231,7 @@ class boss_rotface : public CreatureScript uint32 infectionStage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_rotfaceAI>(creature); } @@ -248,7 +248,7 @@ class npc_little_ooze : public CreatureScript { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { DoCast(me, SPELL_LITTLE_OOZE_COMBINE, true); DoCast(me, SPELL_WEAK_RADIATING_OOZE, true); @@ -257,12 +257,12 @@ class npc_little_ooze : public CreatureScript me->AddThreat(summoner, 500000.0f); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -282,7 +282,7 @@ class npc_little_ooze : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_little_oozeAI>(creature); } @@ -299,7 +299,7 @@ class npc_big_ooze : public CreatureScript { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { DoCast(me, SPELL_LARGE_OOZE_COMBINE, true); DoCast(me, SPELL_LARGE_OOZE_BUFF_COMBINE, true); @@ -308,24 +308,24 @@ class npc_big_ooze : public CreatureScript DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true); events.ScheduleEvent(EVENT_STICKY_OOZE, 5000); // register in Rotface's summons - not summoned with Rotface as owner - if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) + if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) rotface->AI()->JustSummoned(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* rotface = Unit::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) + if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ROTFACE))) rotface->AI()->SummonedCreatureDespawn(me); me->DespawnOrUnsummon(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == EVENT_STICKY_OOZE) events.CancelEvent(EVENT_STICKY_OOZE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -353,7 +353,7 @@ class npc_big_ooze : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_big_oozeAI>(creature); } @@ -371,7 +371,7 @@ class npc_precious_icc : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); @@ -380,27 +380,27 @@ class npc_precious_icc : public CreatureScript _summons.DespawnAll(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { _summons.Summon(summon); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summon->AI()->AttackStart(target); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { _summons.Despawn(summon); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _summons.DespawnAll(); - if (Creature* rotface = Unit::GetCreature(*me, _instance->GetData64(DATA_ROTFACE))) + if (Creature* rotface = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ROTFACE))) if (rotface->IsAlive()) rotface->AI()->Talk(SAY_PRECIOUS_DIES); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -442,7 +442,7 @@ class npc_precious_icc : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_precious_iccAI>(creature); } @@ -485,14 +485,14 @@ class spell_rotface_ooze_flood : public SpellScriptLoader targets.pop_front(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rotface_ooze_flood_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_ooze_flood_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_ooze_flood_SpellScript(); } @@ -507,7 +507,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader { PrepareSpellScript(spell_rotface_mutated_infection_SpellScript); - bool Load() OVERRIDE + bool Load() override { _target = NULL; return true; @@ -541,7 +541,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -552,7 +552,7 @@ class spell_rotface_mutated_infection : public SpellScriptLoader WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_mutated_infection_SpellScript(); } @@ -578,13 +578,13 @@ class spell_rotface_little_ooze_combine : public SpellScriptLoader GetHitCreature()->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rotface_little_ooze_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_little_ooze_combine_SpellScript(); } @@ -620,13 +620,13 @@ class spell_rotface_large_ooze_combine : public SpellScriptLoader GetHitCreature()->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rotface_large_ooze_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_large_ooze_combine_SpellScript(); } @@ -657,7 +657,7 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_BUFF_COMBINE); GetCaster()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_COMBINE); if (InstanceScript* instance = GetCaster()->GetInstanceScript()) - if (Creature* rotface = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE))) + if (Creature* rotface = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_ROTFACE))) if (rotface->IsAlive()) { rotface->AI()->Talk(EMOTE_UNSTABLE_EXPLOSION); @@ -675,13 +675,13 @@ class spell_rotface_large_ooze_buff_combine : public SpellScriptLoader GetHitCreature()->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rotface_large_ooze_buff_combine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_large_ooze_buff_combine_SpellScript(); } @@ -696,7 +696,7 @@ class spell_rotface_unstable_ooze_explosion_init : public SpellScriptLoader { PrepareSpellScript(spell_rotface_unstable_ooze_explosion_init_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER)) return false; @@ -715,13 +715,13 @@ class spell_rotface_unstable_ooze_explosion_init : public SpellScriptLoader GetCaster()->CastSpell(dummy, SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rotface_unstable_ooze_explosion_init_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_unstable_ooze_explosion_init_SpellScript(); } @@ -752,13 +752,13 @@ class spell_rotface_unstable_ooze_explosion : public SpellScriptLoader rotface->CastSpell(x, y, z, triggered_spell_id, true, NULL, NULL, GetCaster()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_rotface_unstable_ooze_explosion_SpellScript::CheckTarget, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rotface_unstable_ooze_explosion_SpellScript(); } @@ -785,13 +785,13 @@ class spell_rotface_unstable_ooze_explosion_suicide : public SpellScriptLoader target->ToCreature()->DespawnOrUnsummon(60000); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_rotface_unstable_ooze_explosion_suicide_AuraScript::DespawnSelf, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rotface_unstable_ooze_explosion_suicide_AuraScript(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index b1141e31d39..76c5a93f9c5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -223,7 +223,7 @@ class boss_sindragosa : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { BossAI::Reset(); me->SetReactState(REACT_DEFENSIVE); @@ -246,7 +246,7 @@ class boss_sindragosa : public CreatureScript } } - void JustDied(Unit* /* killer */) OVERRIDE + void JustDied(Unit* /* killer */) override { _JustDied(); Talk(SAY_DEATH); @@ -256,7 +256,7 @@ class boss_sindragosa : public CreatureScript } - void EnterCombat(Unit* victim) OVERRIDE + void EnterCombat(Unit* victim) override { if (!instance->CheckRequiredBosses(DATA_SINDRAGOSA, victim->ToPlayer())) { @@ -271,7 +271,7 @@ class boss_sindragosa : public CreatureScript Talk(SAY_AGGRO); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { BossAI::JustReachedHome(); instance->SetBossState(DATA_SINDRAGOSA, FAIL); @@ -279,13 +279,13 @@ class boss_sindragosa : public CreatureScript me->SetDisableGravity(false); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_FROSTWYRM) { @@ -312,14 +312,14 @@ class boss_sindragosa : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_MYSTIC_BUFFET_STACK) return _mysticBuffetStack; return 0xFFFFFFFF; } - void MovementInform(uint32 type, uint32 point) OVERRIDE + void MovementInform(uint32 type, uint32 point) override { if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) return; @@ -373,7 +373,7 @@ class boss_sindragosa : public CreatureScript } } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!_isThirdPhase && !HealthAbovePct(35)) { @@ -383,7 +383,7 @@ class boss_sindragosa : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); if (summon->GetEntry() == NPC_FROST_BOMB) @@ -394,14 +394,14 @@ class boss_sindragosa : public CreatureScript } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { BossAI::SummonedCreatureDespawn(summon); if (summon->GetEntry() == NPC_ICE_TOMB) summon->AI()->JustDied(summon); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (uint32 spellId = sSpellMgr->GetSpellIdForDifficulty(70127, me)) if (spellId == spell->Id) @@ -410,7 +410,7 @@ class boss_sindragosa : public CreatureScript } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -542,7 +542,7 @@ class boss_sindragosa : public CreatureScript bool _summoned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_sindragosaAI>(creature); } @@ -561,12 +561,12 @@ class npc_ice_tomb : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); } - void SetGUID(uint64 guid, int32 type/* = 0 */) OVERRIDE + void SetGUID(uint64 guid, int32 type/* = 0 */) override { if (type == DATA_TRAPPED_PLAYER) { @@ -575,14 +575,14 @@ class npc_ice_tomb : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_TRIGGER_ASPHYXIATION) if (Player* player = ObjectAccessor::GetPlayer(*me, _trappedPlayerGUID)) player->CastSpell(player, SPELL_ASPHYXIATION, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->RemoveAllGameObjects(); @@ -594,7 +594,7 @@ class npc_ice_tomb : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_trappedPlayerGUID) return; @@ -620,7 +620,7 @@ class npc_ice_tomb : public CreatureScript uint32 _existenceCheckTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_ice_tombAI>(creature); } @@ -637,7 +637,7 @@ class npc_spinestalker : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { // Increase add count if (!me->isDead()) @@ -647,7 +647,7 @@ class npc_spinestalker : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 25000)); @@ -662,18 +662,18 @@ class npc_spinestalker : public CreatureScript } } - void JustRespawned() OVERRIDE + void JustRespawned() override { ScriptedAI::JustRespawned(); _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _events.Reset(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_FROSTWYRM) { @@ -696,7 +696,7 @@ class npc_spinestalker : public CreatureScript } } - void MovementInform(uint32 type, uint32 point) OVERRIDE + void MovementInform(uint32 type, uint32 point) override { if (type != EFFECT_MOTION_TYPE || point != POINT_FROSTWYRM_LAND) return; @@ -710,7 +710,7 @@ class npc_spinestalker : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -750,7 +750,7 @@ class npc_spinestalker : public CreatureScript bool _summoned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_spinestalkerAI>(creature); } @@ -767,7 +767,7 @@ class npc_rimefang : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { // Increase add count if (!me->isDead()) @@ -777,7 +777,7 @@ class npc_rimefang : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000)); @@ -792,18 +792,18 @@ class npc_rimefang : public CreatureScript } } - void JustRespawned() OVERRIDE + void JustRespawned() override { ScriptedAI::JustRespawned(); _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _events.Reset(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_FROSTWYRM) { @@ -826,7 +826,7 @@ class npc_rimefang : public CreatureScript } } - void MovementInform(uint32 type, uint32 point) OVERRIDE + void MovementInform(uint32 type, uint32 point) override { if (type != EFFECT_MOTION_TYPE || point != POINT_FROSTWYRM_LAND) return; @@ -840,12 +840,12 @@ class npc_rimefang : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void EnterCombat(Unit* /*victim*/) OVERRIDE + void EnterCombat(Unit* /*victim*/) override { DoCast(me, SPELL_FROST_AURA_RIMEFANG, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -907,7 +907,7 @@ class npc_rimefang : public CreatureScript bool _summoned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_rimefangAI>(creature); } @@ -925,7 +925,7 @@ class npc_sindragosa_trash : public CreatureScript _instance = creature->GetInstanceScript(); } - void InitializeAI() OVERRIDE + void InitializeAI() override { _frostwyrmId = (me->GetHomePosition().GetPositionY() < 2484.35f) ? DATA_RIMEFANG : DATA_SPINESTALKER; // Increase add count @@ -937,7 +937,7 @@ class npc_sindragosa_trash : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { // This is shared AI for handler and whelps if (me->GetEntry() == NPC_FROSTWARDEN_HANDLER) @@ -949,7 +949,7 @@ class npc_sindragosa_trash : public CreatureScript _isTaunted = false; } - void JustRespawned() OVERRIDE + void JustRespawned() override { ScriptedAI::JustRespawned(); @@ -958,13 +958,13 @@ class npc_sindragosa_trash : public CreatureScript _instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_WHELP_MARKER) _isTaunted = data != 0; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_FROSTWYRM_OWNER) return _frostwyrmId; @@ -973,7 +973,7 @@ class npc_sindragosa_trash : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1010,7 +1010,7 @@ class npc_sindragosa_trash : public CreatureScript bool _isTaunted; // Frostwing Whelp only }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_sindragosa_trashAI>(creature); } @@ -1025,7 +1025,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader { PrepareSpellScript(spell_sindragosa_s_fury_SpellScript); - bool Load() OVERRIDE + bool Load() override { _targetCount = 0; @@ -1074,7 +1074,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader GetCaster()->DealSpellDamage(&damageInfo, false); } - void Register() OVERRIDE + void Register() override { BeforeCast += SpellCastFn(spell_sindragosa_s_fury_SpellScript::SelectDest); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_s_fury_SpellScript::CountTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY); @@ -1084,7 +1084,7 @@ class spell_sindragosa_s_fury : public SpellScriptLoader uint32 _targetCount; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_s_fury_SpellScript(); } @@ -1120,13 +1120,13 @@ class spell_sindragosa_unchained_magic : public SpellScriptLoader Trinity::Containers::RandomResizeList(unitList, maxSize); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_unchained_magic_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_unchained_magic_SpellScript(); } @@ -1165,13 +1165,13 @@ class spell_sindragosa_frost_breath : public SpellScriptLoader target->CastSpell(target, SPELL_FROST_INFUSION, TRIGGERED_FULL_MASK); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_sindragosa_frost_breath_SpellScript::HandleInfusion); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_frost_breath_SpellScript(); } @@ -1186,7 +1186,7 @@ class spell_sindragosa_instability : public SpellScriptLoader { PrepareAuraScript(spell_sindragosa_instability_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BACKLASH)) return false; @@ -1199,13 +1199,13 @@ class spell_sindragosa_instability : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_BACKLASH, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_sindragosa_instability_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sindragosa_instability_AuraScript(); } @@ -1220,7 +1220,7 @@ class spell_sindragosa_frost_beacon : public SpellScriptLoader { PrepareAuraScript(spell_sindragosa_frost_beacon_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ICE_TOMB_DAMAGE)) return false; @@ -1234,13 +1234,13 @@ class spell_sindragosa_frost_beacon : public SpellScriptLoader caster->CastSpell(GetTarget(), SPELL_ICE_TOMB_DAMAGE, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_sindragosa_frost_beacon_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sindragosa_frost_beacon_AuraScript(); } @@ -1255,7 +1255,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader { PrepareSpellScript(spell_sindragosa_ice_tomb_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sObjectMgr->GetCreatureTemplate(NPC_ICE_TOMB)) return false; @@ -1266,8 +1266,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader void SummonTomb() { - Position pos; - GetHitUnit()->GetPosition(&pos); + Position pos = GetHitUnit()->GetPosition(); if (TempSummon* summon = GetCaster()->SummonCreature(NPC_ICE_TOMB, pos)) { summon->AI()->SetGUID(GetHitUnit()->GetGUID(), DATA_TRAPPED_PLAYER); @@ -1279,7 +1278,7 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_sindragosa_ice_tomb_SpellScript::SummonTomb); } @@ -1294,18 +1293,18 @@ class spell_sindragosa_ice_tomb : public SpellScriptLoader PreventDefaultAction(); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_sindragosa_ice_tomb_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_ice_tomb_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sindragosa_ice_tomb_AuraScript(); } @@ -1320,7 +1319,7 @@ class spell_sindragosa_icy_grip : public SpellScriptLoader { PrepareSpellScript(spell_sindragosa_icy_grip_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ICY_GRIP_JUMP)) return false; @@ -1333,13 +1332,13 @@ class spell_sindragosa_icy_grip : public SpellScriptLoader GetHitUnit()->CastSpell(GetCaster(), SPELL_ICY_GRIP_JUMP, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sindragosa_icy_grip_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_icy_grip_SpellScript(); } @@ -1373,13 +1372,13 @@ class spell_sindragosa_mystic_buffet : public SpellScriptLoader targets.remove_if(MysticBuffetTargetFilter(GetCaster())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sindragosa_mystic_buffet_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sindragosa_mystic_buffet_SpellScript(); } @@ -1394,7 +1393,7 @@ class spell_rimefang_icy_blast : public SpellScriptLoader { PrepareSpellScript(spell_rimefang_icy_blast_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ICY_BLAST_AREA)) return false; @@ -1409,13 +1408,13 @@ class spell_rimefang_icy_blast : public SpellScriptLoader summon->CastSpell(summon, SPELL_ICY_BLAST_AREA, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_rimefang_icy_blast_SpellScript::HandleTriggerMissile, EFFECT_1, SPELL_EFFECT_TRIGGER_MISSILE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rimefang_icy_blast_SpellScript(); } @@ -1446,7 +1445,7 @@ class spell_frostwarden_handler_order_whelp : public SpellScriptLoader { PrepareSpellScript(spell_frostwarden_handler_order_whelp_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FOCUS_FIRE)) return false; @@ -1479,14 +1478,14 @@ class spell_frostwarden_handler_order_whelp : public SpellScriptLoader Trinity::Containers::SelectRandomContainerElement(unitList)->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_frostwarden_handler_order_whelp_SpellScript::HandleForcedCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frostwarden_handler_order_whelp_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_frostwarden_handler_order_whelp_SpellScript(); } @@ -1508,7 +1507,7 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader GetCaster()->GetAI()->SetData(DATA_WHELP_MARKER, 1); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_frostwarden_handler_focus_fire_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } @@ -1528,18 +1527,18 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_frostwarden_handler_focus_fire_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_frostwarden_handler_focus_fire_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_frostwarden_handler_focus_fire_AuraScript(); } @@ -1550,7 +1549,7 @@ class at_sindragosa_lair : public AreaTriggerScript public: at_sindragosa_lair() : AreaTriggerScript("at_sindragosa_lair") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) { @@ -1582,7 +1581,7 @@ class achievement_all_you_can_eat : public AchievementCriteriaScript public: achievement_all_you_can_eat() : AchievementCriteriaScript("achievement_all_you_can_eat") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 30d520ce7bf..b72b953efb4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -506,7 +506,7 @@ class boss_the_lich_king : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_PASSIVE); @@ -516,7 +516,7 @@ class boss_the_lich_king : public CreatureScript SetEquipmentSlots(true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); DoCastAOE(SPELL_PLAY_MOVIE, false); @@ -527,7 +527,7 @@ class boss_the_lich_king : public CreatureScript frostmourne->DespawnOrUnsummon(); } - void EnterCombat(Unit* target) OVERRIDE + void EnterCombat(Unit* target) override { if (!instance->CheckRequiredBosses(DATA_THE_LICH_KING, target->ToPlayer())) { @@ -549,7 +549,7 @@ class boss_the_lich_king : public CreatureScript events.ScheduleEvent(EVENT_SHADOW_TRAP, 15500, 0, PHASE_ONE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); instance->SetBossState(DATA_THE_LICH_KING, NOT_STARTED); @@ -559,17 +559,22 @@ class boss_the_lich_king : public CreatureScript Trinity::GameObjectWorker<FrozenThroneResetWorker> worker(me, reset); me->VisitNearbyGridObject(333.0f, worker); + // Restore Tirion's gossip only after The Lich King fully resets to prevent + // restarting the encounter while LK still runs back to spawn point + if (Creature* tirion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HIGHLORD_TIRION_FORDRING))) + tirion->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + // Reset any light override - SendLightOverride(0, 5000); + me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000); } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { // The Lich King must not select targets in frostmourne room if he killed everyone outside return !target->HasAura(SPELL_IN_FROSTMOURNE_ROOM); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->SetBossState(DATA_THE_LICH_KING, FAIL); BossAI::EnterEvadeMode(); @@ -580,20 +585,20 @@ class boss_the_lich_king : public CreatureScript summons.DoAction(ACTION_TELEPORT_BACK, pred); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER && !me->IsInEvadeMode() && !events.IsInPhase(PHASE_OUTRO)) Talk(SAY_LK_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { case ACTION_START_ENCOUNTER: instance->SetBossState(DATA_THE_LICH_KING, IN_PROGRESS); Talk(SAY_LK_INTRO_1); - SendMusicToPlayers(MUSIC_FROZEN_THRONE); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FROZEN_THRONE); // schedule talks me->SetStandState(UNIT_STAND_STATE_STAND); events.ScheduleEvent(EVENT_INTRO_MOVE_1, 4000); @@ -602,10 +607,10 @@ class boss_the_lich_king : public CreatureScript events.ScheduleEvent(EVENT_START_ATTACK, 5000); break; case ACTION_PLAY_MUSIC: - SendMusicToPlayers(MUSIC_FINAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL); break; case ACTION_RESTORE_LIGHT: - SendLightOverride(0, 5000); + me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000); break; case ACTION_BREAK_FROSTMOURNE: me->CastSpell((Unit*)NULL, SPELL_SUMMON_BROKEN_FROSTMOURNE, TRIGGERED_IGNORE_CAST_IN_PROGRESS); @@ -630,7 +635,7 @@ class boss_the_lich_king : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -645,7 +650,7 @@ class boss_the_lich_king : public CreatureScript return 0; } - void SetData(uint32 type, uint32 value) OVERRIDE + void SetData(uint32 type, uint32 value) override { switch (type) { @@ -660,7 +665,7 @@ class boss_the_lich_king : public CreatureScript } } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (events.IsInPhase(PHASE_ONE) && !HealthAbovePct(70)) { @@ -687,7 +692,7 @@ class boss_the_lich_king : public CreatureScript events.Reset(); events.SetPhase(PHASE_OUTRO); summons.DespawnAll(); - SendMusicToPlayers(MUSIC_FURY_OF_FROSTMOURNE); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FURY_OF_FROSTMOURNE); me->InterruptNonMeleeSpells(true); me->CastSpell((Unit*)NULL, SPELL_FURY_OF_FROSTMOURNE, TRIGGERED_NONE); me->SetWalk(true); @@ -705,7 +710,7 @@ class boss_the_lich_king : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { switch (summon->GetEntry()) { @@ -739,8 +744,8 @@ class boss_the_lich_king : public CreatureScript { summon->CastSpell((Unit*)NULL, SPELL_BROKEN_FROSTMOURNE, true); - SendLightOverride(LIGHT_SOULSTORM, 10000); - SendWeather(WEATHER_STATE_BLACKSNOW); + me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SOULSTORM, 10000); + me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_BLACKSNOW, 0.5f); events.ScheduleEvent(EVENT_OUTRO_SOUL_BARRAGE, 5000, 0, PHASE_OUTRO); return; @@ -765,7 +770,7 @@ class boss_the_lich_king : public CreatureScript BossAI::JustSummoned(summon); } - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override { switch (summon->GetEntry()) { @@ -782,22 +787,22 @@ class boss_the_lich_king : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_HARVESTED_SOUL && me->IsInCombat() && !IsHeroic()) Talk(SAY_LK_FROSTMOURNE_KILL); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2) { - SendLightOverride(LIGHT_SNOWSTORM, 5000); - SendWeather(WEATHER_STATE_LIGHT_SNOW); + me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5000); + me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f); } } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE) return; @@ -819,7 +824,7 @@ class boss_the_lich_king : public CreatureScript case POINT_CENTER_1: me->SetFacingTo(0.0f); Talk(SAY_LK_REMORSELESS_WINTER); - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); DoCast(me, SPELL_REMORSELESS_WINTER_1); events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions events.ScheduleEvent(EVENT_QUAKE, 62500, 0, PHASE_TRANSITION); @@ -834,7 +839,7 @@ class boss_the_lich_king : public CreatureScript case POINT_CENTER_2: me->SetFacingTo(0.0f); Talk(SAY_LK_REMORSELESS_WINTER); - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); DoCast(me, SPELL_REMORSELESS_WINTER_2); summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD); events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions @@ -863,7 +868,7 @@ class boss_the_lich_king : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // check phase first to prevent updating victim and entering evade mode when not wanted if (!(events.IsInPhase(PHASE_OUTRO) || events.IsInPhase(PHASE_INTRO) || events.IsInPhase(PHASE_FROSTMOURNE))) @@ -920,7 +925,7 @@ class boss_the_lich_king : public CreatureScript break; case EVENT_SUMMON_SHAMBLING_HORROR: DoCast(me, SPELL_SUMMON_SHAMBLING_HORROR); - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 60000, 0, PHASE_ONE); break; case EVENT_SUMMON_DRUDGE_GHOUL: @@ -980,18 +985,18 @@ class boss_the_lich_king : public CreatureScript events.SetPhase(PHASE_TWO); me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes DoCastAOE(SPELL_QUAKE); - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); Talk(SAY_LK_QUAKE); break; case EVENT_QUAKE_2: events.SetPhase(PHASE_THREE); me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes DoCastAOE(SPELL_QUAKE); - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); Talk(SAY_LK_QUAKE); break; case EVENT_SUMMON_VALKYR: - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); Talk(SAY_LK_SUMMON_VALKYR); DoCastAOE(SUMMON_VALKYR); events.ScheduleEvent(EVENT_SUMMON_VALKYR, urand(45000, 50000), 0, PHASE_TWO); @@ -1002,7 +1007,7 @@ class boss_the_lich_king : public CreatureScript events.SetPhase(PHASE_THREE); break; case EVENT_VILE_SPIRITS: - SendMusicToPlayers(MUSIC_SPECIAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); DoCastAOE(SPELL_VILE_SPIRITS); events.ScheduleEvent(EVENT_VILE_SPIRITS, urand(35000, 40000), EVENT_GROUP_VILE_SPIRITS, PHASE_THREE); break; @@ -1073,7 +1078,7 @@ class boss_the_lich_king : public CreatureScript case EVENT_OUTRO_RAISE_DEAD: DoCastAOE(SPELL_RAISE_DEAD); me->ClearUnitState(UNIT_STATE_CASTING); - SendMusicToPlayers(MUSIC_FINAL); + me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL); break; case EVENT_OUTRO_TALK_5: Talk(SAY_LK_OUTRO_5); @@ -1114,47 +1119,11 @@ class boss_the_lich_king : public CreatureScript } private: - void SendMusicToPlayers(uint32 musicId) const - { - WorldPacket data(SMSG_PLAY_MUSIC, 4); - data << uint32(musicId); - SendPacketToPlayers(&data); - } - - void SendLightOverride(uint32 overrideId, uint32 fadeInTime) const - { - WorldPacket data(SMSG_OVERRIDE_LIGHT, 12); - data << uint32(2488); // Light.dbc entry (map default) - data << uint32(overrideId); // Light.dbc entry (override) - data << uint32(fadeInTime); - SendPacketToPlayers(&data); - } - - void SendWeather(WeatherState weather) const - { - WorldPacket data(SMSG_WEATHER, 9); - data << uint32(weather); - data << float(0.5f); - data << uint8(0); - SendPacketToPlayers(&data); - } - - // Send packet to all players in The Frozen Throne - void SendPacketToPlayers(WorldPacket const* data) const - { - Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (!players.isEmpty()) - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - if (Player* player = itr->GetSource()) - if (player->GetAreaId() == AREA_THE_FROZEN_THRONE) - player->GetSession()->SendPacket(data); - } - uint32 _necroticPlagueStack; uint32 _vileSpiritExplosions; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_the_lich_kingAI>(creature); } @@ -1172,14 +1141,14 @@ class npc_tirion_fordring_tft : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE) me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -1197,7 +1166,7 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1215,7 +1184,7 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ICE_LOCK) me->SetFacingTo(3.085098f); @@ -1223,7 +1192,7 @@ class npc_tirion_fordring_tft : public CreatureScript SetEquipmentSlots(true); // remove glow on ashbringer } - void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) override { if (me->GetCreatureTemplate()->GossipMenuId == sender && !action) { @@ -1234,17 +1203,12 @@ class npc_tirion_fordring_tft : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - - if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE) - return; - - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !(_events.IsInPhase(PHASE_OUTRO) || _events.IsInPhase(PHASE_INTRO))) return; @@ -1304,7 +1268,7 @@ class npc_tirion_fordring_tft : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_tirion_fordringAI>(creature); } @@ -1322,14 +1286,14 @@ class npc_shambling_horror_icc : public CreatureScript _frenzied = false; } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SHOCKWAVE, urand(20000, 25000)); _events.ScheduleEvent(EVENT_ENRAGE, urand(11000, 14000)); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (!_frenzied && IsHeroic() && me->HealthBelowPctDamaged(20, damage)) { @@ -1338,7 +1302,7 @@ class npc_shambling_horror_icc : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1373,7 +1337,7 @@ class npc_shambling_horror_icc : public CreatureScript bool _frenzied; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_shambling_horror_iccAI>(creature); } @@ -1391,7 +1355,7 @@ class npc_raging_spirit : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); @@ -1403,14 +1367,14 @@ class npc_raging_spirit : public CreatureScript DoCast(me, SPELL_BOSS_HITTIN_YA, true); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { // player is the spellcaster so register summon manually if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING))) lichKing->AI()->JustSummoned(me); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING))) lichKing->AI()->SummonedCreatureDespawn(me); @@ -1418,7 +1382,7 @@ class npc_raging_spirit : public CreatureScript summon->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1449,7 +1413,7 @@ class npc_raging_spirit : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_raging_spiritAI>(creature); } @@ -1467,7 +1431,7 @@ class npc_valkyr_shadowguard : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); me->SetReactState(REACT_PASSIVE); @@ -1475,13 +1439,13 @@ class npc_valkyr_shadowguard : public CreatureScript me->SetSpeed(MOVE_FLIGHT, 0.642857f, true); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { _events.Reset(); _events.ScheduleEvent(EVENT_GRAB_PLAYER, 2500); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (!IsHeroic()) return; @@ -1498,7 +1462,7 @@ class npc_valkyr_shadowguard : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { // schedule siphon life event (heroic only) DoZoneInCombat(); @@ -1506,11 +1470,11 @@ class npc_valkyr_shadowguard : public CreatureScript _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2000); } - void AttackStart(Unit* /*target*/) OVERRIDE + void AttackStart(Unit* /*target*/) override { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -1548,12 +1512,12 @@ class npc_valkyr_shadowguard : public CreatureScript } } - void SetGUID(uint64 guid, int32 /* = 0*/) OVERRIDE + void SetGUID(uint64 guid, int32 /* = 0*/) override { _grabbedPlayer = guid; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1597,7 +1561,7 @@ class npc_valkyr_shadowguard : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_valkyr_shadowguardAI>(creature); } @@ -1615,7 +1579,7 @@ class npc_strangulate_vehicle : public CreatureScript { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { me->SetFacingToObject(summoner); DoCast(summoner, SPELL_HARVEST_SOUL_VEHICLE); @@ -1628,7 +1592,7 @@ class npc_strangulate_vehicle : public CreatureScript lichKing->AI()->JustSummoned(me); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_TELEPORT_BACK) return; @@ -1646,7 +1610,7 @@ class npc_strangulate_vehicle : public CreatureScript lichKing->AI()->SummonedCreatureDespawn(me); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { UpdateVictim(); @@ -1682,8 +1646,7 @@ class npc_strangulate_vehicle : public CreatureScript { if (me->GetExactDist(lichKing) > 10.0f) { - Position pos; - lichKing->GetNearPosition(pos, float(rand_norm()) * 5.0f + 7.5f, lichKing->GetAngle(me)); + Position pos = lichKing->GetNearPosition(float(rand_norm()) * 5.0f + 7.5f, lichKing->GetAngle(me)); me->GetMotionMaster()->MovePoint(0, pos); } } @@ -1704,7 +1667,7 @@ class npc_strangulate_vehicle : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_strangulate_vehicleAI>(creature); } @@ -1722,12 +1685,12 @@ class npc_terenas_menethil : public CreatureScript { } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { return target->GetEntry() != NPC_THE_LICH_KING; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1754,7 +1717,7 @@ class npc_terenas_menethil : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { // no running back home if (!me->IsAlive()) @@ -1764,7 +1727,7 @@ class npc_terenas_menethil : public CreatureScript me->CombatStop(false); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (damage >= me->GetHealth()) { @@ -1785,7 +1748,7 @@ class npc_terenas_menethil : public CreatureScript } } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { _events.Reset(); _events.SetPhase(PHASE_OUTRO); @@ -1796,7 +1759,7 @@ class npc_terenas_menethil : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_2, 14000, 0, PHASE_OUTRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { UpdateVictim(); @@ -1857,7 +1820,7 @@ class npc_terenas_menethil : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_terenas_menethilAI>(creature); } @@ -1875,20 +1838,20 @@ class npc_spirit_warden : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SOUL_RIP, urand(12000, 15000)); DoCast(SPELL_DARK_HUNGER); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* terenas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_TERENAS_MENETHIL))) terenas->AI()->DoAction(ACTION_TELEPORT_BACK); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1916,7 +1879,7 @@ class npc_spirit_warden : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_spirit_wardenAI>(creature); } @@ -1933,7 +1896,7 @@ class npc_spirit_bomb : public CreatureScript { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { float destX, destY, destZ; me->GetPosition(destX, destY); @@ -1942,7 +1905,7 @@ class npc_spirit_bomb : public CreatureScript me->GetMotionMaster()->MovePoint(POINT_GROUND, destX, destY, destZ); } - void MovementInform(uint32 type, uint32 point) OVERRIDE + void MovementInform(uint32 type, uint32 point) override { if (type != POINT_MOTION_TYPE || point != POINT_GROUND) return; @@ -1952,18 +1915,18 @@ class npc_spirit_bomb : public CreatureScript me->DespawnOrUnsummon(1000); } - void AttackStart(Unit* /*victim*/) OVERRIDE + void AttackStart(Unit* /*victim*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { UpdateVictim(); // no melee attacks } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_spirit_bombAI>(creature); } @@ -1980,28 +1943,28 @@ class npc_broken_frostmourne : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { _events.SetPhase(PHASE_OUTRO); _events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3000, 0, PHASE_OUTRO); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_SUMMON_TERENAS) _events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000, 0, PHASE_OUTRO); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { UpdateVictim(); @@ -2029,7 +1992,7 @@ class npc_broken_frostmourne : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_broken_frostmourneAI>(creature); } @@ -2062,14 +2025,14 @@ class spell_the_lich_king_infest : public SpellScriptLoader aurEff->SetAmount(int32(aurEff->GetAmount() * 1.15f)); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_infest_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_the_lich_king_infest_AuraScript::OnUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_infest_AuraScript(); } @@ -2084,7 +2047,7 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_necrotic_plague_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NECROTIC_PLAGUE_JUMP)) return false; @@ -2111,13 +2074,13 @@ class spell_the_lich_king_necrotic_plague : public SpellScriptLoader caster->CastSpell(caster, SPELL_PLAGUE_SIPHON, true); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_necrotic_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_necrotic_plague_AuraScript(); } @@ -2132,7 +2095,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_necrotic_plague_SpellScript); - bool Load() OVERRIDE + bool Load() override { _hadAura = false; return true; @@ -2159,7 +2122,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader GetHitAura()->ModStackAmount(1); } - void Register() OVERRIDE + void Register() override { BeforeHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::CheckAura); OnHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::AddMissingStack); @@ -2172,7 +2135,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_necrotic_plague_AuraScript); - bool Load() OVERRIDE + bool Load() override { _lastAmount = 0; return true; @@ -2225,7 +2188,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader Remove(AURA_REMOVE_BY_ENEMY_SPELL); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_the_lich_king_necrotic_plague_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_necrotic_plague_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); @@ -2236,12 +2199,12 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader int32 _lastAmount; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_necrotic_plague_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_necrotic_plague_AuraScript(); } @@ -2262,13 +2225,13 @@ class spell_the_lich_king_shadow_trap_visual : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_SHADOW_TRAP_AURA, TRIGGERED_NONE); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_shadow_trap_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_shadow_trap_visual_AuraScript(); } @@ -2291,13 +2254,13 @@ class spell_the_lich_king_shadow_trap_periodic : public SpellScriptLoader GetCaster()->CastSpell((Unit*)NULL, SPELL_SHADOW_TRAP_KNOCKBACK, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_shadow_trap_periodic_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_shadow_trap_periodic_SpellScript(); } @@ -2312,7 +2275,7 @@ class spell_the_lich_king_quake : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_quake_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetInstanceScript() != NULL; } @@ -2329,14 +2292,14 @@ class spell_the_lich_king_quake : public SpellScriptLoader GetCaster()->GetAI()->DoAction(ACTION_START_ATTACK); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_quake_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); OnEffectHit += SpellEffectFn(spell_the_lich_king_quake_SpellScript::HandleSendEvent, EFFECT_1, SPELL_EFFECT_SEND_EVENT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_quake_SpellScript(); } @@ -2351,7 +2314,7 @@ class spell_the_lich_king_ice_burst_target_search : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_ice_burst_target_search_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ICE_BURST)) return false; @@ -2373,13 +2336,13 @@ class spell_the_lich_king_ice_burst_target_search : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_ice_burst_target_search_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_ice_burst_target_search_SpellScript(); } @@ -2394,7 +2357,7 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_raging_spirit_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LIFE_SIPHON_HEAL)) return false; @@ -2407,13 +2370,13 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_raging_spirit_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_raging_spirit_SpellScript(); } @@ -2457,7 +2420,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_DEFILE_GROW, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_defile_SpellScript::CorrectRange, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_defile_SpellScript::CorrectRange, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -2465,7 +2428,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_defile_SpellScript(); } @@ -2494,13 +2457,13 @@ class spell_the_lich_king_summon_into_air : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_the_lich_king_summon_into_air_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_summon_into_air_SpellScript(); } @@ -2515,7 +2478,7 @@ class spell_the_lich_king_soul_reaper : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_soul_reaper_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SOUL_REAPER_BUFF)) return false; @@ -2528,13 +2491,13 @@ class spell_the_lich_king_soul_reaper : public SpellScriptLoader GetTarget()->CastSpell(caster, SPELL_SOUL_REAPER_BUFF, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_soul_reaper_AuraScript::OnPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_soul_reaper_AuraScript(); } @@ -2549,14 +2512,14 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_valkyr_target_search_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ICE_BURST)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _target = NULL; return true; @@ -2590,7 +2553,7 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), SPELL_CHARGE, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_valkyr_target_search_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_valkyr_target_search_SpellScript::ReplaceTarget, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -2600,44 +2563,12 @@ class spell_the_lich_king_valkyr_target_search : public SpellScriptLoader WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_valkyr_target_search_SpellScript(); } }; -class spell_the_lich_king_eject_all_passengers : public SpellScriptLoader -{ - public: - spell_the_lich_king_eject_all_passengers() : SpellScriptLoader("spell_the_lich_king_eject_all_passengers") { } - - class spell_the_lich_king_eject_all_passengers_SpellScript : public SpellScript - { - PrepareSpellScript(spell_the_lich_king_eject_all_passengers_SpellScript); - - bool Load() OVERRIDE - { - return GetCaster()->IsVehicle(); - } - - void HandleDummy(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetCaster()->GetVehicleKit()->RemoveAllPassengers(); - } - - void Register() OVERRIDE - { - OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_eject_all_passengers_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const OVERRIDE - { - return new spell_the_lich_king_eject_all_passengers_SpellScript(); - } -}; - class spell_the_lich_king_cast_back_to_caster : public SpellScriptLoader { public: @@ -2652,13 +2583,13 @@ class spell_the_lich_king_cast_back_to_caster : public SpellScriptLoader GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_cast_back_to_caster_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_cast_back_to_caster_SpellScript(); } @@ -2673,7 +2604,7 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_life_siphon_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LIFE_SIPHON_HEAL)) return false; @@ -2685,13 +2616,13 @@ class spell_the_lich_king_life_siphon : public SpellScriptLoader GetHitUnit()->CastCustomSpell(SPELL_LIFE_SIPHON_HEAL, SPELLVALUE_BASE_POINT0, GetHitDamage() * 10, GetCaster(), true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_the_lich_king_life_siphon_SpellScript::TriggerHeal); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_life_siphon_SpellScript(); } @@ -2706,7 +2637,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_vile_spirits_AuraScript); - bool Load() OVERRIDE + bool Load() override { _is25Man = GetUnitOwner()->GetMap()->Is25ManRaid(); return true; @@ -2718,7 +2649,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader GetTarget()->CastSpell((Unit*)NULL, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, NULL, aurEff, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_vile_spirits_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } @@ -2726,7 +2657,7 @@ class spell_the_lich_king_vile_spirits : public SpellScriptLoader bool _is25Man; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_vile_spirits_AuraScript(); } @@ -2747,13 +2678,13 @@ class spell_the_lich_king_vile_spirits_visual : public SpellScriptLoader const_cast<WorldLocation*>(GetExplTargetDest())->RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnEffectLaunch += SpellEffectFn(spell_the_lich_king_vile_spirits_visual_SpellScript::ModDestHeight, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_vile_spirits_visual_SpellScript(); } @@ -2768,7 +2699,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa { PrepareSpellScript(spell_the_lich_king_vile_spirit_move_target_search_SpellScript); - bool Load() OVERRIDE + bool Load() override { _target = NULL; return GetCaster()->GetTypeId() == TYPEID_UNIT; @@ -2793,7 +2724,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa GetCaster()->AddThreat(GetHitUnit(), 100000.0f); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_vile_spirit_move_target_search_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_vile_spirit_move_target_search_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); @@ -2802,7 +2733,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_vile_spirit_move_target_search_SpellScript(); } @@ -2817,7 +2748,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL { PrepareSpellScript(spell_the_lich_king_vile_spirit_damage_target_search_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2837,13 +2768,13 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_vile_spirit_damage_target_search_SpellScript::CheckTargetCount, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_vile_spirit_damage_target_search_SpellScript(); } @@ -2858,7 +2789,7 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_harvest_soul_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetOwner()->GetInstanceScript() != NULL; } @@ -2870,13 +2801,13 @@ class spell_the_lich_king_harvest_soul : public SpellScriptLoader GetTarget()->CastSpell((Unit*)NULL, SPELL_HARVESTED_SOUL, true, NULL, NULL, GetTarget()->GetInstanceScript()->GetData64(DATA_THE_LICH_KING)); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_harvest_soul_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_harvest_soul_AuraScript(); } @@ -2906,14 +2837,14 @@ class spell_the_lich_king_lights_favor : public SpellScriptLoader amount = int32(caster->GetHealthPct()); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_lights_favor_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_the_lich_king_lights_favor_AuraScript::CalculateBonus, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_lights_favor_AuraScript(); } @@ -2936,13 +2867,13 @@ class spell_the_lich_king_soul_rip : public SpellScriptLoader caster->CastCustomSpell(SPELL_SOUL_RIP_DAMAGE, SPELLVALUE_BASE_POINT0, 5000 * aurEff->GetTickNumber(), GetTarget(), true, NULL, aurEff, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_the_lich_king_soul_rip_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_soul_rip_AuraScript(); } @@ -2957,7 +2888,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_restore_soul_SpellScript); - bool Load() OVERRIDE + bool Load() override { _instance = GetCaster()->GetInstanceScript(); return _instance != NULL; @@ -2986,7 +2917,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader target->RemoveAurasDueToSpell(target->GetMap()->IsHeroic() ? SPELL_HARVEST_SOULS_TELEPORT : SPELL_HARVEST_SOUL_TELEPORT); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_the_lich_king_restore_soul_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA); BeforeHit += SpellHitFn(spell_the_lich_king_restore_soul_SpellScript::RemoveAura); @@ -2995,7 +2926,7 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader InstanceScript* _instance; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_restore_soul_SpellScript(); } @@ -3010,7 +2941,7 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_dark_hunger_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DARK_HUNGER_HEAL)) return false; @@ -3024,13 +2955,13 @@ class spell_the_lich_king_dark_hunger : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_the_lich_king_dark_hunger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_dark_hunger_AuraScript(); } @@ -3045,7 +2976,7 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader { PrepareAuraScript(spell_the_lich_king_in_frostmourne_room_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetOwner()->GetInstanceScript() != NULL; } @@ -3057,13 +2988,13 @@ class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader GetTarget()->CastSpell((Unit*)NULL, SPELL_HARVESTED_SOUL, true, NULL, NULL, GetTarget()->GetInstanceScript()->GetData64(DATA_THE_LICH_KING)); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_the_lich_king_in_frostmourne_room_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_the_lich_king_in_frostmourne_room_AuraScript(); } @@ -3084,13 +3015,13 @@ class spell_the_lich_king_summon_spirit_bomb : public SpellScriptLoader GetHitUnit()->CastSpell((Unit*)NULL, uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_summon_spirit_bomb_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_summon_spirit_bomb_SpellScript(); } @@ -3114,13 +3045,13 @@ class spell_the_lich_king_trigger_vile_spirit : public SpellScriptLoader VileSpiritActivateEvent(target).Execute(0, 0); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_the_lich_king_trigger_vile_spirit_SpellScript::ActivateSpirit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_trigger_vile_spirit_SpellScript(); } @@ -3144,13 +3075,13 @@ class spell_the_lich_king_jump : public SpellScriptLoader creature->AI()->DoAction(ACTION_BREAK_FROSTMOURNE); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_jump_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_jump_SpellScript(); } @@ -3171,13 +3102,13 @@ class spell_the_lich_king_jump_remove_aura : public SpellScriptLoader GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_jump_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_jump_SpellScript(); } @@ -3192,7 +3123,7 @@ class spell_the_lich_king_play_movie : public SpellScriptLoader { PrepareSpellScript(spell_the_lich_king_play_movie_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sMovieStore.LookupEntry(MOVIE_FALL_OF_THE_LICH_KING)) return false; @@ -3206,13 +3137,13 @@ class spell_the_lich_king_play_movie : public SpellScriptLoader player->SendMovieStart(MOVIE_FALL_OF_THE_LICH_KING); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_play_movie_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_the_lich_king_play_movie_SpellScript(); } @@ -3223,7 +3154,7 @@ class achievement_been_waiting_long_time : public AchievementCriteriaScript public: achievement_been_waiting_long_time() : AchievementCriteriaScript("achievement_been_waiting_long_time") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -3237,7 +3168,7 @@ class achievement_neck_deep_in_vile : public AchievementCriteriaScript public: achievement_neck_deep_in_vile() : AchievementCriteriaScript("achievement_neck_deep_in_vile") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -3270,7 +3201,6 @@ void AddSC_boss_the_lich_king() new spell_the_lich_king_summon_into_air(); new spell_the_lich_king_soul_reaper(); new spell_the_lich_king_valkyr_target_search(); - new spell_the_lich_king_eject_all_passengers(); new spell_the_lich_king_cast_back_to_caster(); new spell_the_lich_king_life_siphon(); new spell_the_lich_king_vile_spirits(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index e56bde39ae7..0c504842c08 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -284,7 +284,7 @@ class boss_valithria_dreamwalker : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) if (data->curhealth) @@ -294,7 +294,7 @@ class boss_valithria_dreamwalker : public CreatureScript Reset(); } - void Reset() OVERRIDE + void Reset() override { me->SetHealth(_spawnHealth); me->SetReactState(REACT_PASSIVE); @@ -312,11 +312,11 @@ class boss_valithria_dreamwalker : public CreatureScript _done = false; } - void AttackStart(Unit* /*target*/) OVERRIDE + void AttackStart(Unit* /*target*/) override { } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_ENTER_COMBAT) return; @@ -329,7 +329,7 @@ class boss_valithria_dreamwalker : public CreatureScript _events.ScheduleEvent(EVENT_BERSERK, 420000); } - void HealReceived(Unit* healer, uint32& heal) OVERRIDE + void HealReceived(Unit* healer, uint32& heal) override { if (!me->hasLootRecipient()) me->SetLootRecipient(healer); @@ -359,7 +359,7 @@ class boss_valithria_dreamwalker : public CreatureScript archmage->AI()->DoZoneInCombat(); // call EnterCombat on one of them, that will make it all start } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(25, damage)) { @@ -384,7 +384,7 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_DREAM_SLIP) { @@ -402,7 +402,7 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_DREAM_PORTAL_PRE_EFFECT) { @@ -416,14 +416,14 @@ class boss_valithria_dreamwalker : public CreatureScript } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { if (summon->GetEntry() == NPC_DREAM_PORTAL || summon->GetEntry() == NPC_NIGHTMARE_PORTAL) if (summon->AI()->GetData(MISSED_PORTALS)) ++_missedPortals; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // does not enter combat if (_instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) != IN_PROGRESS) @@ -460,7 +460,7 @@ class boss_valithria_dreamwalker : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == MISSED_PORTALS) return _missedPortals; @@ -480,7 +480,7 @@ class boss_valithria_dreamwalker : public CreatureScript bool _done; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_valithria_dreamwalkerAI>(creature); } @@ -497,13 +497,13 @@ class npc_green_dragon_combat_trigger : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_PASSIVE); } - void EnterCombat(Unit* target) OVERRIDE + void EnterCombat(Unit* target) override { if (!instance->CheckRequiredBosses(DATA_VALITHRIA_DREAMWALKER, target->ToPlayer())) { @@ -519,24 +519,24 @@ class npc_green_dragon_combat_trigger : public CreatureScript valithria->AI()->DoAction(ACTION_ENTER_COMBAT); } - void AttackStart(Unit* target) OVERRIDE + void AttackStart(Unit* target) override { if (target->GetTypeId() == TYPEID_PLAYER) BossAI::AttackStart(target); } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { return target->GetTypeId() == TYPEID_PLAYER; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); DoAction(ACTION_DEATH); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_DEATH) { @@ -545,7 +545,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->IsInCombat()) return; @@ -575,7 +575,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript bool _evadeCheck; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_green_dragon_combat_triggerAI>(creature); } @@ -593,7 +593,7 @@ class npc_the_lich_king_controller : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_GLUTTONOUS_ABOMINATION_SUMMONER, 5000); @@ -604,18 +604,18 @@ class npc_the_lich_king_controller : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->setActive(false); } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { Talk(SAY_LICH_KING_INTRO); me->setActive(true); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { // must not be in dream phase summon->SetPhaseMask((summon->GetPhaseMask() & ~0x10), true); @@ -624,7 +624,7 @@ class npc_the_lich_king_controller : public CreatureScript summon->AI()->AttackStart(target); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -664,7 +664,7 @@ class npc_the_lich_king_controller : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_the_lich_king_controllerAI>(creature); } @@ -682,12 +682,12 @@ class npc_risen_archmage : public CreatureScript { } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { return target->GetEntry() != NPC_VALITHRIA_DREAMWALKER; } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, urand(5000, 15000)); @@ -696,7 +696,7 @@ class npc_risen_archmage : public CreatureScript _canCallEnterCombat = true; } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { me->FinishSpell(CURRENT_CHANNELED_SPELL, false); if (me->GetDBTableGUIDLow() && _canCallEnterCombat) @@ -716,7 +716,7 @@ class npc_risen_archmage : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_ENTER_COMBAT) return; @@ -726,7 +726,7 @@ class npc_risen_archmage : public CreatureScript _canCallEnterCombat = true; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_COLUMN_OF_FROST) summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, 0, 8000), summon->m_Events.CalculateTime(2000)); @@ -734,7 +734,7 @@ class npc_risen_archmage : public CreatureScript summon->DespawnOrUnsummon(36000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) if (me->GetDBTableGUIDLow()) @@ -781,7 +781,7 @@ class npc_risen_archmage : public CreatureScript bool _canCallEnterCombat; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_risen_archmageAI>(creature); } @@ -798,14 +798,14 @@ class npc_blazing_skeleton : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_FIREBALL, urand(2000, 4000)); _events.ScheduleEvent(EVENT_LEY_WASTE, urand(15000, 20000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -840,7 +840,7 @@ class npc_blazing_skeleton : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_blazing_skeletonAI>(creature); } @@ -858,20 +858,20 @@ class npc_suppresser : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SUPPRESSION, urand(10000, 15000)); me->SetReactState(REACT_PASSIVE); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { if (Creature* valithria = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_VALITHRIA_DREAMWALKER))) AttackStart(valithria); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -906,7 +906,7 @@ class npc_suppresser : public CreatureScript InstanceScript* const _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_suppresserAI>(creature); } @@ -923,12 +923,12 @@ class npc_blistering_zombie : public CreatureScript { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_ACID_BURST, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -937,7 +937,7 @@ class npc_blistering_zombie : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_blistering_zombieAI>(creature); } @@ -954,18 +954,18 @@ class npc_gluttonous_abomination : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_GUT_SPRAY, urand(10000, 13000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_ROT_WORM_SPAWNER, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -995,7 +995,7 @@ class npc_gluttonous_abomination : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_gluttonous_abominationAI>(creature); } @@ -1013,7 +1013,7 @@ class npc_dream_portal : public CreatureScript { } - void OnSpellClick(Unit* /*clicker*/, bool& result) OVERRIDE + void OnSpellClick(Unit* /*clicker*/, bool& result) override { if (!result) return; @@ -1022,12 +1022,12 @@ class npc_dream_portal : public CreatureScript me->DespawnOrUnsummon(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return (type == MISSED_PORTALS && _used) ? 0 : 1; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { UpdateVictim(); } @@ -1036,7 +1036,7 @@ class npc_dream_portal : public CreatureScript bool _used; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_dream_portalAI>(creature); } @@ -1054,7 +1054,7 @@ class npc_dream_cloud : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_CHECK_PLAYER, 1000); @@ -1062,7 +1062,7 @@ class npc_dream_cloud : public CreatureScript me->LoadCreaturesAddon(true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // trigger if (_instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) != IN_PROGRESS) @@ -1100,7 +1100,7 @@ class npc_dream_cloud : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_dream_cloudAI>(creature); } @@ -1124,13 +1124,13 @@ class spell_dreamwalker_mana_void : public SpellScriptLoader PreventDefaultAction(); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_mana_void_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dreamwalker_mana_void_AuraScript(); } @@ -1145,7 +1145,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader { PrepareAuraScript(spell_dreamwalker_decay_periodic_timer_AuraScript); - bool Load() OVERRIDE + bool Load() override { _decayRate = GetId() != SPELL_TIMER_BLAZING_SKELETON ? 1000 : 5000; return true; @@ -1160,7 +1160,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader aurEff->SetPeriodicTimer(timer - _decayRate); } - void Register() OVERRIDE + void Register() override { OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_dreamwalker_decay_periodic_timer_AuraScript::DecayPeriodicTimer, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } @@ -1168,7 +1168,7 @@ class spell_dreamwalker_decay_periodic_timer : public SpellScriptLoader int32 _decayRate; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dreamwalker_decay_periodic_timer_AuraScript(); } @@ -1183,7 +1183,7 @@ class spell_dreamwalker_summoner : public SpellScriptLoader { PrepareSpellScript(spell_dreamwalker_summoner_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster()->GetInstanceScript()) return false; @@ -1210,14 +1210,14 @@ class spell_dreamwalker_summoner : public SpellScriptLoader GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING)); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dreamwalker_summoner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summoner_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dreamwalker_summoner_SpellScript(); } @@ -1252,13 +1252,13 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader caster->CastSpell(summoners.back(), SPELL_SUMMON_SUPPRESSER, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_summon_suppresser_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dreamwalker_summon_suppresser_AuraScript(); } @@ -1273,7 +1273,7 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader { PrepareSpellScript(spell_dreamwalker_summon_suppresser_effect_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster()->GetInstanceScript()) return false; @@ -1289,13 +1289,13 @@ class spell_dreamwalker_summon_suppresser_effect : public SpellScriptLoader GetHitUnit()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, GetCaster()->GetInstanceScript()->GetData64(DATA_VALITHRIA_LICH_KING)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_suppresser_effect_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dreamwalker_summon_suppresser_effect_SpellScript(); } @@ -1320,13 +1320,13 @@ class spell_dreamwalker_summon_dream_portal : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), spellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_dream_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dreamwalker_summon_dream_portal_SpellScript(); } @@ -1351,13 +1351,13 @@ class spell_dreamwalker_summon_nightmare_portal : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), spellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_summon_nightmare_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dreamwalker_summon_nightmare_portal_SpellScript(); } @@ -1372,7 +1372,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader { PrepareAuraScript(spell_dreamwalker_nightmare_cloud_AuraScript); - bool Load() OVERRIDE + bool Load() override { _instance = GetOwner()->GetInstanceScript(); return _instance != NULL; @@ -1384,7 +1384,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader PreventDefaultAction(); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_dreamwalker_nightmare_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } @@ -1392,7 +1392,7 @@ class spell_dreamwalker_nightmare_cloud : public SpellScriptLoader InstanceScript* _instance; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dreamwalker_nightmare_cloud_AuraScript(); } @@ -1418,13 +1418,13 @@ class spell_dreamwalker_twisted_nightmares : public SpellScriptLoader GetHitUnit()->CastSpell((Unit*)NULL, GetSpellInfo()->Effects[effIndex].TriggerSpell, true, NULL, NULL, instance->GetData64(DATA_VALITHRIA_DREAMWALKER)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dreamwalker_twisted_nightmares_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_FORCE_CAST); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dreamwalker_twisted_nightmares_SpellScript(); } @@ -1435,7 +1435,7 @@ class achievement_portal_jockey : public AchievementCriteriaScript public: achievement_portal_jockey() : AchievementCriteriaScript("achievement_portal_jockey") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && !target->GetAI()->GetData(MISSED_PORTALS); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index ca2c75e502c..592c44940a4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -387,7 +387,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _theLichKing = 0; @@ -398,7 +398,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript // IMPORTANT NOTE: This is triggered from per-GUID scripts // of The Damned SAI - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_DAMNED_KILLS && data == 1) { @@ -460,7 +460,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_damnedKills != 2) return; @@ -581,7 +581,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript uint16 _damnedKills; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_highlord_tirion_fordringAI>(creature); } @@ -598,7 +598,7 @@ class npc_rotting_frost_giant : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000); @@ -606,12 +606,12 @@ class npc_rotting_frost_giant : public CreatureScript _events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(10000, 15000)); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _events.Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -653,7 +653,7 @@ class npc_rotting_frost_giant : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_rotting_frost_giantAI>(creature); } @@ -671,7 +671,7 @@ class npc_frost_freeze_trap : public CreatureScript SetCombatMovement(false); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -684,7 +684,7 @@ class npc_frost_freeze_trap : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -699,7 +699,7 @@ class npc_frost_freeze_trap : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_frost_freeze_trapAI>(creature); } @@ -710,7 +710,7 @@ class npc_alchemist_adrianna : public CreatureScript public: npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (!creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25)) if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE)) @@ -731,7 +731,7 @@ class boss_sister_svalna : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (!me->isDead()) Reset(); @@ -739,14 +739,14 @@ class boss_sister_svalna : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_DEFENSIVE); _isEventInProgress = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_SVALNA_DEATH); @@ -765,7 +765,7 @@ class boss_sister_svalna : public CreatureScript } } - void EnterCombat(Unit* /*attacker*/) OVERRIDE + void EnterCombat(Unit* /*attacker*/) override { _EnterCombat(); if (Creature* crok = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_CROK_SCOURGEBANE))) @@ -775,7 +775,7 @@ class boss_sister_svalna : public CreatureScript events.ScheduleEvent(EVENT_AETHER_SHIELD, urand(100000, 110000)); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { switch (victim->GetTypeId()) { @@ -800,7 +800,7 @@ class boss_sister_svalna : public CreatureScript } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { _JustReachedHome(); me->SetReactState(REACT_PASSIVE); @@ -808,7 +808,7 @@ class boss_sister_svalna : public CreatureScript me->SetHover(false); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -836,7 +836,7 @@ class boss_sister_svalna : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_HURL_SPEAR && me->HasAura(SPELL_AETHER_SHIELD)) { @@ -845,7 +845,7 @@ class boss_sister_svalna : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != EFFECT_MOTION_TYPE || id != POINT_LAND) return; @@ -857,7 +857,7 @@ class boss_sister_svalna : public CreatureScript me->SetHover(false); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { switch (spell->Id) { @@ -877,7 +877,7 @@ class boss_sister_svalna : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !_isEventInProgress) return; @@ -922,7 +922,7 @@ class boss_sister_svalna : public CreatureScript bool _isEventInProgress; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<boss_sister_svalnaAI>(creature); } @@ -946,7 +946,7 @@ class npc_crok_scourgebane : public CreatureScript _didUnderTenPercentText = false; } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, urand(7500, 12500)); @@ -956,7 +956,7 @@ class npc_crok_scourgebane : public CreatureScript _wipeCheckTimer = 1000; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_GAUNTLET) { @@ -988,7 +988,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void SetGUID(uint64 guid, int32 type/* = 0*/) OVERRIDE + void SetGUID(uint64 guid, int32 type/* = 0*/) override { if (type == ACTION_VRYKUL_DEATH) { @@ -1008,7 +1008,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -1038,7 +1038,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void WaypointStart(uint32 waypointId) OVERRIDE + void WaypointStart(uint32 waypointId) override { _currentWPid = waypointId; switch (waypointId) @@ -1086,7 +1086,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { // check wipe if (!_wipeCheckTimer) @@ -1128,7 +1128,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void UpdateEscortAI(uint32 const diff) OVERRIDE + void UpdateEscortAI(uint32 const diff) override { if (_wipeCheckTimer <= diff) _wipeCheckTimer = 0; @@ -1186,7 +1186,7 @@ class npc_crok_scourgebane : public CreatureScript DoMeleeAttackIfReady(); } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { // do not see targets inside Frostwing Halls when we are not there return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f); @@ -1205,7 +1205,7 @@ class npc_crok_scourgebane : public CreatureScript bool _didUnderTenPercentText; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_crok_scourgebaneAI>(creature); } @@ -1221,7 +1221,7 @@ struct npc_argent_captainAI : public ScriptedAI IsUndead = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (_firstDeath) { @@ -1232,13 +1232,13 @@ struct npc_argent_captainAI : public ScriptedAI Talk(SAY_CAPTAIN_SECOND_DEATH); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_CAPTAIN_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_START_GAUNTLET) { @@ -1258,20 +1258,20 @@ struct npc_argent_captainAI : public ScriptedAI } } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { me->SetHomePosition(*me); if (IsUndead) DoZoneInCombat(); } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { // do not see targets inside Frostwing Halls when we are not there return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { // not yet following if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_IDLE) != CHASE_MOTION_TYPE || IsUndead) @@ -1293,7 +1293,7 @@ struct npc_argent_captainAI : public ScriptedAI Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_REVIVE_CHAMPION && !IsUndead) { @@ -1319,7 +1319,7 @@ struct npc_argent_captainAI : public ScriptedAI } Talk(SAY_CAPTAIN_RESURRECTED); - me->UpdateEntry(newEntry, instance->GetData(DATA_TEAM_IN_INSTANCE), me->GetCreatureData()); + me->UpdateEntry(newEntry, me->GetCreatureData()); DoCast(me, SPELL_UNDEATH, true); } } @@ -1346,7 +1346,7 @@ class npc_captain_arnath : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, urand(4000, 7000)); @@ -1356,7 +1356,7 @@ class npc_captain_arnath : public CreatureScript Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, urand(22000, 27000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1410,7 +1410,7 @@ class npc_captain_arnath : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_captain_arnathAI>(creature); } @@ -1427,7 +1427,7 @@ class npc_captain_brandon : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, urand(6000, 10000)); @@ -1437,7 +1437,7 @@ class npc_captain_brandon : public CreatureScript Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, urand(25000, 30000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1478,7 +1478,7 @@ class npc_captain_brandon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_captain_brandonAI>(creature); } @@ -1495,7 +1495,7 @@ class npc_captain_grondel : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500); @@ -1505,7 +1505,7 @@ class npc_captain_grondel : public CreatureScript Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, urand(12000, 17000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1545,7 +1545,7 @@ class npc_captain_grondel : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_captain_grondelAI>(creature); } @@ -1562,7 +1562,7 @@ class npc_captain_rupert : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { Events.Reset(); Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, urand(15000, 20000)); @@ -1570,7 +1570,7 @@ class npc_captain_rupert : public CreatureScript Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, urand(10000, 15000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1608,7 +1608,7 @@ class npc_captain_rupert : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI<npc_captain_rupertAI>(creature); } @@ -1625,14 +1625,14 @@ class npc_frostwing_vrykul : public CreatureScript { } - bool CanAIAttack(Unit const* target) const OVERRIDE + bool CanAIAttack(Unit const* target) const override { // do not see targets inside Frostwing Halls when we are not there return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f) && SmartAI::CanAIAttack(target); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_frostwing_vrykulAI(creature); } @@ -1649,13 +1649,13 @@ class npc_impaling_spear : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); _vehicleCheckTimer = 500; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_vehicleCheckTimer <= diff) { @@ -1670,7 +1670,7 @@ class npc_impaling_spear : public CreatureScript uint32 _vehicleCheckTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_impaling_spearAI(creature); } @@ -1687,7 +1687,7 @@ class npc_arthas_teleport_visual : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); if (_instance->GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && @@ -1696,7 +1696,7 @@ class npc_arthas_teleport_visual : public CreatureScript _events.ScheduleEvent(EVENT_SOUL_MISSILE, urand(1000, 6000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_events.Empty()) return; @@ -1715,7 +1715,7 @@ class npc_arthas_teleport_visual : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { // Distance from the center of the spire if (creature->GetExactDist2d(4357.052f, 2769.421f) < 100.0f && creature->GetHomePosition().GetPositionZ() < 315.0f) @@ -1755,14 +1755,14 @@ class spell_icc_stoneform : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_icc_stoneform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_icc_stoneform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_icc_stoneform_AuraScript(); } @@ -1800,7 +1800,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader } if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f)) - trap->SetRespawnTime(trap->GetGOInfo()->trap.autoCloseTime); + trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime()); std::list<Creature*> wards; GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f); @@ -1818,13 +1818,13 @@ class spell_icc_sprit_alarm : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_icc_sprit_alarm_SpellScript::HandleEvent, EFFECT_2, SPELL_EFFECT_SEND_EVENT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_icc_sprit_alarm_SpellScript(); } @@ -1862,7 +1862,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader { PrepareSpellScript(spell_frost_giant_death_plague_SpellScript); - bool Load() OVERRIDE + bool Load() override { _failed = false; return true; @@ -1899,7 +1899,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_DEATH_PLAGUE_KILL, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_frost_giant_death_plague_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY); @@ -1909,7 +1909,7 @@ class spell_frost_giant_death_plague : public SpellScriptLoader bool _failed; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_frost_giant_death_plague_SpellScript(); } @@ -1935,14 +1935,14 @@ class spell_icc_harvest_blight_specimen : public SpellScriptLoader GetHitUnit()->RemoveAurasDueToSpell(uint32(GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); OnEffectHitTarget += SpellEffectFn(spell_icc_harvest_blight_specimen_SpellScript::HandleQuestComplete, EFFECT_1, SPELL_EFFECT_QUEST_COMPLETE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_icc_harvest_blight_specimen_SpellScript(); } @@ -1980,23 +1980,21 @@ class spell_svalna_revive_champion : public SpellScriptLoader if (!caster) return; - Position pos; - caster->GetPosition(&pos); - caster->GetNearPosition(pos, 5.0f, 0.0f); + Position pos = caster->GetNearPosition(5.0f, 0.0f); //pos.m_positionZ = caster->GetBaseMap()->GetHeight(caster->GetPhaseMask(), pos.GetPositionX(), pos.GetPositionY(), caster->GetPositionZ(), true, 50.0f); //pos.m_positionZ += 0.05f; caster->SetHomePosition(pos); caster->GetMotionMaster()->MoveLand(POINT_LAND, pos); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_svalna_revive_champion_SpellScript::RemoveAliveTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ENTRY); OnEffectHit += SpellEffectFn(spell_svalna_revive_champion_SpellScript::Land, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_svalna_revive_champion_SpellScript(); } @@ -2022,13 +2020,13 @@ class spell_svalna_remove_spear : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_svalna_remove_spear_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_svalna_remove_spear_SpellScript(); } @@ -2050,13 +2048,13 @@ class spell_icc_soul_missile : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_icc_soul_missile_SpellScript::RelocateDest, EFFECT_0, TARGET_DEST_CASTER); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_icc_soul_missile_SpellScript(); } @@ -2067,7 +2065,7 @@ class at_icc_saurfang_portal : public AreaTriggerScript public: at_icc_saurfang_portal() : AreaTriggerScript("at_icc_saurfang_portal") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) @@ -2101,7 +2099,7 @@ class at_icc_shutdown_traps : public AreaTriggerScript public: at_icc_shutdown_traps() : AreaTriggerScript("at_icc_shutdown_traps") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) instance->SetData(DATA_COLDFLAME_JETS, DONE); @@ -2114,7 +2112,7 @@ class at_icc_start_blood_quickening : public AreaTriggerScript public: at_icc_start_blood_quickening() : AreaTriggerScript("at_icc_start_blood_quickening") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) if (instance->GetData(DATA_BLOOD_QUICKENING_STATE) == NOT_STARTED) @@ -2128,7 +2126,7 @@ class at_icc_start_frostwing_gauntlet : public AreaTriggerScript public: at_icc_start_frostwing_gauntlet() : AreaTriggerScript("at_icc_start_frostwing_gauntlet") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) if (Creature* crok = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_CROK_SCOURGEBANE))) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 8e529ba0ee9..7b00f2f19d7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -68,7 +68,7 @@ enum TeleporterSpells DEATHBRINGER_S_RISE_TELEPORT = 70858, UPPER_SPIRE_TELEPORT = 70859, FROZEN_THRONE_TELEPORT = 70860, - SINDRAGOSA_S_LAIR_TELEPORT = 70861, + SINDRAGOSA_S_LAIR_TELEPORT = 70861 }; enum DataTypes @@ -76,7 +76,7 @@ enum DataTypes // Encounter States/Boss GUIDs DATA_LORD_MARROWGAR = 0, DATA_LADY_DEATHWHISPER = 1, - DATA_GUNSHIP_EVENT = 2, + DATA_ICECROWN_GUNSHIP_BATTLE = 2, DATA_DEATHBRINGER_SAURFANG = 3, DATA_FESTERGUT = 4, DATA_ROTFACE = 5, @@ -116,6 +116,7 @@ enum DataTypes DATA_HIGHLORD_TIRION_FORDRING = 37, DATA_ARTHAS_PLATFORM = 38, DATA_TERENAS_MENETHIL = 39, + DATA_ENEMY_GUNSHIP = 40 }; enum CreaturesIds @@ -169,6 +170,33 @@ enum CreaturesIds NPC_REANIMATED_ADHERENT = 38010, NPC_VENGEFUL_SHADE = 38222, + // Icecrown Gunship Battle + NPC_MARTYR_STALKER_IGB_SAURFANG = 38569, + NPC_ALLIANCE_GUNSHIP_CANNON = 36838, + NPC_HORDE_GUNSHIP_CANNON = 36839, + NPC_SKYBREAKER_DECKHAND = 36970, + NPC_ORGRIMS_HAMMER_CREW = 36971, + NPC_IGB_HIGH_OVERLORD_SAURFANG = 36939, + NPC_IGB_MURADIN_BRONZEBEARD = 36948, + NPC_THE_SKYBREAKER = 37540, + NPC_ORGRIMS_HAMMER = 37215, + NPC_GUNSHIP_HULL = 37547, + NPC_TELEPORT_PORTAL = 37227, + NPC_TELEPORT_EXIT = 37488, + NPC_SKYBREAKER_SORCERER = 37116, + NPC_SKYBREAKER_RIFLEMAN = 36969, + NPC_SKYBREAKER_MORTAR_SOLDIER = 36978, + NPC_SKYBREAKER_MARINE = 36950, + NPC_SKYBREAKER_SERGEANT = 36961, + NPC_KOR_KRON_BATTLE_MAGE = 37117, + NPC_KOR_KRON_AXETHROWER = 36968, + NPC_KOR_KRON_ROCKETEER = 36982, + NPC_KOR_KRON_REAVER = 36957, + NPC_KOR_KRON_SERGEANT = 36960, + NPC_ZAFOD_BOOMBOX = 37184, + NPC_HIGH_CAPTAIN_JUSTIN_BARTLETT = 37182, + NPC_SKY_REAVER_KORM_BLACKSCAR = 37833, + // Deathbringer Saurfang NPC_DEATHBRINGER_SAURFANG = 37813, NPC_BLOOD_BEAST = 38508, @@ -285,7 +313,7 @@ enum CreaturesIds NPC_FROSTMOURNE_TRIGGER = 38584, // Generic - NPC_INVISIBLE_STALKER = 30298, + NPC_INVISIBLE_STALKER = 30298 }; enum GameObjectsIds @@ -305,6 +333,22 @@ enum GameObjectsIds GO_ORATORY_OF_THE_DAMNED_ENTRANCE = 201563, GO_LADY_DEATHWHISPER_ELEVATOR = 202220, + // Icecrown Gunship Battle - Horde raid + GO_ORGRIMS_HAMMER_H = 201812, + GO_THE_SKYBREAKER_H = 201811, + GO_GUNSHIP_ARMORY_H_10N = 202178, + GO_GUNSHIP_ARMORY_H_25N = 202180, + GO_GUNSHIP_ARMORY_H_10H = 202177, + GO_GUNSHIP_ARMORY_H_25H = 202179, + + // Icecrown Gunship Battle - Alliance raid + GO_ORGRIMS_HAMMER_A = 201581, + GO_THE_SKYBREAKER_A = 201580, + GO_GUNSHIP_ARMORY_A_10N = 201873, + GO_GUNSHIP_ARMORY_A_25N = 201874, + GO_GUNSHIP_ARMORY_A_10H = 201872, + GO_GUNSHIP_ARMORY_A_25H = 201875, + // Deathbringer Saurfang GO_SAURFANG_S_DOOR = 201825, GO_DEATHBRINGER_S_CACHE_10N = 202239, @@ -368,7 +412,7 @@ enum GameObjectsIds GO_DOODAD_ICECROWN_SNOWEDGEWARNING01 = 202190, GO_FROZEN_LAVAMAN = 202436, GO_LAVAMAN_PILLARS_CHAINED = 202437, - GO_LAVAMAN_PILLARS_UNCHAINED = 202438, + GO_LAVAMAN_PILLARS_UNCHAINED = 202438 }; enum AchievementCriteriaIds @@ -403,11 +447,15 @@ enum AchievementCriteriaIds CRITERIA_ONCE_BITTEN_TWICE_SHY_10N = 12780, CRITERIA_ONCE_BITTEN_TWICE_SHY_25N = 13012, CRITERIA_ONCE_BITTEN_TWICE_SHY_10V = 13011, - CRITERIA_ONCE_BITTEN_TWICE_SHY_25V = 13013, + CRITERIA_ONCE_BITTEN_TWICE_SHY_25V = 13013 }; enum SharedActions { + // Icecrown Gunship Battle + ACTION_ENEMY_GUNSHIP_TALK = -369390, + ACTION_EXIT_SHIP = -369391, + // Festergut ACTION_FESTERGUT_COMBAT = -366260, ACTION_FESTERGUT_GAS = -366261, @@ -431,7 +479,7 @@ enum SharedActions // The Lich King ACTION_RESTORE_LIGHT = -72262, - ACTION_FROSTMOURNE_INTRO = -36823, + ACTION_FROSTMOURNE_INTRO = -36823 }; enum WeekliesICC @@ -445,7 +493,7 @@ enum WeekliesICC QUEST_BLOOD_QUICKENING_10 = 24874, QUEST_BLOOD_QUICKENING_25 = 24879, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10 = 24872, - QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25 = 24880, + QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25 = 24880 }; enum WorldStatesICC @@ -454,12 +502,13 @@ enum WorldStatesICC WORLDSTATE_EXECUTION_TIME = 4904, WORLDSTATE_SHOW_ATTEMPTS = 4940, WORLDSTATE_ATTEMPTS_REMAINING = 4941, - WORLDSTATE_ATTEMPTS_MAX = 4942, + WORLDSTATE_ATTEMPTS_MAX = 4942 }; enum AreaIds { - AREA_THE_FROZEN_THRONE = 4859, + AREA_ICECROWN_CITADEL = 4812, + AREA_THE_FROZEN_THRONE = 4859 }; class spell_trigger_spell_from_caster : public SpellScriptLoader @@ -474,7 +523,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader public: spell_trigger_spell_from_caster_SpellScript(uint32 triggerId) : SpellScript(), _triggerId(triggerId) { } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(_triggerId)) return false; @@ -486,7 +535,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), _triggerId, true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_trigger_spell_from_caster_SpellScript::HandleTrigger); } @@ -494,7 +543,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader uint32 _triggerId; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_trigger_spell_from_caster_SpellScript(_triggerId); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp index ad06bc1c485..537c3c7354d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp @@ -29,7 +29,7 @@ class icecrown_citadel_teleport : public GameObjectScript public: icecrown_citadel_teleport() : GameObjectScript("icecrown_citadel_teleport") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT); if (InstanceScript* instance = go->GetInstanceScript()) @@ -38,7 +38,7 @@ class icecrown_citadel_teleport : public GameObjectScript player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT); if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Rampart of Skulls.", GOSSIP_SENDER_ICC_PORT, RAMPART_OF_SKULLS_TELEPORT); - if (instance->GetBossState(DATA_GUNSHIP_EVENT) == DONE) + if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT); if (instance->GetData(DATA_COLDFLAME_JETS) == DONE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT); @@ -51,7 +51,7 @@ class icecrown_citadel_teleport : public GameObjectScript return true; } - bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); player->CLOSE_GOSSIP_MENU(); @@ -77,7 +77,7 @@ class at_frozen_throne_teleport : public AreaTriggerScript public: at_frozen_throne_teleport() : AreaTriggerScript("at_frozen_throne_teleport") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (player->IsInCombat()) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index edd80377d68..514a2b52475 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -15,23 +15,30 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ObjectMgr.h" -#include "ScriptMgr.h" +#include "AccountMgr.h" #include "InstanceScript.h" -#include "ScriptedCreature.h" #include "Map.h" -#include "PoolMgr.h" -#include "AccountMgr.h" -#include "icecrown_citadel.h" +#include "ObjectMgr.h" #include "Player.h" +#include "PoolMgr.h" +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "Transport.h" +#include "TransportMgr.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "icecrown_citadel.h" enum EventIds { + EVENT_PLAYERS_GUNSHIP_SPAWN = 22663, + EVENT_PLAYERS_GUNSHIP_COMBAT = 22664, + EVENT_PLAYERS_GUNSHIP_SAURFANG = 22665, + EVENT_ENEMY_GUNSHIP_COMBAT = 22860, + EVENT_ENEMY_GUNSHIP_DESPAWN = 22861, EVENT_QUAKE = 23437, EVENT_SECOND_REMORSELESS_WINTER = 23507, - EVENT_TELEPORT_TO_FROSMOURNE = 23617, + EVENT_TELEPORT_TO_FROSTMOURNE = 23617 }; enum TimedEvents @@ -39,6 +46,7 @@ enum TimedEvents EVENT_UPDATE_EXECUTION_TIME = 1, EVENT_QUAKE_SHATTER = 2, EVENT_REBUILD_PLATFORM = 3, + EVENT_RESPAWN_GUNSHIP = 4 }; DoorData const doorData[] = @@ -68,7 +76,7 @@ DoorData const doorData[] = {GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SE }, {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SW }, - {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE}, // END + {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END }; // this doesnt have to only store questgivers, also can be used for related quest spawns @@ -89,7 +97,7 @@ WeeklyQuest const WeeklyQuestData[WeeklyNPCs] = {NPC_ALRIN_THE_AGILE, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening {NPC_INFILTRATOR_MINCHAR_BQ, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening {NPC_MINCHAR_BEAM_STALKER, {QUEST_BLOOD_QUICKENING_10, QUEST_BLOOD_QUICKENING_25 }}, // Blood Quickening - {NPC_VALITHRIA_DREAMWALKER_QUEST, {QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25}}, // Respite for a Tormented Soul + {NPC_VALITHRIA_DREAMWALKER_QUEST, {QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_10, QUEST_RESPITE_FOR_A_TORNMENTED_SOUL_25}} // Respite for a Tormented Soul }; class instance_icecrown_citadel : public InstanceMapScript @@ -106,6 +114,9 @@ class instance_icecrown_citadel : public InstanceMapScript TeamInInstance = 0; HeroicAttempts = MaxHeroicAttempts; LadyDeathwisperElevatorGUID = 0; + GunshipGUID = 0; + EnemyGunshipGUID = 0; + GunshipArmoryGUID = 0; DeathbringerSaurfangGUID = 0; DeathbringerSaurfangDoorGUID = 0; DeathbringerSaurfangEventGUID = 0; @@ -151,7 +162,7 @@ class instance_icecrown_citadel : public InstanceMapScript BloodQuickeningMinutes = 0; } - void FillInitialWorldStates(WorldPacket& data) OVERRIDE + void FillInitialWorldStates(WorldPacket& data) override { data << uint32(WORLDSTATE_SHOW_TIMER) << uint32(BloodQuickeningState == IN_PROGRESS); data << uint32(WORLDSTATE_EXECUTION_TIME) << uint32(BloodQuickeningMinutes); @@ -160,13 +171,16 @@ class instance_icecrown_citadel : public InstanceMapScript data << uint32(WORLDSTATE_ATTEMPTS_MAX) << uint32(MaxHeroicAttempts); } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (!TeamInInstance) TeamInInstance = player->GetTeam(); + + if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE) + SpawnGunship(); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (!TeamInInstance) { @@ -180,46 +194,50 @@ class instance_icecrown_citadel : public InstanceMapScript { case NPC_KOR_KRON_GENERAL: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALLIANCE_COMMANDER, ALLIANCE); + creature->UpdateEntry(NPC_ALLIANCE_COMMANDER); break; case NPC_KOR_KRON_LIEUTENANT: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_SKYBREAKER_LIEUTENANT, ALLIANCE); + creature->UpdateEntry(NPC_SKYBREAKER_LIEUTENANT); break; case NPC_TORTUNOK: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_ALANA_MOONSTRIKE, ALLIANCE); + creature->UpdateEntry(NPC_ALANA_MOONSTRIKE); break; case NPC_GERARDO_THE_SUAVE: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_TALAN_MOONSTRIKE, ALLIANCE); + creature->UpdateEntry(NPC_TALAN_MOONSTRIKE); break; case NPC_UVLUS_BANEFIRE: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_MALFUS_GRIMFROST, ALLIANCE); + creature->UpdateEntry(NPC_MALFUS_GRIMFROST); break; case NPC_IKFIRUS_THE_VILE: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_YILI, ALLIANCE); + creature->UpdateEntry(NPC_YILI); break; case NPC_VOL_GUK: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_JEDEBIA, ALLIANCE); + creature->UpdateEntry(NPC_JEDEBIA); break; case NPC_HARAGG_THE_UNSEEN: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_NIBY_THE_ALMIGHTY, ALLIANCE); + creature->UpdateEntry(NPC_NIBY_THE_ALMIGHTY); break; case NPC_GARROSH_HELLSCREAM: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_KING_VARIAN_WRYNN, ALLIANCE); + creature->UpdateEntry(NPC_KING_VARIAN_WRYNN); break; case NPC_DEATHBRINGER_SAURFANG: DeathbringerSaurfangGUID = creature->GetGUID(); break; + case NPC_ALLIANCE_GUNSHIP_CANNON: + case NPC_HORDE_GUNSHIP_CANNON: + creature->SetControlled(true, UNIT_STATE_ROOT); + break; case NPC_SE_HIGH_OVERLORD_SAURFANG: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, ALLIANCE, creature->GetCreatureData()); + creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, creature->GetCreatureData()); // no break; case NPC_SE_MURADIN_BRONZEBEARD: DeathbringerSaurfangEventGUID = creature->GetGUID(); @@ -227,7 +245,7 @@ class instance_icecrown_citadel : public InstanceMapScript break; case NPC_SE_KOR_KRON_REAVER: if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE, ALLIANCE); + creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE); break; case NPC_FESTERGUT: FestergutGUID = creature->GetGUID(); @@ -309,7 +327,7 @@ class instance_icecrown_citadel : public InstanceMapScript } } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { if (creature->GetEntry() == NPC_SINDRAGOSA) SindragosaGUID = 0; @@ -335,12 +353,60 @@ class instance_icecrown_citadel : public InstanceMapScript { uint8 diffIndex = uint8(instance->GetSpawnMode() & 1); if (!sPoolMgr->IsSpawnedObject<Quest>(WeeklyQuestData[questIndex].questId[diffIndex])) - entry = 0; + return 0; break; } } break; } + case NPC_HORDE_GUNSHIP_CANNON: + case NPC_ORGRIMS_HAMMER_CREW: + case NPC_SKY_REAVER_KORM_BLACKSCAR: + if (TeamInInstance == ALLIANCE) + return 0; + break; + case NPC_ALLIANCE_GUNSHIP_CANNON: + case NPC_SKYBREAKER_DECKHAND: + case NPC_HIGH_CAPTAIN_JUSTIN_BARTLETT: + if (TeamInInstance == HORDE) + return 0; + break; + case NPC_ZAFOD_BOOMBOX: + if (GameObjectTemplate const* go = sObjectMgr->GetGameObjectTemplate(GO_THE_SKYBREAKER_A)) + if ((TeamInInstance == ALLIANCE && data->mapid == go->moTransport.mapID) || + (TeamInInstance == HORDE && data->mapid != go->moTransport.mapID)) + return entry; + return 0; + case NPC_IGB_MURADIN_BRONZEBEARD: + if ((TeamInInstance == ALLIANCE && data->posX > 10.0f) || + (TeamInInstance == HORDE && data->posX < 10.0f)) + return entry; + return 0; + default: + break; + } + + return entry; + } + + uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override + { + switch (entry) + { + case GO_GUNSHIP_ARMORY_H_10N: + case GO_GUNSHIP_ARMORY_H_25N: + case GO_GUNSHIP_ARMORY_H_10H: + case GO_GUNSHIP_ARMORY_H_25H: + if (TeamInInstance == ALLIANCE) + return 0; + break; + case GO_GUNSHIP_ARMORY_A_10N: + case GO_GUNSHIP_ARMORY_A_25N: + case GO_GUNSHIP_ARMORY_A_10H: + case GO_GUNSHIP_ARMORY_A_25H: + if (TeamInInstance == HORDE) + return 0; + break; default: break; } @@ -348,7 +414,7 @@ class instance_icecrown_citadel : public InstanceMapScript return entry; } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) @@ -406,7 +472,7 @@ class instance_icecrown_citadel : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -446,6 +512,20 @@ class instance_icecrown_citadel : public InstanceMapScript go->SetGoState(GO_STATE_READY); } break; + case GO_THE_SKYBREAKER_H: + case GO_ORGRIMS_HAMMER_A: + EnemyGunshipGUID = go->GetGUID(); + break; + case GO_GUNSHIP_ARMORY_H_10N: + case GO_GUNSHIP_ARMORY_H_25N: + case GO_GUNSHIP_ARMORY_H_10H: + case GO_GUNSHIP_ARMORY_H_25H: + case GO_GUNSHIP_ARMORY_A_10N: + case GO_GUNSHIP_ARMORY_A_25N: + case GO_GUNSHIP_ARMORY_A_10H: + case GO_GUNSHIP_ARMORY_A_25H: + GunshipArmoryGUID = go->GetGUID(); + break; case GO_SAURFANG_S_DOOR: DeathbringerSaurfangDoorGUID = go->GetGUID(); AddDoor(go, true); @@ -558,7 +638,7 @@ class instance_icecrown_citadel : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -587,12 +667,16 @@ class instance_icecrown_citadel : public InstanceMapScript case GO_ICE_WALL: AddDoor(go, false); break; + case GO_THE_SKYBREAKER_A: + case GO_ORGRIMS_HAMMER_H: + GunshipGUID = 0; + break; default: break; } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -617,10 +701,14 @@ class instance_icecrown_citadel : public InstanceMapScript return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { + case DATA_ICECROWN_GUNSHIP_BATTLE: + return GunshipGUID; + case DATA_ENEMY_GUNSHIP: + return EnemyGunshipGUID; case DATA_DEATHBRINGER_SAURFANG: return DeathbringerSaurfangGUID; case DATA_SAURFANG_EVENT_NPC: @@ -683,7 +771,7 @@ class instance_icecrown_citadel : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -691,7 +779,7 @@ class instance_icecrown_citadel : public InstanceMapScript switch (type) { case DATA_LADY_DEATHWHISPER: - SetBossState(DATA_GUNSHIP_EVENT, state); // TEMP HACK UNTIL GUNSHIP SCRIPTED + { if (state == DONE) { if (GameObject* elevator = instance->GetGameObject(LadyDeathwisperElevatorGUID)) @@ -699,7 +787,19 @@ class instance_icecrown_citadel : public InstanceMapScript elevator->SetUInt32Value(GAMEOBJECT_LEVEL, 0); elevator->SetGoState(GO_STATE_READY); } + + SpawnGunship(); + } + break; + } + case DATA_ICECROWN_GUNSHIP_BATTLE: + if (state == DONE) + { + if (GameObject* loot = instance->GetGameObject(GunshipArmoryGUID)) + loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); } + else if (state == FAIL) + Events.ScheduleEvent(EVENT_RESPAWN_GUNSHIP, 30000); break; case DATA_DEATHBRINGER_SAURFANG: switch (state) @@ -846,7 +946,18 @@ class instance_icecrown_citadel : public InstanceMapScript return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SpawnGunship() + { + if (!GunshipGUID) + { + SetBossState(DATA_ICECROWN_GUNSHIP_BATTLE, NOT_STARTED); + uint32 gunshipEntry = TeamInInstance == HORDE ? GO_ORGRIMS_HAMMER_H : GO_THE_SKYBREAKER_A; + if (Transport* gunship = sTransportMgr->CreateTransport(gunshipEntry, 0, instance)) + GunshipGUID = gunship->GetGUID(); + } + } + + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -912,7 +1023,7 @@ class instance_icecrown_citadel : public InstanceMapScript } } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE + bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override { switch (criteria_id) { @@ -952,7 +1063,7 @@ class instance_icecrown_citadel : public InstanceMapScript return false; } - bool CheckRequiredBosses(uint32 bossId, Player const* player = NULL) const OVERRIDE + bool CheckRequiredBosses(uint32 bossId, Player const* player = NULL) const override { if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES)) return true; @@ -1066,10 +1177,10 @@ class instance_icecrown_citadel : public InstanceMapScript return false; // no break case DATA_DEATHBRINGER_SAURFANG: - if (GetBossState(DATA_GUNSHIP_EVENT) != DONE) + if (GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE) return false; // no break - case DATA_GUNSHIP_EVENT: + case DATA_ICECROWN_GUNSHIP_BATTLE: if (GetBossState(DATA_LADY_DEATHWHISPER) != DONE) return false; // no break @@ -1107,7 +1218,7 @@ class instance_icecrown_citadel : public InstanceMapScript } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -1119,7 +1230,7 @@ class instance_icecrown_citadel : public InstanceMapScript return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -1161,9 +1272,9 @@ class instance_icecrown_citadel : public InstanceMapScript OUT_LOAD_INST_DATA_COMPLETE; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { - if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS) + if (BloodQuickeningState != IN_PROGRESS && GetBossState(DATA_THE_LICH_KING) != IN_PROGRESS && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != FAIL) return; Events.Update(diff); @@ -1213,16 +1324,42 @@ class instance_icecrown_citadel : public InstanceMapScript if (GameObject* wind = instance->GetGameObject(FrozenThroneWindGUID)) wind->SetGoState(GO_STATE_ACTIVE); break; + case EVENT_RESPAWN_GUNSHIP: + SpawnGunship(); + break; default: break; } } } - void ProcessEvent(WorldObject* /*source*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* source, uint32 eventId) override { switch (eventId) { + case EVENT_ENEMY_GUNSHIP_DESPAWN: + if (GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE) + source->AddObjectToRemoveList(); + break; + case EVENT_ENEMY_GUNSHIP_COMBAT: + if (Creature* captain = source->FindNearestCreature(TeamInInstance == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + captain->AI()->DoAction(ACTION_ENEMY_GUNSHIP_TALK); + // no break; + case EVENT_PLAYERS_GUNSHIP_SPAWN: + case EVENT_PLAYERS_GUNSHIP_COMBAT: + if (GameObject* go = source->ToGameObject()) + if (Transport* transport = go->ToTransport()) + transport->EnableMovement(false); + break; + case EVENT_PLAYERS_GUNSHIP_SAURFANG: + { + if (Creature* captain = source->FindNearestCreature(TeamInInstance == HORDE ? NPC_IGB_HIGH_OVERLORD_SAURFANG : NPC_IGB_MURADIN_BRONZEBEARD, 100.0f)) + captain->AI()->DoAction(ACTION_EXIT_SHIP); + if (GameObject* go = source->ToGameObject()) + if (Transport* transport = go->ToTransport()) + transport->EnableMovement(false); + break; + } case EVENT_QUAKE: if (GameObject* warning = instance->GetGameObject(FrozenThroneWarningGUID)) warning->SetGoState(GO_STATE_ACTIVE); @@ -1235,7 +1372,7 @@ class instance_icecrown_citadel : public InstanceMapScript Events.ScheduleEvent(EVENT_REBUILD_PLATFORM, 1500); } break; - case EVENT_TELEPORT_TO_FROSMOURNE: // Harvest Soul (normal mode) + case EVENT_TELEPORT_TO_FROSTMOURNE: // Harvest Soul (normal mode) if (Creature* terenas = instance->SummonCreature(NPC_TERENAS_MENETHIL_FROSTMOURNE, TerenasSpawn, NULL, 63000)) { terenas->AI()->DoAction(ACTION_FROSTMOURNE_INTRO); @@ -1261,6 +1398,9 @@ class instance_icecrown_citadel : public InstanceMapScript protected: EventMap Events; uint64 LadyDeathwisperElevatorGUID; + uint64 GunshipGUID; + uint64 EnemyGunshipGUID; + uint64 GunshipArmoryGUID; uint64 DeathbringerSaurfangGUID; uint64 DeathbringerSaurfangDoorGUID; uint64 DeathbringerSaurfangEventGUID; // Muradin Bronzebeard or High Overlord Saurfang @@ -1314,7 +1454,7 @@ class instance_icecrown_citadel : public InstanceMapScript bool IsOrbWhispererEligible; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_icecrown_citadel_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index be6531df66a..d4f00414b7d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -57,7 +57,7 @@ class boss_anubrekhan : public CreatureScript public: boss_anubrekhan() : CreatureScript("boss_anubrekhan") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_anubrekhanAI>(creature); } @@ -68,7 +68,7 @@ public: bool hasTaunted; - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -90,7 +90,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { /// Force the player to spawn corpse scarabs via spell, @todo Check percent chance for scarabs, 20% at the moment if (!(rand()%5)) @@ -100,14 +100,14 @@ public: Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); // start achievement timer (kill Maexna within 20 min) instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -119,8 +119,7 @@ public: events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000, 20000)); } - void MoveInLineOfSight(Unit* who) OVERRIDE - + void MoveInLineOfSight(Unit* who) override { if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER) { @@ -130,7 +129,7 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { BossAI::SummonedCreatureDespawn(summon); @@ -141,7 +140,7 @@ public: summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID()); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index a61331bee3e..3d42827c0a8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -67,7 +67,7 @@ class boss_faerlina : public CreatureScript } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -76,15 +76,14 @@ class boss_faerlina : public CreatureScript events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000)); } - void Reset() OVERRIDE + void Reset() override { _Reset(); _delayFrenzy = false; _frenzyDispels = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE - + void MoveInLineOfSight(Unit* who) override { if (!_introDone && who->GetTypeId() == TYPEID_PLAYER) { @@ -95,19 +94,19 @@ class boss_faerlina : public CreatureScript BossAI::MoveInLineOfSight(who); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!urand(0, 2)) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_WIDOWS_EMBRACE || spell->Id == H_SPELL_WIDOWS_EMBRACE) { @@ -118,7 +117,7 @@ class boss_faerlina : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_FRENZY_DISPELS) return _frenzyDispels; @@ -126,7 +125,7 @@ class boss_faerlina : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -177,7 +176,7 @@ class boss_faerlina : public CreatureScript bool _delayFrenzy; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_faerlinaAI(creature); } @@ -195,7 +194,7 @@ class npc_faerlina_add : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) { me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_BIND, true); @@ -203,7 +202,7 @@ class npc_faerlina_add : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (_instance && GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FAERLINA))) @@ -214,7 +213,7 @@ class npc_faerlina_add : public CreatureScript InstanceScript* const _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_faerlina_addAI>(creature); } @@ -225,7 +224,7 @@ class achievement_momma_said_knock_you_out : public AchievementCriteriaScript public: achievement_momma_said_knock_you_out() : AchievementCriteriaScript("achievement_momma_said_knock_you_out") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && !target->GetAI()->GetData(DATA_FRENZY_DISPELS); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 544077db8e8..77486c37498 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -87,7 +87,7 @@ class boss_four_horsemen : public CreatureScript public: boss_four_horsemen() : CreatureScript("boss_four_horsemen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_four_horsemenAI>(creature); } @@ -116,7 +116,7 @@ public: bool encounterActionReset; bool doDelayPunish; - void Reset() OVERRIDE + void Reset() override { if (!encounterActionReset) DoEncounteraction(NULL, false, true, false); @@ -138,10 +138,10 @@ public: bool DoEncounteraction(Unit* who, bool attack, bool reset, bool checkAllDead) { - Creature* Thane = Unit::GetCreature(*me, instance->GetData64(DATA_THANE)); - Creature* Lady = Unit::GetCreature(*me, instance->GetData64(DATA_LADY)); - Creature* Baron = Unit::GetCreature(*me, instance->GetData64(DATA_BARON)); - Creature* Sir = Unit::GetCreature(*me, instance->GetData64(DATA_SIR)); + Creature* Thane = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THANE)); + Creature* Lady = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LADY)); + Creature* Baron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BARON)); + Creature* Sir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SIR)); if (Thane && Lady && Baron && Sir) { @@ -216,7 +216,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -226,7 +226,7 @@ public: movementCompleted = true; me->SetReactState(REACT_AGGRESSIVE); - Unit* eventStarter = Unit::GetUnit(*me, uiEventStarterGUID); + Unit* eventStarter = ObjectAccessor::GetUnit(*me, uiEventStarterGUID); if (eventStarter && me->IsValidAttackTarget(eventStarter)) AttackStart(eventStarter); @@ -259,7 +259,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { BossAI::MoveInLineOfSight(who); @@ -267,7 +267,7 @@ public: SelectNearestTarget(who); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!movementCompleted && !movementStarted) { @@ -286,13 +286,13 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { events.Reset(); summons.DespawnAll(); @@ -312,7 +312,7 @@ public: Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -322,7 +322,7 @@ public: events.ScheduleEvent(EVENT_BERSERK, 15*100*1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (nextWP && movementStarted && !movementCompleted && !nextMovementStarted) { @@ -431,13 +431,13 @@ class spell_four_horsemen_mark : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_four_horsemen_mark_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_four_horsemen_mark_AuraScript(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index d33d218fab9..381be8d5cd1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -56,7 +56,7 @@ class boss_gluth : public CreatureScript public: boss_gluth() : CreatureScript("boss_gluth") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gluthAI(creature); } @@ -69,8 +69,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_ID, SPELL_INFECTED_WOUND, true); } - void MoveInLineOfSight(Unit* who) OVERRIDE - + void MoveInLineOfSight(Unit* who) override { if (who->GetEntry() == NPC_ZOMBIE && me->IsWithinDistInMap(who, 7)) { @@ -82,7 +81,7 @@ public: BossAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_WOUND, 10000); @@ -92,14 +91,14 @@ public: events.ScheduleEvent(EVENT_SUMMON, 15000); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_ZOMBIE) summon->AI()->AttackStart(me); summons.Summon(summon); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictimWithGaze() || !CheckInRoom()) return; @@ -136,7 +135,7 @@ public: } } - if (me->GetVictim() && me->GetVictim()->GetEntry() == NPC_ZOMBIE) + if (me->GetVictim() && me->EnsureVictim()->GetEntry() == NPC_ZOMBIE) { if (me->IsWithinMeleeRange(me->GetVictim())) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 20f7ec25775..d973ce867f2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -175,7 +175,7 @@ class boss_gothik : public CreatureScript std::vector<uint64> LiveTriggerGUID; std::vector<uint64> DeadTriggerGUID; - void Reset() OVERRIDE + void Reset() override { LiveTriggerGUID.clear(); DeadTriggerGUID.clear(); @@ -188,7 +188,7 @@ class boss_gothik : public CreatureScript thirtyPercentReached = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { for (uint32 i = 0; i < POS_LIVE; ++i) if (Creature* trigger = DoSummon(WORLD_TRIGGER, PosSummonLive[i])) @@ -212,7 +212,7 @@ class boss_gothik : public CreatureScript instance->SetData(DATA_GOTHIK_GATE, GO_STATE_READY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == WORLD_TRIGGER) summon->setActive(true); @@ -229,18 +229,18 @@ class boss_gothik : public CreatureScript summons.Summon(summon); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { summons.Despawn(summon); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { LiveTriggerGUID.clear(); DeadTriggerGUID.clear(); @@ -257,25 +257,25 @@ class boss_gothik : public CreatureScript { case NPC_LIVE_TRAINEE: { - if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[0])) + if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[0])) DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1); - if (Creature* liveTrigger1 = Unit::GetCreature(*me, LiveTriggerGUID[1])) + if (Creature* liveTrigger1 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[1])) DoSummon(NPC_LIVE_TRAINEE, liveTrigger1, 1); - if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[2])) + if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[2])) DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1); break; } case NPC_LIVE_KNIGHT: { - if (Creature* liveTrigger3 = Unit::GetCreature(*me, LiveTriggerGUID[3])) + if (Creature* liveTrigger3 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[3])) DoSummon(NPC_LIVE_KNIGHT, liveTrigger3, 1); - if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[5])) + if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[5])) DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1); break; } case NPC_LIVE_RIDER: { - if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4])) + if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4])) DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1); break; } @@ -287,21 +287,21 @@ class boss_gothik : public CreatureScript { case NPC_LIVE_TRAINEE: { - if (Creature* liveTrigger = Unit::GetCreature(*me, LiveTriggerGUID[4])) + if (Creature* liveTrigger = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4])) DoSummon(NPC_LIVE_TRAINEE, liveTrigger, 1); - if (Creature* liveTrigger2 = Unit::GetCreature(*me, LiveTriggerGUID[4])) + if (Creature* liveTrigger2 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4])) DoSummon(NPC_LIVE_TRAINEE, liveTrigger2, 1); break; } case NPC_LIVE_KNIGHT: { - if (Creature* liveTrigger5 = Unit::GetCreature(*me, LiveTriggerGUID[4])) + if (Creature* liveTrigger5 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4])) DoSummon(NPC_LIVE_KNIGHT, liveTrigger5, 1); break; } case NPC_LIVE_RIDER: { - if (Creature* liveTrigger4 = Unit::GetCreature(*me, LiveTriggerGUID[4])) + if (Creature* liveTrigger4 = ObjectAccessor::GetCreature(*me, LiveTriggerGUID[4])) DoSummon(NPC_LIVE_RIDER, liveTrigger4, 1); break; } @@ -347,7 +347,7 @@ class boss_gothik : public CreatureScript return false; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { uint32 spellId = 0; switch (spell->Id) @@ -359,18 +359,18 @@ class boss_gothik : public CreatureScript if (spellId && me->IsInCombat()) { me->HandleEmoteCommand(EMOTE_ONESHOT_SPELL_CAST); - if (Creature* pRandomDeadTrigger = Unit::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD])) + if (Creature* pRandomDeadTrigger = ObjectAccessor::GetCreature(*me, DeadTriggerGUID[rand() % POS_DEAD])) me->CastSpell(pRandomDeadTrigger, spellId, true); } } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { if (!phaseTwo) damage = 0; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (!me->IsInCombat()) return; @@ -390,7 +390,7 @@ class boss_gothik : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -493,7 +493,7 @@ class boss_gothik : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gothikAI>(creature); } @@ -520,25 +520,25 @@ class npc_gothik_minion : public CreatureScript return (liveSide == IN_LIVE_SIDE(who)); } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { gateClose = param; } - void DamageTaken(Unit* attacker, uint32 &damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32 &damage) override { if (gateClose && !isOnSameSide(attacker)) damage = 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->IsSummon()) if (Unit* owner = me->ToTempSummon()->GetSummoner()) CombatAI::JustDied(owner); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!gateClose) { @@ -570,7 +570,7 @@ class npc_gothik_minion : public CreatureScript Reset(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (gateClose && (!isOnSameSide(me) || (me->GetVictim() && !isOnSameSide(me->GetVictim())))) { @@ -582,7 +582,7 @@ class npc_gothik_minion : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_gothik_minionAI(creature); } @@ -602,13 +602,13 @@ class spell_gothik_shadow_bolt_volley : public SpellScriptLoader targets.remove_if(Trinity::UnitAuraCheck(false, SPELL_SHADOW_MARK)); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gothik_shadow_bolt_volley_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gothik_shadow_bolt_volley_SpellScript(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 6769e3429fa..929c52a986c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -54,7 +54,7 @@ class boss_grobbulus : public CreatureScript { boss_grobbulusAI(Creature* creature) : BossAI(creature, BOSS_GROBBULUS) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_CLOUD, 15000); @@ -63,13 +63,13 @@ class boss_grobbulus : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 12 * 60000); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_SLIME_SPRAY) me->SummonCreature(NPC_FALLOUT_SLIME, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -105,7 +105,7 @@ class boss_grobbulus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_grobbulusAI(creature); } @@ -124,16 +124,16 @@ class npc_grobbulus_poison_cloud : public CreatureScript creature->SetReactState(REACT_PASSIVE); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { // no visual when casting in ctor or Reset() DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_grobbulus_poison_cloudAI(creature); } @@ -149,7 +149,7 @@ class spell_grobbulus_mutating_injection : public SpellScriptLoader { PrepareAuraScript(spell_grobbulus_mutating_injection_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MUTATING_EXPLOSION) || !sSpellMgr->GetSpellInfo(SPELL_POISON_CLOUD)) @@ -170,13 +170,13 @@ class spell_grobbulus_mutating_injection : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_grobbulus_mutating_injection_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_grobbulus_mutating_injection_AuraScript(); } @@ -192,7 +192,7 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader { PrepareAuraScript(spell_grobbulus_poison_cloud_AuraScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell)) return false; @@ -208,13 +208,13 @@ class spell_grobbulus_poison_cloud : public SpellScriptLoader GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)NULL, TRIGGERED_FULL_MASK, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_grobbulus_poison_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_grobbulus_poison_cloud_AuraScript(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index b850d5e5072..48dc889ef2b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -59,7 +59,7 @@ class boss_heigan : public CreatureScript public: boss_heigan() : CreatureScript("boss_heigan") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_heiganAI>(creature); } @@ -73,7 +73,7 @@ public: bool safetyDance; Phases phase; - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (!(rand()%5)) Talk(SAY_SLAY); @@ -81,13 +81,13 @@ public: safetyDance = false; } - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { if (id == DATA_SAFETY_DANCE) safetyDance = data ? true : false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_SAFETY_DANCE) return safetyDance ? 1 : 0; @@ -95,13 +95,13 @@ public: return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -136,7 +136,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -202,13 +202,13 @@ class spell_heigan_eruption : public SpellScriptLoader Heigan->AI()->SetData(DATA_SAFETY_DANCE, 0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_heigan_eruption_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_heigan_eruption_SpellScript(); } @@ -221,7 +221,7 @@ class achievement_safety_dance : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 2091b82e20c..c5c70cf3957 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -70,15 +70,13 @@ enum Events EVENT_TRIGGER, EVENT_PHASE, - EVENT_MORTAL_WOUND, + EVENT_MORTAL_WOUND }; enum Spells { SPELL_FROST_BOLT = 28478, - H_SPELL_FROST_BOLT = 55802, SPELL_FROST_BOLT_AOE = 28479, - H_SPELL_FROST_BOLT_AOE = 55807, SPELL_SHADOW_FISURE = 27810, SPELL_VOID_BLAST = 27812, SPELL_MANA_DETONATION = 27819, @@ -122,7 +120,7 @@ enum Spells // Abomination spells SPELL_FRENZY = 28468, - SPELL_MORTAL_WOUND = 28467, + SPELL_MORTAL_WOUND = 28467 }; enum Creatures @@ -133,7 +131,7 @@ enum Creatures NPC_ICECROWN = 16441 // Guardians of Icecrown }; -const Position Pos[12] = +Position const Pos[12] = { {3783.272705f, -5062.697266f, 143.711203f, 3.617599f}, //LEFT_FAR {3730.291260f, -5027.239258f, 143.956909f, 4.461900f}, //LEFT_MIDDLE @@ -146,13 +144,13 @@ const Position Pos[12] = {3732.02f, -5028.53f, 143.92f, 4.49f}, //WINDOW_PORTAL02 {3687.571777f, -5126.831055f, 142.017807f, 0.604023f}, //RIGHT_FAR {3707.990733f, -5151.450195f, 142.032562f, 1.376855f}, //RIGHT_MIDDLE - {3782.76f, -5062.97f, 143.79f, 3.82f}, //WINDOW_PORTAL03 + {3782.76f, -5062.97f, 143.79f, 3.82f} //WINDOW_PORTAL03 }; //creatures in corners //Unstoppable Abominations #define MAX_ABOMINATIONS 21 -const Position PosAbominations[MAX_ABOMINATIONS] = +Position const PosAbominations[MAX_ABOMINATIONS] = { {3755.52f, -5155.22f, 143.480f, 2.0f}, {3744.35f, -5164.03f, 143.590f, 2.00f}, @@ -174,12 +172,12 @@ const Position PosAbominations[MAX_ABOMINATIONS] = {3669.74f, -5149.63f, 143.678f, 0.528643f}, {3695.53f, -5169.53f, 143.671f, 2.11908f}, {3701.98f, -5166.51f, 143.395f, 1.24257f}, - {3709.62f, -5169.15f, 143.576f, 5.97695f}, + {3709.62f, -5169.15f, 143.576f, 5.97695f} }; //Soldiers of the Frozen Wastes #define MAX_WASTES 49 -const Position PosWastes[MAX_WASTES] = +Position const PosWastes[MAX_WASTES] = { {3754.41f, -5147.24f, 143.204f, 2.0f}, {3754.68f, -5156.17f, 143.418f, 2.0f}, @@ -229,12 +227,12 @@ const Position PosWastes[MAX_WASTES] = {3708.53f, -5172.19f, 143.573f, 3.26575f}, {3712.49f, -5167.62f, 143.657f, 5.63295f}, {3704.89f, -5161.84f, 143.239f, 5.63295f}, - {3695.66f, -5164.63f, 143.674f, 1.54416f}, + {3695.66f, -5164.63f, 143.674f, 1.54416f} }; //Soul Weavers #define MAX_WEAVERS 7 -const Position PosWeavers[MAX_WEAVERS] = +Position const PosWeavers[MAX_WEAVERS] = { {3752.45f, -5168.35f, 143.562f, 1.6094f}, {3772.2f, -5070.04f, 143.329f, 1.93686f}, @@ -242,7 +240,7 @@ const Position PosWeavers[MAX_WEAVERS] = {3689.05f, -5055.7f, 143.172f, 6.09554f}, {3649.45f, -5093.17f, 143.299f, 2.51805f}, {3659.7f, -5144.49f, 143.363f, 4.08806f}, - {3704.71f, -5175.96f, 143.597f, 3.36549f}, + {3704.71f, -5175.96f, 143.597f, 3.36549f} }; // predicate function to select not charmed target @@ -278,9 +276,6 @@ public: std::map<uint64, float> chained; - uint64 PortalsGUID[4]; - uint64 KTTriggerGUID; - SummonList spawns; // adds spawn by the trigger. kept in separated list (i.e. not in summons) void ResetPlayerScale() @@ -295,52 +290,45 @@ public: chained.clear(); } - void Reset() OVERRIDE + void Reset() override { _Reset(); - PortalsGUID[0] = PortalsGUID[1] = PortalsGUID[2] = PortalsGUID[3] = 0; - KTTriggerGUID = 0; - me->setFaction(35); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NOT_SELECTABLE); ResetPlayerScale(); spawns.DespawnAll(); - FindGameObjects(); - instance->SetData(DATA_ABOMINATION_KILLED, 0); - if (GameObject* pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID)) + if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { - pKTTrigger->ResetDoorOrButton(); - pKTTrigger->SetPhaseMask(1, true); + trigger->ResetDoorOrButton(); + trigger->SetPhaseMask(1, true); } for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - { - if (!((pPortal->getLootState() == GO_READY) || (pPortal->getLootState() == GO_NOT_READY))) - pPortal->ResetDoorOrButton(); - } + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + if (!((portal->getLootState() == GO_READY) || (portal->getLootState() == GO_NOT_READY))) + portal->ResetDoorOrButton(); } nGuardiansOfIcecrownCount = 0; - uiGuardiansOfIcecrownTimer = 5000; //5 seconds for summoning each Guardian of Icecrown in phase 3 + uiGuardiansOfIcecrownTimer = 5000; // 5 seconds for summoning each Guardian of Icecrown in phase 3 Phase = 0; nAbomination = 0; nWeaver = 0; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -348,16 +336,15 @@ public: ResetPlayerScale(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->setFaction(uiFaction); _EnterCombat(); - FindGameObjects(); for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - pPortal->ResetDoorOrButton(); + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + portal->ResetDoorOrButton(); } DoCast(me, SPELL_KELTHUZAD_CHANNEL, false); Talk(SAY_SUMMON_MINIONS); @@ -372,16 +359,7 @@ public: events.ScheduleEvent(EVENT_PHASE, 228000); } - void FindGameObjects() - { - 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 + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -390,38 +368,33 @@ public: if (Phase == 1) { - while (uint32 eventId = events.GetEvent()) + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_WASTE: DoSummon(NPC_WASTE, Pos[RAND(0, 3, 6, 9)]); - events.RepeatEvent(urand(2000, 5000)); + events.Repeat(2000, 5000); break; case EVENT_ABOMIN: if (nAbomination < 8) { DoSummon(NPC_ABOMINATION, Pos[RAND(1, 4, 7, 10)]); nAbomination++; - events.RepeatEvent(20000); + events.Repeat(20000); } - else - events.PopEvent(); break; case EVENT_WEAVER: if (nWeaver < 8) { DoSummon(NPC_WEAVER, Pos[RAND(0, 3, 6, 9)]); nWeaver++; - events.RepeatEvent(25000); + events.Repeat(25000); } - else - events.PopEvent(); break; case EVENT_TRIGGER: - if (GameObject* pKTTrigger = me->GetMap()->GetGameObject(KTTriggerGUID)) - pKTTrigger->SetPhaseMask(2, true); - events.PopEvent(); + if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) + trigger->SetPhaseMask(2, true); break; case EVENT_PHASE: events.Reset(); @@ -441,7 +414,6 @@ public: Phase = 2; break; default: - events.PopEvent(); break; } } @@ -461,11 +433,9 @@ public: for (uint8 i = 0; i <= 3; ++i) { - if (GameObject* pPortal = me->GetMap()->GetGameObject(PortalsGUID[i])) - { - if (pPortal->getLootState() == GO_READY) - pPortal->UseDoorOrButton(); - } + if (GameObject* portal = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_PORTAL01 + i))) + if (portal->getLootState() == GO_READY) + portal->UseDoorOrButton(); } } } @@ -474,8 +444,8 @@ public: if (uiGuardiansOfIcecrownTimer <= diff) { /// @todo Add missing text - if (Creature* pGuardian = DoSummon(NPC_ICECROWN, Pos[RAND(2, 5, 8, 11)])) - pGuardian->SetFloatValue(UNIT_FIELD_COMBATREACH, 2); + if (Creature* guardian = DoSummon(NPC_ICECROWN, Pos[RAND(2, 5, 8, 11)])) + guardian->SetFloatValue(UNIT_FIELD_COMBATREACH, 2); ++nGuardiansOfIcecrownCount; uiGuardiansOfIcecrownTimer = 5000; } @@ -485,17 +455,17 @@ public: if (me->HasUnitState(UNIT_STATE_CASTING)) return; - if (uint32 eventId = events.GetEvent()) + if (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_BOLT: - DoCastVictim(RAID_MODE(SPELL_FROST_BOLT, H_SPELL_FROST_BOLT)); - events.RepeatEvent(urand(5000, 10000)); + DoCastVictim(SPELL_FROST_BOLT); + events.Repeat(5000, 10000); break; case EVENT_NOVA: - DoCastAOE(RAID_MODE(SPELL_FROST_BOLT_AOE, H_SPELL_FROST_BOLT_AOE)); - events.RepeatEvent(urand(15000, 30000)); + DoCastAOE(SPELL_FROST_BOLT_AOE); + events.Repeat(15000, 30000); break; case EVENT_CHAIN: { @@ -514,7 +484,7 @@ public: } if (!chained.empty()) Talk(SAY_CHAIN); - events.RepeatEvent(urand(100000, 180000)); + events.Repeat(100000, 180000); break; } case EVENT_CHAINED_SPELL: @@ -589,10 +559,8 @@ public: ++itr; } - if (chained.empty()) - events.PopEvent(); - else - events.RepeatEvent(5000); + if (!chained.empty()) + events.Repeat(5000); break; } @@ -620,23 +588,22 @@ public: Talk(SAY_SPECIAL); } - events.RepeatEvent(urand(20000, 50000)); + events.Repeat(20000, 50000); break; } case EVENT_FISSURE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_SHADOW_FISURE); - events.RepeatEvent(urand(10000, 45000)); + events.Repeat(10000, 45000); break; case EVENT_BLAST: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, RAID_MODE(1, 0), 0, true)) DoCast(target, SPELL_FROST_BLAST); if (rand()%2) Talk(SAY_FROST_BLAST); - events.RepeatEvent(urand(30000, 90000)); + events.Repeat(30000, 90000); break; default: - events.PopEvent(); break; } } @@ -646,7 +613,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kelthuzadAI>(creature); } @@ -657,7 +624,7 @@ class at_kelthuzad_center : public AreaTriggerScript public: at_kelthuzad_center() : AreaTriggerScript("at_kelthuzad_center") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { if (player->IsGameMaster()) return false; @@ -666,7 +633,7 @@ public: if (!instance || instance->IsEncounterInProgress() || instance->GetBossState(BOSS_KELTHUZAD) == DONE) return false; - Creature* pKelthuzad = Unit::GetCreature(*player, instance->GetData64(DATA_KELTHUZAD)); + Creature* pKelthuzad = ObjectAccessor::GetCreature(*player, instance->GetData64(DATA_KELTHUZAD)); if (!pKelthuzad) return false; @@ -675,7 +642,7 @@ public: return false; pKelthuzadAI->AttackStart(player); - if (GameObject* trigger = instance->instance->GetGameObject(instance->GetData64(DATA_KELTHUZAD_TRIGGER))) + if (GameObject* trigger = ObjectAccessor::GetGameObject(*player, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { if (trigger->getLootState() == GO_READY) trigger->UseDoorOrButton(); @@ -727,14 +694,14 @@ class npc_kelthuzad_abomination : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(2000, 5000)); DoCast(me, SPELL_FRENZY, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -755,7 +722,7 @@ class npc_kelthuzad_abomination : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _instance->SetData(DATA_ABOMINATION_KILLED, _instance->GetData(DATA_ABOMINATION_KILLED) + 1); } @@ -765,7 +732,7 @@ class npc_kelthuzad_abomination : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_kelthuzad_abominationAI>(creature); } @@ -780,7 +747,7 @@ class spell_kelthuzad_detonate_mana : public SpellScriptLoader { PrepareAuraScript(spell_kelthuzad_detonate_mana_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MANA_DETONATION_DAMAGE)) return false; @@ -799,13 +766,13 @@ class spell_kelthuzad_detonate_mana : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_kelthuzad_detonate_mana_AuraScript::HandleScript, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_kelthuzad_detonate_mana_AuraScript(); } @@ -816,7 +783,7 @@ class achievement_just_cant_get_enough : public AchievementCriteriaScript public: achievement_just_cant_get_enough() : AchievementCriteriaScript("achievement_just_cant_get_enough") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 760cc180b95..946b60d4e27 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -64,14 +64,14 @@ class boss_loatheb : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _doomCounter = 0; _sporeLoserData = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_NECROTIC_AURA, 17000); @@ -80,12 +80,12 @@ class boss_loatheb : public CreatureScript events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 120000); } - void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override { _sporeLoserData = false; } - uint32 GetData(uint32 id) const OVERRIDE + uint32 GetData(uint32 id) const override { if (id != DATA_ACHIEVEMENT_SPORE_LOSER) return 0; @@ -93,7 +93,7 @@ class boss_loatheb : public CreatureScript return uint32(_sporeLoserData); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -139,7 +139,7 @@ class boss_loatheb : public CreatureScript uint8 _doomCounter; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_loathebAI(creature); } @@ -150,7 +150,7 @@ class achievement_spore_loser : public AchievementCriteriaScript public: achievement_spore_loser() : AchievementCriteriaScript("achievement_spore_loser") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_ACHIEVEMENT_SPORE_LOSER); } @@ -167,7 +167,7 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader { PrepareAuraScript(spell_loatheb_necrotic_aura_warning_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellStore.LookupEntry(SPELL_WARN_NECROTIC_AURA)) return false; @@ -186,14 +186,14 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader CAST_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_REMOVED); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_loatheb_necrotic_aura_warning_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_necrotic_aura_warning_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_loatheb_necrotic_aura_warning_AuraScript(); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 9d8dbf70ce7..52723b591a2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -63,7 +63,7 @@ class boss_maexxna : public CreatureScript public: boss_maexxna() : CreatureScript("boss_maexxna") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_maexxnaAI(creature); } @@ -74,7 +74,7 @@ public: bool enraged; - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); enraged = false; @@ -85,7 +85,7 @@ public: events.ScheduleEvent(EVENT_SUMMON, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -154,7 +154,7 @@ class npc_webwrap : public CreatureScript public: npc_webwrap() : CreatureScript("npc_webwrap") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_webwrapAI(creature); } @@ -165,18 +165,18 @@ public: uint64 victimGUID; - void SetGUID(uint64 guid, int32 /*param*/) OVERRIDE + void SetGUID(uint64 guid, int32 /*param*/) override { victimGUID = guid; if (me->m_spells[0] && victimGUID) - if (Unit* victim = Unit::GetUnit(*me, victimGUID)) + if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID)) victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID()); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->m_spells[0] && victimGUID) - if (Unit* victim = Unit::GetUnit(*me, victimGUID)) + if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID)) victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID()); } }; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 93cbb1b992a..d6d91d14a21 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -74,14 +74,14 @@ public: { boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -107,20 +107,20 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_SLAY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); summon->setActive(true); summon->AI()->DoZoneInCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -132,7 +132,7 @@ public: me->SummonCreature(entry, SummonPos[rand()%MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -215,7 +215,7 @@ public: uint32 balconyCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_nothAI>(creature); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index cc0b3836a7a..a713474d256 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -55,7 +55,7 @@ class boss_patchwerk : public CreatureScript public: boss_patchwerk() : CreatureScript("boss_patchwerk") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_patchwerkAI>(creature); } @@ -66,26 +66,26 @@ public: bool Enraged; - void Reset() OVERRIDE + void Reset() override { _Reset(); instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT); } - void KilledUnit(Unit* /*Victim*/) OVERRIDE + void KilledUnit(Unit* /*Victim*/) override { if (!(rand()%5)) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Enraged = false; @@ -96,7 +96,7 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 4936681839f..d9a64569516 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -61,7 +61,7 @@ class boss_razuvious : public CreatureScript public: boss_razuvious() : CreatureScript("boss_razuvious") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_razuviousAI(creature); } @@ -70,13 +70,13 @@ public: { boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%3)) DoPlaySoundToSet(me, SOUND_SLAY); } - void DamageTaken(Unit* pDone_by, uint32& uiDamage) OVERRIDE + void DamageTaken(Unit* pDone_by, uint32& uiDamage) override { // Damage done by the controlled Death Knight understudies should also count toward damage done by players if (pDone_by->GetTypeId() == TYPEID_UNIT && (pDone_by->GetEntry() == 16803 || pDone_by->GetEntry() == 29941)) @@ -85,14 +85,14 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); DoPlaySoundToSet(me, SOUND_DEATH); me->CastSpell(me, SPELL_HOPELESS, true); /// @todo this may affect other creatures } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); DoPlaySoundToSet(me, SOUND_AGGRO); @@ -102,7 +102,7 @@ public: events.ScheduleEvent(EVENT_KNIFE, 10000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index be434ecc73a..e3527b46bed 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -94,7 +94,7 @@ class boss_sapphiron : public CreatureScript _map(me->GetMap()) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { _canTheHundredClub = true; @@ -108,7 +108,7 @@ class boss_sapphiron : public CreatureScript BossAI::InitializeAI(); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -121,7 +121,7 @@ class boss_sapphiron : public CreatureScript _checkFrostResistTimer = 5 * IN_MILLISECONDS; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -133,7 +133,7 @@ class boss_sapphiron : public CreatureScript CheckPlayersFrostResist(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_ICEBOLT) { @@ -146,7 +146,7 @@ class boss_sapphiron : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); me->CastSpell(me, SPELL_DIES, true); @@ -154,13 +154,13 @@ class boss_sapphiron : public CreatureScript CheckPlayersFrostResist(); } - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 id) override { if (id == 1) events.ScheduleEvent(EVENT_LIFTOFF, 0); } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { if (param == DATA_SAPPHIRON_BIRTH) { @@ -210,7 +210,7 @@ class boss_sapphiron : public CreatureScript _iceblocks.clear(); } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { if (data == DATA_THE_HUNDRED_CLUB) return _canTheHundredClub; @@ -218,7 +218,7 @@ class boss_sapphiron : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!_phase) return; @@ -403,7 +403,7 @@ class boss_sapphiron : public CreatureScript Map* _map; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_sapphironAI(creature); } @@ -414,7 +414,7 @@ class achievement_the_hundred_club : public AchievementCriteriaScript public: achievement_the_hundred_club() : AchievementCriteriaScript("achievement_the_hundred_club") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_THE_HUNDRED_CLUB); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 245399afdda..406ca3963a4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -108,7 +108,7 @@ class boss_thaddius : public CreatureScript public: boss_thaddius() : CreatureScript("boss_thaddius") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_thaddiusAI>(creature); } @@ -123,11 +123,11 @@ public: // Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn // and each mob will send its status at reset (meaning that it is alive) checkFeugenAlive = false; - if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN))) + if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN))) checkFeugenAlive = pFeugen->IsAlive(); checkStalaggAlive = false; - if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG))) + if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG))) checkStalaggAlive = pStalagg->IsAlive(); if (!checkFeugenAlive && !checkStalaggAlive) @@ -147,19 +147,19 @@ public: bool polaritySwitch; uint32 uiAddsTimer; - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -190,7 +190,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -199,18 +199,18 @@ public: events.ScheduleEvent(EVENT_BERSERK, 360000); } - void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) override { me->SetReactState(REACT_AGGRESSIVE); } - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { if (id == DATA_POLARITY_SWITCH) polaritySwitch = data ? true : false; } - uint32 GetData(uint32 id) const OVERRIDE + uint32 GetData(uint32 id) const override { if (id != DATA_POLARITY_SWITCH) return 0; @@ -218,7 +218,7 @@ public: return uint32(polaritySwitch); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (checkFeugenAlive && checkStalaggAlive) uiAddsTimer = 0; @@ -230,12 +230,12 @@ public: { if (!checkStalaggAlive) { - if (Creature* pStalagg = me->GetCreature(*me, instance->GetData64(DATA_STALAGG))) + if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_STALAGG))) pStalagg->Respawn(); } else { - if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN))) + if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN))) pFeugen->Respawn(); } } @@ -281,7 +281,7 @@ class npc_stalagg : public CreatureScript public: npc_stalagg() : CreatureScript("npc_stalagg") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_stalaggAI>(creature); } @@ -298,43 +298,43 @@ public: uint32 powerSurgeTimer; uint32 magneticPullTimer; - void Reset() OVERRIDE + void Reset() override { - if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) + if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) pThaddius->AI()->DoAction(ACTION_STALAGG_RESET); powerSurgeTimer = urand(20000, 25000); magneticPullTimer = 20000; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_STAL_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_STAL_AGGRO); DoCast(SPELL_STALAGG_TESLA); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_STAL_DEATH); - if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) + if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) pThaddius->AI()->DoAction(ACTION_STALAGG_DIED); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; if (magneticPullTimer <= uiDiff) { - if (Creature* pFeugen = me->GetCreature(*me, instance->GetData64(DATA_FEUGEN))) + if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_FEUGEN))) { Unit* pStalaggVictim = me->GetVictim(); Unit* pFeugenVictim = pFeugen->GetVictim(); @@ -373,7 +373,7 @@ class npc_feugen : public CreatureScript public: npc_feugen() : CreatureScript("npc_feugen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_feugenAI>(creature); } @@ -389,35 +389,35 @@ public: uint32 staticFieldTimer; - void Reset() OVERRIDE + void Reset() override { - if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) + if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET); staticFieldTimer = 5000; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (!(rand()%5)) Talk(SAY_FEUG_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_FEUG_AGGRO); DoCast(SPELL_FEUGEN_TESLA); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_FEUG_DEATH); - if (Creature* pThaddius = me->GetCreature(*me, instance->GetData64(DATA_THADDIUS))) + if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_THADDIUS))) if (pThaddius->AI()) pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -443,7 +443,7 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader { PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE)) return false; @@ -456,7 +456,7 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -500,14 +500,14 @@ class spell_thaddius_pos_neg_charge : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_thaddius_pos_neg_charge_SpellScript(); } @@ -522,7 +522,7 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader { PrepareSpellScript(spell_thaddius_polarity_shift_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY)) return false; @@ -536,13 +536,13 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_thaddius_polarity_shift_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_thaddius_polarity_shift_SpellScript(); } @@ -553,7 +553,7 @@ class achievement_polarity_switch : public AchievementCriteriaScript public: achievement_polarity_switch() : AchievementCriteriaScript("achievement_polarity_switch") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_POLARITY_SWITCH); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 137c9e68247..e8ed181da5a 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -131,7 +131,7 @@ class instance_naxxramas : public InstanceMapScript memset(PortalsGUID, 0, sizeof(PortalsGUID)); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -175,12 +175,12 @@ class instance_naxxramas : public InstanceMapScript AddMinion(creature, true); } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { AddMinion(creature, false); } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287) { @@ -220,7 +220,7 @@ class instance_naxxramas : public InstanceMapScript AddDoor(go, true); } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287) { @@ -247,7 +247,7 @@ class instance_naxxramas : public InstanceMapScript AddDoor(go, false); } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { if (unit->GetTypeId() == TYPEID_PLAYER && IsEncounterInProgress()) { @@ -256,7 +256,7 @@ class instance_naxxramas : public InstanceMapScript } } - void SetData(uint32 id, uint32 value) OVERRIDE + void SetData(uint32 id, uint32 value) override { switch (id) { @@ -292,7 +292,7 @@ class instance_naxxramas : public InstanceMapScript } } - uint32 GetData(uint32 id) const OVERRIDE + uint32 GetData(uint32 id) const override { switch (id) { @@ -305,7 +305,7 @@ class instance_naxxramas : public InstanceMapScript return 0; } - uint64 GetData64(uint32 id) const OVERRIDE + uint64 GetData64(uint32 id) const override { switch (id) { @@ -344,7 +344,7 @@ class instance_naxxramas : public InstanceMapScript return 0; } - bool SetBossState(uint32 id, EncounterState state) OVERRIDE + bool SetBossState(uint32 id, EncounterState state) override { if (!InstanceScript::SetBossState(id, state)) return false; @@ -368,9 +368,9 @@ class instance_naxxramas : public InstanceMapScript if (i == section) continue; - for (std::set<uint64>::const_iterator itr = HeiganEruptionGUID[i].begin(); itr != HeiganEruptionGUID[i].end(); ++itr) + for (uint64 guid : HeiganEruptionGUID[i]) { - if (GameObject* heiganEruption = instance->GetGameObject(*itr)) + if (GameObject* heiganEruption = instance->GetGameObject(guid)) { heiganEruption->SendCustomAnim(heiganEruption->GetGoAnimProgress()); heiganEruption->CastSpell(NULL, SPELL_ERUPTION); @@ -427,7 +427,7 @@ class instance_naxxramas : public InstanceMapScript return false; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -438,7 +438,7 @@ class instance_naxxramas : public InstanceMapScript return saveStream.str(); } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { @@ -513,7 +513,7 @@ class instance_naxxramas : public InstanceMapScript uint32 playerDied; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_naxxramas_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 7ae9ce3faa6..fefdfa633ea 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -346,7 +346,7 @@ public: _flySpeed = me->GetSpeed(MOVE_FLIGHT); // Get initial fly speed, otherwise on each wipe fly speed would add up if we get it } - void Reset() OVERRIDE + void Reset() override { // EnterEvadeMode and Reset() links are cut for the sake of properly functioning despawner. if (!_despawned) @@ -379,7 +379,7 @@ public: instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { switch (data) { @@ -392,7 +392,7 @@ public: return 0; } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data == DATA_SUMMON_DEATHS && _phase == PHASE_TWO && !_despawned) { @@ -417,7 +417,7 @@ public: } } - uint64 GetGUID(int32 type) const OVERRIDE + uint64 GetGUID(int32 type) const override { if (type >= DATA_FIRST_SURGE_TARGET_GUID && type < DATA_FIRST_SURGE_TARGET_GUID + NUM_MAX_SURGE_TARGETS) return _surgeTargetGUID[type - DATA_FIRST_SURGE_TARGET_GUID]; @@ -427,7 +427,7 @@ public: return 0; } - void SetGUID(uint64 guid, int32 type) OVERRIDE + void SetGUID(uint64 guid, int32 type) override { switch (type) { @@ -444,7 +444,7 @@ public: } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -469,8 +469,8 @@ public: DoCast(me, SPELL_VORTEX_3, true); break; case ACTION_LIFT_IN_AIR: - Position _zToLift; - me->GetPosition(&_zToLift); + { + Position _zToLift = me->GetPosition(); if (_phase == PHASE_ONE) { _zToLift.m_positionZ += 20.0f; @@ -482,6 +482,7 @@ public: me->GetMotionMaster()->MoveTakeoff(POINT_PHASE_ONE_TO_TWO_TRANSITION, _zToLift); } break; + } case ACTION_HANDLE_P_THREE_INTRO: events.CancelEventGroup(0); events.CancelEventGroup(1); @@ -544,7 +545,7 @@ public: break; case PHASE_TWO: events.ScheduleEvent(EVENT_MOVE_TO_POINT_SURGE_P_TWO, 60*IN_MILLISECONDS, 0, _phase); - me->AI()->DoAction(ACTION_LIFT_IN_AIR); + DoAction(ACTION_LIFT_IN_AIR); break; case PHASE_THREE: events.ScheduleEvent(EVENT_ARCANE_PULSE, 7*IN_MILLISECONDS, 0, _phase); @@ -556,13 +557,13 @@ public: } // There are moments where boss will do nothing while being attacked - void AttackStart(Unit* target) OVERRIDE + void AttackStart(Unit* target) override { if (_canAttack) BossAI::AttackStart(target); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { // We can't call full function here since it includes DoZoneInCombat(), // if someone does it will be returned with a warning. @@ -580,11 +581,11 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->SetBossState(DATA_MALYGOS_EVENT, FAIL); - SendLightOverride(LIGHT_GET_DEFAULT_FOR_MAP, 1*IN_MILLISECONDS); + me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_GET_DEFAULT_FOR_MAP, 1*IN_MILLISECONDS); if (_phase == PHASE_THREE) me->SetControlled(false, UNIT_STATE_ROOT); @@ -625,7 +626,7 @@ public: instance->SetBossState(DATA_MALYGOS_EVENT, NOT_STARTED); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -653,7 +654,7 @@ public: } } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_POWER_SPARK_MALYGOS) { @@ -663,10 +664,10 @@ public: Talk(SAY_BUFF_SPARK); } else if (spell->Id == SPELL_MALYGOS_BERSERK) - sCreatureTextMgr->SendChat(me, EMOTE_HIT_BERSERKER_TIMER, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + TalkToMap(EMOTE_HIT_BERSERKER_TIMER); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->IsInCombat() || _phase != PHASE_ONE) @@ -677,7 +678,7 @@ public: who->CastSpell(me, SPELL_POWER_SPARK_MALYGOS, true); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) return; @@ -725,8 +726,8 @@ public: me->SetDisableGravity(true); if (Creature* alexstraszaBunny = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ALEXSTRASZA_BUNNY_GUID))) me->SetFacingToObject(alexstraszaBunny); - SendLightOverride(LIGHT_ARCANE_RUNES, 5*IN_MILLISECONDS); - events.ScheduleEvent(EVENT_FLY_OUT_OF_PLATFORM, 18*IN_MILLISECONDS, 0, PHASE_TWO); + me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_ARCANE_RUNES, 5 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_FLY_OUT_OF_PLATFORM, 18 * IN_MILLISECONDS, 0, PHASE_TWO); break; case POINT_SURGE_OF_POWER_P_TWO: if (!_performingDestroyPlatform) @@ -737,7 +738,7 @@ public: } break; case POINT_DESTROY_PLATFORM_P_TWO: - SendLightOverride(LIGHT_OBSCURE_SPACE, 1*IN_MILLISECONDS); + me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_SPACE, 1 * IN_MILLISECONDS); DoCast(me, SPELL_DESTROY_PLATFORM_CHANNEL); events.ScheduleEvent(EVENT_MOVE_TO_P_THREE_POINT, 11*IN_MILLISECONDS, 0, PHASE_TWO); break; @@ -748,7 +749,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!instance || (!UpdateVictim() && _phase != PHASE_NOT_STARTED && _phase != PHASE_TWO)) return; @@ -929,7 +930,7 @@ public: } break; case EVENT_LIGHT_DIMENSION_CHANGE: - SendLightOverride(LIGHT_CHANGE_DIMENSIONS, 2*IN_MILLISECONDS); + me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_CHANGE_DIMENSIONS, 2 * IN_MILLISECONDS); break; case EVENT_DELAY_MOVE_TO_DESTROY_P: me->GetMotionMaster()->MovePoint(POINT_DESTROY_PLATFORM_P_TWO, MalygosPositions[0]); @@ -939,7 +940,7 @@ public: me->GetMotionMaster()->MovePoint(POINT_IDLE_P_THREE, MalygosPositions[4]); break; case EVENT_START_P_THREE: - SendLightOverride(LIGHT_OBSCURE_ARCANE_RUNES, 1*IN_MILLISECONDS); + me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_ARCANE_RUNES, 1 * IN_MILLISECONDS); DoCast(me, SPELL_CLEAR_ALL_DEBUFFS); DoCast(me, SPELL_IMMUNE_CURSES); _canAttack = true; @@ -991,7 +992,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -1026,27 +1027,6 @@ public: } } - // Function that will change lights of map for all players on map. - void SendLightOverride(uint32 overrideId, uint32 fadeInTime) const - { - WorldPacket data(SMSG_OVERRIDE_LIGHT, 12); - data << uint32(1773); // Light.dbc entry (map default) - data << uint32(overrideId); // Light.dbc entry (override) - data << uint32(fadeInTime); - SendPacketToPlayers(&data); - } - - // Send packet to all players in Eye of Eternity - void SendPacketToPlayers(WorldPacket const* data) const - { - Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (!players.isEmpty()) - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - if (Player* player = itr->GetSource()) - if (player->GetAreaId() == AREA_EYE_OF_ETERNITY) - player->GetSession()->SendPacket(data); - } - uint8 _phase; // Counter for phases used with a getter. uint8 _summonDeaths; // Keeps count of arcane trash. uint8 _preparingPulsesChecker; // In retail they use 2 preparing pulses with 7 sec CD, after they pass 2 seconds. @@ -1067,7 +1047,7 @@ public: float _flySpeed; // Used to store base fly speed to prevent stacking on each evade. }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_malygosAI>(creature); } @@ -1085,7 +1065,7 @@ public: _instance = creature->GetInstanceScript(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_PORTAL_OPENED) { @@ -1097,7 +1077,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { // When duration of opened riff visual ends, closed one should be cast if (!me->HasAura(SPELL_PORTAL_VISUAL_CLOSED) && !me->HasAura(SPELL_PORTAL_OPENED)) @@ -1117,7 +1097,7 @@ public: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_portal_eoeAI>(creature); } @@ -1133,8 +1113,7 @@ public: npc_power_sparkAI(Creature* creature) : ScriptedAI(creature) { _instance = creature->GetInstanceScript(); - // Talk range was not enough for this encounter - sCreatureTextMgr->SendChat(me, EMOTE_POWER_SPARK_SUMMONED, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); + TalkToMap(EMOTE_POWER_SPARK_SUMMONED); MoveToMalygos(); } @@ -1146,7 +1125,7 @@ public: me->GetMotionMaster()->MoveFollow(malygos, 0.0f, 0.0f); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!_instance) return; @@ -1170,7 +1149,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->CastSpell(me, SPELL_POWER_SPARK_DEATH, true); // not supposed to hide the fact it's there by not selectable } @@ -1179,7 +1158,7 @@ public: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_power_sparkAI>(creature); } @@ -1200,14 +1179,14 @@ public: me->SetSpeed(MOVE_FLIGHT, 1.25f); } - void Reset() OVERRIDE + void Reset() override { VehicleAI::Reset(); _wpCount = 0; } - void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) override { if (apply) { @@ -1240,7 +1219,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -1248,7 +1227,7 @@ public: me->GetMotionMaster()->MovePoint(eventId, MeleeHoverDisksWaypoints[eventId]); } - void DoAction(int32 /*action*/) OVERRIDE + void DoAction(int32 /*action*/) override { if (Vehicle* vehicleTemp = me->GetVehicleKit()) if (vehicleTemp->GetPassenger(0) && vehicleTemp->GetPassenger(0)->GetTypeId() == TYPEID_PLAYER) @@ -1260,7 +1239,7 @@ public: me->DespawnOrUnsummon(3*IN_MILLISECONDS); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -1281,7 +1260,7 @@ public: EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_melee_hover_diskAI>(creature); } @@ -1303,16 +1282,16 @@ public: me->SetSpeed(MOVE_FLIGHT, 0.45f); } - void Reset() OVERRIDE + void Reset() override { VehicleAI::Reset(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { } - void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* unit, int8 /*seat*/, bool apply) override { if (apply) { @@ -1328,7 +1307,7 @@ public: } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action < ACTION_DELAYED_DESPAWN) { @@ -1363,7 +1342,7 @@ public: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_caster_hover_diskAI>(creature); } @@ -1381,23 +1360,23 @@ class npc_nexus_lord : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { } - void DoAction(int32 /*action*/) OVERRIDE + void DoAction(int32 /*action*/) override { _events.ScheduleEvent(EVENT_NUKE_DUMMY, 1); _events.ScheduleEvent(EVENT_ARCANE_SHOCK, 2*IN_MILLISECONDS); _events.ScheduleEvent(EVENT_HASTE_BUFF, 12*IN_MILLISECONDS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1428,7 +1407,7 @@ class npc_nexus_lord : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS))) malygos->AI()->SetData(DATA_SUMMON_DEATHS, malygos->AI()->GetData(DATA_SUMMON_DEATHS) + 1); @@ -1439,7 +1418,7 @@ class npc_nexus_lord : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_nexus_lordAI>(creature); } @@ -1457,29 +1436,29 @@ class npc_scion_of_eternity : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, urand(14, 29)*IN_MILLISECONDS); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*target*/) OVERRIDE + void AttackStart(Unit* /*target*/) override { } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -1495,7 +1474,7 @@ class npc_scion_of_eternity : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS))) malygos->AI()->SetData(DATA_SUMMON_DEATHS, malygos->AI()->GetData(DATA_SUMMON_DEATHS) + 1); @@ -1506,7 +1485,7 @@ class npc_scion_of_eternity : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_scion_of_eternityAI>(creature); } @@ -1525,7 +1504,7 @@ public: me->SetReactState(REACT_PASSIVE); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (Creature* creature = summoner->ToCreature()) { @@ -1538,7 +1517,7 @@ public: { } - void DoAction(int32 /*action*/) OVERRIDE + void DoAction(int32 /*action*/) override { if (Creature* malygos = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MALYGOS))) { @@ -1550,7 +1529,7 @@ public: } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_ARCANE_BOMB_TRIGGER) { @@ -1564,7 +1543,7 @@ public: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_arcane_overloadAI>(creature); } @@ -1582,7 +1561,7 @@ public: { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { _summoner = NULL; if (Player* player = summoner->ToPlayer()) @@ -1592,7 +1571,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { VehicleAI::UpdateAI(diff); _events.Update(diff); @@ -1608,15 +1587,14 @@ public: } } - void PassengerBoarded(Unit* /*unit*/, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* /*unit*/, int8 /*seat*/, bool apply) override { if (!apply) { me->DespawnOrUnsummon(2050); me->SetOrientation(2.5f); me->SetSpeed(MOVE_FLIGHT, 1.0f, true); - Position pos; - me->GetPosition(&pos); + Position pos = me->GetPosition(); pos.m_positionX += 10.0f; pos.m_positionY += 10.0f; pos.m_positionZ += 12.0f; @@ -1629,7 +1607,7 @@ public: EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wyrmrest_skytalonAI(creature); } @@ -1648,14 +1626,14 @@ class npc_static_field : public CreatureScript { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { // For some great reason the spell doesn't time it... me->DespawnOrUnsummon(30*IN_MILLISECONDS); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_static_fieldAI(creature); } @@ -1670,12 +1648,12 @@ class spell_malygos_portal_beam : public SpellScriptLoader { PrepareAuraScript(spell_malygos_portal_beam_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PORTAL_OPENED)) return false; @@ -1695,14 +1673,14 @@ class spell_malygos_portal_beam : public SpellScriptLoader target->RemoveAura(SPELL_PORTAL_OPENED); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_malygos_portal_beam_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_portal_beam_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_malygos_portal_beam_AuraScript(); } @@ -1717,7 +1695,7 @@ class spell_malygos_random_portal : public SpellScriptLoader { PrepareSpellScript(spell_malygos_random_portal_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1734,13 +1712,13 @@ class spell_malygos_random_portal : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_malygos_random_portal_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_malygos_random_portal_SpellScript(); } @@ -1773,12 +1751,12 @@ class spell_malygos_arcane_storm : public SpellScriptLoader { PrepareSpellScript(spell_malygos_arcane_storm_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ARCANE_STORM_EXTRA_VISUAL)) return false; @@ -1811,14 +1789,14 @@ class spell_malygos_arcane_storm : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), SPELL_ARCANE_STORM_EXTRA_VISUAL, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_arcane_storm_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectLaunchTarget += SpellEffectFn(spell_malygos_arcane_storm_SpellScript::HandleVisual, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_malygos_arcane_storm_SpellScript(); } @@ -1831,9 +1809,9 @@ public: class spell_malygos_vortex_dummy_SpellScript : public SpellScript { - PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript) + PrepareSpellScript(spell_malygos_vortex_dummy_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1849,13 +1827,13 @@ public: // the rest of the vortex execution continues when SPELL_VORTEX_2 is removed. } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_malygos_vortex_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_malygos_vortex_dummy_SpellScript(); } @@ -1870,12 +1848,12 @@ class spell_malygos_vortex_visual : public SpellScriptLoader { PrepareAuraScript(spell_malygos_vortex_visual_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_VORTEX_1) || !sSpellMgr->GetSpellInfo(SPELL_VORTEX_6)) return false; @@ -1913,13 +1891,13 @@ class spell_malygos_vortex_visual : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_vortex_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_malygos_vortex_visual_AuraScript(); } @@ -1949,7 +1927,7 @@ class spell_arcane_overload : public SpellScriptLoader { PrepareSpellScript(spell_arcane_overload_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1961,13 +1939,13 @@ class spell_arcane_overload : public SpellScriptLoader GetSpellInfo()->Effects[EFFECT_0].CalcRadius(arcaneOverload) * arcaneOverload->GetObjectScale())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_arcane_overload_SpellScript::ResizeEffectRadiusTargetChecker, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_arcane_overload_SpellScript(); } @@ -1982,7 +1960,7 @@ class spell_nexus_lord_align_disk_aggro : public SpellScriptLoader { PrepareSpellScript(spell_nexus_lord_align_disk_aggro_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1994,13 +1972,13 @@ class spell_nexus_lord_align_disk_aggro : public SpellScriptLoader target->GetMotionMaster()->MoveChase(caster->GetVictim()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_nexus_lord_align_disk_aggro_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_nexus_lord_align_disk_aggro_SpellScript(); } @@ -2033,7 +2011,7 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader { PrepareSpellScript(spell_scion_of_eternity_arcane_barrage_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->GetInstanceScript() != NULL; } @@ -2095,14 +2073,14 @@ class spell_scion_of_eternity_arcane_barrage : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_scion_of_eternity_arcane_barrage_SpellScript::FilterMeleeHoverDiskPassangers, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnHit += SpellHitFn(spell_scion_of_eternity_arcane_barrage_SpellScript::TriggerDamageSpellFromPlayer); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_scion_of_eternity_arcane_barrage_SpellScript(); } @@ -2117,12 +2095,12 @@ class spell_malygos_destroy_platform_channel : public SpellScriptLoader { PrepareAuraScript(spell_malygos_destroy_platform_channel_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DESTROY_PLATFORM_BOOM_VISUAL)) return false; @@ -2138,13 +2116,13 @@ class spell_malygos_destroy_platform_channel : public SpellScriptLoader platformTrigger->CastSpell(platformTrigger, SPELL_DESTROY_PLATFORM_BOOM_VISUAL); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_malygos_destroy_platform_channel_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_malygos_destroy_platform_channel_AuraScript(); } @@ -2159,12 +2137,12 @@ class spell_alexstrasza_bunny_destroy_platform_boom_visual : public SpellScriptL { PrepareSpellScript(spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DESTROY_PLATFORM_EVENT)) return false; @@ -2178,13 +2156,13 @@ class spell_alexstrasza_bunny_destroy_platform_boom_visual : public SpellScriptL target->CastSpell(target, SPELL_DESTROY_PLATFORM_EVENT); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_alexstrasza_bunny_destroy_platform_boom_visual_SpellScript(); } @@ -2199,7 +2177,7 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader { PrepareSpellScript(spell_alexstrasza_bunny_destroy_platform_event_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2217,14 +2195,14 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader GetCaster()->CastSpell((Unit*)NULL, SPELL_SUMMON_RED_DRAGON_BUDDY_F_CAST); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_event_SpellScript::HandleSendEvent, EFFECT_0, SPELL_EFFECT_SEND_EVENT); OnEffectHit += SpellEffectFn(spell_alexstrasza_bunny_destroy_platform_event_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_alexstrasza_bunny_destroy_platform_event_SpellScript(); } @@ -2240,7 +2218,7 @@ class spell_wyrmrest_skytalon_summon_red_dragon_buddy : public SpellScriptLoader { PrepareSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -2252,13 +2230,13 @@ class spell_wyrmrest_skytalon_summon_red_dragon_buddy : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_RADIUS); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wyrmrest_skytalon_summon_red_dragon_buddy_SpellScript(); } @@ -2273,7 +2251,7 @@ class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript { PrepareSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2284,13 +2262,13 @@ class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript target->CastSpell(GetCaster(), GetEffectValue(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger_SpellScript(); } @@ -2303,14 +2281,14 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade class spell_malygos_surge_of_power_warning_selector_25_SpellScript : public SpellScript { - PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript) + PrepareSpellScript(spell_malygos_surge_of_power_warning_selector_25_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SURGE_OF_POWER_PHASE_3_25)) return false; @@ -2346,17 +2324,17 @@ class spell_malygos_surge_of_power_warning_selector_25 : public SpellScriptLoade void ExecuteMainSpell() { - GetCaster()->ToCreature()->AI()->DoCastAOE(SPELL_SURGE_OF_POWER_PHASE_3_25); + GetCaster()->ToCreature()->CastSpell((Unit*)NULL, SPELL_SURGE_OF_POWER_PHASE_3_25); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_surge_of_power_warning_selector_25_SpellScript::SendThreeTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); AfterHit += SpellHitFn(spell_malygos_surge_of_power_warning_selector_25_SpellScript::ExecuteMainSpell); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_malygos_surge_of_power_warning_selector_25_SpellScript(); } @@ -2369,9 +2347,9 @@ class spell_malygos_surge_of_power_25 : public SpellScriptLoader class spell_malygos_surge_of_power_25_SpellScript : public SpellScript { - PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript) + PrepareSpellScript(spell_malygos_surge_of_power_25_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2401,13 +2379,13 @@ class spell_malygos_surge_of_power_25 : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_malygos_surge_of_power_25_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_malygos_surge_of_power_25_SpellScript(); } @@ -2422,12 +2400,12 @@ class spell_alexstrasza_gift_beam : public SpellScriptLoader { PrepareAuraScript(spell_alexstrasza_gift_beam_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ALEXSTRASZAS_GIFT_BEAM_VISUAL)) return false; @@ -2447,14 +2425,14 @@ class spell_alexstrasza_gift_beam : public SpellScriptLoader target->RemoveAura(SPELL_ALEXSTRASZAS_GIFT_BEAM_VISUAL); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_alexstrasza_gift_beam_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_alexstrasza_gift_beam_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_alexstrasza_gift_beam_AuraScript(); } @@ -2469,7 +2447,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader { PrepareAuraScript(spell_alexstrasza_gift_beam_visual_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2501,7 +2479,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_alexstrasza_gift_beam_visual_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_alexstrasza_gift_beam_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -2510,7 +2488,7 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader GameObject* _alexstraszaGift; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_alexstrasza_gift_beam_visual_AuraScript(); } @@ -2521,7 +2499,7 @@ class achievement_denyin_the_scion : public AchievementCriteriaScript public: achievement_denyin_the_scion() : AchievementCriteriaScript("achievement_denyin_the_scion") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { // Only melee disks can be used if (Unit* disk = source->GetVehicleBase()) diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index e79f8d0764f..8a1fb6a9829 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -26,7 +26,7 @@ class instance_eye_of_eternity : public InstanceMapScript public: instance_eye_of_eternity() : InstanceMapScript("instance_eye_of_eternity", 616) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_eye_of_eternity_InstanceMapScript(map); } @@ -48,7 +48,7 @@ public: alexstraszaBunnyGUID = 0; }; - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -94,7 +94,7 @@ public: instance->AddToMap(go); } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -105,19 +105,19 @@ public: if (instance->GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) { irisGUID = go->GetGUID(); - go->GetPosition(&focusingIrisPosition); + focusingIrisPosition = go->GetPosition(); } break; case GO_FOCUSING_IRIS_25: if (instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) { irisGUID = go->GetGUID(); - go->GetPosition(&focusingIrisPosition); + focusingIrisPosition = go->GetPosition(); } break; case GO_EXIT_PORTAL: exitPortalGUID = go->GetGUID(); - go->GetPosition(&exitPortalPosition); + exitPortalPosition = go->GetPosition(); break; case GO_HEART_OF_MAGIC_10: if (instance->GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) @@ -130,7 +130,7 @@ public: } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -152,7 +152,7 @@ public: } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { if (unit->GetTypeId() != TYPEID_PLAYER) return; @@ -165,7 +165,7 @@ public: unit->SetControlled(true, UNIT_STATE_ROOT); } - void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override { if (eventId == EVENT_FOCUSING_IRIS) { @@ -239,7 +239,7 @@ public: } } - void SetData(uint32 data, uint32 /*value*/) OVERRIDE + void SetData(uint32 data, uint32 /*value*/) override { switch (data) { @@ -255,7 +255,7 @@ public: } } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -278,7 +278,7 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -289,7 +289,7 @@ public: return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index f3304368e70..019a85c1387 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -88,7 +88,7 @@ class boss_anomalus : public CreatureScript uint64 uiChaoticRiftGUID; bool chaosTheory; - void Reset() OVERRIDE + void Reset() override { Phase = 0; uiSparkTimer = 5000; @@ -98,21 +98,21 @@ class boss_anomalus : public CreatureScript instance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_ANOMALUS_EVENT, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_ANOMALUS_EVENT, DONE); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_CHAOS_THEORY) return chaosTheory ? 1 : 0; @@ -120,13 +120,13 @@ class boss_anomalus : public CreatureScript return 0; } - void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override { if (summoned->GetEntry() == NPC_CHAOTIC_RIFT) chaosTheory = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -182,7 +182,7 @@ class boss_anomalus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_anomalusAI>(creature); } @@ -206,7 +206,7 @@ class npc_chaotic_rift : public CreatureScript uint32 uiChaoticEnergyBurstTimer; uint32 uiSummonCrazedManaWraithTimer; - void Reset() OVERRIDE + void Reset() override { uiChaoticEnergyBurstTimer = 1000; uiSummonCrazedManaWraithTimer = 5000; @@ -214,7 +214,7 @@ class npc_chaotic_rift : public CreatureScript DoCast(me, SPELL_ARCANEFORM, false); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -250,7 +250,7 @@ class npc_chaotic_rift : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_chaotic_riftAI>(creature); } @@ -263,7 +263,7 @@ class achievement_chaos_theory : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp index b82f131457a..3e1996fd053 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp @@ -47,7 +47,7 @@ class boss_commander_kolurg : public CreatureScript public: boss_commander_kolurg() : CreatureScript("boss_commander_kolurg") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_commander_kolurgAI(creature); } @@ -56,12 +56,12 @@ public: { boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //Return since we have no target if (!UpdateVictim()) @@ -69,7 +69,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE { } + void JustDied(Unit* /*killer*/) override { } }; }; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp index 7a9ea8ec9c3..c1ecdff8576 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp @@ -41,7 +41,7 @@ class boss_commander_stoutbeard : public CreatureScript public: boss_commander_stoutbeard() : CreatureScript("boss_commander_stoutbeard") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_commander_stoutbeardAI(creature); } @@ -50,11 +50,11 @@ public: { boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 9943ad7e1b1..38e6a3fc816 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -59,7 +59,7 @@ class boss_keristrasza : public CreatureScript public: boss_keristrasza() : CreatureScript("boss_keristrasza") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_keristraszaAI>(creature); } @@ -81,7 +81,7 @@ public: bool intenseCold; bool bEnrage; - void Reset() OVERRIDE + void Reset() override { uiCrystalfireBreathTimer = 14*IN_MILLISECONDS; uiCrystalChainsCrystalizeTimer = DUNGEON_MODE(30*IN_MILLISECONDS, 11*IN_MILLISECONDS); @@ -98,7 +98,7 @@ public: instance->SetData(DATA_KERISTRASZA_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoCastAOE(SPELL_INTENSE_COLD); @@ -106,14 +106,14 @@ public: instance->SetData(DATA_KERISTRASZA_EVENT, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_KERISTRASZA_EVENT, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); @@ -157,13 +157,13 @@ public: } } - void SetGUID(uint64 guid, int32 id/* = 0 */) OVERRIDE + void SetGUID(uint64 guid, int32 id/* = 0 */) override { if (id == DATA_INTENSE_COLD) intenseColdList.push_back(guid); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -209,7 +209,7 @@ class containment_sphere : public GameObjectScript public: containment_sphere() : GameObjectScript("containment_sphere") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); @@ -247,13 +247,13 @@ class spell_intense_cold : public SpellScriptLoader caster->GetAI()->SetGUID(GetTarget()->GetGUID(), DATA_INTENSE_COLD); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_intense_cold_AuraScript::HandlePeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_intense_cold_AuraScript(); } @@ -266,7 +266,7 @@ class achievement_intense_cold : public AchievementCriteriaScript { } - bool OnCheck(Player* player, Unit* target) OVERRIDE + bool OnCheck(Player* player, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index cfa1b704c90..e42d3d2bcfc 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -63,7 +63,7 @@ class boss_magus_telestra : public CreatureScript public: boss_magus_telestra() : CreatureScript("boss_magus_telestra") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_magus_telestraAI>(creature); } @@ -96,7 +96,7 @@ public: uint8 splitPersonality; time_t time[3]; - void Reset() OVERRIDE + void Reset() override { Phase = 0; //These times are probably wrong @@ -121,27 +121,27 @@ public: instance->SetData(DATA_MAGUS_TELESTRA_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_MAGUS_TELESTRA_EVENT, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_MAGUS_DEAD) { @@ -155,7 +155,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_SPLIT_PERSONALITY) return splitPersonality; @@ -192,29 +192,29 @@ public: return 0; } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { if (summon->IsAlive()) return; if (summon->GetGUID() == uiFireMagusGUID) { - me->AI()->DoAction(ACTION_MAGUS_DEAD); + DoAction(ACTION_MAGUS_DEAD); bFireMagusDead = true; } else if (summon->GetGUID() == uiFrostMagusGUID) { - me->AI()->DoAction(ACTION_MAGUS_DEAD); + DoAction(ACTION_MAGUS_DEAD); bFrostMagusDead = true; } else if (summon->GetGUID() == uiArcaneMagusGUID) { - me->AI()->DoAction(ACTION_MAGUS_DEAD); + DoAction(ACTION_MAGUS_DEAD); bArcaneMagusDead = true; } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -345,7 +345,7 @@ class achievement_split_personality : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 93e52c4da73..222f0474c01 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -76,7 +76,7 @@ public: frenzy = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -91,7 +91,7 @@ public: instance->SetData(DATA_ORMOROK_EVENT, IN_PROGRESS); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!frenzy && HealthBelowPct(25)) { @@ -101,7 +101,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -110,13 +110,13 @@ public: instance->SetData(DATA_ORMOROK_EVENT, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -162,7 +162,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ormorokAI>(creature); } @@ -201,7 +201,7 @@ public: _despawntimer = 0; } - void IsSummonedBy(Unit* owner) OVERRIDE + void IsSummonedBy(Unit* owner) override { switch (me->GetEntry()) { @@ -225,12 +225,12 @@ public: _despawntimer = 2000; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return type == DATA_COUNT ? _count : 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_despawntimer <= diff) { @@ -250,7 +250,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_crystal_spike_triggerAI(creature); } @@ -277,13 +277,13 @@ class spell_crystal_spike : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_crystal_spike_AuraScript(); } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index 851e16fe576..f2118932d61 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -33,7 +33,7 @@ class instance_nexus : public InstanceMapScript public: instance_nexus() : InstanceMapScript("instance_nexus", 576) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_nexus_InstanceMapScript(map); } @@ -53,7 +53,7 @@ public: std::string strInstData; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -64,7 +64,7 @@ public: TelestrasContainmentSphere = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { Map::PlayerList const &players = instance->GetPlayers(); uint32 TeamInInstance = 0; @@ -88,7 +88,7 @@ public: if (ServerAllowsTwoSideGroups()) creature->setFaction(FACTION_HOSTILE_FOR_ALL); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26799, HORDE); + creature->UpdateEntry(26799); break; } case 26802: @@ -96,7 +96,7 @@ public: if (ServerAllowsTwoSideGroups()) creature->setFaction(FACTION_HOSTILE_FOR_ALL); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26801, HORDE); + creature->UpdateEntry(26801); break; } case 26805: @@ -104,7 +104,7 @@ public: if (ServerAllowsTwoSideGroups()) creature->setFaction(FACTION_HOSTILE_FOR_ALL); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26803, HORDE); + creature->UpdateEntry(26803); break; } case 27949: @@ -112,7 +112,7 @@ public: if (ServerAllowsTwoSideGroups()) creature->setFaction(FACTION_HOSTILE_FOR_ALL); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(27947, HORDE); + creature->UpdateEntry(27947); break; } case 26796: @@ -120,13 +120,13 @@ public: if (ServerAllowsTwoSideGroups()) creature->setFaction(FACTION_HOSTILE_FOR_ALL); if (TeamInInstance == ALLIANCE) - creature->UpdateEntry(26798, HORDE); + creature->UpdateEntry(26798); break; } } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -154,7 +154,7 @@ public: } } - uint32 GetData(uint32 identifier) const OVERRIDE + uint32 GetData(uint32 identifier) const override { switch (identifier) { @@ -166,7 +166,7 @@ public: return 0; } - void SetData(uint32 identifier, uint32 data) OVERRIDE + void SetData(uint32 identifier, uint32 data) override { switch (identifier) { @@ -221,7 +221,7 @@ public: } } - uint64 GetData64(uint32 uiIdentifier) const OVERRIDE + uint64 GetData64(uint32 uiIdentifier) const override { switch (uiIdentifier) { @@ -234,7 +234,7 @@ public: return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { return strInstData; } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 949b26d3d3b..3539661ea19 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -59,7 +59,7 @@ class boss_drakos : public CreatureScript { boss_drakosAI(Creature* creature) : BossAI(creature, DATA_DRAKOS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -70,13 +70,13 @@ class boss_drakos : public CreatureScript postPull = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -92,12 +92,9 @@ class boss_drakos : public CreatureScript { case EVENT_BOMB_SUMMON: { - Position position; - me->GetPosition(&position); - for (uint8 i = 0; i <= (postPull ? 3 : 0); i++) { - me->GetRandomNearPosition(position, frand(0.0f, 10.0f)); + Position position = me->GetRandomNearPosition(frand(0.0f, 10.0f)); me->SummonCreature(NPC_UNSTABLE_SPHERE, position); } } @@ -121,7 +118,7 @@ class boss_drakos : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -131,7 +128,7 @@ class boss_drakos : public CreatureScript instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } @@ -140,7 +137,7 @@ class boss_drakos : public CreatureScript bool postPull; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<boss_drakosAI>(creature); } @@ -155,7 +152,7 @@ class npc_unstable_sphere : public CreatureScript { npc_unstable_sphereAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->MoveRandom(40.0f); @@ -168,7 +165,7 @@ class npc_unstable_sphere : public CreatureScript me->DespawnOrUnsummon(19000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (pulseTimer <= diff) { @@ -183,7 +180,7 @@ class npc_unstable_sphere : public CreatureScript uint32 pulseTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unstable_sphereAI(creature); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index c4fda7e68b3..3ae61bdd116 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -87,7 +87,7 @@ class boss_eregos : public CreatureScript { boss_eregosAI(Creature* creature) : BossAI(creature, DATA_EREGOS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _phase = PHASE_NORMAL; @@ -99,13 +99,13 @@ class boss_eregos : public CreatureScript DoAction(ACTION_SET_NORMAL_EVENTS); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -121,7 +121,7 @@ class boss_eregos : public CreatureScript _amberVoid = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -137,7 +137,7 @@ class boss_eregos : public CreatureScript return 0; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_SET_NORMAL_EVENTS) return; @@ -149,7 +149,7 @@ class boss_eregos : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_LEY_WHELP, urand(15, 30) * IN_MILLISECONDS, 0, PHASE_NORMAL); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { BossAI::JustSummoned(summon); @@ -161,7 +161,7 @@ class boss_eregos : public CreatureScript summon->GetMotionMaster()->MoveRandom(100.0f); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { if (summon->GetEntry() != NPC_PLANAR_ANOMALY) return; @@ -170,7 +170,7 @@ class boss_eregos : public CreatureScript summon->CastSpell(summon, SPELL_PLANAR_BLAST, true); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!IsHeroic()) return; @@ -191,7 +191,7 @@ class boss_eregos : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -231,7 +231,7 @@ class boss_eregos : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -245,7 +245,7 @@ class boss_eregos : public CreatureScript bool _amberVoid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_eregosAI(creature); } @@ -266,13 +266,13 @@ class spell_eregos_planar_shift : public SpellScriptLoader creature->AI()->DoAction(ACTION_SET_NORMAL_EVENTS); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_eregos_planar_shift_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_IMMUNITY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_eregos_planar_shift_AuraScript(); } @@ -283,7 +283,7 @@ class achievement_gen_eregos_void : public AchievementCriteriaScript public: achievement_gen_eregos_void(char const* name, uint32 data) : AchievementCriteriaScript(name), _data(data) { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(_data); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 8cc198a0d84..c4e0986edd4 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -103,7 +103,7 @@ class boss_urom : public CreatureScript std::random_shuffle(group, group + 3); } - void Reset() OVERRIDE + void Reset() override { me->CastSpell(me, SPELL_EVOCATE); @@ -123,14 +123,14 @@ class boss_urom : public CreatureScript timeBombTimer = urand(20000, 25000); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); StartAttack(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -187,13 +187,13 @@ class boss_urom : public CreatureScript ++platform; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_PLAYER_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -230,11 +230,13 @@ class boss_urom : public CreatureScript { if (arcaneExplosionTimer <= diff) { - Position pos; - me->GetVictim()->GetPosition(&pos); + if (me->GetVictim()) + { + Position pos = me->EnsureVictim()->GetPosition(); - me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); - me->GetMotionMaster()->MoveChase(me->GetVictim()); + me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); + me->GetMotionMaster()->MoveChase(me->GetVictim()); + } me->SetWalk(true); Talk(EMOTE_ARCANE_EXPLOSION); @@ -272,7 +274,7 @@ class boss_urom : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -286,7 +288,7 @@ class boss_urom : public CreatureScript me->DeleteThreatList(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override { switch (spellInfo->Id) { @@ -333,7 +335,7 @@ class boss_urom : public CreatureScript uint32 timeBombTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<boss_uromAI>(creature); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index f6cf17c5b88..585da8e28d3 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -61,14 +61,14 @@ class boss_varos : public CreatureScript { boss_varosAI(Creature* creature) : BossAI(creature, DATA_VAROS) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { BossAI::InitializeAI(); if (instance->GetBossState(DATA_DRAKOS) != DONE) DoCast(me, SPELL_CENTRIFUGE_SHIELD); } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -81,7 +81,7 @@ class boss_varos : public CreatureScript coreEnergizeOrientation = 0.0f; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -93,7 +93,7 @@ class boss_varos : public CreatureScript return coreEnergizeOrientation; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -143,7 +143,7 @@ class boss_varos : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -155,7 +155,7 @@ class boss_varos : public CreatureScript float coreEnergizeOrientation; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<boss_varosAI>(creature); } @@ -173,7 +173,7 @@ class npc_azure_ring_captain : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { targetGUID = 0; @@ -183,7 +183,7 @@ class npc_azure_ring_captain : public CreatureScript me->SetReactState(REACT_AGGRESSIVE); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_ICE_BEAM) { @@ -192,7 +192,7 @@ class npc_azure_ring_captain : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -200,7 +200,7 @@ class npc_azure_ring_captain : public CreatureScript DoMeleeAttackIfReady(); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != ACTION_CALL_DRAGON_EVENT) @@ -212,7 +212,7 @@ class npc_azure_ring_captain : public CreatureScript DoCast(target, SPELL_ICE_BEAM); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -236,7 +236,7 @@ class npc_azure_ring_captain : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_ring_captainAI>(creature); } @@ -251,7 +251,7 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader { PrepareAuraScript(spell_varos_centrifuge_shield_AuraScript); - bool Load() OVERRIDE + bool Load() override { Unit* caster = GetCaster(); return (caster && caster->ToCreature()); @@ -279,14 +279,14 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_varos_centrifuge_shield_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectApply += AuraEffectApplyFn(spell_varos_centrifuge_shield_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_varos_centrifuge_shield_AuraScript(); } @@ -299,7 +299,7 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader class spell_varos_energize_core_area_enemySpellScript : public SpellScript { - PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript) + PrepareSpellScript(spell_varos_energize_core_area_enemySpellScript); void FilterTargets(std::list<WorldObject*>& targets) { @@ -314,9 +314,6 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end();) { - Position pos; - (*itr)->GetPosition(&pos); - float angle = varos->GetAngle((*itr)->GetPositionX(), (*itr)->GetPositionY()); float diff = fabs(orientation - angle); @@ -327,13 +324,13 @@ class spell_varos_energize_core_area_enemy : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_varos_energize_core_area_enemySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_varos_energize_core_area_enemySpellScript(); } @@ -346,7 +343,7 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader class spell_varos_energize_core_area_entrySpellScript : public SpellScript { - PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript) + PrepareSpellScript(spell_varos_energize_core_area_entrySpellScript); void FilterTargets(std::list<WorldObject*>& targets) { @@ -361,9 +358,6 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end();) { - Position pos; - (*itr)->GetPosition(&pos); - float angle = varos->GetAngle((*itr)->GetPositionX(), (*itr)->GetPositionY()); float diff = fabs(orientation - angle); @@ -374,13 +368,13 @@ class spell_varos_energize_core_area_entry : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_varos_energize_core_area_entrySpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_varos_energize_core_area_entrySpellScript(); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 2c809b17367..2b15ddf32c4 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -59,7 +59,7 @@ class instance_oculus : public InstanceMapScript VerdisaGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -121,7 +121,7 @@ class instance_oculus : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -137,7 +137,7 @@ class instance_oculus : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -149,7 +149,7 @@ class instance_oculus : public InstanceMapScript } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) @@ -165,7 +165,7 @@ class instance_oculus : public InstanceMapScript } } - void FillInitialWorldStates(WorldPacket& data) OVERRIDE + void FillInitialWorldStates(WorldPacket& data) override { if (GetBossState(DATA_DRAKOS) == DONE && GetBossState(DATA_VAROS) != DONE) { @@ -179,7 +179,7 @@ class instance_oculus : public InstanceMapScript } } - void ProcessEvent(WorldObject* /*unit*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* /*unit*/, uint32 eventId) override { if (eventId != EVENT_CALL_DRAGON) return; @@ -189,7 +189,7 @@ class instance_oculus : public InstanceMapScript drake->AI()->DoAction(ACTION_CALL_DRAGON_EVENT); } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -208,9 +208,11 @@ class instance_oculus : public InstanceMapScript break; case DATA_VAROS: if (state == DONE) + { DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_SHOW, 0); if (Creature* urom = instance->GetCreature(UromGUID)) urom->SetPhaseMask(1, true); + } break; case DATA_UROM: if (state == DONE) @@ -237,7 +239,7 @@ class instance_oculus : public InstanceMapScript return true; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -279,12 +281,12 @@ class instance_oculus : public InstanceMapScript void GreaterWhelps() { - for (std::list<uint64>::const_iterator itr = GreaterWhelpList.begin(); itr != GreaterWhelpList.end(); ++itr) - if (Creature* gwhelp = instance->GetCreature(*itr)) + for (uint64 guid : GreaterWhelpList) + if (Creature* gwhelp = instance->GetCreature(guid)) gwhelp->SetPhaseMask(1, true); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -295,7 +297,7 @@ class instance_oculus : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -344,7 +346,7 @@ class instance_oculus : public InstanceMapScript std::list<uint64> GreaterWhelpList; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_oculus_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 506e16741fb..259d7faa6fe 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -126,7 +126,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript player->DestroyItemCount(itemId, 1, true, false); } - void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) OVERRIDE + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { switch (menuId) { @@ -172,7 +172,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript player->PlayerTalkClass->SendCloseGossip(); } - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 id) override { if (id != POINT_MOVE_OUT) return; @@ -186,7 +186,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<npc_verdisa_beglaristrasz_eternosAI>(creature); } @@ -201,7 +201,7 @@ class npc_image_belgaristrasz : public CreatureScript { npc_image_belgaristraszAI(Creature* creature) : ScriptedAI(creature) { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->GetEntry() == NPC_VAROS) { @@ -217,7 +217,7 @@ class npc_image_belgaristrasz : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<npc_image_belgaristraszAI>(creature); } @@ -235,13 +235,13 @@ class npc_ruby_emerald_amber_drake : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _healthWarning = true; } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (_instance->GetBossState(DATA_EREGOS) == IN_PROGRESS) if (Creature* eregos = me->FindNearestCreature(NPC_EREGOS, 450.0f, true)) @@ -264,18 +264,17 @@ class npc_ruby_emerald_amber_drake : public CreatureScript return; } - Position pos; - summoner->GetPosition(&pos); + Position pos = summoner->GetPosition(); me->GetMotionMaster()->MovePoint(POINT_LAND, pos); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == POINT_LAND) me->SetDisableGravity(false); // Needed this for proper animation after spawn, the summon in air fall to ground bug leave no other option for now, if this isn't used the drake will only walk on move. } - void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override { if (passenger->GetTypeId() != TYPEID_PLAYER) return; @@ -295,7 +294,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_healthWarning) { @@ -337,8 +336,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript me->SetOrientation(2.5f); me->SetSpeed(MOVE_FLIGHT, 1.0f, true); Talk(SAY_DRAKES_TAKEOFF); - Position pos; - me->GetPosition(&pos); + Position pos = me->GetPosition(); Position offset = { 10.0f, 10.0f, 12.0f, 0.0f }; pos.RelocateOffset(offset); me->SetDisableGravity(true); @@ -357,7 +355,7 @@ class npc_ruby_emerald_amber_drake : public CreatureScript bool _healthWarning; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetOculusAI<npc_ruby_emerald_amber_drakeAI>(creature); } @@ -382,13 +380,13 @@ class spell_oculus_call_ruby_emerald_amber_drake : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_oculus_call_ruby_emerald_amber_drake_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_FRONT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_oculus_call_ruby_emerald_amber_drake_SpellScript(); } @@ -414,13 +412,13 @@ class spell_oculus_ride_ruby_emerald_amber_drake_que : public SpellScriptLoader GetTarget()->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_oculus_ride_ruby_emerald_amber_drake_que_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_oculus_ride_ruby_emerald_amber_drake_que_AuraScript(); } @@ -436,7 +434,7 @@ class spell_oculus_evasive_maneuvers : public SpellScriptLoader { PrepareAuraScript(spell_oculus_evasive_maneuvers_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RUBY_EVASIVE_CHARGES)) return false; @@ -451,13 +449,13 @@ class spell_oculus_evasive_maneuvers : public SpellScriptLoader Remove(); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_oculus_evasive_maneuvers_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_oculus_evasive_maneuvers_AuraScript(); } @@ -473,7 +471,7 @@ class spell_oculus_shock_lance : public SpellScriptLoader { PrepareSpellScript(spell_oculus_shock_lance_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE)) return false; @@ -493,13 +491,13 @@ class spell_oculus_shock_lance : public SpellScriptLoader SetHitDamage(damage); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_oculus_shock_lance_SpellScript::CalcDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_oculus_shock_lance_SpellScript(); } @@ -515,7 +513,7 @@ class spell_oculus_stop_time : public SpellScriptLoader { PrepareAuraScript(spell_oculus_stop_time_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE)) return false; @@ -533,13 +531,13 @@ class spell_oculus_stop_time : public SpellScriptLoader caster->CastSpell(target, SPELL_AMBER_SHOCK_CHARGE, true); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_oculus_stop_time_AuraScript::Apply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_oculus_stop_time_AuraScript(); } @@ -555,7 +553,7 @@ class spell_oculus_temporal_rift : public SpellScriptLoader { PrepareAuraScript(spell_oculus_temporal_rift_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_AMBER_SHOCK_CHARGE)) return false; @@ -577,13 +575,13 @@ class spell_oculus_temporal_rift : public SpellScriptLoader const_cast<AuraEffect*>(aurEff)->SetAmount(amount); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_oculus_temporal_rift_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_oculus_temporal_rift_AuraScript(); } @@ -604,13 +602,13 @@ class spell_oculus_touch_the_nightmare : public SpellScriptLoader SetHitDamage(int32(GetCaster()->CountPctFromMaxHealth(30))); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_oculus_touch_the_nightmare_SpellScript::HandleDamageCalc, EFFECT_2, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_oculus_touch_the_nightmare_SpellScript(); } @@ -634,14 +632,14 @@ class spell_oculus_dream_funnel : public SpellScriptLoader canBeRecalculated = false; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_oculus_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_oculus_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_oculus_dream_funnel_AuraScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index dbdcfc88951..13ea815febc 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -97,7 +97,7 @@ class boss_bjarngrim : public CreatureScript public: boss_bjarngrim() : CreatureScript("boss_bjarngrim") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_bjarngrimAI>(creature); } @@ -137,7 +137,7 @@ public: uint64 m_auiStormforgedLieutenantGUID[2]; - void Reset() OVERRIDE + void Reset() override { if (canBuff) if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE)) @@ -164,11 +164,9 @@ public: for (uint8 i = 0; i < 2; ++i) { - if (Creature* pStormforgedLieutenant = (Unit::GetCreature((*me), m_auiStormforgedLieutenantGUID[i]))) - { + if (Creature* pStormforgedLieutenant = ObjectAccessor::GetCreature(*me, m_auiStormforgedLieutenantGUID[i])) if (!pStormforgedLieutenant->IsAlive()) pStormforgedLieutenant->Respawn(); - } } if (m_uiStance != STANCE_DEFENSIVE) @@ -183,7 +181,7 @@ public: instance->SetBossState(DATA_BJARNGRIM, NOT_STARTED); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE)) canBuff = true; @@ -193,7 +191,7 @@ public: ScriptedAI::EnterEvadeMode(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -203,12 +201,12 @@ public: instance->SetBossState(DATA_BJARNGRIM, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -232,7 +230,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -386,7 +384,7 @@ class npc_stormforged_lieutenant : public CreatureScript public: npc_stormforged_lieutenant() : CreatureScript("npc_stormforged_lieutenant") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_stormforged_lieutenantAI>(creature); } @@ -403,22 +401,22 @@ public: uint32 m_uiArcWeld_Timer; uint32 m_uiRenewSteel_Timer; - void Reset() OVERRIDE + void Reset() override { m_uiArcWeld_Timer = urand(20000, 21000); m_uiRenewSteel_Timer = urand(10000, 11000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { - if (Creature* pBjarngrim = instance->instance->GetCreature(instance->GetData64(DATA_BJARNGRIM))) + if (Creature* pBjarngrim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BJARNGRIM))) { if (pBjarngrim->IsAlive() && !pBjarngrim->GetVictim()) pBjarngrim->AI()->AttackStart(who); } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -434,7 +432,7 @@ public: if (m_uiRenewSteel_Timer <= uiDiff) { - if (Creature* pBjarngrim = instance->instance->GetCreature(instance->GetData64(DATA_BJARNGRIM))) + if (Creature* pBjarngrim = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_BJARNGRIM))) { if (pBjarngrim->IsAlive()) DoCast(pBjarngrim, SPELL_RENEW_STEEL_N); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 1788ecacd35..83082b18d73 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -70,7 +70,7 @@ class boss_ionar : public CreatureScript public: boss_ionar() : CreatureScript("boss_ionar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ionarAI>(creature); } @@ -96,7 +96,7 @@ public: uint32 uiDisperseHealth; - void Reset() OVERRIDE + void Reset() override { lSparkList.DespawnAll(); @@ -118,14 +118,14 @@ public: instance->SetBossState(DATA_IONAR, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetBossState(DATA_IONAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -134,13 +134,13 @@ public: instance->SetBossState(DATA_IONAR, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_DISPERSE) { @@ -163,12 +163,11 @@ public: if (lSparkList.empty()) return; - Position pos; - me->GetPosition(&pos); + Position pos = me->GetPosition(); - for (std::list<uint64>::const_iterator itr = lSparkList.begin(); itr != lSparkList.end(); ++itr) + for (uint64 guid : lSparkList) { - if (Creature* pSpark = ObjectAccessor::GetCreature(*me, *itr)) + if (Creature* pSpark = ObjectAccessor::GetCreature(*me, guid)) { if (pSpark->IsAlive()) { @@ -182,13 +181,13 @@ public: } } - void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override { if (!me->IsVisible()) uiDamage = 0; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_SPARK_OF_IONAR) { @@ -205,13 +204,13 @@ public: } } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { if (summoned->GetEntry() == NPC_SPARK_OF_IONAR) lSparkList.Despawn(summoned); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -308,13 +307,13 @@ public: uint32 uiCheckTimer; - void Reset() OVERRIDE + void Reset() override { uiCheckTimer = 2*IN_MILLISECONDS; me->SetReactState(REACT_PASSIVE); } - void MovementInform(uint32 uiType, uint32 uiPointId) OVERRIDE + void MovementInform(uint32 uiType, uint32 uiPointId) override { if (uiType != POINT_MOTION_TYPE || !instance) return; @@ -323,12 +322,12 @@ public: me->DespawnOrUnsummon(); } - void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override { uiDamage = 0; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { // Despawn if the encounter is not running if (instance->GetBossState(DATA_IONAR) != IN_PROGRESS) @@ -345,8 +344,7 @@ public: { if (me->GetDistance(ionar) > DATA_MAX_SPARK_DISTANCE) { - Position pos; - ionar->GetPosition(&pos); + Position pos = ionar->GetPosition(); me->SetSpeed(MOVE_RUN, 2.0f); me->GetMotionMaster()->Clear(); @@ -364,7 +362,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_spark_of_ionarAI>(creature); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index fee7d201a31..576fc4492f1 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -67,7 +67,7 @@ class boss_loken : public CreatureScript public: boss_loken() : CreatureScript("boss_loken") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lokenAI>(creature); } @@ -87,7 +87,7 @@ public: uint32 m_uiHealthAmountModifier; - void Reset() OVERRIDE + void Reset() override { m_uiArcLightning_Timer = 15000; m_uiLightningNova_Timer = 20000; @@ -99,7 +99,7 @@ public: instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -107,7 +107,7 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMELY_DEATH_START_EVENT); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -115,13 +115,13 @@ public: instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_PULSING_SHOCKWAVE_AURA); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -202,13 +202,13 @@ class spell_loken_pulsing_shockwave : public SpellScriptLoader SetHitDamage(int32(GetHitDamage() * distance)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_loken_pulsing_shockwave_SpellScript::CalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_loken_pulsing_shockwave_SpellScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index c312d001ee7..b424ce01b06 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -73,7 +73,7 @@ class boss_volkhan : public CreatureScript public: boss_volkhan() : CreatureScript("boss_volkhan") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_volkhanAI>(creature); } @@ -102,7 +102,7 @@ public: uint32 m_uiHealthAmountModifier; - void Reset() OVERRIDE + void Reset() override { m_bIsStriking = false; m_bHasTemper = false; @@ -123,14 +123,14 @@ public: instance->SetBossState(DATA_VOLKHAN, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetBossState(DATA_VOLKHAN, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->Attack(who, true)) { @@ -143,7 +143,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); DespawnGolem(); @@ -151,7 +151,7 @@ public: instance->SetBossState(DATA_VOLKHAN, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); @@ -162,13 +162,11 @@ public: if (m_lGolemGUIDList.empty()) return; - for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr) + for (uint64 guid : m_lGolemGUIDList) { - if (Creature* temp = Unit::GetCreature(*me, *itr)) - { + if (Creature* temp = ObjectAccessor::GetCreature(*me, guid)) if (temp->IsAlive()) temp->DespawnOrUnsummon(); - } } m_lGolemGUIDList.clear(); @@ -179,9 +177,9 @@ public: if (m_lGolemGUIDList.empty()) return; - for (std::list<uint64>::const_iterator itr = m_lGolemGUIDList.begin(); itr != m_lGolemGUIDList.end(); ++itr) + for (uint64 guid : m_lGolemGUIDList) { - if (Creature* temp = Unit::GetCreature(*me, *itr)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, guid)) { // Only shatter brittle golems if (temp->IsAlive() && temp->GetEntry() == NPC_BRITTLE_GOLEM) @@ -193,7 +191,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_MOLTEN_GOLEM) { @@ -207,7 +205,7 @@ public: } } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { if (m_uiSummonPhase == 2) { @@ -216,7 +214,7 @@ public: } } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { if (data == DATA_SHATTER_RESISTANT) return GolemsShattered; @@ -224,7 +222,7 @@ public: return 0; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -305,7 +303,7 @@ public: case 2: // 2 - Check if reached Anvil - // This is handled in: void JustReachedHome() OVERRIDE + // This is handled in: void JustReachedHome() override break; case 3: @@ -361,7 +359,7 @@ class npc_molten_golem : public CreatureScript public: npc_molten_golem() : CreatureScript("npc_molten_golem") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_molten_golemAI(creature); } @@ -376,7 +374,7 @@ public: uint32 m_uiDeathDelay_Timer; uint32 m_uiImmolation_Timer; - void Reset() OVERRIDE + void Reset() override { m_bIsFrozen = false; @@ -385,7 +383,7 @@ public: m_uiImmolation_Timer = 5000; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->Attack(who, true)) { @@ -398,7 +396,7 @@ public: } } - void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) OVERRIDE + void DamageTaken(Unit* /*pDoneBy*/, uint32 &uiDamage) override { if (uiDamage > me->GetHealth()) { @@ -417,7 +415,7 @@ public: } } - void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) OVERRIDE + void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) override { // This is the dummy effect of the spells if (pSpell->Id == SPELL_SHATTER_N || pSpell->Id == SPELL_SHATTER_H) @@ -425,7 +423,7 @@ public: me->DespawnOrUnsummon(); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { // Return since we have no target or if we are frozen if (!UpdateVictim() || m_bIsFrozen) @@ -457,7 +455,7 @@ class achievement_shatter_resistant : public AchievementCriteriaScript public: achievement_shatter_resistant() : AchievementCriteriaScript("achievement_shatter_resistant") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_SHATTER_RESISTANT) < 5; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp index a6d55c363f5..2f5273f0296 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp @@ -47,7 +47,7 @@ class instance_halls_of_lightning : public InstanceMapScript LokenGlobeGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -68,7 +68,7 @@ class instance_halls_of_lightning : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -85,7 +85,7 @@ class instance_halls_of_lightning : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -99,7 +99,7 @@ class instance_halls_of_lightning : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -118,7 +118,7 @@ class instance_halls_of_lightning : public InstanceMapScript return true; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -136,7 +136,7 @@ class instance_halls_of_lightning : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -147,7 +147,7 @@ class instance_halls_of_lightning : public InstanceMapScript return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -188,7 +188,7 @@ class instance_halls_of_lightning : public InstanceMapScript uint64 LokenGlobeGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_halls_of_lightning_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp index 3a38f2b61e5..07cdfa3353c 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp @@ -15,14 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* Script Data Start -SDName: Boss krystallus -SDAuthor: LordVanMartin -SD%Complete: -SDComment: -SDCategory: -Script Data End */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "SpellScript.h" @@ -30,17 +22,13 @@ Script Data End */ enum Spells { - SPELL_BOULDER_TOSS = 50843, - H_SPELL_BOULDER_TOSS = 59742, - SPELL_GROUND_SPIKE = 59750, - SPELL_GROUND_SLAM = 50827, - SPELL_SHATTER = 50810, - H_SPELL_SHATTER = 61546, - SPELL_SHATTER_EFFECT = 50811, - H_SPELL_SHATTER_EFFECT = 61547, - SPELL_STONED = 50812, - SPELL_STOMP = 48131, - H_SPELL_STOMP = 59744 + SPELL_BOULDER_TOSS = 50843, + SPELL_GROUND_SPIKE = 59750, + SPELL_GROUND_SLAM = 50827, + SPELL_SHATTER = 50810, + SPELL_SHATTER_EFFECT = 50811, + SPELL_STONED = 50812, + SPELL_STOMP = 48131 }; enum Yells @@ -51,133 +39,103 @@ enum Yells SAY_SHATTER = 3 }; -class boss_krystallus : public CreatureScript +enum Events { -public: - boss_krystallus() : CreatureScript("boss_krystallus") { } - - struct boss_krystallusAI : public ScriptedAI - { - boss_krystallusAI(Creature* creature) : ScriptedAI(creature) - { - instance = creature->GetInstanceScript(); - } - - uint32 uiBoulderTossTimer; - uint32 uiGroundSpikeTimer; - uint32 uiGroundSlamTimer; - uint32 uiShatterTimer; - uint32 uiStompTimer; - - bool bIsSlam; - - InstanceScript* instance; - - void Reset() OVERRIDE - { - bIsSlam = false; - - uiBoulderTossTimer = urand(3000, 9000); - uiGroundSpikeTimer = urand(9000, 14000); - uiGroundSlamTimer = urand(15000, 18000); - uiStompTimer = urand(20000, 29000); - uiShatterTimer = 0; - - instance->SetBossState(DATA_KRYSTALLUS, NOT_STARTED); - } - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); + EVENT_BOULDER_TOSS = 1, + EVENT_GROUND_SPIKE, + EVENT_GROUND_SLAM, + EVENT_STOMP, + EVENT_SHATTER +}; - instance->SetBossState(DATA_KRYSTALLUS, IN_PROGRESS); - } +class boss_krystallus : public CreatureScript +{ + public: + boss_krystallus() : CreatureScript("boss_krystallus") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_krystallusAI : public BossAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_krystallusAI(Creature* creature) : BossAI(creature, DATA_KRYSTALLUS) { } - if (uiBoulderTossTimer <= diff) + void Reset() override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_BOULDER_TOSS); - uiBoulderTossTimer = urand(9000, 15000); - } else uiBoulderTossTimer -= diff; - - if (uiGroundSpikeTimer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_GROUND_SPIKE); - uiGroundSpikeTimer = urand(12000, 17000); - } else uiGroundSpikeTimer -= diff; - - if (uiStompTimer <= diff) - { - DoCast(me, SPELL_STOMP); - uiStompTimer = urand(20000, 29000); - } else uiStompTimer -= diff; - - if (uiGroundSlamTimer <= diff) - { - DoCast(me, SPELL_GROUND_SLAM); - bIsSlam = true; - uiShatterTimer = 10000; - uiGroundSlamTimer = urand(15000, 18000); - } else uiGroundSlamTimer -= diff; + _Reset(); + } - if (bIsSlam) + void EnterCombat(Unit* /*who*/) override { - if (uiShatterTimer <= diff) - { - DoCast(me, DUNGEON_MODE(SPELL_SHATTER, H_SPELL_SHATTER)); - } else uiShatterTimer -= diff; + Talk(SAY_AGGRO); + _EnterCombat(); + + events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(3000, 9000)); + events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000)); + events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000)); + if (IsHeroic()) + events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(9000, 14000)); } - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); - - instance->SetBossState(DATA_KRYSTALLUS, DONE); - } + void UpdateAI(uint32 diff) override + { + // Return since we have no target + if (!UpdateVictim()) + return; - void KilledUnit(Unit* victim) OVERRIDE - { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; + events.Update(diff); - Talk(SAY_KILL); - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void SpellHitTarget(Unit* /*target*/, const SpellInfo* pSpell) OVERRIDE - { - //this part should be in the core - if (pSpell->Id == SPELL_SHATTER || pSpell->Id == H_SPELL_SHATTER) - { - /// @todo we need eventmap to kill this stuff - //clear this, if we are still performing - if (bIsSlam) + while (uint32 eventId = events.ExecuteEvent()) { - bIsSlam = false; - - //and correct movement, if not already - if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != CHASE_MOTION_TYPE) + switch (eventId) { - if (me->GetVictim()) - me->GetMotionMaster()->MoveChase(me->GetVictim()); + case EVENT_BOULDER_TOSS: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true)) + DoCast(target, SPELL_BOULDER_TOSS); + events.ScheduleEvent(EVENT_BOULDER_TOSS, urand(9000, 15000)); + break; + case EVENT_GROUND_SPIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_GROUND_SPIKE); + events.ScheduleEvent(EVENT_GROUND_SPIKE, urand(12000, 17000)); + break; + case EVENT_GROUND_SLAM: + DoCast(me, SPELL_GROUND_SLAM); + events.ScheduleEvent(EVENT_SHATTER, 10000); + events.ScheduleEvent(EVENT_GROUND_SLAM, urand(15000, 18000)); + break; + case EVENT_STOMP: + DoCast(me, SPELL_STOMP); + events.ScheduleEvent(EVENT_STOMP, urand(20000, 29000)); + break; + case EVENT_SHATTER: + DoCast(me, SPELL_SHATTER); + break; + default: + break; } } + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); } - } - }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetHallsOfStoneAI<boss_krystallusAI>(creature); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfStoneAI<boss_krystallusAI>(creature); + } }; class spell_krystallus_shatter : public SpellScriptLoader @@ -198,13 +156,13 @@ class spell_krystallus_shatter : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_krystallus_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_krystallus_shatter_SpellScript(); } @@ -233,13 +191,13 @@ class spell_krystallus_shatter_effect : public SpellScriptLoader SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius))); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_krystallus_shatter_effect_SpellScript::CalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_krystallus_shatter_effect_SpellScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp index 927f4490770..796299cc952 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp @@ -37,7 +37,7 @@ enum Spells enum Events { - EVENT_PARTING_SORROW = 1, + EVENT_PARTING_SORROW = 1, EVENT_STORM_OF_GRIEF, EVENT_SHOCK_OF_SORROW, EVENT_PILLAR_OF_WOE @@ -57,7 +57,7 @@ class boss_maiden_of_grief : public CreatureScript { boss_maiden_of_griefAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_GRIEF) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -70,7 +70,7 @@ class boss_maiden_of_grief : public CreatureScript instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -78,19 +78,19 @@ class boss_maiden_of_grief : public CreatureScript instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_GOOD_GRIEF_START_EVENT); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -135,7 +135,7 @@ class boss_maiden_of_grief : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<boss_maiden_of_griefAI>(creature); } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index b2785fbaba5..0337a603e3b 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -78,13 +78,13 @@ class boss_sjonnir : public CreatureScript { boss_sjonnirAI(Creature* creature) : BossAI(creature, DATA_SJONNIR) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); abuseTheOoze = 0; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!instance->CheckRequiredBosses(DATA_SJONNIR, who->ToPlayer())) { @@ -103,7 +103,7 @@ class boss_sjonnir : public CreatureScript events.ScheduleEvent(EVENT_FRENZY, 300000); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->GetMotionMaster()->MovePoint(0, CenterPoint); /*if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) @@ -111,25 +111,25 @@ class boss_sjonnir : public CreatureScript summons.Summon(summon); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action == ACTION_OOZE_DEAD) ++abuseTheOoze; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_ABUSE_THE_OOZE) return abuseTheOoze; @@ -137,7 +137,7 @@ class boss_sjonnir : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -198,7 +198,7 @@ class boss_sjonnir : public CreatureScript uint8 abuseTheOoze; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<boss_sjonnirAI>(creature); } @@ -213,12 +213,12 @@ class npc_malformed_ooze : public CreatureScript { npc_malformed_oozeAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _mergeTimer = 10000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_mergeTimer <= diff) { @@ -243,7 +243,7 @@ class npc_malformed_ooze : public CreatureScript uint32 _mergeTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<npc_malformed_oozeAI>(creature); } @@ -263,14 +263,14 @@ class npc_iron_sludge : public CreatureScript InstanceScript* instance; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* sjonnir = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SJONNIR))) sjonnir->AI()->DoAction(ACTION_OOZE_DEAD); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<npc_iron_sludgeAI>(creature); } @@ -283,7 +283,7 @@ class achievement_abuse_the_ooze : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index d64b0d5c71d..cedf06a3154 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -157,7 +157,7 @@ public: std::list<uint64> KaddrakGUIDList; - void Reset() OVERRIDE + void Reset() override { uiKaddrakEncounterTimer = 1500; uiMarnakEncounterTimer = 10000; @@ -201,7 +201,7 @@ public: }*/ } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bKaddrakActivated) { @@ -211,7 +211,7 @@ public: if (!KaddrakGUIDList.empty()) for (std::list<uint64>::const_iterator itr = KaddrakGUIDList.begin(); itr != KaddrakGUIDList.end(); ++itr) { - if (Creature* pKaddrak = Unit::GetCreature(*me, *itr)) + if (Creature* pKaddrak = ObjectAccessor::GetCreature(*me, *itr)) { if (pKaddrak->IsAlive()) pKaddrak->CastSpell(target, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, H_SPELL_GLARE_OF_THE_TRIBUNAL), true); @@ -255,7 +255,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<npc_tribuna_controllerAI>(creature); } @@ -266,7 +266,7 @@ class npc_brann_hos : public CreatureScript public: npc_brann_hos() : CreatureScript("npc_brann_hos") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1 || action == GOSSIP_ACTION_INFO_DEF+2) @@ -278,7 +278,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -308,7 +308,7 @@ public: bool bIsLowHP; bool brannSparklinNews; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -331,14 +331,14 @@ public: return; for (std::list<uint64>::const_iterator itr = lDwarfGUIDList.begin(); itr != lDwarfGUIDList.end(); ++itr) { - Creature* temp = Unit::GetCreature(*me, instance ? (*itr) : 0); + Creature* temp = ObjectAccessor::GetCreature(*me, instance ? (*itr) : 0); if (temp && temp->IsAlive()) temp->DespawnOrUnsummon(); } lDwarfGUIDList.clear(); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -391,7 +391,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { lDwarfGUIDList.push_back(summoned->GetGUID()); summoned->AddThreat(me, 0.0f); @@ -412,13 +412,13 @@ public: Start(); } - void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) override { if (brannSparklinNews) brannSparklinNews = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_BRANN_SPARKLIN_NEWS) return brannSparklinNews ? 1 : 0; @@ -426,7 +426,7 @@ public: return 0; } - void UpdateEscortAI(const uint32 uiDiff) OVERRIDE + void UpdateEscortAI(const uint32 uiDiff) override { if (uiPhaseTimer <= uiDiff) { @@ -446,7 +446,7 @@ public: JumpToNextStep(0); break; case 5: - if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))) + if (Creature* temp = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))) temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED); JumpToNextStep(8500); break; @@ -455,14 +455,14 @@ public: JumpToNextStep(6500); break; case 7: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_A_2_KADD); JumpToNextStep(12500); break; case 8: Talk(SAY_EVENT_A_3); instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true); - if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID)) CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true; JumpToNextStep(5000); break; @@ -476,7 +476,7 @@ public: JumpToNextStep(6000); break; case 11: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_B_2_MARN); SpawnDwarf(1); JumpToNextStep(20000); @@ -484,7 +484,7 @@ public: case 12: Talk(SAY_EVENT_B_3); instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true); - if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID)) CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bMarnakActivated = true; JumpToNextStep(10000); break; @@ -506,7 +506,7 @@ public: JumpToNextStep(20000); break; case 17: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_C_2_ABED); SpawnDwarf(1); JumpToNextStep(20000); @@ -514,7 +514,7 @@ public: case 18: Talk(SAY_EVENT_C_3); instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true); - if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID)) CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true; JumpToNextStep(5000); break; @@ -532,7 +532,7 @@ public: JumpToNextStep(20000); break; case 22: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_D_2_ABED); SpawnDwarf(1); JumpToNextStep(5000); @@ -555,7 +555,7 @@ public: JumpToNextStep(10000); break; case 27: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_D_4_ABED); SpawnDwarf(1); JumpToNextStep(10000); @@ -565,7 +565,7 @@ public: Talk(SAY_EVENT_END_01); me->SetStandState(UNIT_STAND_STATE_STAND); instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true); - if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, uiControllerGUID)) temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); bIsBattle = true; SetEscortPaused(false); @@ -578,7 +578,7 @@ public: JumpToNextStep(5500); break; case 30: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_03_ABED); JumpToNextStep(8500); break; @@ -587,7 +587,7 @@ public: JumpToNextStep(11500); break; case 32: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_05_ABED); JumpToNextStep(11500); break; @@ -596,7 +596,7 @@ public: JumpToNextStep(4500); break; case 34: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_07_ABED); JumpToNextStep(22500); break; @@ -605,7 +605,7 @@ public: JumpToNextStep(7500); break; case 36: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_09_KADD); JumpToNextStep(18500); break; @@ -614,7 +614,7 @@ public: JumpToNextStep(5500); break; case 38: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_11_KADD); JumpToNextStep(20500); break; @@ -623,7 +623,7 @@ public: JumpToNextStep(2500); break; case 40: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_13_KADD); JumpToNextStep(19500); break; @@ -632,7 +632,7 @@ public: JumpToNextStep(10500); break; case 42: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_15_MARN); JumpToNextStep(6500); break; @@ -641,7 +641,7 @@ public: JumpToNextStep(6500); break; case 44: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_17_MARN); JumpToNextStep(25500); break; @@ -650,7 +650,7 @@ public: JumpToNextStep(23500); break; case 46: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_19_MARN); JumpToNextStep(3500); break; @@ -659,7 +659,7 @@ public: JumpToNextStep(8500); break; case 48: - if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) + if (Creature* temp = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_21_ABED); JumpToNextStep(5500); break; @@ -697,7 +697,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetHallsOfStoneAI<npc_brann_hosAI>(creature); } @@ -710,7 +710,7 @@ class achievement_brann_spankin_new : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 9f0bb3c87c1..0c9492c87c0 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -56,7 +56,7 @@ class instance_halls_of_stone : public InstanceMapScript MarnakGoGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -86,7 +86,7 @@ class instance_halls_of_stone : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -119,7 +119,7 @@ class instance_halls_of_stone : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -131,7 +131,7 @@ class instance_halls_of_stone : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -164,7 +164,7 @@ class instance_halls_of_stone : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -185,7 +185,7 @@ class instance_halls_of_stone : public InstanceMapScript return true; } - bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const OVERRIDE + bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const override { if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES)) return true; @@ -203,7 +203,7 @@ class instance_halls_of_stone : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -214,7 +214,7 @@ class instance_halls_of_stone : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -264,7 +264,7 @@ class instance_halls_of_stone : public InstanceMapScript uint64 MarnakGoGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_halls_of_stone_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 9599700eccb..595dcecd554 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -305,7 +305,7 @@ class boss_algalon_the_observer : public CreatureScript _fedOnTears = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_PASSIVE); @@ -314,7 +314,7 @@ class boss_algalon_the_observer : public CreatureScript _hasYelled = false; } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_UNIT) { @@ -328,13 +328,13 @@ class boss_algalon_the_observer : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { case ACTION_START_INTRO: { - me->SetFlag(UNIT_FIELD_FLAGS_2, 0x20); + me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_INSTANTLY_APPEAR_MODEL); me->SetDisableGravity(true); DoCast(me, SPELL_ARRIVAL, true); DoCast(me, SPELL_RIDE_THE_LIGHTNING, true); @@ -375,12 +375,12 @@ class boss_algalon_the_observer : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return type == DATA_HAS_FED_ON_TEARS ? _fedOnTears : 1; } - void EnterCombat(Unit* /*target*/) OVERRIDE + void EnterCombat(Unit* /*target*/) override { uint32 introDelay = 0; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC); @@ -422,7 +422,7 @@ class boss_algalon_the_observer : public CreatureScript (*itr)->m_Events.KillAllEvents(true); } - void MovementInform(uint32 movementType, uint32 pointId) OVERRIDE + void MovementInform(uint32 movementType, uint32 pointId) override { if (movementType != POINT_MOTION_TYPE) return; @@ -444,7 +444,7 @@ class boss_algalon_the_observer : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); switch (summon->GetEntry()) @@ -486,7 +486,7 @@ class boss_algalon_the_observer : public CreatureScript } } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { instance->SetBossState(BOSS_ALGALON, FAIL); BossAI::EnterEvadeMode(); @@ -494,7 +494,7 @@ class boss_algalon_the_observer : public CreatureScript me->SetSheath(SHEATH_STATE_UNARMED); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (_fightWon) { @@ -537,7 +537,7 @@ class boss_algalon_the_observer : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if ((!(events.IsInPhase(PHASE_ROLE_PLAY) || events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim()) || !CheckInRoom()) return; @@ -652,7 +652,6 @@ class boss_algalon_the_observer : public CreatureScript break; case EVENT_OUTRO_2: _EnterEvadeMode(); - me->AddUnitState(UNIT_STATE_EVADE); me->GetMotionMaster()->MovePoint(POINT_ALGALON_OUTRO, AlgalonOutroPos); break; case EVENT_OUTRO_3: @@ -701,7 +700,7 @@ class boss_algalon_the_observer : public CreatureScript bool _hasYelled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_algalon_the_observerAI>(creature); } @@ -718,19 +717,19 @@ class npc_living_constellation : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 2500); _isActive = false; } - uint32 GetData(uint32 /*type*/) const OVERRIDE + uint32 GetData(uint32 /*type*/) const override { return _isActive ? 1 : 0; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -755,7 +754,7 @@ class npc_living_constellation : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id != SPELL_CONSTELLATION_PHASE_EFFECT || caster->GetTypeId() != TYPEID_UNIT) return; @@ -767,7 +766,7 @@ class npc_living_constellation : public CreatureScript caster->ToCreature()->DespawnOrUnsummon(1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!(_events.IsInPhase(PHASE_ROLE_PLAY) || _events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim()) return; @@ -794,7 +793,7 @@ class npc_living_constellation : public CreatureScript bool _isActive; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_living_constellationAI>(creature); } @@ -812,7 +811,7 @@ class npc_collapsing_star : public CreatureScript _dying = false; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() != NPC_BLACK_HOLE) return; @@ -824,7 +823,7 @@ class npc_collapsing_star : public CreatureScript me->DespawnOrUnsummon(1); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (_dying) { @@ -844,7 +843,7 @@ class npc_collapsing_star : public CreatureScript bool _dying; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_collapsing_starAI>(creature); } @@ -861,7 +860,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript { } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -883,7 +882,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript } } - void MovementInform(uint32 movementType, uint32 pointId) OVERRIDE + void MovementInform(uint32 movementType, uint32 pointId) override { if (movementType != POINT_MOTION_TYPE) return; @@ -912,7 +911,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript _events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, delay); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { UpdateVictim(); @@ -948,7 +947,7 @@ class npc_brann_bronzebeard_algalon : public CreatureScript uint32 _currentPoint; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_brann_bronzebeard_algalonAI>(creature); } @@ -965,7 +964,7 @@ class go_celestial_planetarium_access : public GameObjectScript { } - bool GossipHello(Player* player) OVERRIDE + bool GossipHello(Player* player) override { bool hasKey = true; if (LockEntry const* lock = sLockStore.LookupEntry(go->GetGOInfo()->goober.lockId)) @@ -1006,7 +1005,7 @@ class go_celestial_planetarium_access : public GameObjectScript return false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_events.Empty()) return; @@ -1027,7 +1026,7 @@ class go_celestial_planetarium_access : public GameObjectScript EventMap _events; }; - GameObjectAI* GetAI(GameObject* go) const OVERRIDE + GameObjectAI* GetAI(GameObject* go) const override { return GetUlduarAI<go_celestial_planetarium_accessAI>(go); } @@ -1058,14 +1057,14 @@ class spell_algalon_phase_punch : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(PhasePunchAlphaId[GetStackAmount() - 1]); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_phase_punch_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); OnEffectRemove += AuraEffectRemoveFn(spell_algalon_phase_punch_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_algalon_phase_punch_AuraScript(); } @@ -1101,13 +1100,13 @@ class spell_algalon_arcane_barrage : public SpellScriptLoader targets.remove_if(NotVictimFilter(GetCaster())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_arcane_barrage_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_arcane_barrage_SpellScript(); } @@ -1146,13 +1145,13 @@ class spell_algalon_trigger_3_adds : public SpellScriptLoader target->AI()->DoAction(ACTION_ACTIVATE_STAR); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_trigger_3_adds_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_trigger_3_adds_SpellScript(); } @@ -1173,13 +1172,13 @@ class spell_algalon_collapse : public SpellScriptLoader GetTarget()->DealDamage(GetTarget(), GetTarget()->CountPctFromMaxHealth(1), NULL, NODAMAGE); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_collapse_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_algalon_collapse_AuraScript(); } @@ -1194,10 +1193,10 @@ class spell_algalon_big_bang : public SpellScriptLoader { PrepareSpellScript(spell_algalon_big_bang_SpellScript); - bool Load() OVERRIDE + bool Load() override { _targetCount = 0; - return true; + return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled; } void CountTargets(std::list<WorldObject*>& targets) @@ -1211,7 +1210,7 @@ class spell_algalon_big_bang : public SpellScriptLoader GetCaster()->GetAI()->DoAction(ACTION_ASCEND); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_algalon_big_bang_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); AfterCast += SpellCastFn(spell_algalon_big_bang_SpellScript::CheckTargets); @@ -1220,7 +1219,7 @@ class spell_algalon_big_bang : public SpellScriptLoader uint32 _targetCount; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_big_bang_SpellScript(); } @@ -1241,13 +1240,13 @@ class spell_algalon_remove_phase : public SpellScriptLoader GetTarget()->RemoveAurasByType(SPELL_AURA_PHASE); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_algalon_remove_phase_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_algalon_remove_phase_AuraScript(); } @@ -1269,13 +1268,13 @@ class spell_algalon_cosmic_smash : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_algalon_cosmic_smash_SpellScript::ModDestHeight, EFFECT_0, TARGET_DEST_CASTER_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_cosmic_smash_SpellScript(); } @@ -1300,13 +1299,13 @@ class spell_algalon_cosmic_smash_damage : public SpellScriptLoader SetHitDamage(int32(float(GetHitDamage()) / distance) * 2); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_algalon_cosmic_smash_damage_SpellScript::RecalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_cosmic_smash_damage_SpellScript(); } @@ -1329,13 +1328,13 @@ class spell_algalon_supermassive_fail : public SpellScriptLoader GetHitPlayer()->ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_CONDITION_NO_SPELL_HIT, GetSpellInfo()->Id, true); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_algalon_supermassive_fail_SpellScript::RecalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_algalon_supermassive_fail_SpellScript(); } @@ -1346,7 +1345,7 @@ class achievement_he_feeds_on_your_tears : public AchievementCriteriaScript public: achievement_he_feeds_on_your_tears() : AchievementCriteriaScript("achievement_he_feeds_on_your_tears") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return !target->GetAI()->GetData(DATA_HAS_FED_ON_TEARS); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 9b417690f46..9a08f01c279 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -143,14 +143,14 @@ class boss_steelbreaker : public CreatureScript uint32 phase; - void Reset() OVERRIDE + void Reset() override { _Reset(); phase = 0; me->RemoveAllAuras(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_STEELBREAKER_AGGRO); @@ -160,7 +160,7 @@ class boss_steelbreaker : public CreatureScript events.ScheduleEvent(EVENT_FUSION_PUNCH, 15000); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_PHASE_3) return (phase >= 3) ? 1 : 0; @@ -168,7 +168,7 @@ class boss_steelbreaker : public CreatureScript return 0; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -188,7 +188,7 @@ class boss_steelbreaker : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -213,7 +213,7 @@ class boss_steelbreaker : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_STEELBREAKER_SLAY); @@ -222,7 +222,7 @@ class boss_steelbreaker : public CreatureScript DoCast(me, SPELL_ELECTRICAL_CHARGE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -263,7 +263,7 @@ class boss_steelbreaker : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_steelbreakerAI>(creature); } @@ -280,14 +280,14 @@ class boss_runemaster_molgeim : public CreatureScript uint32 phase; - void Reset() OVERRIDE + void Reset() override { _Reset(); phase = 0; me->RemoveAllAuras(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_MOLGEIM_AGGRO); @@ -297,7 +297,7 @@ class boss_runemaster_molgeim : public CreatureScript events.ScheduleEvent(EVENT_RUNE_OF_POWER, 20000); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_PHASE_3) return (phase >= 3) ? 1 : 0; @@ -305,7 +305,7 @@ class boss_runemaster_molgeim : public CreatureScript return 0; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -325,7 +325,7 @@ class boss_runemaster_molgeim : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -350,13 +350,13 @@ class boss_runemaster_molgeim : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_MOLGEIM_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -420,7 +420,7 @@ class boss_runemaster_molgeim : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_runemaster_molgeimAI>(creature); } @@ -437,7 +437,7 @@ class boss_stormcaller_brundir : public CreatureScript uint32 phase; - void Reset() OVERRIDE + void Reset() override { _Reset(); phase = 0; @@ -447,7 +447,7 @@ class boss_stormcaller_brundir : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_PHASE_3) return (phase >= 3) ? 1 : 0; @@ -455,7 +455,7 @@ class boss_stormcaller_brundir : public CreatureScript return 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_BRUNDIR_AGGRO); @@ -466,7 +466,7 @@ class boss_stormcaller_brundir : public CreatureScript events.ScheduleEvent(EVENT_OVERLOAD, urand(60000, 120000)); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -490,7 +490,7 @@ class boss_stormcaller_brundir : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -519,13 +519,13 @@ class boss_stormcaller_brundir : public CreatureScript me->GetMotionMaster()->MoveFall(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_BRUNDIR_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -620,7 +620,7 @@ class boss_stormcaller_brundir : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_stormcaller_brundirAI>(creature); } @@ -642,13 +642,13 @@ class spell_shield_of_runes : public SpellScriptLoader caster->CastSpell(caster, SPELL_SHIELD_OF_RUNES_BUFF, false); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_shield_of_runes_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_shield_of_runes_AuraScript(); } @@ -670,13 +670,13 @@ class spell_assembly_meltdown : public SpellScriptLoader Steelbreaker->AI()->DoAction(ACTION_ADD_CHARGE); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_assembly_meltdown_SpellScript::HandleInstaKill, EFFECT_1, SPELL_EFFECT_INSTAKILL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_assembly_meltdown_SpellScript(); } @@ -691,7 +691,7 @@ class spell_assembly_rune_of_summoning : public SpellScriptLoader { PrepareAuraScript(spell_assembly_rune_of_summoning_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RUNE_OF_SUMMONING_SUMMON)) return false; @@ -710,14 +710,14 @@ class spell_assembly_rune_of_summoning : public SpellScriptLoader summ->DespawnOrUnsummon(1); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_assembly_rune_of_summoning_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); OnEffectRemove += AuraEffectRemoveFn(spell_assembly_rune_of_summoning_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_assembly_rune_of_summoning_AuraScript(); } @@ -728,7 +728,7 @@ class achievement_assembly_i_choose_you : public AchievementCriteriaScript public: achievement_assembly_i_choose_you() : AchievementCriteriaScript("achievement_assembly_i_choose_you") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_PHASE_3); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index a809eb4ddff..f0b8e123c63 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -109,7 +109,7 @@ class boss_auriaya : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); DefenderGUID = 0; @@ -118,7 +118,7 @@ class boss_auriaya : public CreatureScript nineLives = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -131,13 +131,13 @@ class boss_auriaya : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 600000); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summons.Summon(summoned); @@ -158,7 +158,7 @@ class boss_auriaya : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -179,7 +179,7 @@ class boss_auriaya : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -192,7 +192,7 @@ class boss_auriaya : public CreatureScript return 0; } - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { switch (id) { @@ -205,13 +205,13 @@ class boss_auriaya : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -279,7 +279,7 @@ class boss_auriaya : public CreatureScript bool nineLives; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_auriayaAI>(creature); } @@ -297,13 +297,13 @@ class npc_auriaya_seeping_trigger : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->DespawnOrUnsummon(600000); DoCast(me, SPELL_SEEPING_ESSENCE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (instance->GetBossState(BOSS_AURIAYA) != IN_PROGRESS) me->DespawnOrUnsummon(); @@ -313,7 +313,7 @@ class npc_auriaya_seeping_trigger : public CreatureScript InstanceScript* instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_auriaya_seeping_triggerAI>(creature); } @@ -331,18 +331,18 @@ class npc_sanctum_sentry : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_RIP, urand(4000, 8000)); events.ScheduleEvent(EVENT_POUNCE, urand(12000, 15000)); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_STRENGHT_PACK, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -364,7 +364,7 @@ class npc_sanctum_sentry : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { me->AddThreat(target, 100.0f); - me->AI()->AttackStart(target); + AttackStart(target); DoCast(target, SPELL_SAVAGE_POUNCE); } events.ScheduleEvent(EVENT_POUNCE, urand(12000, 17000)); @@ -377,7 +377,7 @@ class npc_sanctum_sentry : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_AURIAYA))) Auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY); @@ -388,7 +388,7 @@ class npc_sanctum_sentry : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_sanctum_sentryAI>(creature); } @@ -406,13 +406,13 @@ class npc_feral_defender : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_FERAL_POUNCE, 5000); events.ScheduleEvent(EVENT_RUSH, 10000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -430,7 +430,7 @@ class npc_feral_defender : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { me->AddThreat(target, 100.0f); - me->AI()->AttackStart(target); + AttackStart(target); DoCast(target, SPELL_FERAL_POUNCE); } events.ScheduleEvent(EVENT_FERAL_POUNCE, urand(10000, 12000)); @@ -439,7 +439,7 @@ class npc_feral_defender : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { me->AddThreat(target, 100.0f); - me->AI()->AttackStart(target); + AttackStart(target); DoCast(target, SPELL_FERAL_RUSH); } events.ScheduleEvent(EVENT_RUSH, urand(10000, 12000)); @@ -452,7 +452,7 @@ class npc_feral_defender : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_SUMMON_ESSENCE); if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_AURIAYA))) @@ -464,7 +464,7 @@ class npc_feral_defender : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_feral_defenderAI>(creature); } @@ -496,13 +496,13 @@ class spell_auriaya_strenght_of_the_pack : public SpellScriptLoader unitList.remove_if(SanctumSentryCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_strenght_of_the_pack_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_auriaya_strenght_of_the_pack_SpellScript(); } @@ -522,14 +522,14 @@ class spell_auriaya_sentinel_blast : public SpellScriptLoader unitList.remove_if(PlayerOrPetCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_auriaya_sentinel_blast_SpellScript(); } @@ -543,7 +543,7 @@ class achievement_nine_lives : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; @@ -563,7 +563,7 @@ class achievement_crazy_cat_lady : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index ee1345590f3..52cda5148cf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -228,7 +228,7 @@ class boss_flame_leviathan : public CreatureScript { } - void InitializeAI() OVERRIDE + void InitializeAI() override { ASSERT(vehicle); if (!me->isDead()) @@ -261,7 +261,7 @@ class boss_flame_leviathan : public CreatureScript bool Shutout; bool Unbroken; - void Reset() OVERRIDE + void Reset() override { _Reset(); //resets shutdown counter to 0. 2 or 4 depending on raid mode @@ -271,7 +271,7 @@ class boss_flame_leviathan : public CreatureScript me->SetReactState(REACT_DEFENSIVE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); me->SetReactState(REACT_PASSIVE); @@ -321,7 +321,7 @@ class boss_flame_leviathan : public CreatureScript Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); // Set Field Flags 67108928 = 64 | 67108864 = UNIT_FLAG_UNK_6 | UNIT_FLAG_SKINNABLE @@ -330,7 +330,7 @@ class boss_flame_leviathan : public CreatureScript Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_START_THE_ENGINE) vehicle->InstallAllAccessories(false); @@ -342,7 +342,7 @@ class boss_flame_leviathan : public CreatureScript ++Shutdown; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -360,13 +360,13 @@ class boss_flame_leviathan : public CreatureScript return 0; } - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { if (id == DATA_UNBROKEN) Unbroken = data ? true : false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -465,13 +465,13 @@ class boss_flame_leviathan : public CreatureScript DoBatteringRamIfReady(); } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_PURSUED) _pursueTarget = target->GetGUID(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count { @@ -553,7 +553,7 @@ class boss_flame_leviathan : public CreatureScript uint64 _pursueTarget; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_flame_leviathanAI>(creature); } @@ -577,7 +577,7 @@ class boss_flame_leviathan_seat : public CreatureScript InstanceScript* instance; Vehicle* vehicle; - void PassengerBoarded(Unit* who, int8 seatId, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 seatId, bool apply) override { if (!me->GetVehicle()) return; @@ -589,17 +589,19 @@ class boss_flame_leviathan_seat : public CreatureScript else if (Creature* leviathan = me->GetVehicleCreatureBase()) leviathan->AI()->Talk(SAY_PLAYER_RIDING); - if (Creature* turret = me->GetVehicleKit()->GetPassenger(SEAT_TURRET)->ToCreature()) - { - turret->setFaction(me->GetVehicleBase()->getFaction()); - turret->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable - turret->AI()->AttackStart(who); - } - if (Creature* device = me->GetVehicleKit()->GetPassenger(SEAT_DEVICE)->ToCreature()) - { - device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - device->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - } + if (Unit* turretPassenger = me->GetVehicleKit()->GetPassenger(SEAT_TURRET)) + if (Creature* turret = turretPassenger->ToCreature()) + { + turret->setFaction(me->GetVehicleBase()->getFaction()); + turret->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable + turret->AI()->AttackStart(who); + } + if (Unit* devicePassenger = me->GetVehicleKit()->GetPassenger(SEAT_DEVICE)) + if (Creature* device = devicePassenger->ToCreature()) + { + device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + device->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + } me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } @@ -617,7 +619,7 @@ class boss_flame_leviathan_seat : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_flame_leviathan_seatAI>(creature); } @@ -636,13 +638,13 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript uint32 NapalmTimer; - void Reset() OVERRIDE + void Reset() override { NapalmTimer = 5*IN_MILLISECONDS; DoCast(me, AURA_STEALTH_DETECTION); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -659,7 +661,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript NapalmTimer -= diff; } - bool CanAIAttack(Unit const* who) const OVERRIDE + bool CanAIAttack(Unit const* who) const override { if (who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() == NPC_SEAT) return false; @@ -667,7 +669,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_flame_leviathan_defense_cannonAI(creature); } @@ -682,13 +684,13 @@ class boss_flame_leviathan_defense_turret : public CreatureScript { boss_flame_leviathan_defense_turretAI(Creature* creature) : TurretAI(creature) { } - void DamageTaken(Unit* who, uint32 &damage) OVERRIDE + void DamageTaken(Unit* who, uint32 &damage) override { if (!CanAIAttack(who)) damage = 0; } - bool CanAIAttack(Unit const* who) const OVERRIDE + bool CanAIAttack(Unit const* who) const override { if (who->GetTypeId() != TYPEID_PLAYER || !who->GetVehicle() || who->GetVehicleBase()->GetEntry() != NPC_SEAT) return false; @@ -696,7 +698,7 @@ class boss_flame_leviathan_defense_turret : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_flame_leviathan_defense_turretAI(creature); } @@ -713,7 +715,7 @@ class boss_flame_leviathan_overload_device : public CreatureScript { } - void OnSpellClick(Unit* /*clicker*/, bool& result) OVERRIDE + void OnSpellClick(Unit* /*clicker*/, bool& result) override { if (!result) return; @@ -733,7 +735,7 @@ class boss_flame_leviathan_overload_device : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_flame_leviathan_overload_deviceAI(creature); } @@ -750,7 +752,7 @@ class boss_flame_leviathan_safety_container : public CreatureScript { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { float x, y, z; me->GetPosition(x, y, z); @@ -759,12 +761,12 @@ class boss_flame_leviathan_safety_container : public CreatureScript me->SetPosition(x, y, z, 0); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_flame_leviathan_safety_containerAI(creature); } @@ -784,13 +786,13 @@ class npc_mechanolift : public CreatureScript uint32 MoveTimer; - void Reset() OVERRIDE + void Reset() override { MoveTimer = 0; me->GetMotionMaster()->MoveRandom(50); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->GetMotionMaster()->MoveTargetedHome(); DoCast(SPELL_DUSTY_EXPLOSION); @@ -802,14 +804,14 @@ class npc_mechanolift : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == 1) if (Creature* container = me->FindNearestCreature(NPC_CONTAINER, 5, true)) container->EnterVehicle(me); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (MoveTimer <= diff) { @@ -827,7 +829,7 @@ class npc_mechanolift : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mechanoliftAI(creature); } @@ -847,21 +849,21 @@ class npc_pool_of_tar : public CreatureScript me->CastSpell(me, SPELL_TAR_PASSIVE, true); } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { damage = 0; } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->SchoolMask & SPELL_SCHOOL_MASK_FIRE && !me->HasAura(SPELL_BLAZE)) me->CastSpell(me, SPELL_BLAZE, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pool_of_tarAI(creature); } @@ -881,13 +883,13 @@ class npc_colossus : public CreatureScript InstanceScript* instance; - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->GetHomePosition().IsInDist(&Center, 50.f)) instance->SetData(DATA_COLOSSUS, instance->GetData(DATA_COLOSSUS)+1); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -896,7 +898,7 @@ class npc_colossus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_colossusAI>(creature); } @@ -915,7 +917,7 @@ class npc_thorims_hammer : public CreatureScript me->CastSpell(me, AURA_DUMMY_BLUE, true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && who->IsVehicle() && me->IsInRange(who, 0, 10, false)) @@ -925,7 +927,7 @@ class npc_thorims_hammer : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->HasAura(AURA_DUMMY_BLUE)) me->CastSpell(me, AURA_DUMMY_BLUE, true); @@ -934,7 +936,7 @@ class npc_thorims_hammer : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_thorims_hammerAI(creature); } @@ -945,7 +947,7 @@ class npc_mimirons_inferno : public CreatureScript public: npc_mimirons_inferno() : CreatureScript("npc_mimirons_inferno") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mimirons_infernoAI(creature); } @@ -959,19 +961,19 @@ public: me->SetReactState(REACT_PASSIVE); } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE + void WaypointReached(uint32 /*waypointId*/) override { } - void Reset() OVERRIDE + void Reset() override { infernoTimer = 2000; } uint32 infernoTimer; - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -1011,7 +1013,7 @@ class npc_hodirs_fury : public CreatureScript me->CastSpell(me, AURA_DUMMY_GREEN, true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && who->IsVehicle() && me->IsInRange(who, 0, 5, false)) @@ -1021,7 +1023,7 @@ class npc_hodirs_fury : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->HasAura(AURA_DUMMY_GREEN)) me->CastSpell(me, AURA_DUMMY_GREEN, true); @@ -1030,7 +1032,7 @@ class npc_hodirs_fury : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_hodirs_furyAI(creature); } @@ -1050,12 +1052,12 @@ class npc_freyas_ward : public CreatureScript uint32 summonTimer; - void Reset() OVERRIDE + void Reset() override { summonTimer = 5000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (summonTimer <= diff) { @@ -1073,7 +1075,7 @@ class npc_freyas_ward : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_freyas_wardAI(creature); } @@ -1093,12 +1095,12 @@ class npc_freya_ward_summon : public CreatureScript uint32 lashTimer; - void Reset() OVERRIDE + void Reset() override { lashTimer = 5000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1115,7 +1117,7 @@ class npc_freya_ward_summon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_freya_ward_summonAI(creature); } @@ -1136,7 +1138,7 @@ class npc_lorekeeper : public CreatureScript { } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { // Start encounter if (action == ACTION_SPAWN_VEHICLES) @@ -1152,7 +1154,7 @@ class npc_lorekeeper : public CreatureScript } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->CLOSE_GOSSIP_MENU(); InstanceScript* instance = creature->GetInstanceScript(); @@ -1189,7 +1191,7 @@ class npc_lorekeeper : public CreatureScript return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetData(BOSS_LEVIATHAN) != DONE && player) @@ -1202,7 +1204,7 @@ class npc_lorekeeper : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lorekeeperAI(creature); } @@ -1219,7 +1221,7 @@ class npc_brann_bronzebeard : public CreatureScript public: npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { } - //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override //{ // player->PlayerTalkClass->ClearMenus(); // switch (action) @@ -1242,7 +1244,7 @@ public: // } // return true; //} - //bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + //bool OnGossipHello(Player* player, Creature* creature) override //{ // InstanceScript* instance = creature->GetInstanceScript(); // if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE) @@ -1263,7 +1265,7 @@ class go_ulduar_tower : public GameObjectScript public: go_ulduar_tower() : GameObjectScript("go_ulduar_tower") { } - void OnDestroyed(GameObject* go, Player* /*player*/) OVERRIDE + void OnDestroyed(GameObject* go, Player* /*player*/) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) @@ -1295,7 +1297,7 @@ class achievement_three_car_garage_demolisher : public AchievementCriteriaScript public: achievement_three_car_garage_demolisher() : AchievementCriteriaScript("achievement_three_car_garage_demolisher") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -1312,7 +1314,7 @@ class achievement_three_car_garage_chopper : public AchievementCriteriaScript public: achievement_three_car_garage_chopper() : AchievementCriteriaScript("achievement_three_car_garage_chopper") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -1329,7 +1331,7 @@ class achievement_three_car_garage_siege : public AchievementCriteriaScript public: achievement_three_car_garage_siege() : AchievementCriteriaScript("achievement_three_car_garage_siege") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -1346,7 +1348,7 @@ class achievement_shutout : public AchievementCriteriaScript public: achievement_shutout() : AchievementCriteriaScript("achievement_shutout") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target) if (Creature* leviathan = target->ToCreature()) @@ -1362,7 +1364,7 @@ class achievement_unbroken : public AchievementCriteriaScript public: achievement_unbroken() : AchievementCriteriaScript("achievement_unbroken") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target) if (InstanceScript* instance = target->GetInstanceScript()) @@ -1377,7 +1379,7 @@ class achievement_orbital_bombardment : public AchievementCriteriaScript public: achievement_orbital_bombardment() : AchievementCriteriaScript("achievement_orbital_bombardment") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -1395,7 +1397,7 @@ class achievement_orbital_devastation : public AchievementCriteriaScript public: achievement_orbital_devastation() : AchievementCriteriaScript("achievement_orbital_devastation") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -1413,7 +1415,7 @@ class achievement_nuked_from_orbit : public AchievementCriteriaScript public: achievement_nuked_from_orbit() : AchievementCriteriaScript("achievement_nuked_from_orbit") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -1431,7 +1433,7 @@ class achievement_orbit_uary : public AchievementCriteriaScript public: achievement_orbit_uary() : AchievementCriteriaScript("achievement_orbit_uary") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -1476,14 +1478,14 @@ class spell_load_into_catapult : public SpellScriptLoader owner->RemoveAurasDueToSpell(SPELL_PASSENGER_LOADED); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_load_into_catapult_AuraScript::OnApply, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_load_into_catapult_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_load_into_catapult_AuraScript(); } @@ -1542,14 +1544,14 @@ class spell_auto_repair : public SpellScriptLoader instance->SetData(DATA_UNBROKEN, 0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_auto_repair_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); BeforeHit += SpellHitFn(spell_auto_repair_SpellScript::CheckCooldownForTarget); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_auto_repair_SpellScript(); } @@ -1585,14 +1587,14 @@ class spell_systems_shutdown : public SpellScriptLoader owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_systems_shutdown_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_systems_shutdown_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_systems_shutdown_AuraScript(); } @@ -1650,7 +1652,7 @@ class spell_pursue : public SpellScriptLoader { PrepareSpellScript(spell_pursue_SpellScript); - bool Load() OVERRIDE + bool Load() override { _target = NULL; return true; @@ -1697,7 +1699,7 @@ class spell_pursue : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pursue_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pursue_SpellScript::FilterTargetsSubsequently, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -1707,7 +1709,7 @@ class spell_pursue : public SpellScriptLoader WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pursue_SpellScript(); } @@ -1766,13 +1768,13 @@ class spell_vehicle_throw_passenger : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_vehicle_throw_passenger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_vehicle_throw_passenger_SpellScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 64ee385b7fc..57df8c76a56 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -229,7 +229,7 @@ class npc_iron_roots : public CreatureScript summonerGUID = 0; } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->GetTypeId() != TYPEID_PLAYER) return; @@ -239,7 +239,7 @@ class npc_iron_roots : public CreatureScript me->SetInCombatWith(summoner); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* target = ObjectAccessor::GetPlayer(*me, summonerGUID)) { @@ -254,7 +254,7 @@ class npc_iron_roots : public CreatureScript uint64 summonerGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_iron_rootsAI(creature); } @@ -284,7 +284,7 @@ class boss_freya : public CreatureScript bool trioDefeated[2]; bool random[3]; - void Reset() OVERRIDE + void Reset() override { _Reset(); trioWaveCount = 0; @@ -307,13 +307,13 @@ class boss_freya : public CreatureScript random[n] = false; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void DamageTaken(Unit* who, uint32& damage) OVERRIDE + void DamageTaken(Unit* who, uint32& damage) override { if (damage >= me->GetHealth()) { @@ -322,7 +322,7 @@ class boss_freya : public CreatureScript } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _EnterCombat(); DoZoneInCombat(); @@ -373,7 +373,7 @@ class boss_freya : public CreatureScript events.ScheduleEvent(EVENT_SUNBEAM, urand(5000, 15000)); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -386,7 +386,7 @@ class boss_freya : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -578,7 +578,7 @@ class boss_freya : public CreatureScript waveCount++; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { //! Freya's chest is dynamically spawned on death by different spells. const uint32 summonSpell[2][4] = @@ -616,7 +616,7 @@ class boss_freya : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -645,7 +645,7 @@ class boss_freya : public CreatureScript } } - void SummonedCreatureDies(Creature* summoned, Unit* who) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* who) override { switch (summoned->GetEntry()) { @@ -664,7 +664,7 @@ class boss_freya : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_freyaAI>(creature); } @@ -681,7 +681,7 @@ class boss_elder_brightleaf : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (me->HasAura(SPELL_DRAINED_OF_POWER)) @@ -693,13 +693,13 @@ class boss_elder_brightleaf : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_ELDER_SLAY); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _JustDied(); Talk(SAY_ELDER_DEATH); @@ -714,14 +714,14 @@ class boss_elder_brightleaf : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) Talk(SAY_ELDER_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER)) return; @@ -764,7 +764,7 @@ class boss_elder_brightleaf : public CreatureScript DoMeleeAttackIfReady(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -785,7 +785,7 @@ class boss_elder_brightleaf : public CreatureScript bool lumberjack; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_elder_brightleafAI>(creature); } @@ -802,7 +802,7 @@ class boss_elder_stonebark : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (me->HasAura(SPELL_DRAINED_OF_POWER)) @@ -814,13 +814,13 @@ class boss_elder_stonebark : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_ELDER_SLAY); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _JustDied(); Talk(SAY_ELDER_DEATH); @@ -835,14 +835,14 @@ class boss_elder_stonebark : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) Talk(SAY_ELDER_AGGRO); } - void DamageTaken(Unit* who, uint32& damage) OVERRIDE + void DamageTaken(Unit* who, uint32& damage) override { if (who == me) return; @@ -855,7 +855,7 @@ class boss_elder_stonebark : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER)) return; @@ -891,7 +891,7 @@ class boss_elder_stonebark : public CreatureScript DoMeleeAttackIfReady(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -912,7 +912,7 @@ class boss_elder_stonebark : public CreatureScript bool lumberjack; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_elder_stonebarkAI>(creature); } @@ -929,7 +929,7 @@ class boss_elder_ironbranch : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (me->HasAura(SPELL_DRAINED_OF_POWER)) @@ -941,13 +941,13 @@ class boss_elder_ironbranch : public CreatureScript lumberjack = false; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_ELDER_SLAY); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { _JustDied(); Talk(SAY_ELDER_DEATH); @@ -962,14 +962,14 @@ class boss_elder_ironbranch : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) Talk(SAY_ELDER_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasAura(SPELL_DRAINED_OF_POWER)) return; @@ -1005,7 +1005,7 @@ class boss_elder_ironbranch : public CreatureScript DoMeleeAttackIfReady(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1026,7 +1026,7 @@ class boss_elder_ironbranch : public CreatureScript bool lumberjack; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_elder_ironbranchAI>(creature); } @@ -1044,13 +1044,13 @@ class npc_detonating_lasher : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); } - void Reset() OVERRIDE + void Reset() override { lashTimer = 5000; changeTargetTimer = 7500; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1069,7 +1069,7 @@ class npc_detonating_lasher : public CreatureScript { // Switching to other target - modify aggro of new target by 20% from current target's aggro me->AddThreat(target, me->getThreatManager().getThreat(me->GetVictim(), false) * 1.2f); - me->AI()->AttackStart(target); + AttackStart(target); } changeTargetTimer = urand(5000, 10000); } @@ -1084,7 +1084,7 @@ class npc_detonating_lasher : public CreatureScript uint32 changeTargetTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_detonating_lasherAI(creature); } @@ -1104,12 +1104,12 @@ class npc_ancient_water_spirit : public CreatureScript waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; } - void Reset() OVERRIDE + void Reset() override { tidalWaveTimer = 10000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1129,7 +1129,7 @@ class npc_ancient_water_spirit : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA))) { @@ -1144,7 +1144,7 @@ class npc_ancient_water_spirit : public CreatureScript uint8 waveCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ancient_water_spiritAI>(creature); } @@ -1164,13 +1164,13 @@ class npc_storm_lasher : public CreatureScript waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; } - void Reset() OVERRIDE + void Reset() override { lightningLashTimer = 10000; stormboltTimer = 5000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1195,7 +1195,7 @@ class npc_storm_lasher : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA))) { @@ -1211,7 +1211,7 @@ class npc_storm_lasher : public CreatureScript uint8 waveCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_storm_lasherAI>(creature); } @@ -1231,7 +1231,7 @@ class npc_snaplasher : public CreatureScript waveCount = CAST_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -1242,7 +1242,7 @@ class npc_snaplasher : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_FREYA))) { @@ -1256,7 +1256,7 @@ class npc_snaplasher : public CreatureScript uint8 waveCount; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_snaplasherAI>(creature); } @@ -1273,7 +1273,7 @@ class npc_ancient_conservator : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { natureFuryTimer = 7500; healthySporeTimer = 3500; @@ -1291,12 +1291,12 @@ class npc_ancient_conservator : public CreatureScript } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoCast(who, SPELL_CONSERVATOR_GRIP, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1327,7 +1327,7 @@ class npc_ancient_conservator : public CreatureScript uint32 healthySporeTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ancient_conservatorAI(creature); } @@ -1349,7 +1349,7 @@ class npc_sun_beam : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_sun_beamAI(creature); } @@ -1373,7 +1373,7 @@ class npc_healthy_spore : public CreatureScript lifeTimer = urand(22000, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (lifeTimer <= diff) { @@ -1389,7 +1389,7 @@ class npc_healthy_spore : public CreatureScript uint32 lifeTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_healthy_sporeAI(creature); } @@ -1412,7 +1412,7 @@ class npc_eonars_gift : public CreatureScript DoCast(me, SPELL_EONAR_VISUAL, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (lifeBindersGiftTimer <= diff) { @@ -1429,7 +1429,7 @@ class npc_eonars_gift : public CreatureScript uint32 lifeBindersGiftTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_eonars_giftAI(creature); } @@ -1450,7 +1450,7 @@ class npc_nature_bomb : public CreatureScript DoCast(SPELL_OBJECT_BOMB); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bombTimer <= diff) { @@ -1471,7 +1471,7 @@ class npc_nature_bomb : public CreatureScript uint32 bombTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nature_bombAI(creature); } @@ -1495,7 +1495,7 @@ class npc_unstable_sun_beam : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (despawnTimer <= diff) { @@ -1506,7 +1506,7 @@ class npc_unstable_sun_beam : public CreatureScript despawnTimer -= diff; } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (target && spell->Id == SPELL_UNSTABLE_ENERGY) { @@ -1520,7 +1520,7 @@ class npc_unstable_sun_beam : public CreatureScript uint32 despawnTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_unstable_sun_beamAI>(creature); } @@ -1561,13 +1561,13 @@ class spell_freya_attuned_to_nature_dose_reduction : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_freya_attuned_to_nature_dose_reduction_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_freya_attuned_to_nature_dose_reduction_SpellScript(); } @@ -1587,20 +1587,19 @@ class spell_freya_iron_roots : public SpellScriptLoader PreventHitDefaultEffect(effIndex); uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue); - Position pos; - GetCaster()->GetPosition(&pos); + Position pos = GetCaster()->GetPosition(); // Not good at all, but this prevents having roots in a different position then player if (Creature* Roots = GetCaster()->SummonCreature(entry, pos)) GetCaster()->NearTeleportTo(Roots->GetPositionX(), Roots->GetPositionY(), Roots->GetPositionZ(), GetCaster()->GetOrientation()); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_freya_iron_roots_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_freya_iron_roots_SpellScript(); } @@ -1611,7 +1610,7 @@ class achievement_getting_back_to_nature : public AchievementCriteriaScript public: achievement_getting_back_to_nature() : AchievementCriteriaScript("achievement_getting_back_to_nature") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25; } @@ -1622,7 +1621,7 @@ class achievement_knock_on_wood : public AchievementCriteriaScript public: achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 1; } @@ -1633,7 +1632,7 @@ class achievement_knock_knock_on_wood : public AchievementCriteriaScript public: achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) >= 2; } @@ -1644,7 +1643,7 @@ class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript public: achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->GetAI()->GetData(DATA_KNOCK_ON_WOOD) == 3; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 446075f76e5..011d1844adf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -112,7 +112,7 @@ class boss_general_vezax : public CreatureScript bool animusDead; // Check against getting a HardMode achievement before killing Saronite Animus uint8 vaporCount; - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -122,7 +122,7 @@ class boss_general_vezax : public CreatureScript vaporCount = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); @@ -138,7 +138,7 @@ class boss_general_vezax : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 600000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -207,19 +207,19 @@ class boss_general_vezax : public CreatureScript DoMeleeAttackIfReady(); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* who, SpellInfo const* spell) override { if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_SHADOW_CRASH_HIT) shadowDodger = false; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -240,7 +240,7 @@ class boss_general_vezax : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -253,7 +253,7 @@ class boss_general_vezax : public CreatureScript return 0; } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -305,7 +305,7 @@ class boss_general_vezax : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_general_vezaxAI>(creature); } @@ -323,20 +323,20 @@ class boss_saronite_animus : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_VISUAL_SARONITE_ANIMUS); events.Reset(); events.ScheduleEvent(EVENT_PROFOUND_OF_DARKNESS, 3000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX))) + if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX))) Vezax->AI()->DoAction(ACTION_ANIMUS_DIE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -367,7 +367,7 @@ class boss_saronite_animus : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_saronite_animusAI>(creature); } @@ -389,13 +389,13 @@ class npc_saronite_vapors : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_RANDOM_MOVE, urand(5000, 7500)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -413,7 +413,7 @@ class npc_saronite_vapors : public CreatureScript } } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { // This can't be on JustDied. In 63322 dummy handler caster needs to be this NPC // if caster == target then damage mods will increase the damage taken @@ -427,7 +427,7 @@ class npc_saronite_vapors : public CreatureScript DoCast(me, SPELL_SARONITE_VAPORS); me->DespawnOrUnsummon(30000); - if (Creature* Vezax = me->GetCreature(*me, instance->GetData64(BOSS_VEZAX))) + if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_VEZAX))) Vezax->AI()->DoAction(ACTION_VAPORS_DIE); } } @@ -437,7 +437,7 @@ class npc_saronite_vapors : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_saronite_vaporsAI>(creature); } @@ -465,13 +465,13 @@ class spell_general_vezax_mark_of_the_faceless : public SpellScriptLoader caster->CastCustomSpell(SPELL_MARK_OF_THE_FACELESS_DAMAGE, SPELLVALUE_BASE_POINT1, aurEff->GetAmount(), GetTarget(), true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_general_vezax_mark_of_the_faceless_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_general_vezax_mark_of_the_faceless_AuraScript(); } @@ -494,13 +494,13 @@ class spell_general_vezax_mark_of_the_faceless_leech : public SpellScriptLoader FinishCast(SPELL_FAILED_NO_VALID_TARGETS); } - void Register() + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_general_vezax_mark_of_the_faceless_leech_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const + SpellScript* GetSpellScript() const override { return new spell_general_vezax_mark_of_the_faceless_leech_SpellScript(); } @@ -515,7 +515,7 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader { PrepareAuraScript(spell_general_vezax_saronite_vapors_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SARONITE_VAPORS_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_SARONITE_VAPORS_DAMAGE)) return false; @@ -533,13 +533,13 @@ class spell_general_vezax_saronite_vapors : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_general_vezax_saronite_vapors_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_general_vezax_saronite_vapors_AuraScript(); } @@ -552,7 +552,7 @@ class achievement_shadowdodger : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; @@ -572,7 +572,7 @@ class achievement_smell_saronite : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 169a7085672..4d904b04618 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -191,18 +191,21 @@ class npc_flash_freeze : public CreatureScript uint64 targetGUID; uint32 checkDespawnTimer; - void Reset() OVERRIDE + void Reset() override { targetGUID = 0; checkDespawnTimer = 1000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || me->GetVictim()->HasAura(SPELL_BLOCK_OF_ICE) || me->GetVictim()->HasAura(SPELL_FLASH_FREEZE_HELPER)) + if (!UpdateVictim() + || !me->GetVictim() + || me->EnsureVictim()->HasAura(SPELL_BLOCK_OF_ICE) + || me->EnsureVictim()->HasAura(SPELL_FLASH_FREEZE_HELPER)) return; - if (me->GetVictim()->GetGUID() != targetGUID || instance->GetBossState(BOSS_HODIR) != IN_PROGRESS) + if (me->EnsureVictim()->GetGUID() != targetGUID || instance->GetBossState(BOSS_HODIR) != IN_PROGRESS) me->DespawnOrUnsummon(); if (checkDespawnTimer <= diff) @@ -216,7 +219,7 @@ class npc_flash_freeze : public CreatureScript checkDespawnTimer -= diff; } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { targetGUID = summoner->GetGUID(); me->SetInCombatWith(summoner); @@ -233,7 +236,7 @@ class npc_flash_freeze : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_flash_freezeAI>(creature); } @@ -258,7 +261,7 @@ class npc_ice_block : public CreatureScript uint64 targetGUID; - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { targetGUID = summoner->GetGUID(); summoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); @@ -273,7 +276,7 @@ class npc_ice_block : public CreatureScript } } - void DamageTaken(Unit* who, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* who, uint32& /*damage*/) override { if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID)) { @@ -294,7 +297,7 @@ class npc_ice_block : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ice_blockAI>(creature); } @@ -319,7 +322,7 @@ class boss_hodir : public CreatureScript bool iHaveTheCoolestFriends; bool iCouldSayThatThisCacheWasRare; - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_PASSIVE); @@ -329,7 +332,7 @@ class boss_hodir : public CreatureScript FrozenHelper->CastSpell(FrozenHelper, SPELL_SUMMON_FLASH_FREEZE_HELPER, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -349,13 +352,13 @@ class boss_hodir : public CreatureScript events.ScheduleEvent(EVENT_BERSERK, 480000); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { if (damage >= me->GetHealth()) { @@ -385,7 +388,7 @@ class boss_hodir : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -455,7 +458,7 @@ class boss_hodir : public CreatureScript if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (Aura* BitingColdAura = target->GetAura(SPELL_BITING_COLD_TRIGGERED)) if ((target->GetTypeId() == TYPEID_PLAYER) && (BitingColdAura->GetStackAmount() > 2)) - me->AI()->SetData(DATA_GETTING_COLD_IN_HERE, 0); + SetData(DATA_GETTING_COLD_IN_HERE, 0); gettingColdInHereTimer = 1000; } else @@ -464,7 +467,7 @@ class boss_hodir : public CreatureScript DoMeleeAttackIfReady(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -502,7 +505,7 @@ class boss_hodir : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_hodirAI>(creature); }; @@ -524,12 +527,12 @@ class npc_icicle : public CreatureScript uint32 icicleTimer; - void Reset() OVERRIDE + void Reset() override { icicleTimer = 2500; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (icicleTimer <= diff) { @@ -550,7 +553,7 @@ class npc_icicle : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_icicleAI>(creature); }; @@ -572,12 +575,12 @@ class npc_snowpacked_icicle : public CreatureScript uint32 despawnTimer; - void Reset() OVERRIDE + void Reset() override { despawnTimer = 12000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (despawnTimer <= diff) { @@ -590,7 +593,7 @@ class npc_snowpacked_icicle : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_snowpacked_icicleAI>(creature); }; @@ -608,14 +611,14 @@ class npc_hodir_priest : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_HEAL, urand(4000, 8000)); events.ScheduleEvent(EVENT_DISPEL_MAGIC, urand(15000, 20000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) return; @@ -656,7 +659,7 @@ class npc_hodir_priest : public CreatureScript DoSpellAttackIfReady(SPELL_SMITE); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR))) Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); @@ -667,7 +670,7 @@ class npc_hodir_priest : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_hodir_priestAI>(creature); }; @@ -685,13 +688,13 @@ class npc_hodir_shaman : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_STORM_CLOUD, urand(10000, 12500)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) return; @@ -718,7 +721,7 @@ class npc_hodir_shaman : public CreatureScript DoSpellAttackIfReady(SPELL_LAVA_BURST); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR))) Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); @@ -729,7 +732,7 @@ class npc_hodir_shaman : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_hodir_shamanAI>(creature); }; @@ -747,13 +750,13 @@ class npc_hodir_druid : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_STARLIGHT, urand(15000, 17500)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) return; @@ -779,7 +782,7 @@ class npc_hodir_druid : public CreatureScript DoSpellAttackIfReady(SPELL_WRATH); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR))) Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); @@ -790,7 +793,7 @@ class npc_hodir_druid : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_hodir_druidAI>(creature); }; @@ -808,7 +811,7 @@ class npc_hodir_mage : public CreatureScript instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); summons.DespawnAll(); @@ -816,19 +819,19 @@ class npc_hodir_mage : public CreatureScript events.ScheduleEvent(EVENT_MELT_ICE, 5000); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_TOASTY_FIRE) summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { if (summoned->GetEntry() == NPC_TOASTY_FIRE) summons.Despawn(summoned); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) return; @@ -859,7 +862,7 @@ class npc_hodir_mage : public CreatureScript DoSpellAttackIfReady(SPELL_FIREBALL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR))) Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS); @@ -871,7 +874,7 @@ class npc_hodir_mage : public CreatureScript SummonList summons; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_hodir_mageAI>(creature); }; @@ -889,12 +892,12 @@ class npc_toasty_fire : public CreatureScript me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_SINGED, true); } - void SpellHit(Unit* /*who*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*who*/, const SpellInfo* spell) override { if (spell->Id == SPELL_BLOCK_OF_ICE || spell->Id == SPELL_ICE_SHARD || spell->Id == SPELL_ICE_SHARD_HIT) { @@ -905,7 +908,7 @@ class npc_toasty_fire : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_toasty_fireAI>(creature); }; @@ -951,7 +954,7 @@ class spell_biting_cold : public SpellScriptLoader listOfTargets.push_back(std::make_pair(target->GetGUID(), 1)); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_biting_cold_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } @@ -961,7 +964,7 @@ class spell_biting_cold : public SpellScriptLoader TargetList listOfTargets; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_biting_cold_AuraScript(); } @@ -989,13 +992,13 @@ public: caster->RemoveAuraFromStack(SPELL_BITING_COLD_TRIGGERED); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_biting_cold_dot_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_biting_cold_dot_AuraScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 4b1572447d4..6be3586de28 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -121,7 +121,7 @@ class boss_ignis : public CreatureScript ASSERT(_vehicle); } - void Reset() OVERRIDE + void Reset() override { _Reset(); if (_vehicle) @@ -130,7 +130,7 @@ class boss_ignis : public CreatureScript instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -146,13 +146,13 @@ class boss_ignis : public CreatureScript instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_SHATTERED) return _shattered ? 1 : 0; @@ -160,13 +160,13 @@ class boss_ignis : public CreatureScript return 0; } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_IRON_CONSTRUCT) { @@ -180,7 +180,7 @@ class boss_ignis : public CreatureScript summons.Summon(summon); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_REMOVE_BUFF) return; @@ -193,7 +193,7 @@ class boss_ignis : public CreatureScript _firstConstructKill = secondKill; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -283,7 +283,7 @@ class boss_ignis : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_ignis_AI>(creature); } @@ -301,12 +301,12 @@ class npc_iron_construct : public CreatureScript creature->SetReactState(REACT_PASSIVE); } - void Reset() OVERRIDE + void Reset() override { _brittled = false; } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HasAura(SPELL_BRITTLE) && damage >= 5000) { @@ -319,7 +319,7 @@ class npc_iron_construct : public CreatureScript } } - void UpdateAI(uint32 /*uiDiff*/) OVERRIDE + void UpdateAI(uint32 /*uiDiff*/) override { if (!UpdateVictim()) return; @@ -350,7 +350,7 @@ class npc_iron_construct : public CreatureScript bool _brittled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_iron_constructAI>(creature); } @@ -369,7 +369,7 @@ class npc_scorch_ground : public CreatureScript creature->SetDisplayId(16925); //model 2 in db cannot overwrite wdb fields } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!_heat) @@ -385,7 +385,7 @@ class npc_scorch_ground : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { _heat = false; DoCast(me, SPELL_GROUND); @@ -393,13 +393,13 @@ class npc_scorch_ground : public CreatureScript _heatTimer = 0; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (_heat) { if (_heatTimer <= uiDiff) { - Creature* construct = me->GetCreature(*me, _constructGUID); + Creature* construct = ObjectAccessor::GetCreature(*me, _constructGUID); if (construct && !construct->HasAura(SPELL_MOLTEN)) { me->AddAura(SPELL_HEAT, construct); @@ -417,7 +417,7 @@ class npc_scorch_ground : public CreatureScript bool _heat; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_scorch_groundAI>(creature); } @@ -432,7 +432,7 @@ class spell_ignis_slag_pot : public SpellScriptLoader { PrepareAuraScript(spell_ignis_slag_pot_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SLAG_POT_DAMAGE) || !sSpellMgr->GetSpellInfo(SPELL_SLAG_IMBUED)) @@ -456,14 +456,14 @@ class spell_ignis_slag_pot : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_SLAG_IMBUED, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_ignis_slag_pot_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); AfterEffectRemove += AuraEffectRemoveFn(spell_ignis_slag_pot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ignis_slag_pot_AuraScript(); } @@ -474,7 +474,7 @@ class achievement_ignis_shattered : public AchievementCriteriaScript public: achievement_ignis_shattered() : AchievementCriteriaScript("achievement_ignis_shattered") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target && target->IsAIEnabled) return target->GetAI()->GetData(DATA_SHATTERED); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 26886719ec8..58969fd63c8 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -117,7 +117,7 @@ class boss_kologarn : public CreatureScript bool left, right; uint64 eyebeamTarget; - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -135,14 +135,14 @@ class boss_kologarn : public CreatureScript _EnterCombat(); } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); eyebeamTarget = 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); DoCast(SPELL_KOLOGARN_PACIFY); @@ -152,13 +152,13 @@ class boss_kologarn : public CreatureScript _JustDied(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { bool isEncounterInProgress = instance->GetBossState(BOSS_KOLOGARN) == IN_PROGRESS; if (who->GetEntry() == NPC_LEFT_ARM) @@ -208,7 +208,7 @@ class boss_kologarn : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { switch (summon->GetEntry()) { @@ -234,7 +234,7 @@ class boss_kologarn : public CreatureScript // Victim gets 67351 if (eyebeamTarget) { - if (Unit* target = Unit::GetUnit(*summon, eyebeamTarget)) + if (Unit* target = ObjectAccessor::GetUnit(*summon, eyebeamTarget)) { summon->Attack(target, false); summon->GetMotionMaster()->MoveChase(target); @@ -242,7 +242,7 @@ class boss_kologarn : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -318,7 +318,7 @@ class boss_kologarn : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_kologarnAI>(creature); } @@ -345,13 +345,13 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL, NULL, originalCaster); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ulduar_rubble_summonSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ulduar_rubble_summonSpellScript(); } @@ -387,7 +387,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader { PrepareSpellScript(spell_ulduar_stone_grip_cast_target_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (GetCaster()->GetTypeId() != TYPEID_UNIT) return false; @@ -420,7 +420,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader unitList = _unitList; } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FilterTargetsInitial, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ulduar_stone_grip_cast_target_SpellScript::FillTargetsSubsequential, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -432,7 +432,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader std::list<WorldObject*> _unitList; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ulduar_stone_grip_cast_target_SpellScript(); } @@ -466,13 +466,13 @@ class spell_ulduar_cancel_stone_grip : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ulduar_cancel_stone_gripSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ulduar_cancel_stone_gripSpellScript(); } @@ -504,13 +504,13 @@ class spell_ulduar_squeezed_lifeless : public SpellScriptLoader GetHitPlayer()->UpdateObjectVisibility(false); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ulduar_squeezed_lifeless_SpellScript::HandleInstaKill, EFFECT_1, SPELL_EFFECT_INSTAKILL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ulduar_squeezed_lifeless_SpellScript(); } @@ -541,13 +541,13 @@ class spell_ulduar_stone_grip_absorb : public SpellScriptLoader rubbleStalker->CastSpell(rubbleStalker, SPELL_STONE_GRIP_CANCEL, true); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_absorb_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ulduar_stone_grip_absorb_AuraScript(); } @@ -587,21 +587,20 @@ class spell_ulduar_stone_grip : public SpellScriptLoader // Temporarily relocate player to vehicle exit dest serverside to send proper fall movement // beats me why blizzard sends these 2 spline packets one after another instantly - Position oldPos; - caster->GetPosition(&oldPos); + Position oldPos = caster->GetPosition(); caster->Relocate(exitPosition); caster->GetMotionMaster()->MoveFall(); caster->Relocate(oldPos); } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_AuraScript::OnRemoveVehicle, EFFECT_0, SPELL_AURA_CONTROL_VEHICLE, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_ulduar_stone_grip_AuraScript::OnRemoveStun, EFFECT_2, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ulduar_stone_grip_AuraScript(); } @@ -621,13 +620,13 @@ class spell_kologarn_stone_shout : public SpellScriptLoader unitList.remove_if(PlayerOrPetCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_stone_shout_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_kologarn_stone_shout_SpellScript(); } @@ -648,14 +647,14 @@ class spell_kologarn_summon_focused_eyebeam : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), GetSpellInfo()->Effects[effIndex].TriggerSpell, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_kologarn_summon_focused_eyebeam_SpellScript::HandleForceCast, EFFECT_0, SPELL_EFFECT_FORCE_CAST); OnEffectHitTarget += SpellEffectFn(spell_kologarn_summon_focused_eyebeam_SpellScript::HandleForceCast, EFFECT_1, SPELL_EFFECT_FORCE_CAST); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_kologarn_summon_focused_eyebeam_SpellScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index f58ed4e83e5..f284aacf996 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -89,7 +89,7 @@ class spell_ulduar_proximity_mines : public SpellScriptLoader class spell_ulduar_proximity_minesSpellScript : public SpellScript { - PrepareSpellScript(spell_ulduar_proximity_minesSpellScript) + PrepareSpellScript(spell_ulduar_proximity_minesSpellScript); void HandleScript(SpellEffIndex effIndex) { @@ -98,13 +98,13 @@ class spell_ulduar_proximity_mines : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_TRIGGER_MISSILE, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_ulduar_proximity_minesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_ulduar_proximity_minesSpellScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index e96cfaccc56..e0d46ad21ba 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -192,13 +192,13 @@ class boss_razorscale_controller : public CreatureScript me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); } - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetReactState(REACT_PASSIVE); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -211,8 +211,8 @@ class boss_razorscale_controller : public CreatureScript Harpoon3->RemoveFromWorld(); if (GameObject* Harpoon4 = ObjectAccessor::GetGameObject(*me, instance->GetData64(GO_RAZOR_HARPOON_4))) Harpoon4->RemoveFromWorld(); - me->AI()->DoAction(ACTION_HARPOON_BUILD); - me->AI()->DoAction(ACTION_PLACE_BROKEN_HARPOON); + DoAction(ACTION_HARPOON_BUILD); + DoAction(ACTION_PLACE_BROKEN_HARPOON); break; case SPELL_HARPOON_SHOT_1: case SPELL_HARPOON_SHOT_2: @@ -223,12 +223,12 @@ class boss_razorscale_controller : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (instance->GetBossState(BOSS_RAZORSCALE) != IN_PROGRESS) return; @@ -247,7 +247,7 @@ class boss_razorscale_controller : public CreatureScript } } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { events.Update(Diff); @@ -298,7 +298,7 @@ class boss_razorscale_controller : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_razorscale_controllerAI>(creature); } @@ -309,7 +309,7 @@ class go_razorscale_harpoon : public GameObjectScript public: go_razorscale_harpoon() : GameObjectScript("go_razorscale_harpoon") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (ObjectAccessor::GetCreature(*go, instance->GetData64(BOSS_RAZORSCALE))) @@ -339,7 +339,7 @@ class boss_razorscale : public CreatureScript bool PermaGround; bool Enraged; - void Reset() OVERRIDE + void Reset() override { _Reset(); me->SetCanFly(true); @@ -351,7 +351,7 @@ class boss_razorscale : public CreatureScript commander->AI()->DoAction(ACTION_COMMANDER_RESET); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL))) @@ -366,20 +366,20 @@ class boss_razorscale : public CreatureScript events.ScheduleEvent(EVENT_FLIGHT, 0, 0, PHASE_GROUND); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL))) controller->AI()->Reset(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_HARPOON_TRIGGER) ++HarpoonCounter; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == EFFECT_MOTION_TYPE && id == 1) { @@ -389,7 +389,7 @@ class boss_razorscale : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_QUICK_SHAVE) if (FlyCount <= 2) @@ -398,7 +398,7 @@ class boss_razorscale : public CreatureScript return 0; } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (!UpdateVictim()) return; @@ -566,7 +566,7 @@ class boss_razorscale : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -579,7 +579,7 @@ class boss_razorscale : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_razorscaleAI>(creature); } @@ -607,7 +607,7 @@ class npc_expedition_commander : public CreatureScript Creature* Engineer[4]; Creature* Defender[4]; - void Reset() OVERRIDE + void Reset() override { AttackStartTimer = 0; Phase = 0; @@ -615,7 +615,7 @@ class npc_expedition_commander : public CreatureScript summons.clear(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Greet && me->IsWithinDistInMap(who, 10.0f) && who->GetTypeId() == TYPEID_PLAYER) @@ -625,12 +625,12 @@ class npc_expedition_commander : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summons.push_back(summoned->GetGUID()); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -644,7 +644,7 @@ class npc_expedition_commander : public CreatureScript } } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (AttackStartTimer <= Diff) { @@ -704,7 +704,7 @@ class npc_expedition_commander : public CreatureScript } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -717,7 +717,7 @@ class npc_expedition_commander : public CreatureScript return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED) @@ -733,7 +733,7 @@ class npc_expedition_commander : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_expedition_commanderAI>(creature); } @@ -758,7 +758,7 @@ class npc_mole_machine_trigger : public CreatureScript bool GobSummoned; bool NpcSummoned; - void Reset() OVERRIDE + void Reset() override { SummonGobTimer = 2000; SummonNpcTimer = 6000; @@ -767,7 +767,7 @@ class npc_mole_machine_trigger : public CreatureScript NpcSummoned = false; } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (!GobSummoned && SummonGobTimer <= Diff) { @@ -807,13 +807,13 @@ class npc_mole_machine_trigger : public CreatureScript DissapearTimer -= Diff; } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->DoZoneInCombat(); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mole_machine_triggerAI(creature); } @@ -832,13 +832,13 @@ class npc_devouring_flame : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); } - void Reset() OVERRIDE + void Reset() override { DoCast(SPELL_FLAME_GROUND); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_devouring_flameAI(creature); } @@ -856,13 +856,13 @@ class npc_darkrune_watcher : public CreatureScript uint32 ChainTimer; uint32 LightTimer; - void Reset() OVERRIDE + void Reset() override { ChainTimer = urand(10000, 15000); LightTimer = urand(1000, 3000); } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (!UpdateVictim()) return; @@ -887,7 +887,7 @@ class npc_darkrune_watcher : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_darkrune_watcherAI(creature); } @@ -904,25 +904,25 @@ class npc_darkrune_guardian : public CreatureScript uint32 StormTimer; - void Reset() OVERRIDE + void Reset() override { StormTimer = urand(3000, 6000); killedByBreath = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return type == DATA_IRON_DWARF_MEDIUM_RARE ? killedByBreath : 0; } - void SetData(uint32 type, uint32 value) OVERRIDE + void SetData(uint32 type, uint32 value) override { if (type == DATA_IRON_DWARF_MEDIUM_RARE) killedByBreath = value; } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (!UpdateVictim()) return; @@ -942,7 +942,7 @@ class npc_darkrune_guardian : public CreatureScript bool killedByBreath; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_darkrune_guardianAI(creature); } @@ -961,14 +961,14 @@ class npc_darkrune_sentinel : public CreatureScript uint32 WhirlTimer; uint32 ShoutTimer; - void Reset() OVERRIDE + void Reset() override { HeroicTimer = urand(4000, 8000); WhirlTimer = urand(20000, 25000); ShoutTimer = urand(15000, 30000); } - void UpdateAI(uint32 Diff) OVERRIDE + void UpdateAI(uint32 Diff) override { if (!UpdateVictim()) return; @@ -1001,7 +1001,7 @@ class npc_darkrune_sentinel : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_darkrune_sentinelAI(creature); } @@ -1028,13 +1028,13 @@ class spell_razorscale_devouring_flame : public SpellScriptLoader caster->SummonCreature(entry, summonLocation->GetPositionX(), summonLocation->GetPositionY(), GROUND_Z, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 20000); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_razorscale_devouring_flame_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_razorscale_devouring_flame_SpellScript(); } @@ -1059,13 +1059,13 @@ class spell_razorscale_flame_breath : public SpellScriptLoader target->AI()->SetData(DATA_IRON_DWARF_MEDIUM_RARE, 1); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_razorscale_flame_breath_SpellScript::CheckDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_razorscale_flame_breath_SpellScript(); } @@ -1078,7 +1078,7 @@ class achievement_iron_dwarf_medium_rare : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_IRON_DWARF_MEDIUM_RARE); } @@ -1089,7 +1089,7 @@ class achievement_quick_shave : public AchievementCriteriaScript public: achievement_quick_shave() : AchievementCriteriaScript("achievement_quick_shave") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (target) if (Creature* razorscale = target->ToCreature()) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 73b644f3021..0364a113491 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -49,36 +49,36 @@ class boss_thorim : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { Talk(SAY_WIPE); _EnterEvadeMode(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -91,7 +91,7 @@ class boss_thorim : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_thorimAI>(creature); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index ee87e3e9732..87192f39a5c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -192,7 +192,7 @@ class boss_xt002 : public CreatureScript public: boss_xt002() : CreatureScript("boss_xt002") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_xt002_AI>(creature); } @@ -203,7 +203,7 @@ class boss_xt002 : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -221,7 +221,7 @@ class boss_xt002 : public CreatureScript instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); _EnterCombat(); @@ -235,7 +235,7 @@ class boss_xt002 : public CreatureScript instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MUST_DECONSTRUCT_FASTER); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -245,25 +245,25 @@ class boss_xt002 : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!_hardMode && _phase == 1 && !HealthAbovePct(100 - 25 * (_heartExposed+1))) ExposeHeart(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) return; @@ -316,7 +316,7 @@ class boss_xt002 : public CreatureScript DoMeleeAttackIfReady(); } - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { if (apply && who->GetEntry() == NPC_XS013_SCRAPBOT) { @@ -329,7 +329,7 @@ class boss_xt002 : public CreatureScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -344,7 +344,7 @@ class boss_xt002 : public CreatureScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -453,11 +453,11 @@ class npc_xt002_heart : public CreatureScript SetCombatMovement(false); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - Creature* xt002 = _instance ? me->GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL; + Creature* xt002 = _instance ? ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002)) : NULL; if (!xt002 || !xt002->AI()) return; @@ -469,7 +469,7 @@ class npc_xt002_heart : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_xt002_heartAI>(creature); } @@ -485,7 +485,7 @@ class npc_scrapbot : public CreatureScript public: npc_scrapbot() : CreatureScript("npc_scrapbot") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_scrapbotAI>(creature); } @@ -497,21 +497,21 @@ class npc_scrapbot : public CreatureScript _instance = me->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); _rangeCheckTimer = 500; - if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002))) + if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002))) me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_rangeCheckTimer <= diff) { - if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002))) + if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002))) { if (me->IsWithinMeleeRange(xt002)) { @@ -542,7 +542,7 @@ class npc_pummeller : public CreatureScript public: npc_pummeller() : CreatureScript("npc_pummeller") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_pummellerAI>(creature); } @@ -554,21 +554,20 @@ class npc_pummeller : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _arcingSmashTimer = TIMER_ARCING_SMASH; _trampleTimer = TIMER_TRAMPLE; _uppercutTimer = TIMER_UPPERCUT; - if (Creature* xt002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002))) + if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002))) { - Position pos; - xt002->GetPosition(&pos); + Position pos = xt002->GetPosition(); me->GetMotionMaster()->MovePoint(0, pos); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -644,7 +643,7 @@ class npc_boombot : public CreatureScript public: npc_boombot() : CreatureScript("npc_boombot") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_boombotAI>(creature); } @@ -656,7 +655,7 @@ class npc_boombot : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _boomed = false; @@ -669,11 +668,11 @@ class npc_boombot : public CreatureScript me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f); /// @todo proper waypoints? - if (Creature* pXT002 = me->GetCreature(*me, _instance->GetData64(BOSS_XT002))) + if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetData64(BOSS_XT002))) me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f); } - void DamageTaken(Unit* /*who*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*who*/, uint32& damage) override { if (damage >= (me->GetHealth() - me->GetMaxHealth() * 0.5f) && !_boomed) { @@ -698,7 +697,7 @@ class npc_boombot : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -723,7 +722,7 @@ class npc_life_spark : public CreatureScript public: npc_life_spark() : CreatureScript("npc_life_spark") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_life_sparkAI(creature); } @@ -734,13 +733,13 @@ class npc_life_spark : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { DoCast(me, RAID_MODE(SPELL_STATIC_CHARGED_10, SPELL_STATIC_CHARGED_25)); _shockTimer = 0; // first one is immediate. } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -770,7 +769,7 @@ class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader { PrepareAuraScript(spell_xt002_searing_light_spawn_life_spark_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_LIFE_SPARK)) return false; @@ -785,13 +784,13 @@ class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader player->CastSpell(player, SPELL_SUMMON_LIFE_SPARK, true); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_searing_light_spawn_life_spark_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_xt002_searing_light_spawn_life_spark_AuraScript(); } @@ -806,7 +805,7 @@ class spell_xt002_gravity_bomb_aura : public SpellScriptLoader { PrepareAuraScript(spell_xt002_gravity_bomb_aura_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VOID_ZONE)) return false; @@ -836,14 +835,14 @@ class spell_xt002_gravity_bomb_aura : public SpellScriptLoader xt002->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_xt002_gravity_bomb_aura_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE); AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_gravity_bomb_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_xt002_gravity_bomb_aura_AuraScript(); } @@ -869,13 +868,13 @@ class spell_xt002_gravity_bomb_damage : public SpellScriptLoader caster->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_xt002_gravity_bomb_damage_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_xt002_gravity_bomb_damage_SpellScript(); } @@ -890,7 +889,7 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader { PrepareSpellScript(spell_xt002_heart_overload_periodic_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ENERGY_ORB)) return false; @@ -936,13 +935,13 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_xt002_heart_overload_periodic_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_xt002_heart_overload_periodic_SpellScript(); } @@ -967,7 +966,7 @@ class spell_xt002_tympanic_tantrum : public SpellScriptLoader SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(GetHitDamage())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_tympanic_tantrum_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_tympanic_tantrum_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -975,7 +974,7 @@ class spell_xt002_tympanic_tantrum : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_xt002_tympanic_tantrum_SpellScript(); } @@ -1000,13 +999,13 @@ class spell_xt002_submerged : public SpellScriptLoader target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_SUBMERGED); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_xt002_submerged_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_xt002_submerged_SpellScript(); } @@ -1031,13 +1030,13 @@ class spell_xt002_stand : public SpellScriptLoader target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_xt002_stand_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_xt002_stand_SpellScript(); } @@ -1048,7 +1047,7 @@ class achievement_nerf_engineering : public AchievementCriteriaScript public: achievement_nerf_engineering() : AchievementCriteriaScript("achievement_nerf_engineering") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target || !target->GetAI()) return false; @@ -1062,7 +1061,7 @@ class achievement_heartbreaker : public AchievementCriteriaScript public: achievement_heartbreaker() : AchievementCriteriaScript("achievement_heartbreaker") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target || !target->GetAI()) return false; @@ -1076,7 +1075,7 @@ class achievement_nerf_gravity_bombs : public AchievementCriteriaScript public: achievement_nerf_gravity_bombs() : AchievementCriteriaScript("achievement_nerf_gravity_bombs") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target || !target->GetAI()) return false; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 5e44d97299e..9ce5733ab0b 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -430,7 +430,7 @@ class boss_voice_of_yogg_saron : public CreatureScript SetCombatMovement(false); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { // TODO: MoveInLineOfSight doesn't work for such a big distance @@ -438,7 +438,7 @@ class boss_voice_of_yogg_saron : public CreatureScript me->SetInCombatWithZone(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { BossAI::EnterEvadeMode(); @@ -459,7 +459,7 @@ class boss_voice_of_yogg_saron : public CreatureScript } } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.SetPhase(PHASE_ONE); @@ -482,7 +482,7 @@ class boss_voice_of_yogg_saron : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (Creature* sara = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SARA))) sara->SetInCombatWith(me); @@ -501,7 +501,7 @@ class boss_voice_of_yogg_saron : public CreatureScript events.ScheduleEvent(EVENT_EXTINGUISH_ALL_LIFE, 900000); // 15 minutes } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { // don't despawn Yogg-Saron's corpse, remove him from SummonList! if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_YOGG_SARON))) @@ -510,7 +510,7 @@ class boss_voice_of_yogg_saron : public CreatureScript BossAI::JustDied(killer); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -585,7 +585,7 @@ class boss_voice_of_yogg_saron : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -615,7 +615,7 @@ class boss_voice_of_yogg_saron : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { switch (summon->GetEntry()) { @@ -651,7 +651,7 @@ class boss_voice_of_yogg_saron : public CreatureScript bool _illusionShattered; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_voice_of_yogg_saronAI>(creature); } @@ -687,7 +687,7 @@ class boss_sara : public CreatureScript _linkData.erase(player1); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (_events.IsInPhase(PHASE_ONE) && damage >= me->GetHealth()) { @@ -705,7 +705,7 @@ class boss_sara : public CreatureScript } } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override { if (!roll_chance_i(30) || _events.IsInPhase(PHASE_TRANSFORM)) return; @@ -726,13 +726,13 @@ class boss_sara : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER && !me->IsInEvadeMode()) Talk(SAY_SARA_KILL); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_SARA_AGGRO); _events.ScheduleEvent(EVENT_SARAS_FERVOR, 5000, 0, PHASE_ONE); @@ -740,7 +740,7 @@ class boss_sara : public CreatureScript _events.ScheduleEvent(EVENT_SARAS_ANGER, urand(15000, 25000), 0, PHASE_ONE); } - void Reset() OVERRIDE + void Reset() override { me->RemoveAllAuras(); me->SetReactState(REACT_PASSIVE); @@ -749,7 +749,7 @@ class boss_sara : public CreatureScript _events.SetPhase(PHASE_ONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) return; @@ -826,7 +826,7 @@ class boss_sara : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->SetReactState(REACT_PASSIVE); @@ -855,7 +855,7 @@ class boss_sara : public CreatureScript voice->AI()->JustSummoned(summon); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -873,7 +873,7 @@ class boss_sara : public CreatureScript std::map<uint64, uint64> _linkData; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_saraAI>(creature); } @@ -888,7 +888,7 @@ class boss_yogg_saron : public CreatureScript { boss_yogg_saronAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.SetPhase(PHASE_TWO); @@ -910,13 +910,13 @@ class boss_yogg_saron : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_IN_THE_MAWS_OF_THE_OLD_GOD) me->AddLootMode(32); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_YOGG_SARON_DEATH); @@ -940,7 +940,7 @@ class boss_yogg_saron : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -976,7 +976,7 @@ class boss_yogg_saron : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1001,7 +1001,7 @@ class boss_yogg_saron : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_yogg_saronAI>(creature); } @@ -1016,14 +1016,14 @@ class boss_brain_of_yogg_saron : public CreatureScript { boss_brain_of_yogg_saronAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()), _summons(creature) { } - void Reset() OVERRIDE + void Reset() override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_MATCH_HEALTH); _summons.DespawnAll(); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(30, damage) && !me->HasAura(SPELL_BRAIN_HURT_VISUAL)) { @@ -1047,9 +1047,9 @@ class boss_brain_of_yogg_saron : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1086,7 +1086,7 @@ class boss_brain_of_yogg_saron : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { _summons.Summon(summon); } @@ -1097,7 +1097,7 @@ class boss_brain_of_yogg_saron : public CreatureScript uint8 _tentaclesKilled; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<boss_brain_of_yogg_saronAI>(creature); } @@ -1112,7 +1112,7 @@ class npc_ominous_cloud : public CreatureScript { npc_ominous_cloudAI(Creature* creature) : PassiveAI(creature) { } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_OMINOUS_CLOUD_VISUAL); } @@ -1132,9 +1132,9 @@ class npc_ominous_cloud : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { Movement::MoveSplineInit init(me); FillCirclePath(YoggSaronSpawnPos, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), me->GetPositionZ(), init.Path(), action); @@ -1144,7 +1144,7 @@ class npc_ominous_cloud : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_ominous_cloudAI>(creature); } @@ -1159,18 +1159,18 @@ class npc_guardian_of_yogg_saron : public CreatureScript { npc_guardian_of_yogg_saronAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCastAOE(SPELL_SHADOW_NOVA); DoCastAOE(SPELL_SHADOW_NOVA_2); } - void Reset() OVERRIDE + void Reset() override { _events.ScheduleEvent(EVENT_DARK_VOLLEY, urand(10000, 15000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1196,7 +1196,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript DoMeleeAttackIfReady(); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->GetEntry() != NPC_OMINOUS_CLOUD) return; @@ -1211,7 +1211,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_guardian_of_yogg_saronAI>(creature); } @@ -1229,14 +1229,14 @@ class npc_corruptor_tentacle : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_TENTACLE_VOID_ZONE); DoCastAOE(SPELL_ERUPT); _events.ScheduleEvent(EVENT_CAST_RANDOM_SPELL, 1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1268,7 +1268,7 @@ class npc_corruptor_tentacle : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_corruptor_tentacleAI>(creature); } @@ -1286,24 +1286,24 @@ class npc_constrictor_tentacle : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_TENTACLE_VOID_ZONE_2); DoCastAOE(SPELL_ERUPT); } - void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override { if (!apply) passenger->RemoveAurasDueToSpell(SPELL_SQUEEZE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { UpdateVictim(); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_VOICE_OF_YOGG_SARON))) voice->AI()->JustSummoned(me); @@ -1313,7 +1313,7 @@ class npc_constrictor_tentacle : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_constrictor_tentacleAI>(creature); } @@ -1331,7 +1331,7 @@ class npc_crusher_tentacle : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_CRUSH); DoCast(me, SPELL_TENTACLE_VOID_ZONE); @@ -1342,7 +1342,7 @@ class npc_crusher_tentacle : public CreatureScript _events.ScheduleEvent(EVENT_DIMINISH_POWER, urand(6000, 8000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1374,7 +1374,7 @@ class npc_crusher_tentacle : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_crusher_tentacleAI>(creature); } @@ -1389,24 +1389,24 @@ class npc_influence_tentacle : public CreatureScript { npc_influence_tentacleAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { } - void Reset() OVERRIDE + void Reset() override { DoCast(me, me->GetEntry() == NPC_SUIT_OF_ARMOR ? SPELL_NONDESCRIPT_1 : SPELL_NONDESCRIPT_2); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* brain = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_BRAIN_OF_YOGG_SARON))) brain->AI()->DoAction(ACTION_TENTACLE_KILLED); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_influence_tentacleAI>(creature); } @@ -1423,7 +1423,7 @@ class npc_descend_into_madness : public CreatureScript { npc_descend_into_madnessAI(Creature* creature) : PassiveAI(creature), _instance(creature->GetInstanceScript()) { } - void OnSpellClick(Unit* clicker, bool& result) OVERRIDE + void OnSpellClick(Unit* clicker, bool& result) override { if (!result) return; @@ -1431,13 +1431,13 @@ class npc_descend_into_madness : public CreatureScript me->DespawnOrUnsummon(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } private: InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_descend_into_madnessAI>(creature); } @@ -1452,20 +1452,20 @@ class npc_immortal_guardian : public CreatureScript { npc_immortal_guardianAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { DoCast(me, SPELL_EMPOWERED); DoCast(me, SPELL_RECENTLY_SPAWNED); _events.ScheduleEvent(EVENT_DRAIN_LIFE, urand(3000, 13000)); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(1, damage)) damage = me->GetHealth() - me->CountPctFromMaxHealth(1); // or set immune to damage? should be done here or in SPELL_WEAKENED spell script? } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1495,7 +1495,7 @@ class npc_immortal_guardian : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_immortal_guardianAI>(creature); } @@ -1510,13 +1510,13 @@ class npc_observation_ring_keeper : public CreatureScript { npc_observation_ring_keeperAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { DoCast(SPELL_SIMPLE_TELEPORT_KEEPERS); // not visible here DoCast(SPELL_KEEPER_ACTIVE); } - void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) override { if (sender != 10333) return; @@ -1544,10 +1544,10 @@ class npc_observation_ring_keeper : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_observation_ring_keeperAI>(creature); } @@ -1562,12 +1562,12 @@ class npc_yogg_saron_keeper : public CreatureScript { npc_yogg_saron_keeperAI(Creature* creature) : ScriptedAI(creature) { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { DoCast(SPELL_SIMPLE_TELEPORT_KEEPERS); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.SetPhase(PHASE_ONE); @@ -1588,7 +1588,7 @@ class npc_yogg_saron_keeper : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { switch (me->GetEntry()) { @@ -1609,7 +1609,7 @@ class npc_yogg_saron_keeper : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) return; @@ -1634,7 +1634,7 @@ class npc_yogg_saron_keeper : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -1670,7 +1670,7 @@ class npc_yogg_saron_keeper : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_yogg_saron_keeperAI>(creature); } @@ -1685,7 +1685,7 @@ class npc_yogg_saron_illusions : public CreatureScript { npc_yogg_saron_illusionsAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { switch (_instance->GetData(DATA_ILLUSION)) { @@ -1718,7 +1718,7 @@ class npc_yogg_saron_illusions : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -1791,7 +1791,7 @@ class npc_yogg_saron_illusions : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_yogg_saron_illusionsAI>(creature); } @@ -1806,7 +1806,7 @@ class npc_garona : public CreatureScript { npc_garonaAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); @@ -1819,7 +1819,7 @@ class npc_garona : public CreatureScript _events.ScheduleEvent(EVENT_STORMWIND_ROLEPLAY_6, 52700); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -1854,7 +1854,7 @@ class npc_garona : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_garonaAI>(creature); } @@ -1869,12 +1869,12 @@ class npc_turned_champion : public CreatureScript { npc_turned_championAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { DoCast(SPELL_VERTEX_COLOR_BLACK); } - void MovementInform(uint32 type, uint32 pointId) OVERRIDE + void MovementInform(uint32 type, uint32 pointId) override { if (type != POINT_MOTION_TYPE || pointId != 0) return; @@ -1882,7 +1882,7 @@ class npc_turned_champion : public CreatureScript me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { if (action != ACTION_START_ROLEPLAY) return; @@ -1892,7 +1892,7 @@ class npc_turned_champion : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_turned_championAI>(creature); } @@ -1907,17 +1907,17 @@ class npc_laughing_skull : public CreatureScript { npc_laughing_skullAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_PASSIVE); DoCast(me, SPELL_LUNATIC_GAZE_SKULL); } // don't evade, otherwise the Lunatic Gaze aura is removed - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUlduarAI<npc_laughing_skullAI>(creature); } @@ -1938,13 +1938,13 @@ class spell_yogg_saron_target_selectors : public SpellScriptLoader // 63744, GetCaster()->CastSpell(target, uint32(GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_target_selectors_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_target_selectors_SpellScript(); } @@ -1990,7 +1990,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301 { PrepareSpellScript(spell_yogg_saron_psychosis_SpellScript); - bool Load() OVERRIDE + bool Load() override { _stacks = GetSpellInfo()->Id == SPELL_PSYCHOSIS ? 9 : 12; return true; @@ -2002,7 +2002,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301 targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_ILLUSION_ROOM)); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_psychosis_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_psychosis_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -2010,7 +2010,7 @@ class spell_yogg_saron_psychosis : public SpellScriptLoader // 63795, 65301 } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_psychosis_SpellScript(); } @@ -2034,7 +2034,7 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830 targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_ILLUSION_ROOM)); } - void Register() OVERRIDE + void Register() override { if (m_scriptSpellId == SPELL_MALADY_OF_THE_MIND) { @@ -2051,7 +2051,7 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830 { PrepareAuraScript(spell_yogg_saron_malady_of_the_mind_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MALADY_OF_THE_MIND_JUMP)) return false; @@ -2073,18 +2073,18 @@ class spell_yogg_saron_malady_of_the_mind : public SpellScriptLoader // 63830 GetTarget()->CastSpell(GetTarget(), SPELL_MALADY_OF_THE_MIND_JUMP); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_malady_of_the_mind_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_FEAR, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_malady_of_the_mind_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_malady_of_the_mind_AuraScript(); } @@ -2113,7 +2113,7 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802 ai->SetLinkBetween(targets.front()->GetGUID(), targets.back()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_brain_link_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } @@ -2123,7 +2123,7 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802 { PrepareAuraScript(spell_yogg_saron_brain_link_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BRAIN_LINK_DAMAGE)) return false; @@ -2170,19 +2170,19 @@ class spell_yogg_saron_brain_link : public SpellScriptLoader // 63802 GetTarget()->CastSpell(linked, (GetTarget()->GetDistance(linked) > (float)aurEff->GetAmount()) ? SPELL_BRAIN_LINK_DAMAGE : SPELL_BRAIN_LINK_NO_DAMAGE, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_brain_link_AuraScript::DummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); OnEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_brain_link_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_brain_link_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_brain_link_AuraScript(); } @@ -2200,13 +2200,13 @@ class spell_yogg_saron_brain_link_damage : public SpellScriptLoader // 6380 PrepareSpellScript(spell_yogg_saron_brain_link_damage_SpellScript); - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_brain_link_damage_SpellScript::RemoveSanity, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_brain_link_damage_SpellScript(); } @@ -2221,7 +2221,7 @@ class spell_yogg_saron_boil_ominously : public SpellScriptLoader // 63030 { PrepareSpellScript(spell_yogg_saron_boil_ominously_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_GUARDIAN_1)) return false; @@ -2240,13 +2240,13 @@ class spell_yogg_saron_boil_ominously : public SpellScriptLoader // 63030 } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_boil_ominously_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_boil_ominously_SpellScript(); } @@ -2273,14 +2273,14 @@ class spell_yogg_saron_shadow_beacon : public SpellScriptLoader // 64465 target->SetEntry(NPC_IMMORTAL_GUARDIAN); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_shadow_beacon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_shadow_beacon_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_shadow_beacon_AuraScript(); } @@ -2301,13 +2301,13 @@ class spell_yogg_saron_empowering_shadows_range_check : public SpellScriptLoader target->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_empowering_shadows_range_check_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_empowering_shadows_range_check_SpellScript(); } @@ -2322,7 +2322,7 @@ class spell_yogg_saron_empowering_shadows_missile : public SpellScriptLoader { PrepareSpellScript(spell_yogg_saron_empowering_shadows_missile_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_EMPOWERING_SHADOWS)) return false; @@ -2335,13 +2335,13 @@ class spell_yogg_saron_empowering_shadows_missile : public SpellScriptLoader target->CastSpell((Unit*)NULL, SPELL_EMPOWERING_SHADOWS, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_empowering_shadows_missile_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_empowering_shadows_missile_SpellScript(); } @@ -2357,7 +2357,7 @@ class spell_yogg_saron_constrictor_tentacle : public SpellScriptLoader // 64 { PrepareAuraScript(spell_yogg_saron_constrictor_tentacle_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CONSTRICTOR_TENTACLE_SUMMON)) return false; @@ -2369,13 +2369,13 @@ class spell_yogg_saron_constrictor_tentacle : public SpellScriptLoader // 64 GetTarget()->CastSpell(GetTarget(), SPELL_CONSTRICTOR_TENTACLE_SUMMON); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_constrictor_tentacle_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_constrictor_tentacle_AuraScript(); } @@ -2390,7 +2390,7 @@ class spell_yogg_saron_lunge : public SpellScriptLoader // 64131 { PrepareSpellScript(spell_yogg_saron_lunge_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SQUEEZE)) return false; @@ -2406,13 +2406,13 @@ class spell_yogg_saron_lunge : public SpellScriptLoader // 64131 } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_lunge_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_lunge_SpellScript(); } @@ -2434,13 +2434,13 @@ class spell_yogg_saron_squeeze : public SpellScriptLoader // 64125 vehicle->Kill(vehicle); // should tentacle die or just release its target? } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_squeeze_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_squeeze_AuraScript(); } @@ -2463,13 +2463,13 @@ class spell_yogg_saron_diminsh_power : public SpellScriptLoader // 64148 GetTarget()->InterruptSpell(CURRENT_CHANNELED_SPELL); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_yogg_saron_diminsh_power_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_diminsh_power_AuraScript(); } @@ -2485,7 +2485,7 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161 { PrepareAuraScript(spell_yogg_saron_empowered_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_EMPOWERED_BUFF)) return false; @@ -2514,14 +2514,14 @@ class spell_yogg_saron_empowered : public SpellScriptLoader // 64161 target->CastSpell(target, SPELL_WEAKENED, true); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_empowered_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_empowered_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_empowered_AuraScript(); } @@ -2542,13 +2542,13 @@ class spell_yogg_saron_match_health : public SpellScriptLoader // 64069 target->SetHealth(target->CountPctFromMaxHealth((int32)GetCaster()->GetHealthPct())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_match_health_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_match_health_SpellScript(); } @@ -2569,13 +2569,13 @@ class spell_yogg_saron_shattered_illusion : public SpellScriptLoader // 65238 target->RemoveAurasDueToSpell(uint32(GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_shattered_illusion_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_shattered_illusion_SpellScript(); } @@ -2590,7 +2590,7 @@ class spell_yogg_saron_death_ray_warning_visual : public SpellScriptLoader / { PrepareAuraScript(spell_yogg_saron_death_ray_warning_visual_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DEATH_RAY_PERIODIC)) return false; @@ -2610,13 +2610,13 @@ class spell_yogg_saron_death_ray_warning_visual : public SpellScriptLoader / } } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_death_ray_warning_visual_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_death_ray_warning_visual_AuraScript(); } @@ -2631,7 +2631,7 @@ class spell_yogg_saron_cancel_illusion_room_aura : public SpellScriptLoader / { PrepareSpellScript(spell_yogg_saron_cancel_illusion_room_aura_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_BACK_TO_MAIN_ROOM)) return false; @@ -2647,13 +2647,13 @@ class spell_yogg_saron_cancel_illusion_room_aura : public SpellScriptLoader / } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_cancel_illusion_room_aura_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_cancel_illusion_room_aura_SpellScript(); } @@ -2673,13 +2673,13 @@ class spell_yogg_saron_nondescript : public SpellScriptLoader // 64010, 6401 GetTarget()->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_nondescript_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_nondescript_AuraScript(); } @@ -2694,7 +2694,7 @@ class spell_yogg_saron_revealed_tentacle : public SpellScriptLoader // 64012 { PrepareSpellScript(spell_yogg_saron_revealed_tentacle_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TENTACLE_VOID_ZONE)) return false; @@ -2709,17 +2709,17 @@ class spell_yogg_saron_revealed_tentacle : public SpellScriptLoader // 64012 { caster->CastSpell(caster, SPELL_TENTACLE_VOID_ZONE, true); caster->CastSpell(caster, SPELL_GRIM_REPRISAL, true); - caster->UpdateEntry(NPC_INFLUENCE_TENTACLE, 0, caster->GetCreatureData()); + caster->UpdateEntry(NPC_INFLUENCE_TENTACLE, caster->GetCreatureData()); } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_revealed_tentacle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_revealed_tentacle_SpellScript(); } @@ -2734,7 +2734,7 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305 { PrepareAuraScript(spell_yogg_saron_grim_reprisal_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GRIM_REPRISAL_DAMAGE)) return false; @@ -2747,13 +2747,13 @@ class spell_yogg_saron_grim_reprisal : public SpellScriptLoader // 63305 GetTarget()->CastCustomSpell(SPELL_GRIM_REPRISAL_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetDamageInfo()->GetAttacker(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_yogg_saron_grim_reprisal_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_grim_reprisal_AuraScript(); } @@ -2768,7 +2768,7 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059 { PrepareSpellScript(spell_yogg_saron_induce_madness_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TELEPORT_BACK_TO_MAIN_ROOM)) return false; @@ -2796,14 +2796,14 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059 voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_induce_madness_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); AfterCast += SpellCastFn(spell_yogg_saron_induce_madness_SpellScript::ClearShatteredIllusion); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_induce_madness_SpellScript(); } @@ -2825,7 +2825,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050 GetSpell()->SetSpellValue(SPELLVALUE_AURA_STACK, 100); } - void Register() OVERRIDE + void Register() override { BeforeCast += SpellCastFn(spell_yogg_saron_sanity_SpellScript::ModSanityStacks); } @@ -2835,7 +2835,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050 { PrepareAuraScript(spell_yogg_saron_sanity_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LOW_SANITY_SCREEN_EFFECT)) return false; @@ -2867,19 +2867,19 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050 caster->CastSpell(GetTarget(), SPELL_INSANE, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_yogg_saron_sanity_AuraScript::DummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_sanity_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_sanity_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_sanity_AuraScript(); } @@ -2894,7 +2894,7 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120 { PrepareAuraScript(spell_yogg_saron_insane_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_INSANE_VISUAL)) return false; @@ -2916,14 +2916,14 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120 GetTarget()->Kill(GetTarget()); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_yogg_saron_insane_AuraScript::OnApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_yogg_saron_insane_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_insane_AuraScript(); } @@ -2944,13 +2944,13 @@ class spell_yogg_saron_insane_periodic : public SpellScriptLoader // 64555 GetCaster()->CastSpell(target, uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_insane_periodic_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_insane_periodic_SpellScript(); } @@ -2979,7 +2979,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64 { PrepareSpellScript(spell_yogg_saron_lunatic_gaze_SpellScript); - bool Load() OVERRIDE + bool Load() override { _stacks = GetSpellInfo()->Id == SPELL_LUNATIC_GAZE_DAMAGE ? 4 : 2; return true; @@ -2990,7 +2990,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64 targets.remove_if(LunaticGazeTargetSelector(GetCaster())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_lunatic_gaze_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_yogg_saron_lunatic_gaze_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); @@ -2998,7 +2998,7 @@ class spell_yogg_saron_lunatic_gaze : public SpellScriptLoader // 64164, 64 } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_lunatic_gaze_SpellScript(); } @@ -3020,13 +3020,13 @@ class spell_yogg_saron_keeper_aura : public SpellScriptLoader // 62650, 6267 return true; } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_yogg_saron_keeper_aura_AuraScript::CanApply); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_keeper_aura_AuraScript(); } @@ -3048,13 +3048,13 @@ class spell_yogg_saron_hate_to_zero : public SpellScriptLoader // 63984 target->getThreatManager().modifyThreatPercent(GetCaster(), -100); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_hate_to_zero_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_hate_to_zero_SpellScript(); } @@ -3084,13 +3084,13 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_yogg_saron_in_the_maws_of_the_old_god_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_in_the_maws_of_the_old_god_SpellScript(); } @@ -3111,13 +3111,13 @@ class spell_yogg_saron_titanic_storm : public SpellScriptLoader // 64172 GetCaster()->Kill(target); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_yogg_saron_titanic_storm_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_yogg_saron_titanic_storm_SpellScript(); } @@ -3132,7 +3132,7 @@ class spell_yogg_saron_hodirs_protective_gaze : public SpellScriptLoader // { PrepareAuraScript(spell_yogg_saron_hodirs_protective_gaze_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FLASH_FREEZE)) return false; @@ -3158,14 +3158,14 @@ class spell_yogg_saron_hodirs_protective_gaze : public SpellScriptLoader // PreventDefaultAction(); } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_yogg_saron_hodirs_protective_gaze_AuraScript::CanApply); OnEffectAbsorb += AuraEffectAbsorbFn(spell_yogg_saron_hodirs_protective_gaze_AuraScript::OnAbsorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_yogg_saron_hodirs_protective_gaze_AuraScript(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index d0a25d2b216..6437a76ee95 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -18,9 +18,10 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "InstanceScript.h" -#include "ulduar.h" #include "Player.h" #include "WorldPacket.h" +#include "SpellScript.h" +#include "ulduar.h" static DoorData const doorData[] = { @@ -111,11 +112,12 @@ class instance_ulduar : public InstanceMapScript std::set<uint64> mRubbleSpawns; - void Initialize() OVERRIDE + void Initialize() override { SetBossNumber(MAX_ENCOUNTER); LoadDoorData(doorData); LoadMinionData(minionData); + LeviathanGUID = 0; IgnisGUID = 0; RazorscaleGUID = 0; RazorscaleController = 0; @@ -154,6 +156,7 @@ class instance_ulduar : public InstanceMapScript keepersCount = 0; conSpeedAtory = false; Unbroken = true; + IsDriveMeCrazyEligible = true; _algalonSummoned = false; _summonAlgalon = false; @@ -169,13 +172,13 @@ class instance_ulduar : public InstanceMapScript memset(_summonYSKeeper, false, sizeof(_summonYSKeeper)); } - void FillInitialWorldStates(WorldPacket& packet) OVERRIDE + void FillInitialWorldStates(WorldPacket& packet) override { packet << uint32(WORLD_STATE_ALGALON_TIMER_ENABLED) << uint32(_algalonTimer && _algalonTimer <= 60); packet << uint32(WORLD_STATE_ALGALON_DESPAWN_TIMER) << uint32(std::min<uint32>(_algalonTimer, 60)); } - void OnPlayerEnter(Player* player) OVERRIDE + void OnPlayerEnter(Player* player) override { if (!TeamInInstance) TeamInInstance = player->GetTeam(); @@ -223,7 +226,7 @@ class instance_ulduar : public InstanceMapScript instance->SummonCreature(NPC_MIMIRON_YS, YSKeepersPos[3]); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (!TeamInInstance) { @@ -296,35 +299,35 @@ class instance_ulduar : public InstanceMapScript break; case NPC_EIVI_NIGHTFEATHER: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_TOR_GREYCLOUD, HORDE); + creature->UpdateEntry(NPC_TOR_GREYCLOUD); break; case NPC_ELLIE_NIGHTFEATHER: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_KAR_GREYCLOUD, HORDE); + creature->UpdateEntry(NPC_KAR_GREYCLOUD); break; case NPC_ELEMENTALIST_MAHFUUN: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_SPIRITWALKER_TARA, HORDE); + creature->UpdateEntry(NPC_SPIRITWALKER_TARA); break; case NPC_ELEMENTALIST_AVUUN: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_SPIRITWALKER_YONA, HORDE); + creature->UpdateEntry(NPC_SPIRITWALKER_YONA); break; case NPC_MISSY_FLAMECUFFS: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_AMIRA_BLAZEWEAVER, HORDE); + creature->UpdateEntry(NPC_AMIRA_BLAZEWEAVER); break; case NPC_SISSY_FLAMECUFFS: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_VEESHA_BLAZEWEAVER, HORDE); + creature->UpdateEntry(NPC_VEESHA_BLAZEWEAVER); break; case NPC_FIELD_MEDIC_PENNY: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_BATTLE_PRIEST_ELIZA, HORDE); + creature->UpdateEntry(NPC_BATTLE_PRIEST_ELIZA); break; case NPC_FIELD_MEDIC_JESSI: if (TeamInInstance == HORDE) - creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA, HORDE); + creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA); break; case NPC_THORIM: @@ -416,7 +419,7 @@ class instance_ulduar : public InstanceMapScript } } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { switch (creature->GetEntry()) { @@ -552,7 +555,7 @@ class instance_ulduar : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* gameObject) OVERRIDE + void OnGameObjectRemove(GameObject* gameObject) override { switch (gameObject->GetEntry()) { @@ -577,7 +580,7 @@ class instance_ulduar : public InstanceMapScript } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) @@ -604,7 +607,7 @@ class instance_ulduar : public InstanceMapScript } } - void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) OVERRIDE + void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override { // Flame Leviathan's Tower Event triggers Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID); @@ -638,7 +641,7 @@ class instance_ulduar : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -745,7 +748,7 @@ class instance_ulduar : public InstanceMapScript return true; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -793,11 +796,11 @@ class instance_ulduar : public InstanceMapScript } } - void SetData64(uint32 /*type*/, uint64 /*data*/) OVERRIDE + void SetData64(uint32 /*type*/, uint64 /*data*/) override { } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -911,7 +914,7 @@ class instance_ulduar : public InstanceMapScript return 0; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -932,7 +935,7 @@ class instance_ulduar : public InstanceMapScript return 0; } - bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = NULL */, uint32 /* = 0 */) OVERRIDE + bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = NULL */, uint32 /* = 0 */) override { switch (criteriaId) { @@ -967,7 +970,7 @@ class instance_ulduar : public InstanceMapScript return false; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -981,7 +984,7 @@ class instance_ulduar : public InstanceMapScript return saveStream.str(); } - void Load(char const* strIn) OVERRIDE + void Load(char const* strIn) override { if (!strIn) { @@ -1047,7 +1050,7 @@ class instance_ulduar : public InstanceMapScript OUT_LOAD_INST_DATA_COMPLETE; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (_events.Empty()) return; @@ -1086,13 +1089,49 @@ class instance_ulduar : public InstanceMapScript uint32 _maxWeaponItemLevel; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ulduar_InstanceMapScript(map); } }; +class spell_ulduar_teleporter : public SpellScriptLoader +{ + public: + spell_ulduar_teleporter() : SpellScriptLoader("spell_ulduar_teleporter") { } + + class spell_ulduar_teleporter_SpellScript : public SpellScript + { + PrepareSpellScript(spell_ulduar_teleporter_SpellScript); + + SpellCastResult CheckRequirement() + { + if (GetExplTargetUnit()->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_DONT_REPORT; + + if (GetExplTargetUnit()->IsInCombat()) + { + Spell::SendCastResult(GetExplTargetUnit()->ToPlayer(), GetSpellInfo(), 0, SPELL_FAILED_AFFECTING_COMBAT); + return SPELL_FAILED_AFFECTING_COMBAT; + } + + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_ulduar_teleporter_SpellScript::CheckRequirement); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_ulduar_teleporter_SpellScript(); + } +}; + void AddSC_instance_ulduar() { new instance_ulduar(); + new spell_ulduar_teleporter(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp deleted file mode 100644 index e3e588be076..00000000000 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar_teleporter.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * 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, see <http://www.gnu.org/licenses/>. - */ - -#include "ScriptMgr.h" -#include "ScriptedGossip.h" -#include "InstanceScript.h" -#include "Player.h" -#include "ulduar.h" - -/* -The teleporter appears to be active and stable. - -- Expedition Base Camp -- Formation Grounds -- Colossal Forge -- Scrapyard -- Antechamber of Ulduar -- Shattered Walkway -- Conservatory of Life -*/ - -enum UlduarTeleporter -{ - BASE_CAMP = 200, - GROUNDS = 201, - FORGE = 202, - SCRAPYARD = 203, - ANTECHAMBER = 204, - WALKWAY = 205, - CONSERVATORY = 206, -}; - -class ulduar_teleporter : public GameObjectScript -{ - public: - ulduar_teleporter() : GameObjectScript("ulduar_teleporter") { } - - bool OnGossipSelect(Player* player, GameObject* /*gameObject*/, uint32 sender, uint32 action) OVERRIDE - { - player->PlayerTalkClass->ClearMenus(); - if (sender != GOSSIP_SENDER_MAIN) - return false; - if (!player->getAttackers().empty()) - return false; - - switch (action) - { - case BASE_CAMP: - player->TeleportTo(603, -706.122f, -92.6024f, 429.876f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case GROUNDS: - player->TeleportTo(603, 131.248f, -35.3802f, 409.804f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case FORGE: - player->TeleportTo(603, 553.233f, -12.3247f, 409.679f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case SCRAPYARD: - player->TeleportTo(603, 926.292f, -11.4635f, 418.595f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case ANTECHAMBER: - player->TeleportTo(603, 1498.09f, -24.246f, 420.967f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case WALKWAY: - player->TeleportTo(603, 1859.45f, -24.1f, 448.9f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - case CONSERVATORY: - player->TeleportTo(603, 2086.27f, -24.3134f, 421.239f, 0.0f); - player->CLOSE_GOSSIP_MENU(); - break; - } - - return true; - } - - bool OnGossipHello(Player* player, GameObject* gameObject) OVERRIDE - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP); - if (InstanceScript* instance = gameObject->GetInstanceScript()) - { - if (instance->GetData(DATA_COLOSSUS) == 2) //count of 2 collossus death - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS); - if (instance->GetBossState(BOSS_LEVIATHAN) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Colossal Forge", GOSSIP_SENDER_MAIN, FORGE); - if (instance->GetBossState(BOSS_XT002) == DONE) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER); - } - if (instance->GetBossState(BOSS_KOLOGARN) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY); - if (instance->GetBossState(BOSS_AURIAYA) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY); - } - - player->SEND_GOSSIP_MENU(gameObject->GetGOInfo()->GetGossipMenuId(), gameObject->GetGUID()); - return true; - } -}; - -void AddSC_ulduar_teleporter() -{ - new ulduar_teleporter(); -} diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index cc37dde57dd..67bf6214374 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -18,28 +18,25 @@ /* ScriptData SDName: Boss_Ingvar_The_Plunderer SD%Complete: 95 -SDComment: Some Problems with Annhylde Movement, Blizzlike Timers (just shadow axe summon needs a new timer) -SDCategory: Udgarde Keep +SDComment: Blizzlike Timers (just shadow axe summon needs a new timer) +SDCategory: Utgarde Keep EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" #include "utgarde_keep.h" enum Yells { - // Ingvar (Human) - SAY_AGGRO_1 = 0, - SAY_SLAY_1 = 1, - SAY_DEATH_1 = 2, - - // Ingvar (Undead) - SAY_AGGRO_2 = 3, - SAY_SLAY_2 = 4, - SAY_DEATH_2 = 5, + // Ingvar (Human/Undead) + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, // Annhylde The Caller - YELL_RESURRECT = 0 + YELL_RESURRECT = 0 }; enum Events @@ -83,8 +80,10 @@ enum Spells SPELL_DARK_SMASH = 42723, SPELL_DREADFUL_ROAR = 42729, SPELL_WOE_STRIKE = 42730, + SPELL_WOE_STRIKE_EFFECT = 42739, SPELL_SHADOW_AXE_SUMMON = 42748, + SPELL_SHADOW_AXE_PERIODIC_DAMAGE = 42750, // Spells for Annhylde SPELL_SCOURG_RESURRECTION_HEAL = 42704, // Heal Max + DummyAura @@ -105,16 +104,14 @@ class boss_ingvar_the_plunderer : public CreatureScript struct boss_ingvar_the_plundererAI : public BossAI { - boss_ingvar_the_plundererAI(Creature* creature) : BossAI(creature, DATA_INGVAR) - { - _isUndead = false; - } + boss_ingvar_the_plundererAI(Creature* creature) : BossAI(creature, DATA_INGVAR) { } - void Reset() OVERRIDE + void Reset() override { - _isUndead = false; + if (me->GetEntry() != NPC_INGVAR) + me->UpdateEntry(NPC_INGVAR); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); _Reset(); events.SetPhase(PHASE_HUMAN); @@ -125,19 +122,19 @@ class boss_ingvar_the_plunderer : public CreatureScript events.ScheduleEvent(EVENT_SMASH, urand(12, 17)*IN_MILLISECONDS, 0, PHASE_HUMAN); } - void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*doneBy*/, uint32& damage) override { if (damage >= me->GetHealth() && events.IsInPhase(PHASE_HUMAN)) { me->RemoveAllAuras(); DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_EVENT); events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT); - Talk(SAY_DEATH_1); + Talk(SAY_DEATH); } if (events.IsInPhase(PHASE_EVENT)) @@ -152,26 +149,22 @@ class boss_ingvar_the_plunderer : public CreatureScript void StartZombiePhase() { - _isUndead = true; me->RemoveAura(SPELL_INGVAR_FEIGN_DEATH); - DoCast(me, SPELL_INGVAR_TRANSFORM, true); /// @todo: should be death persistent + DoCast(me, SPELL_INGVAR_TRANSFORM, true); + me->UpdateEntry(NPC_INGVAR_UNDEAD); events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT); - - Talk(SAY_AGGRO_2); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - - if (!_isUndead) - Talk(SAY_AGGRO_1); + Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); - Talk(SAY_DEATH_2); + Talk(SAY_DEATH); } void ScheduleSecondPhase() @@ -183,12 +176,13 @@ class boss_ingvar_the_plunderer : public CreatureScript events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* who) override { - Talk(_isUndead ? SAY_SLAY_1 : SAY_SLAY_2); + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !events.IsInPhase(PHASE_EVENT)) return; @@ -220,7 +214,7 @@ class boss_ingvar_the_plunderer : public CreatureScript events.ScheduleEvent(EVENT_SMASH, urand(12, 16)*IN_MILLISECONDS, 0, PHASE_HUMAN); break; case EVENT_JUST_TRANSFORMED: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); DoZoneInCombat(); ScheduleSecondPhase(); return; @@ -241,23 +235,21 @@ class boss_ingvar_the_plunderer : public CreatureScript events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10, 14)*IN_MILLISECONDS, 0, PHASE_UNDEAD); break; case EVENT_SHADOW_AXE: - if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) DoCast(target, SPELL_SHADOW_AXE_SUMMON); - events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); break; + default: + break; } } if (!events.IsInPhase(PHASE_EVENT)) DoMeleeAttackIfReady(); } - - private: - bool _isUndead; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<boss_ingvar_the_plundererAI>(creature); } @@ -275,19 +267,15 @@ class npc_annhylde_the_caller : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); - //! HACK: Creature's can't have MOVEMENTFLAG_FLYING - me->SetHover(true); - me->GetPosition(x, y, z); - DoTeleportTo(x+1, y, z+30); - me->GetMotionMaster()->MovePoint(1, x, y, z+15); + me->GetMotionMaster()->MovePoint(1, x, y, z - 15.0f); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -312,11 +300,11 @@ class npc_annhylde_the_caller : public CreatureScript } } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -339,7 +327,7 @@ class npc_annhylde_the_caller : public CreatureScript ingvar->AI()->DoAction(ACTION_START_PHASE_2); } - me->GetMotionMaster()->MovePoint(2, x+1, y, z+30); + me->GetMotionMaster()->MovePoint(2, x, y, z + 15.0f); break; default: break; @@ -353,58 +341,118 @@ class npc_annhylde_the_caller : public CreatureScript float x, y, z; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<npc_annhylde_the_callerAI>(creature); } }; -enum ShadowAxe -{ - SPELL_SHADOW_AXE_DAMAGE = 42750, - H_SPELL_SHADOW_AXE_DAMAGE = 59719, - POINT_TARGET = 28 -}; - class npc_ingvar_throw_dummy : public CreatureScript { -public: - npc_ingvar_throw_dummy() : CreatureScript("npc_ingvar_throw_dummy") { } + public: + npc_ingvar_throw_dummy() : CreatureScript("npc_ingvar_throw_dummy") { } + + struct npc_ingvar_throw_dummyAI : public ScriptedAI + { + npc_ingvar_throw_dummyAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + me->SetReactState(REACT_PASSIVE); + + if (Creature* target = me->FindNearestCreature(NPC_THROW_TARGET, 200.0f)) + { + float x, y, z; + target->GetPosition(x, y, z); + me->GetMotionMaster()->MoveCharge(x, y, z); + target->DespawnOrUnsummon(); + } + else + me->DespawnOrUnsummon(); + } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_ingvar_throw_dummyAI(creature); - } + void MovementInform(uint32 type, uint32 id) override + { + if (type == EFFECT_MOTION_TYPE && id == EVENT_CHARGE) + { + me->CastSpell(me, SPELL_SHADOW_AXE_PERIODIC_DAMAGE, true); + me->DespawnOrUnsummon(10000); + } + } + }; - struct npc_ingvar_throw_dummyAI : public ScriptedAI - { - npc_ingvar_throw_dummyAI(Creature* creature) : ScriptedAI(creature) + CreatureAI* GetAI(Creature* creature) const override { + return new npc_ingvar_throw_dummyAI(creature); } +}; + +// 42912 - Summon Banshee +class spell_ingvar_summon_banshee : public SpellScriptLoader +{ + public: + spell_ingvar_summon_banshee() : SpellScriptLoader("spell_ingvar_summon_banshee") { } - void Reset() OVERRIDE + class spell_ingvar_summon_banshee_SpellScript : public SpellScript { - if (Creature* target = me->FindNearestCreature(NPC_THROW_TARGET, 50.0f)) + PrepareSpellScript(spell_ingvar_summon_banshee_SpellScript); + + void SetDest(SpellDestination& dest) + { + dest.RelocateOffset({ 0.0f, 0.0f, 30.0f, 0.0f }); + } + + void Register() override { - float x, y, z; - target->GetPosition(x, y, z); - me->GetMotionMaster()->MoveCharge(x, y, z, 42.0f, POINT_TARGET); - target->DisappearAndDie(); + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_ingvar_summon_banshee_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); } - else - me->DisappearAndDie(); + }; + + SpellScript* GetSpellScript() const override + { + return new spell_ingvar_summon_banshee_SpellScript(); } +}; + +// 42730, 59735 - Woe Strike +class spell_ingvar_woe_strike : public SpellScriptLoader +{ + public: + spell_ingvar_woe_strike() : SpellScriptLoader("spell_ingvar_woe_strike") { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + class spell_ingvar_woe_strike_AuraScript : public AuraScript { - if (type == EFFECT_MOTION_TYPE && id == POINT_TARGET) + PrepareAuraScript(spell_ingvar_woe_strike_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_WOE_STRIKE_EFFECT)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetHealInfo()->GetHeal(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_WOE_STRIKE_EFFECT, true, NULL, aurEff); + } + + void Register() override { - DoCast(me, SPELL_SHADOW_AXE_DAMAGE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); - me->DespawnOrUnsummon(10000); + DoCheckProc += AuraCheckProcFn(spell_ingvar_woe_strike_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_ingvar_woe_strike_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_ingvar_woe_strike_AuraScript(); } - }; }; void AddSC_boss_ingvar_the_plunderer() @@ -412,4 +460,6 @@ void AddSC_boss_ingvar_the_plunderer() new boss_ingvar_the_plunderer(); new npc_annhylde_the_caller(); new npc_ingvar_throw_dummy(); + new spell_ingvar_summon_banshee(); + new spell_ingvar_woe_strike(); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 1bcbc63a8ab..890c39fa775 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -85,14 +85,14 @@ class npc_frost_tomb : public CreatureScript _instance = creature->GetInstanceScript(); } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { DoCast(summoner, SPELL_FROST_TOMB, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* keleseth = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_PRINCE_KELESETH))) keleseth->AI()->SetData(DATA_ON_THE_ROCKS, false); @@ -102,7 +102,7 @@ class npc_frost_tomb : public CreatureScript InstanceScript* _instance; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<npc_frost_tombAI>(creature); } @@ -117,7 +117,7 @@ class boss_keleseth : public CreatureScript { boss_kelesethAI(Creature* creature) : BossAI(creature, DATA_PRINCE_KELESETH) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_SHADOWBOLT, urand(2, 3)*IN_MILLISECONDS); @@ -127,7 +127,7 @@ class boss_keleseth : public CreatureScript onTheRocks = true; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _EnterCombat(); Talk(SAY_START_COMBAT); @@ -148,19 +148,19 @@ class boss_keleseth : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data == DATA_ON_THE_ROCKS) onTheRocks = value; } - uint32 GetData(uint32 data) const OVERRIDE + uint32 GetData(uint32 data) const override { if (data == DATA_ON_THE_ROCKS) return onTheRocks; @@ -168,7 +168,7 @@ class boss_keleseth : public CreatureScript return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -221,7 +221,7 @@ class boss_keleseth : public CreatureScript bool onTheRocks; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<boss_kelesethAI>(creature); } @@ -236,13 +236,13 @@ class npc_vrykul_skeleton : public CreatureScript { npc_vrykul_skeletonAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_DECREPIFY, urand(4, 6) * IN_MILLISECONDS); } - void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*doneBy*/, uint32& damage) override { if (damage >= me->GetHealth()) { @@ -265,7 +265,7 @@ class npc_vrykul_skeleton : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -312,7 +312,7 @@ class npc_vrykul_skeleton : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<npc_vrykul_skeletonAI>(creature); } @@ -336,13 +336,13 @@ class spell_frost_tomb : public SpellScriptLoader creature->DespawnOrUnsummon(1000); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_frost_tomb_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_frost_tomb_AuraScript(); } @@ -354,7 +354,7 @@ class achievement_on_the_rocks : public AchievementCriteriaScript public: achievement_on_the_rocks() : AchievementCriteriaScript("achievement_on_the_rocks") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_ON_THE_ROCKS); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 76ae2a1d374..9be91bf9c64 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -89,7 +89,7 @@ class boss_skarvald_the_constructor : public CreatureScript bool Dalronn_isDead; bool Enraged; - void Reset() OVERRIDE + void Reset() override { Charge_Timer = 5000; StoneStrike_Timer = 10000; @@ -103,7 +103,7 @@ class boss_skarvald_the_constructor : public CreatureScript _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!ghost) { @@ -112,7 +112,7 @@ class boss_skarvald_the_constructor : public CreatureScript } } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (!Enraged && !ghost && me->HealthBelowPctDamaged(15, damage)) { @@ -126,7 +126,7 @@ class boss_skarvald_the_constructor : public CreatureScript summons.DespawnAll(); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (!ghost) { @@ -155,13 +155,13 @@ class boss_skarvald_the_constructor : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (!ghost && who->GetTypeId() == TYPEID_PLAYER) Talk(YELL_SKARVALD_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -219,7 +219,7 @@ class boss_skarvald_the_constructor : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<boss_skarvald_the_constructorAI>(creature); } @@ -244,7 +244,7 @@ class boss_dalronn_the_controller : public CreatureScript uint32 AggroYell_Timer; bool Skarvald_isDead; - void Reset() OVERRIDE + void Reset() override { ShadowBolt_Timer = 1000; Debilitate_Timer = 5000; @@ -259,7 +259,7 @@ class boss_dalronn_the_controller : public CreatureScript _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!ghost) { @@ -273,7 +273,7 @@ class boss_dalronn_the_controller : public CreatureScript summons.DespawnAll(); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (!ghost) { @@ -302,13 +302,13 @@ class boss_dalronn_the_controller : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (!ghost && who->GetTypeId() == TYPEID_PLAYER) Talk(YELL_DALRONN_KILL); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -398,7 +398,7 @@ class boss_dalronn_the_controller : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<boss_dalronn_the_controllerAI>(creature); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp index 763dcda24e1..69229be1771 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -51,7 +51,7 @@ class instance_utgarde_keep : public InstanceMapScript IngvarGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -74,7 +74,7 @@ class instance_utgarde_keep : public InstanceMapScript } } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { switch (creature->GetEntry()) { @@ -87,7 +87,7 @@ class instance_utgarde_keep : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -136,7 +136,7 @@ class instance_utgarde_keep : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -149,7 +149,7 @@ class instance_utgarde_keep : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -168,7 +168,7 @@ class instance_utgarde_keep : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -191,7 +191,7 @@ class instance_utgarde_keep : public InstanceMapScript } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -205,7 +205,7 @@ class instance_utgarde_keep : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -249,7 +249,7 @@ class instance_utgarde_keep : public InstanceMapScript uint64 IngvarGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_utgarde_keep_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 0ad12a15092..e54c8847d46 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -41,7 +41,7 @@ class npc_dragonflayer_forge_master : public CreatureScript _forgeId = 0; } - void Reset() OVERRIDE + void Reset() override { if (!_forgeId) _forgeId = GetForgeMasterType(); @@ -53,7 +53,7 @@ class npc_dragonflayer_forge_master : public CreatureScript _instance->SetData(DATA_FORGE_1 + _forgeId - 1, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!_forgeId) _forgeId = GetForgeMasterType(); @@ -62,7 +62,7 @@ class npc_dragonflayer_forge_master : public CreatureScript _instance->SetData(DATA_FORGE_1 + _forgeId - 1, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!_forgeId) _forgeId = GetForgeMasterType(); @@ -73,7 +73,7 @@ class npc_dragonflayer_forge_master : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!_forgeId) _forgeId = GetForgeMasterType(); @@ -108,7 +108,7 @@ class npc_dragonflayer_forge_master : public CreatureScript uint8 _forgeId; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardeKeepAI<npc_dragonflayer_forge_masterAI>(creature); } @@ -128,7 +128,7 @@ class spell_ticking_time_bomb : public SpellScriptLoader { PrepareAuraScript(spell_ticking_time_bomb_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TICKING_TIME_BOMB_EXPLODE)) return false; @@ -141,13 +141,13 @@ class spell_ticking_time_bomb : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true); } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_ticking_time_bomb_AuraScript(); } @@ -167,7 +167,7 @@ class spell_fixate : public SpellScriptLoader { PrepareSpellScript(spell_fixate_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FIXATE_TRIGGER)) return false; @@ -179,13 +179,13 @@ class spell_fixate : public SpellScriptLoader GetHitUnit()->CastSpell(GetCaster(), SPELL_FIXATE_TRIGGER, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_fixate_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_fixate_SpellScript(); } @@ -223,7 +223,7 @@ class npc_enslaved_proto_drake : public CreatureScript _setData = false; } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_REND, urand(2000, 3000)); @@ -231,7 +231,7 @@ class npc_enslaved_proto_drake : public CreatureScript _events.ScheduleEvent(EVENT_KNOCKAWAY, urand(3500, 6000)); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST) { @@ -239,7 +239,7 @@ class npc_enslaved_proto_drake : public CreatureScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f) { @@ -249,7 +249,7 @@ class npc_enslaved_proto_drake : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -289,7 +289,7 @@ class npc_enslaved_proto_drake : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_enslaved_proto_drakeAI(creature); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index 7c42f75b72f..664facd31a1 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -102,7 +102,7 @@ public: uint8 AddCount; Phase Sequence[4]; - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -135,12 +135,12 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -157,7 +157,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (currentPhase != PHASE_GORTOK_PALEHOOF) return; @@ -187,19 +187,19 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); //Talk(SAY_DEATH); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void DoAction(int32 actionId) OVERRIDE + void DoAction(int32 actionId) override { if (actionId != ACTION_NEXT_PHASE) return; @@ -226,7 +226,7 @@ public: currentPhase = move; } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NOT_ATTACKABLE_1|UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -234,7 +234,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<boss_palehoofAI>(creature); } @@ -254,7 +254,7 @@ class npc_ravenous_furbolg : public CreatureScript public: npc_ravenous_furbolg() : CreatureScript("npc_ravenous_furbolg") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ravenous_furbolgAI>(creature); } @@ -272,7 +272,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiChainLightingTimer = 5000; uiCrazedTimer = 10000; @@ -288,7 +288,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -315,7 +315,7 @@ public: DoMeleeAttackIfReady(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -332,13 +332,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF))) palehoof->AI()->DoAction(ACTION_NEXT_PHASE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -362,7 +362,7 @@ class npc_frenzied_worgen : public CreatureScript public: npc_frenzied_worgen() : CreatureScript("npc_frenzied_worgen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_frenzied_worgenAI>(creature); } @@ -380,7 +380,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiMortalWoundTimer = 5000; uiEnrage1Timer = 15000; @@ -396,7 +396,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -423,7 +423,7 @@ public: DoMeleeAttackIfReady(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -441,13 +441,13 @@ public: instance->SetBossState(DATA_GORTOK_PALEHOOF, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF))) palehoof->AI()->DoAction(ACTION_NEXT_PHASE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -472,7 +472,7 @@ class npc_ferocious_rhino : public CreatureScript public: npc_ferocious_rhino() : CreatureScript("npc_ferocious_rhino") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ferocious_rhinoAI>(creature); } @@ -490,7 +490,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiStompTimer = 10000; uiGoreTimer = 15000; @@ -506,7 +506,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -534,7 +534,7 @@ public: DoMeleeAttackIfReady(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -551,13 +551,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF))) palehoof->AI()->DoAction(ACTION_NEXT_PHASE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -587,7 +587,7 @@ class npc_massive_jormungar : public CreatureScript public: npc_massive_jormungar() : CreatureScript("npc_massive_jormungar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_massive_jormungarAI>(creature); } @@ -605,7 +605,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiAcidSpitTimer = 3000; uiAcidSplatterTimer = 12000; @@ -621,7 +621,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -650,7 +650,7 @@ public: DoMeleeAttackIfReady(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -667,13 +667,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_GORTOK_PALEHOOF))) palehoof->AI()->DoAction(ACTION_NEXT_PHASE); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -688,7 +688,7 @@ class npc_palehoof_orb : public CreatureScript public: npc_palehoof_orb() : CreatureScript("npc_palehoof_orb") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_palehoof_orbAI>(creature); } @@ -704,7 +704,7 @@ public: uint32 SummonTimer; Phase currentPhase; - void Reset() OVERRIDE + void Reset() override { currentPhase = PHASE_NONE; SummonTimer = 5000; @@ -714,7 +714,7 @@ public: me->SetSpeed(MOVE_FLIGHT, 0.5f); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (currentPhase == PHASE_NONE) return; @@ -760,7 +760,7 @@ public: SummonTimer -= diff; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -802,7 +802,7 @@ class go_palehoof_sphere : public GameObjectScript public: go_palehoof_sphere() : GameObjectScript("go_palehoof_sphere") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index b6438008dde..41dd1a165f2 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -160,7 +160,7 @@ class boss_skadi : public CreatureScript public: boss_skadi() : CreatureScript("boss_skadi") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_skadiAI>(creature); } @@ -190,7 +190,7 @@ public: CombatPhase Phase; - void Reset() OVERRIDE + void Reset() override { triggersGUID.clear(); @@ -206,22 +206,22 @@ public: Summons.DespawnAll(); me->SetSpeed(MOVE_FLIGHT, 3.0f); - if ((Unit::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted()) + if ((ObjectAccessor::GetCreature(*me, m_uiGraufGUID) == NULL) && !me->IsMounted()) me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f); instance->SetBossState(DATA_SKADI_THE_RUTHLESS, NOT_STARTED); instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { me->SetCanFly(false); me->Dismount(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); - if (!Unit::GetCreature(*me, m_uiGraufGUID)) + if (!ObjectAccessor::GetCreature(*me, m_uiGraufGUID)) me->SummonCreature(NPC_GRAUF, Location[0].GetPositionX(), Location[0].GetPositionY(), Location[0].GetPositionZ(), 3.0f); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -240,7 +240,7 @@ public: Summons.DespawnEntry(NPC_GRAUF); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -263,14 +263,14 @@ public: Summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { if (summoned->GetEntry() == NPC_GRAUF) m_uiGraufGUID = 0; Summons.Despawn(summoned); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_HARPOON_DAMAGE) { @@ -291,12 +291,12 @@ public: m_uiCrushTimer = 8000; m_uiPoisonedSpearTimer = 10000; m_uiWhirlwindTimer = 20000; - me->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM)); + AttackStart(SelectTarget(SELECT_TARGET_RANDOM)); } } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { switch (Phase) { @@ -401,14 +401,14 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); Summons.DespawnAll(); instance->SetBossState(DATA_SKADI_THE_RUTHLESS, DONE); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); @@ -463,13 +463,13 @@ class go_harpoon_launcher : public GameObjectScript public: go_harpoon_launcher() : GameObjectScript("go_harpoon_launcher") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) return false; - if (Creature* pSkadi = Unit::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS))) + if (Creature* pSkadi = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_SKADI_THE_RUTHLESS))) player->CastSpell(pSkadi, SPELL_RAPID_FIRE, true); return false; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 2a24b1145c0..621ef20e7e4 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -140,7 +140,7 @@ class boss_svala : public CreatureScript _introCompleted = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); _sacrificed = false; @@ -158,20 +158,20 @@ class boss_svala : public CreatureScript instance->SetData64(DATA_SACRIFICED_PLAYER, 0); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_RITUAL_CHANNELER) summon->CastSpell(summon, SPELL_SUMMONED_VIS, true); summons.Summon(summon); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) return; @@ -193,13 +193,13 @@ class boss_svala : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (events.IsInPhase(SACRIFICING)) SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); @@ -208,7 +208,7 @@ class boss_svala : public CreatureScript Talk(SAY_DEATH); } - void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) OVERRIDE + void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_RITUAL_STRIKE_EFF_1 && !events.IsInPhase(NORMAL) && !events.IsInPhase(SVALADEAD)) { @@ -222,7 +222,7 @@ class boss_svala : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (events.IsInPhase(IDLE)) return; @@ -383,7 +383,7 @@ class boss_svala : public CreatureScript bool _introCompleted; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<boss_svalaAI>(creature); } @@ -406,7 +406,7 @@ class npc_ritual_channeler : public CreatureScript InstanceScript* instance; uint32 paralyzeTimer; - void Reset() OVERRIDE + void Reset() override { paralyzeTimer = 1600; @@ -414,7 +414,7 @@ class npc_ritual_channeler : public CreatureScript DoCast(me, SPELL_SHADOWS_IN_THE_DARK); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (me->HasUnitState(UNIT_STATE_CASTING)) return; @@ -431,7 +431,7 @@ class npc_ritual_channeler : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<npc_ritual_channelerAI>(creature); } @@ -446,9 +446,9 @@ class npc_spectator : public CreatureScript { npc_spectatorAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void MovementInform(uint32 motionType, uint32 pointId) OVERRIDE + void MovementInform(uint32 motionType, uint32 pointId) override { if (motionType == POINT_MOTION_TYPE) { @@ -460,7 +460,7 @@ class npc_spectator : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<npc_spectatorAI>(creature); } @@ -495,13 +495,13 @@ class spell_paralyze_pinnacle : public SpellScriptLoader unitList.remove_if(RitualTargetCheck()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_paralyze_pinnacle_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_paralyze_pinnacle_SpellScript(); } @@ -519,25 +519,25 @@ class npc_scourge_hulk : public CreatureScript uint32 mightyBlow; uint32 volatileInfection; - void Reset() OVERRIDE + void Reset() override { mightyBlow = urand(4000, 9000); volatileInfection = urand(10000, 14000); killedByRitualStrike = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return type == DATA_INCREDIBLE_HULK ? killedByRitualStrike : 0; } - void DamageTaken(Unit* attacker, uint32 &damage) OVERRIDE + void DamageTaken(Unit* attacker, uint32 &damage) override { if (damage >= me->GetHealth() && attacker->GetEntry() == NPC_SVALA_SORROWGRAVE) killedByRitualStrike = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -567,7 +567,7 @@ class npc_scourge_hulk : public CreatureScript bool killedByRitualStrike; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<npc_scourge_hulkAI>(creature); } @@ -578,7 +578,7 @@ class achievement_incredible_hulk : public AchievementCriteriaScript public: achievement_incredible_hulk() : AchievementCriteriaScript("achievement_incredible_hulk") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_INCREDIBLE_HULK); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index ba1dd0fc42b..de4d6c32c97 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -146,7 +146,7 @@ public: uint64 m_uiActivedCreatureGUID; uint64 m_uiOrbGUID; - void Reset() OVERRIDE + void Reset() override { _Reset(); m_bIsWalking = false; @@ -176,19 +176,19 @@ public: m_uiOrbGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void SpellHitTarget(Unit* who, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* who, SpellInfo const* spell) override { if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == 59302) kingsBane = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_KINGS_BANE) return kingsBane ? 1 : 0; @@ -196,7 +196,7 @@ public: return 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (m_bIsWalking) { @@ -354,13 +354,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); @@ -369,14 +369,14 @@ public: void DespawnBoatGhosts(uint64& m_uiCreatureGUID) { if (m_uiCreatureGUID) - if (Creature* temp = Unit::GetCreature(*me, m_uiCreatureGUID)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, m_uiCreatureGUID)) temp->DisappearAndDie(); m_uiCreatureGUID = 0; } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetUtgardePinnacleAI<boss_ymironAI>(creature); } @@ -387,7 +387,7 @@ class achievement_kings_bane : public AchievementCriteriaScript public: achievement_kings_bane() : AchievementCriteriaScript("achievement_kings_bane") { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index 5068abd0131..6eea38c32a3 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -56,7 +56,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript SacrificedPlayerGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -95,7 +95,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -119,7 +119,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -132,7 +132,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { switch (type) { @@ -144,7 +144,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -181,7 +181,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -192,7 +192,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -244,7 +244,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript uint64 SacrificedPlayerGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_utgarde_pinnacle_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp index 398a0308760..c164f8fbf60 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp @@ -76,7 +76,7 @@ class boss_archavon : public CreatureScript { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000); events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000); @@ -87,7 +87,7 @@ class boss_archavon : public CreatureScript } // Below UpdateAI may need review/debug. - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -132,7 +132,7 @@ class boss_archavon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_archavonAI(creature); } @@ -154,7 +154,7 @@ class npc_archavon_warder : public CreatureScript EventMap events; - void Reset() OVERRIDE + void Reset() override { events.Reset(); events.ScheduleEvent(EVENT_ROCK_SHOWER, 2000); @@ -162,12 +162,12 @@ class npc_archavon_warder : public CreatureScript events.ScheduleEvent(EVENT_WHIRL, 7500); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -203,7 +203,7 @@ class npc_archavon_warder : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_archavon_warderAI(creature); } @@ -219,7 +219,7 @@ class spell_archavon_rock_shards : public SpellScriptLoader { PrepareSpellScript(spell_archavon_rock_shards_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_L) || !sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_R) @@ -243,13 +243,13 @@ class spell_archavon_rock_shards : public SpellScriptLoader caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_DAMAGE_R, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_archavon_rock_shards_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_archavon_rock_shards_SpellScript(); } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 7377029080f..ea5c5b9ee48 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -80,7 +80,7 @@ class boss_emalon : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _Reset(); @@ -88,7 +88,7 @@ class boss_emalon : public CreatureScript me->SummonCreature(NPC_TEMPEST_MINION, TempestMinions[i], TEMPSUMMON_CORPSE_DESPAWN, 0); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { BossAI::JustSummoned(summoned); @@ -97,13 +97,13 @@ class boss_emalon : public CreatureScript summoned->AI()->AttackStart(me->GetVictim()); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!summons.empty()) { for (std::list<uint64>::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) { - Creature* minion = Unit::GetCreature(*me, *itr); + Creature* minion = ObjectAccessor::GetCreature(*me, *itr); if (minion && minion->IsAlive() && !minion->GetVictim() && minion->AI()) minion->AI()->AttackStart(who); } @@ -117,7 +117,7 @@ class boss_emalon : public CreatureScript _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -143,7 +143,7 @@ class boss_emalon : public CreatureScript case EVENT_OVERCHARGE: if (!summons.empty()) { - Creature* minion = Unit::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons)); + Creature* minion = ObjectAccessor::GetCreature(*me, Trinity::Containers::SelectRandomContainerElement(summons)); if (minion && minion->IsAlive()) { minion->CastSpell(me, SPELL_OVERCHARGED, true); @@ -166,7 +166,7 @@ class boss_emalon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_emalonAI(creature); } @@ -187,13 +187,13 @@ class npc_tempest_minion : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.Reset(); OverchargedTimer = 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* emalon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EMALON))) { @@ -205,7 +205,7 @@ class npc_tempest_minion : public CreatureScript } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { DoZoneInCombat(); events.ScheduleEvent(EVENT_SHOCK, 20000); @@ -217,7 +217,7 @@ class npc_tempest_minion : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -266,7 +266,7 @@ class npc_tempest_minion : public CreatureScript uint32 OverchargedTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_tempest_minionAI>(creature); } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp index 9371068e231..b6c836eb0cd 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp @@ -61,7 +61,7 @@ class boss_koralon : public CreatureScript { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_BURNING_FURY); @@ -73,7 +73,7 @@ class boss_koralon : public CreatureScript _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -112,7 +112,7 @@ class boss_koralon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_koralonAI(creature); } @@ -132,12 +132,12 @@ class npc_flame_warder : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); @@ -145,7 +145,7 @@ class npc_flame_warder : public CreatureScript events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 10000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -176,7 +176,7 @@ class npc_flame_warder : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_flame_warderAI(creature); } @@ -191,7 +191,7 @@ class spell_koralon_meteor_fists : public SpellScriptLoader { PrepareAuraScript(spell_koralon_meteor_fists_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_METEOR_FISTS_DAMAGE)) return false; @@ -204,13 +204,13 @@ class spell_koralon_meteor_fists : public SpellScriptLoader GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_koralon_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_koralon_meteor_fists_AuraScript(); } @@ -225,7 +225,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader { PrepareSpellScript(spell_koralon_meteor_fists_damage_SpellScript); - bool Load() OVERRIDE + bool Load() override { _chainTargets = 0; return true; @@ -242,7 +242,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader SetHitDamage(GetHitDamage() / (_chainTargets + 1)); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_koralon_meteor_fists_damage_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_TARGET_ENEMY); OnHit += SpellHitFn(spell_koralon_meteor_fists_damage_SpellScript::CalculateSplitDamage); @@ -252,7 +252,7 @@ class spell_koralon_meteor_fists_damage : public SpellScriptLoader uint8 _chainTargets; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_koralon_meteor_fists_damage_SpellScript(); } @@ -267,7 +267,7 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader { PrepareAuraScript(spell_flame_warder_meteor_fists_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FW_METEOR_FISTS_DAMAGE)) return false; @@ -280,13 +280,13 @@ class spell_flame_warder_meteor_fists : public SpellScriptLoader GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_flame_warder_meteor_fists_AuraScript::TriggerFists, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_flame_warder_meteor_fists_AuraScript(); } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index bd2128a1b4c..caba44a7100 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -65,7 +65,7 @@ class boss_toravon : public CreatureScript { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_FROZEN_MALLET); @@ -76,7 +76,7 @@ class boss_toravon : public CreatureScript _EnterCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -112,7 +112,7 @@ class boss_toravon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_toravonAI(creature); } @@ -130,12 +130,12 @@ class npc_frost_warder : public CreatureScript { npc_frost_warderAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { events.Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); @@ -144,7 +144,7 @@ class npc_frost_warder : public CreatureScript events.ScheduleEvent(EVENT_FROST_BLAST, 5000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -167,7 +167,7 @@ class npc_frost_warder : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_frost_warderAI(creature); } @@ -187,18 +187,18 @@ public: { } - void Reset() OVERRIDE + void Reset() override { done = false; killTimer = 60000; // if after this time there is no victim -> destroy! } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!done) { @@ -222,7 +222,7 @@ public: bool done; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_frozen_orbAI(creature); } @@ -250,7 +250,7 @@ class npc_frozen_orb_stalker : public CreatureScript SetCombatMovement(false); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (spawned) return; @@ -275,7 +275,7 @@ class npc_frozen_orb_stalker : public CreatureScript bool spawned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_frozen_orb_stalkerAI>(creature); } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 59b097d98b6..1f5b16f1a46 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -44,7 +44,7 @@ class instance_vault_of_archavon : public InstanceMapScript KoralonDeath = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -59,7 +59,7 @@ class instance_vault_of_archavon : public InstanceMapScript } } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -74,7 +74,7 @@ class instance_vault_of_archavon : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -103,7 +103,7 @@ class instance_vault_of_archavon : public InstanceMapScript return true; } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) OVERRIDE + bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override { switch (criteria_id) { @@ -133,7 +133,7 @@ class instance_vault_of_archavon : public InstanceMapScript time_t KoralonDeath; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_vault_of_archavon_InstanceMapScript(map); } diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index e53d046b396..cca2b347af7 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -48,7 +48,7 @@ class boss_cyanigosa : public CreatureScript public: boss_cyanigosa() : CreatureScript("boss_cyanigosa") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_cyanigosaAI>(creature); } @@ -68,7 +68,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiArcaneVacuumTimer = 10000; uiBlizzardTimer = 15000; @@ -78,17 +78,17 @@ public: instance->SetData(DATA_CYANIGOSA_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_CYANIGOSA_EVENT, IN_PROGRESS); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_REMOVE_NPC) == 1) { @@ -138,14 +138,14 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_CYANIGOSA_EVENT, DONE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -163,7 +163,7 @@ class achievement_defenseless : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index 441603dcdc8..66ab5a04c3c 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -47,7 +47,7 @@ class boss_erekem : public CreatureScript public: boss_erekem() : CreatureScript("boss_erekem") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_erekemAI>(creature); } @@ -67,7 +67,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiBloodlustTimer = 15000; uiChainHealTimer = 0; @@ -91,7 +91,7 @@ public: } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -118,7 +118,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoCast(me, SPELL_EARTH_SHIELD); @@ -136,10 +136,10 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -200,7 +200,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -216,7 +216,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -255,7 +255,7 @@ class npc_erekem_guard : public CreatureScript public: npc_erekem_guard() : CreatureScript("npc_erekem_guard") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_erekem_guardAI>(creature); } @@ -273,14 +273,14 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiStrikeTimer = urand(4000, 8000); uiHowlingScreechTimer = urand(8000, 13000); uiGushingWoundTimer = urand(1000, 3000); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -294,10 +294,10 @@ public: } } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 7bdf8234087..4aede5e5f46 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -76,7 +76,7 @@ class boss_ichoron : public CreatureScript public: boss_ichoron() : CreatureScript("boss_ichoron") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_ichoronAI>(creature); } @@ -99,7 +99,7 @@ public: SummonList m_waterElements; - void Reset() OVERRIDE + void Reset() override { bIsExploded = false; bIsFrenzy = false; @@ -116,7 +116,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -134,7 +134,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -148,7 +148,7 @@ public: } } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { if (!me->IsAlive()) return; @@ -192,7 +192,7 @@ public: me->GetMotionMaster()->MoveChase(me->GetVictim()); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_DEHYDRATION) return dehydration ? 1 : 0; @@ -200,10 +200,10 @@ public: return 0; } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -242,7 +242,7 @@ public: if (!m_waterElements.empty()) { for (std::list<uint64>::const_iterator itr = m_waterElements.begin(); itr != m_waterElements.end(); ++itr) - if (Creature* temp = Unit::GetCreature(*me, *itr)) + if (Creature* temp = ObjectAccessor::GetCreature(*me, *itr)) if (temp->IsAlive()) { bIsWaterElementsAlive = true; @@ -271,7 +271,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -295,7 +295,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned) { @@ -306,7 +306,7 @@ public: } } - void SummonedCreatureDespawn(Creature* summoned) OVERRIDE + void SummonedCreatureDespawn(Creature* summoned) override { if (summoned) { @@ -315,7 +315,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -331,7 +331,7 @@ class npc_ichor_globule : public CreatureScript public: npc_ichor_globule() : CreatureScript("npc_ichor_globule") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ichor_globuleAI>(creature); } @@ -347,22 +347,22 @@ public: uint32 uiRangeCheck_Timer; - void Reset() OVERRIDE + void Reset() override { uiRangeCheck_Timer = 1000; DoCast(me, SPELL_WATER_GLOBULE); } - void AttackStart(Unit* /*who*/) OVERRIDE + void AttackStart(Unit* /*who*/) override { return; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (uiRangeCheck_Timer < uiDiff) { - if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON))) + if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON))) { if (me->IsWithinDist(pIchoron, 2.0f, false)) { @@ -376,10 +376,10 @@ public: else uiRangeCheck_Timer -= uiDiff; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_SPLASH); - if (Creature* pIchoron = Unit::GetCreature(*me, instance->GetData64(DATA_ICHORON))) + if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ICHORON))) if (pIchoron->AI()) pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED); } @@ -394,7 +394,7 @@ class achievement_dehydration : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index ef0e6d900e7..3a08a4510ca 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -35,7 +35,7 @@ class boss_lavanthor : public CreatureScript public: boss_lavanthor() : CreatureScript("boss_lavanthor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lavanthorAI>(creature); } @@ -54,7 +54,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiFireboltTimer = 1000; uiFlameBreathTimer = 5000; @@ -66,7 +66,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_LAVANTHOR_CELL))) if (pDoor->GetGoState() == GO_STATE_READY) @@ -80,7 +80,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -94,10 +94,10 @@ public: } } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -133,7 +133,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_WAVE_COUNT) == 6) { diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index 5829adc7c86..12ace1b1c38 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -31,7 +31,7 @@ class boss_moragg : public CreatureScript public: boss_moragg() : CreatureScript("boss_moragg") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_moraggAI>(creature); } @@ -48,7 +48,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiOpticLinkTimer = 10000; uiCorrosiveSalivaTimer = 5000; @@ -59,7 +59,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_MORAGG_CELL))) if (pDoor->GetGoState() == GO_STATE_READY) @@ -73,7 +73,7 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -87,10 +87,10 @@ public: } } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -111,7 +111,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_WAVE_COUNT) == 6) { diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 477be1ee56d..2bac444a558 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -61,7 +61,7 @@ class boss_xevozz : public CreatureScript public: boss_xevozz() : CreatureScript("boss_xevozz") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_xevozzAI>(creature); } @@ -79,7 +79,7 @@ public: uint32 uiArcaneBarrageVolley_Timer; uint32 uiArcaneBuffet_Timer; - void Reset() OVERRIDE + void Reset() override { if (instance->GetData(DATA_WAVE_COUNT) == 6) instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); @@ -107,7 +107,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->SetSpeed(MOVE_RUN, 0.5f); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) @@ -117,7 +117,7 @@ public: } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -131,7 +131,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_XEVOZZ_CELL))) @@ -146,10 +146,10 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -187,7 +187,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -204,7 +204,7 @@ public: instance->SetData(DATA_WAVE_COUNT, 13); } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -220,7 +220,7 @@ class npc_ethereal_sphere : public CreatureScript public: npc_ethereal_sphere() : CreatureScript("npc_ethereal_sphere") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ethereal_sphereAI>(creature); } @@ -237,13 +237,13 @@ public: uint32 uiSummonPlayers_Timer; uint32 uiRangeCheck_Timer; - void Reset() OVERRIDE + void Reset() override { uiSummonPlayers_Timer = urand(33000, 35000); uiRangeCheck_Timer = 1000; } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { //Return since we have no target if (!UpdateVictim()) @@ -254,7 +254,7 @@ public: if (uiRangeCheck_Timer < uiDiff) { - if (Creature* pXevozz = Unit::GetCreature(*me, instance->GetData64(DATA_XEVOZZ))) + if (Creature* pXevozz = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_XEVOZZ))) { float fDistance = me->GetDistance2d(pXevozz); if (fDistance <= 3) diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 6835228ca46..7ae1c7840db 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -56,7 +56,7 @@ class boss_zuramat : public CreatureScript public: boss_zuramat() : CreatureScript("boss_zuramat") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_zuramatAI>(creature); } @@ -75,7 +75,7 @@ public: uint32 SpellShroudOfDarknessTimer; bool voidDance; - void Reset() OVERRIDE + void Reset() override { if (instance->GetData(DATA_WAVE_COUNT) == 6) instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); @@ -88,7 +88,7 @@ public: voidDance = true; } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -102,7 +102,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetData64(DATA_ZURAMAT_CELL))) @@ -117,10 +117,10 @@ public: instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -148,13 +148,13 @@ public: DoMeleeAttackIfReady(); } - void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* /*who*/) override { if (summoned->GetEntry() == NPC_VOID_SENTRY) voidDance = false; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_VOID_DANCE) return voidDance ? 1 : 0; @@ -162,7 +162,7 @@ public: return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -178,7 +178,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -186,10 +186,10 @@ public: Talk(SAY_SLAY); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->AI()->AttackStart(me->GetVictim()); - summon->AI()->DoCastAOE(SPELL_ZURAMAT_ADD_2); + summon->CastSpell((Unit*)NULL, SPELL_ZURAMAT_ADD_2); summon->SetPhaseMask(17, true); } }; @@ -203,7 +203,7 @@ class achievement_void_dance : public AchievementCriteriaScript { } - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*player*/, Unit* target) override { if (!target) return false; diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 9d02929efdb..c799a2f1813 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -105,7 +105,7 @@ class instance_violet_hold : public InstanceMapScript public: instance_violet_hold() : InstanceMapScript("instance_violet_hold", 608) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_violet_hold_InstanceMapScript(map); } @@ -168,7 +168,7 @@ public: std::string str_data; - void Initialize() OVERRIDE + void Initialize() override { uiMoragg = 0; uiErekem = 0; @@ -218,7 +218,7 @@ public: memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -227,7 +227,7 @@ public: return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -272,7 +272,7 @@ public: } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -310,7 +310,7 @@ public: } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -406,7 +406,7 @@ public: } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { switch (type) { @@ -419,7 +419,7 @@ public: } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -440,7 +440,7 @@ public: return 0; } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -616,7 +616,7 @@ public: } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -633,7 +633,7 @@ public: return str_data; } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -682,7 +682,7 @@ public: return true; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (!instance->HavePlayers()) return; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 5f79e609e01..b623d5e6ddc 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -260,7 +260,7 @@ class npc_sinclari_vh : public CreatureScript public: npc_sinclari_vh() : CreatureScript("npc_sinclari_vh") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -282,7 +282,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (InstanceScript* instance = creature->GetInstanceScript()) { @@ -305,7 +305,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_sinclariAI>(creature); } @@ -322,7 +322,7 @@ public: uint8 uiPhase; uint32 uiTimer; - void Reset() OVERRIDE + void Reset() override { uiPhase = 0; uiTimer = 0; @@ -346,7 +346,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { ScriptedAI::UpdateAI(uiDiff); @@ -425,7 +425,7 @@ class npc_azure_saboteur : public CreatureScript public: npc_azure_saboteur() : CreatureScript("npc_azure_saboteur") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_saboteurAI>(creature); } @@ -444,7 +444,7 @@ public: bool bHasGotMovingPoints; uint32 uiBoss; - void Reset() OVERRIDE + void Reset() override { if (!uiBoss) uiBoss = instance->GetData(DATA_WAVE_COUNT) == 6 ? instance->GetData(DATA_FIRST_BOSS) : instance->GetData(DATA_SECOND_BOSS); @@ -453,7 +453,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (uiBoss) { @@ -484,7 +484,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS) me->CastStop(); @@ -535,7 +535,7 @@ public: { me->CastSpell(me, SABOTEUR_SHIELD_DISRUPTION, false); me->DisappearAndDie(); - Creature* pSaboPort = Unit::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL)); + Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_SABOTEUR_PORTAL)); if (pSaboPort) pSaboPort->DisappearAndDie(); instance->SetData(DATA_START_BOSS_ENCOUNTER, 1); @@ -549,7 +549,7 @@ class npc_teleportation_portal_vh : public CreatureScript public: npc_teleportation_portal_vh() : CreatureScript("npc_teleportation_portal_vh") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_teleportation_portalAI>(creature); } @@ -571,18 +571,18 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { uiSpawnTimer = 10000; bPortalGuardianOrKeeperOrEliteSpawn = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_REMOVE_NPC) == 1) { @@ -654,18 +654,18 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_WAVE_COUNT, instance->GetData(DATA_WAVE_COUNT)+1); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { listOfMobs.Summon(summoned); instance->SetData64(DATA_ADD_TRASH_MOB, summoned->GetGUID()); } - void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) override { listOfMobs.Despawn(summoned); instance->SetData64(DATA_DEL_TRASH_MOB, summoned->GetGUID()); @@ -690,7 +690,7 @@ struct violet_hold_trashAI : public npc_escortAI uint32 portalLocationID; uint32 secondPortalRouteID; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (portalLocationID) { @@ -721,7 +721,7 @@ struct violet_hold_trashAI : public npc_escortAI } } - void UpdateAI(uint32) OVERRIDE + void UpdateAI(uint32) override { if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS) me->CastStop(); @@ -778,7 +778,7 @@ struct violet_hold_trashAI : public npc_escortAI } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_NPC_PRESENCE_AT_DOOR_REMOVE, 1); } @@ -797,7 +797,7 @@ class npc_azure_invader : public CreatureScript public: npc_azure_invader() : CreatureScript("npc_azure_invader") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_invaderAI>(creature); } @@ -814,7 +814,7 @@ public: uint32 uiBrutalStrikeTimer; uint32 uiSunderArmorTimer; - void Reset() OVERRIDE + void Reset() override { uiCleaveTimer = 5000; uiImpaleTimer = 4000; @@ -822,7 +822,7 @@ public: uiSunderArmorTimer = 4000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -875,7 +875,7 @@ class npc_azure_binder : public CreatureScript public: npc_azure_binder() : CreatureScript("npc_azure_binder") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_binderAI>(creature); } @@ -892,7 +892,7 @@ public: uint32 uiFrostNovaTimer; uint32 uiFrostboltTimer; - void Reset() OVERRIDE + void Reset() override { uiArcaneExplosionTimer = 5000; uiArcainBarrageTimer = 4000; @@ -900,7 +900,7 @@ public: uiFrostboltTimer = 4000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -953,7 +953,7 @@ class npc_azure_mage_slayer : public CreatureScript public: npc_azure_mage_slayer() : CreatureScript("npc_azure_mage_slayer") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_mage_slayerAI>(creature); } @@ -968,13 +968,13 @@ public: uint32 uiArcaneEmpowermentTimer; uint32 uiSpellLockTimer; - void Reset() OVERRIDE + void Reset() override { uiArcaneEmpowermentTimer = 5000; uiSpellLockTimer = 5000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1013,7 +1013,7 @@ class npc_azure_raider : public CreatureScript public: npc_azure_raider() : CreatureScript("npc_azure_raider") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_raiderAI>(creature); } @@ -1028,13 +1028,13 @@ public: uint32 uiConcussionBlowTimer; uint32 uiMagicReflectionTimer; - void Reset() OVERRIDE + void Reset() override { uiConcussionBlowTimer = 5000; uiMagicReflectionTimer = 8000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1072,14 +1072,14 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _backstabTimer = 1300; _tacticalBlinkTimer = 8000; _tacticalBlinkCast =false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1119,7 +1119,7 @@ public: bool _tacticalBlinkCast; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_stalkerAI>(creature); } @@ -1142,7 +1142,7 @@ public: uint32 uiChainsOfIceTimer; uint32 uiConeOfColdTimer; - void Reset() OVERRIDE + void Reset() override { uiArcaneBlastTimer = 5000; uiSlowTimer = 4000; @@ -1150,7 +1150,7 @@ public: uiConeOfColdTimer = 4000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1198,7 +1198,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_spellbreakerAI>(creature); } @@ -1209,7 +1209,7 @@ class npc_azure_captain : public CreatureScript public: npc_azure_captain() : CreatureScript("npc_azure_captain") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_captainAI>(creature); } @@ -1224,13 +1224,13 @@ public: uint32 uiMortalStrikeTimer; uint32 uiWhirlwindTimer; - void Reset() OVERRIDE + void Reset() override { uiMortalStrikeTimer = 5000; uiWhirlwindTimer = 8000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1261,7 +1261,7 @@ class npc_azure_sorceror : public CreatureScript public: npc_azure_sorceror() : CreatureScript("npc_azure_sorceror") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_azure_sorcerorAI>(creature); } @@ -1277,14 +1277,14 @@ public: uint32 uiArcaneStreamTimerStartingValueHolder; uint32 uiManaDetonationTimer; - void Reset() OVERRIDE + void Reset() override { uiArcaneStreamTimer = 4000; uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer; uiManaDetonationTimer = 5000; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); npc_escortAI::UpdateAI(diff); @@ -1324,7 +1324,7 @@ public: uint32 DespawnTimer; - void Reset() OVERRIDE + void Reset() override { DespawnTimer = 3000; @@ -1332,9 +1332,9 @@ public: DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true); } - void EnterCombat(Unit * /*who*/) OVERRIDE { } + void EnterCombat(Unit * /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (DespawnTimer <= diff) me->Kill(me); @@ -1343,7 +1343,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_violet_hold_arcane_sphereAI(creature); } @@ -1354,7 +1354,7 @@ class go_activation_crystal : public GameObjectScript public: go_activation_crystal() : GameObjectScript("go_activation_crystal") { } - bool OnGossipHello(Player * /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player * /*player*/, GameObject* go) override { go->EventInform(EVENT_ACTIVATE_CRYSTAL); return false; diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index 1149c58e561..8cdfce90bc9 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -33,7 +33,7 @@ class npc_four_car_garage : public CreatureScript { npc_four_car_garageAI(Creature* creature) : NullCreatureAI(creature) { } - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { if (apply) { @@ -64,7 +64,7 @@ class npc_four_car_garage : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_four_car_garageAI(creature); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index f840c0562b3..38d73e0673d 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -44,6 +44,7 @@ EndContentData */ #include "Player.h" #include "SpellInfo.h" #include "WorldSession.h" +#include "SpellScript.h" /*###### ## npc_sinkhole_kill_credit @@ -73,14 +74,14 @@ public: uint8 phase; uint64 casterGuid; - void Reset() OVERRIDE + void Reset() override { phaseTimer = 500; phase = 0; casterGuid = 0; } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (phase || spell->Id != SPELL_SET_CART) return; @@ -93,9 +94,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!phase) return; @@ -161,7 +162,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_sinkhole_kill_creditAI(creature); } @@ -186,7 +187,7 @@ public: { npc_khunok_the_behemothAI(Creature* creature) : ScriptedAI(creature) { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); @@ -208,7 +209,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_khunok_the_behemothAI(creature); } @@ -230,7 +231,7 @@ class npc_keristrasza : public CreatureScript public: npc_keristrasza() : CreatureScript("npc_keristrasza") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -243,7 +244,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -276,7 +277,7 @@ class npc_corastrasza : public CreatureScript public: npc_corastrasza() : CreatureScript("npc_corastrasza") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -288,7 +289,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -322,7 +323,7 @@ class npc_iruk : public CreatureScript public: npc_iruk() : CreatureScript("npc_iruk") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_SPIRITS_WATCH_OVER_US) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -331,7 +332,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -374,12 +375,12 @@ public: { npc_nerubar_victimAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Player* player = killer->ToPlayer(); if (!player) @@ -399,7 +400,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nerubar_victimAI(creature); } @@ -435,7 +436,7 @@ public: bool setCrateNumber; - void Reset() OVERRIDE + void Reset() override { if (!setCrateNumber) setCrateNumber = true; @@ -457,12 +458,12 @@ public: } } - void DamageTaken(Unit* /*pDone_by*/, uint32& /*uiDamage*/) OVERRIDE + void DamageTaken(Unit* /*pDone_by*/, uint32& /*uiDamage*/) override { DoCast(me, SPELL_DROP_CRATE, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (setCrateNumber) { @@ -478,7 +479,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_jennyAI(creature); } @@ -497,7 +498,7 @@ public: { npc_fezzix_geartwistAI(Creature* creature) : ScriptedAI(creature) { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); @@ -518,7 +519,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fezzix_geartwistAI(creature); } @@ -572,7 +573,7 @@ public: uint8 phase; uint32 phaseTimer; - void Reset() OVERRIDE + void Reset() override { me->SetVisible(false); phaseTimer = 2500; @@ -580,11 +581,11 @@ public: go_caribouGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (GameObject* go_caribou = me->GetMap()->GetGameObject(go_caribouGUID)) go_caribou->SetLootState(GO_JUST_DEACTIVATED); @@ -599,7 +600,7 @@ public: go_caribou->SetGoState(GO_STATE_READY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (phaseTimer <= diff) { @@ -663,7 +664,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nesingwary_trapperAI(creature); } @@ -700,7 +701,7 @@ public: uint32 IntroTimer; uint32 IntroPhase; - void Reset() OVERRIDE + void Reset() override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -709,7 +710,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -724,7 +725,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IntroPhase) { @@ -780,12 +781,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lurgglbrAI(creature); } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS) { @@ -848,18 +849,18 @@ public: uint64 HarpoonerGUID; bool WithRedDragonBlood; - void Reset() OVERRIDE + void Reset() override { WithRedDragonBlood = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->IsValidAttackTarget(who)) AttackStart(who); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_DRAKE_HARPOON && caster->GetTypeId() == TYPEID_PLAYER) { @@ -869,7 +870,7 @@ public: WithRedDragonBlood = true; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -893,7 +894,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (WithRedDragonBlood && HarpoonerGUID && !me->HasAura(SPELL_RED_DRAGONBLOOD)) { @@ -923,7 +924,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nexus_drake_hatchlingAI(creature); } @@ -997,7 +998,7 @@ public: uint32 phase; uint32 phaseTimer; - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); me->RemoveStandFlags(UNIT_STAND_STATE_SIT); @@ -1016,7 +1017,7 @@ public: phaseTimer = 0; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -1049,7 +1050,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -1070,8 +1071,8 @@ public: if (phaseTimer <= diff) { - Creature* talbot = me->GetCreature(*me, talbotGUID); - Creature* arthas = me->GetCreature(*me, arthasGUID); + Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID); + Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID); switch (phase) { case 1: @@ -1084,7 +1085,7 @@ public: case 2: if (talbot) { - talbot->UpdateEntry(NPC_PRINCE_VALANAR, ALLIANCE); + talbot->UpdateEntry(NPC_PRINCE_VALANAR); talbot->setFaction(14); talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); talbot->SetReactState(REACT_PASSIVE); @@ -1208,9 +1209,9 @@ public: break; case 17: - if (Creature* leryssa = me->GetCreature(*me, leryssaGUID)) + if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID)) leryssa->RemoveFromWorld(); - if (Creature* arlos= me->GetCreature(*me, arlosGUID)) + if (Creature* arlos= ObjectAccessor::GetCreature(*me, arlosGUID)) arlos->RemoveFromWorld(); if (talbot) talbot->RemoveFromWorld(); @@ -1227,23 +1228,23 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* talbot = me->GetCreature(*me, talbotGUID)) + if (Creature* talbot = ObjectAccessor::GetCreature(*me, talbotGUID)) talbot->RemoveFromWorld(); - if (Creature* leryssa = me->GetCreature(*me, leryssaGUID)) + if (Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID)) leryssa->RemoveFromWorld(); - if (Creature* arlos = me->GetCreature(*me, arlosGUID)) + if (Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID)) arlos->RemoveFromWorld(); - if (Creature* arthas = me->GetCreature(*me, arthasGUID)) + if (Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID)) arthas->RemoveFromWorld(); } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -1256,7 +1257,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -1269,7 +1270,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_thassarianAI(creature); } @@ -1288,12 +1289,12 @@ public: { npc_image_lich_kingAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -1304,7 +1305,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_image_lich_kingAI(creature); } @@ -1323,7 +1324,7 @@ public: { npc_general_arlosAI(Creature* creature) : ScriptedAI(creature) { } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -1336,7 +1337,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_general_arlosAI(creature); } @@ -1370,7 +1371,7 @@ public: uint32 deflectionTimer; uint32 soulBlastTimer; - void Reset() OVERRIDE + void Reset() override { leryssaGUID = 0; arlosGUID = 0; @@ -1379,7 +1380,7 @@ public: deflectionTimer = urand(20000, 25000); soulBlastTimer = urand(12000, 18000); } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -1389,7 +1390,7 @@ public: CAST_AI(npc_thassarian::npc_thassarianAI, summoner->ToCreature()->AI())->talbotInPosition = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bCheck) { @@ -1427,13 +1428,13 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (!leryssaGUID || !arlosGUID) return; - Creature* leryssa = Unit::GetCreature(*me, leryssaGUID); - Creature* arlos = Unit::GetCreature(*me, arlosGUID); + Creature* leryssa = ObjectAccessor::GetCreature(*me, leryssaGUID); + Creature* arlos = ObjectAccessor::GetCreature(*me, arlosGUID); if (!leryssa || !arlos) return; @@ -1451,7 +1452,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_counselor_talbotAI(creature); } @@ -1482,7 +1483,7 @@ public: uint32 phase; uint32 phaseTimer; - void MovementInform(uint32 type, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 type, uint32 /*uiId*/) override { if (type != POINT_MOTION_TYPE) return; @@ -1511,7 +1512,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { ScriptedAI::UpdateAI(diff); @@ -1580,7 +1581,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_leryssaAI(creature); } @@ -1611,37 +1612,36 @@ public: bool bEnslaved; - void Reset() OVERRIDE + void Reset() override { me->SetReactState(REACT_AGGRESSIVE); bEnslaved = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->IsValidAttackTarget(who)) AttackStart(who); } - void SpellHit(Unit* pCaster, const SpellInfo* pSpell) OVERRIDE + void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override { if (pSpell->Id == SPELL_ARCANE_CHAINS && pCaster->GetTypeId() == TYPEID_PLAYER && !HealthAbovePct(50) && !bEnslaved) { EnterEvadeMode(); //We make sure that the npc is not attacking the player! me->SetReactState(REACT_PASSIVE); - StartFollow(pCaster->ToPlayer(), 0, NULL); - me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER, TEAM_NEUTRAL); + StartFollow(pCaster->ToPlayer()); + me->UpdateEntry(NPC_CAPTURED_BERLY_SORCERER); DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF, true); if (Player* player = pCaster->ToPlayer()) - player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER, 0); + player->KilledMonsterCredit(NPC_CAPTURED_BERLY_SORCERER); bEnslaved = true; } } - void MoveInLineOfSight(Unit* who) OVERRIDE - + void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); @@ -1652,7 +1652,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -1661,7 +1661,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_beryl_sorcererAI(creature); } @@ -1696,7 +1696,7 @@ public: uint32 rebuff; - void Reset() OVERRIDE + void Reset() override { if (me->GetReactState() != REACT_PASSIVE) me->SetReactState(REACT_PASSIVE); @@ -1704,7 +1704,7 @@ public: rebuff = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { UpdateVictim(); @@ -1722,11 +1722,11 @@ public: DoMeleeAttackIfReady(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* unit, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* unit, const SpellInfo* spell) override { if (spell->Id == SPELL_NEURAL_NEEDLE && unit->GetTypeId() == TYPEID_PLAYER) { @@ -1771,7 +1771,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_imprisoned_beryl_sorcererAI(creature); } @@ -1797,7 +1797,7 @@ class npc_mootoo_the_younger : public CreatureScript public: npc_mootoo_the_younger() : CreatureScript("npc_mootoo_the_younger") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPING_THE_MIST) { @@ -1821,18 +1821,18 @@ public: { npc_mootoo_the_youngerAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { SetDespawnAtFar(false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player=GetPlayerForEscort()) player->FailQuest(QUEST_ESCAPING_THE_MIST); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -1863,7 +1863,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mootoo_the_youngerAI(creature); } @@ -1887,7 +1887,7 @@ class npc_bonker_togglevolt : public CreatureScript public: npc_bonker_togglevolt() : CreatureScript("npc_bonker_togglevolt") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE) { @@ -1903,19 +1903,19 @@ public: npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) { } uint32 Bonker_agro; - void Reset() OVERRIDE + void Reset() override { Bonker_agro=0; SetDespawnAtFar(false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_GET_ME_OUTA_HERE); } - void UpdateEscortAI(const uint32 /*diff*/) OVERRIDE + void UpdateEscortAI(const uint32 /*diff*/) override { if (GetAttack() && UpdateVictim()) { @@ -1929,7 +1929,7 @@ public: else Bonker_agro=0; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -1944,7 +1944,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bonker_togglevoltAI(creature); } @@ -2003,7 +2003,7 @@ public: uint32 uiTimer; bool bStarted; - void Reset() OVERRIDE + void Reset() override { uiTimer = 1500; bStarted = false; @@ -2020,14 +2020,13 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bStarted) { if (uiTimer <= diff) { - Position pos; - me->GetRandomNearPosition(pos, 10.0f); + Position pos = me->GetRandomNearPosition(10.0f); me->GetMotionMaster()->MovePoint(0, pos); bStarted = false; } @@ -2035,13 +2034,13 @@ public: } } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { if (param == 1) bStarted = true; } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -2061,7 +2060,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_trapped_mammoth_calfAI(creature); } @@ -2089,7 +2088,7 @@ public: { npc_magmoth_crusherAI(Creature* creature) : ScriptedAI(creature) { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Player* player = killer->ToPlayer(); if (!player) @@ -2106,7 +2105,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_magmoth_crusherAI(creature); } @@ -2137,12 +2136,12 @@ public: uint32 uiExplosionTimer; - void Reset() OVERRIDE + void Reset() override { uiExplosionTimer = urand(5000, 10000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiExplosionTimer < diff) { @@ -2165,7 +2164,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_seaforium_depth_chargeAI(creature); } @@ -2192,12 +2191,12 @@ public: uint32 uiTimer; - void Reset() OVERRIDE + void Reset() override { uiTimer = urand(13000, 18000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (uiTimer <= diff) { @@ -2216,7 +2215,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_valiance_keep_cannoneerAI(creature); } @@ -2250,16 +2249,16 @@ public: uint32 m_uiTimer; //Timer until recast - void Reset() OVERRIDE + void Reset() override { m_uiTimer = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (m_uiTimer <= uiDiff) { @@ -2321,7 +2320,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_warmage_coldarraAI(creature); } @@ -2377,7 +2376,7 @@ public: uint64 uiPlayerGUID; - void Reset() OVERRIDE + void Reset() override { if (uiEmoteState) me->SetUInt32Value(UNIT_NPC_EMOTESTATE, uiEmoteState); @@ -2395,7 +2394,7 @@ public: me->RestoreFaction(); } - void DoAction(int32 /*iParam*/) OVERRIDE + void DoAction(int32 /*iParam*/) override { me->StopMoving(); me->SetUInt32Value(UNIT_NPC_FLAGS, 0); @@ -2405,7 +2404,7 @@ public: uiEventPhase = 1; } - void SetGUID(uint64 uiGuid, int32 /*iId*/) OVERRIDE + void SetGUID(uint64 uiGuid, int32 /*iId*/) override { uiPlayerGUID = uiGuid; } @@ -2414,10 +2413,10 @@ public: { me->setFaction(14); if (Player* player = ObjectAccessor::GetPlayer(*me, uiPlayerGUID)) - me->AI()->AttackStart(player); + AttackStart(player); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (uiEventTimer && uiEventTimer <= uiDiff) { @@ -2478,12 +2477,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_hidden_cultistAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { uint32 uiGossipText = 0; const char* charGossipItem; @@ -2518,7 +2517,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); @@ -2537,6 +2536,39 @@ public: }; +enum WindsoulTotemAura +{ + SPELL_WINDSOUL_CREDT = 46378 +}; + +class spell_windsoul_totem_aura : public SpellScriptLoader +{ +public: + spell_windsoul_totem_aura() : SpellScriptLoader("spell_windsoul_totem_aura") { } + + class spell_windsoul_totem_aura_AuraScript : public AuraScript + { + PrepareAuraScript(spell_windsoul_totem_aura_AuraScript); + + void OnRemove(AuraEffect const*, AuraEffectHandleModes) + { + if (GetTarget()->isDead()) + if (Unit* caster = GetCaster()) + caster->CastSpell(NULL, SPELL_WINDSOUL_CREDT); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_windsoul_totem_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_windsoul_totem_aura_AuraScript(); + } +}; + void AddSC_borean_tundra() { new npc_sinkhole_kill_credit(); @@ -2565,4 +2597,5 @@ void AddSC_borean_tundra() new npc_valiance_keep_cannoneer(); new npc_warmage_coldarra(); new npc_hidden_cultist(); + new spell_windsoul_totem_aura(); } diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index 9023f02111f..7d680ecd071 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -58,12 +58,12 @@ public: uint64 targetGUID; - void Reset() OVERRIDE + void Reset() override { targetGUID = 0; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (me->IsNonMeleeSpellCast(false)) return; @@ -76,20 +76,18 @@ public: GetCreatureListWithEntryInGrid(orbList, me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f); if (!orbList.empty()) { - for (std::list<Creature*>::const_iterator itr = orbList.begin(); itr != orbList.end(); ++itr) + for (Creature* orb : orbList) { - if (Creature* pOrb = *itr) + if (orb->GetPositionY() < 1000) { - if (pOrb->GetPositionY() < 1000) - { - targetGUID = pOrb->GetGUID(); - break; - } + targetGUID = orb->GetGUID(); + break; } } } } - }else + } + else { if (!targetGUID) if (Creature* pOrb = GetClosestCreatureWithEntry(me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f)) @@ -97,13 +95,13 @@ public: } - if (Creature* pOrb = me->GetCreature(*me, targetGUID)) + if (Creature* pOrb = ObjectAccessor::GetCreature(*me, targetGUID)) DoCast(pOrb, SPELL_TRANSITUS_SHIELD_BEAM); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_warmage_violetstandAI(creature); } diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index a9c89dbf3da..1e8da70bbbf 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -66,14 +66,13 @@ public: creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - - void MoveInLineOfSight(Unit* who) OVERRIDE + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* who) override { if (!who || !who->IsInWorld() || who->GetZoneId() != 4395) return; @@ -120,10 +119,10 @@ public: return; } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mageguard_dalaranAI(creature); } @@ -145,7 +144,7 @@ class npc_hira_snowdawn : public CreatureScript public: npc_hira_snowdawn() : CreatureScript("npc_hira_snowdawn") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (!creature->IsVendor() || !creature->IsTrainer()) return false; @@ -160,7 +159,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRAIN) diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 7487c3c8828..59c9b21a220 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -155,7 +155,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript talkWing = 0; } - void Reset() OVERRIDE + void Reset() override { talkWing = 0; memset(audienceList, 0, sizeof(audienceList)); @@ -164,7 +164,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript _events.ScheduleEvent(EVENT_START_RANDOM, 20000); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE) { @@ -246,13 +246,10 @@ class npc_commander_eligor_dawnbringer : public CreatureScript { std::list<Creature*> creatureList; GetCreatureListWithEntryInGrid(creatureList, me, AudienceMobs[ii], 15.0f); - for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + for (Creature* creature : creatureList) { - if (Creature* creatureList = *itr) - { - audienceList[creaturecount] = creatureList->GetGUID(); - ++creaturecount; - } + audienceList[creaturecount] = creature->GetGUID(); + ++creaturecount; } } @@ -289,7 +286,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -382,7 +379,7 @@ class npc_alexstrasza_wr_gate : public CreatureScript public: npc_alexstrasza_wr_gate() : CreatureScript("npc_alexstrasza_wr_gate") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -394,7 +391,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -460,13 +457,13 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12096_q12092_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12096_q12092_dummy_SpellScript(); } @@ -492,13 +489,13 @@ public: lothalor->DespawnOrUnsummon(4000); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12096_q12092_bark_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12096_q12092_bark_SpellScript(); } @@ -535,7 +532,7 @@ class npc_wyrmrest_defender : public CreatureScript public: npc_wyrmrest_defender() : CreatureScript("npc_wyrmrest_defender") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_DEFENDING_WYRMREST_TEMPLE) == QUEST_STATUS_INCOMPLETE) { @@ -548,7 +545,7 @@ class npc_wyrmrest_defender : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -571,7 +568,7 @@ class npc_wyrmrest_defender : public CreatureScript uint32 RenewRecoveryChecker; - void Reset() OVERRIDE + void Reset() override { hpWarningReady = true; renewRecoveryCanCheck = false; @@ -579,7 +576,7 @@ class npc_wyrmrest_defender : public CreatureScript RenewRecoveryChecker = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Check system for Health Warning should happen first time whenever get under 30%, // after it should be able to happen only after recovery of last renew is fully done (20 sec), @@ -601,7 +598,7 @@ class npc_wyrmrest_defender : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -625,7 +622,7 @@ class npc_wyrmrest_defender : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wyrmrest_defenderAI(creature); } @@ -654,16 +651,17 @@ class npc_torturer_lecraft : public CreatureScript { npc_torturer_lecraftAI(Creature* creature) : ScriptedAI(creature) { + _textCounter = 1; _playerGUID = 0; } - void Reset() OVERRIDE + void Reset() override { _textCounter = 1; _playerGUID = 0; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _events.ScheduleEvent(EVENT_HEMORRHAGE, urand(5000, 8000)); _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000)); @@ -672,7 +670,7 @@ class npc_torturer_lecraft : public CreatureScript Talk (SAY_AGGRO, player); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON) return; @@ -697,7 +695,7 @@ class npc_torturer_lecraft : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 112d42441b9..d0fd948ce6a 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -64,7 +64,7 @@ public: { npc_emilyAI(Creature* creature) : npc_escortAI(creature) { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 50.0f)) summoned->AI()->AttackStart(Mrfloppy); @@ -72,7 +72,7 @@ public: summoned->AI()->AttackStart(me->GetVictim()); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -85,18 +85,18 @@ public: _mrfloppyGUID = Mrfloppy->GetGUID(); break; case 10: - if (Unit::GetCreature(*me, _mrfloppyGUID)) + if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { Talk(SAY_WORGHAGGRO1); me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); } break; case 11: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); break; case 17: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); Talk(SAY_WORGRAGGRO3); if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000)) @@ -106,31 +106,31 @@ public: } break; case 18: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { - if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) + if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); DoCast(Mrfloppy, SPELL_MRFLOPPY); } break; case 19: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0)) { - if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) + if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) Mrfloppy->EnterVehicle(RWORG); } } break; case 20: - if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) + if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->HandleEmoteCommand(34); break; case 21: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { - if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) + if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) { RWORG->Kill(Mrfloppy); Mrfloppy->ExitVehicle(); @@ -141,11 +141,11 @@ public: } break; case 22: - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->isDead()) { - if (Creature* RWORG = Unit::GetCreature(*me, _RavenousworgGUID)) + if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->DisappearAndDie(); me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); Mrfloppy->setDeathState(ALIVE); @@ -167,18 +167,18 @@ public: break; case 27: me->DisappearAndDie(); - if (Creature* Mrfloppy = Unit::GetCreature(*me, _mrfloppyGUID)) + if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->DisappearAndDie(); break; } } - void EnterCombat(Unit* /*Who*/) OVERRIDE + void EnterCombat(Unit* /*Who*/) override { Talk(SAY_RANDOMAGGRO); } - void Reset() OVERRIDE + void Reset() override { _mrfloppyGUID = 0; _RavenousworgGUID = 0; @@ -189,7 +189,7 @@ public: uint64 _mrfloppyGUID; }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE) { @@ -203,7 +203,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_emilyAI(creature); } @@ -219,9 +219,9 @@ public: { npc_mrfloppyAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* Who) OVERRIDE + void EnterCombat(Unit* Who) override { if (Creature* Emily = GetClosestCreatureWithEntry(me, NPC_EMILY, 50.0f)) { @@ -239,19 +239,19 @@ public: } } - void EnterEvadeMode() OVERRIDE { } + void EnterEvadeMode() override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mrfloppyAI(creature); } @@ -281,19 +281,19 @@ public: { npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _counter = 0; _gender = 0; } - void SetData(uint32 Type, uint32 Data) OVERRIDE + void SetData(uint32 Type, uint32 Data) override { if (Type == 1) _gender = Data; } - void SpellHit(Unit* Caster, const SpellInfo* Spell) OVERRIDE + void SpellHit(Unit* Caster, const SpellInfo* Spell) override { if (Spell->Id == SPELL_OUTHOUSE_GROANS) { @@ -320,7 +320,7 @@ public: uint8 _gender; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_outhouse_bunnyAI(creature); } @@ -343,12 +343,12 @@ public: { npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _phase = 1; } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (_phase == 1) { @@ -366,7 +366,7 @@ public: uint8 _phase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tallhorn_stagAI(creature); } @@ -395,7 +395,7 @@ public: { npc_amberpine_woodsmanAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { if (me->FindNearestCreature(NPC_TALLHORN_STAG, 0.2f)) { @@ -405,7 +405,7 @@ public: _events.ScheduleEvent(EVENT_WOODSMAN_1, 0); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -431,7 +431,7 @@ public: EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_amberpine_woodsmanAI(creature); } @@ -461,19 +461,19 @@ public: { npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _despawnTimer = 5000; _playerGUID = 0; } - void MovementInform(uint32, uint32 id) OVERRIDE + void MovementInform(uint32, uint32 id) override { if (id == 1) me->DespawnOrUnsummon(_despawnTimer); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE) @@ -490,7 +490,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -502,7 +502,7 @@ public: uint32 _despawnTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wounded_skirmisherAI(creature); } @@ -540,7 +540,7 @@ public: { npc_venture_co_stragglerAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _playerGUID = 0; @@ -548,7 +548,7 @@ public: me->SetReactState(REACT_AGGRESSIVE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -590,7 +590,7 @@ public: DoMeleeAttackIfReady(); } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { @@ -607,7 +607,7 @@ public: uint64 _playerGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_venture_co_stragglerAI(creature); } @@ -655,7 +655,7 @@ public: { npc_lake_frogAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _following = false; _runningScript = false; @@ -663,7 +663,7 @@ public: me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_following) if (!me->HasAura(SPELL_FROG_LOVE)) @@ -702,7 +702,7 @@ public: } } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { if (_following || _runningScript) return; @@ -732,7 +732,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { DoCast(player, SPELL_SUMMON_ASHWOOD_BRAND); } @@ -743,7 +743,7 @@ public: bool _runningScript; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lake_frogAI(creature); } @@ -763,7 +763,7 @@ class spell_shredder_delivery : public SpellScriptLoader { PrepareSpellScript(spell_shredder_delivery_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -774,13 +774,13 @@ class spell_shredder_delivery : public SpellScriptLoader GetCaster()->ToCreature()->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_shredder_delivery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_shredder_delivery_SpellScript(); } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 798801041f4..c577fb2864f 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -54,7 +54,7 @@ class npc_apothecary_hanes : public CreatureScript public: npc_apothecary_hanes() : CreatureScript("npc_apothecary_hanes") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE) { @@ -77,19 +77,19 @@ public: npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature){ } uint32 PotTimer; - void Reset() OVERRIDE + void Reset() override { SetDespawnAtFar(false); PotTimer = 10000; //10 sec cooldown on potion } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_TRAIL_OF_FIRE); } - void UpdateEscortAI(const uint32 diff) OVERRIDE + void UpdateEscortAI(const uint32 diff) override { if (HealthBelowPct(75)) { @@ -103,7 +103,7 @@ public: DoMeleeAttackIfReady(); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -153,7 +153,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_Apothecary_HanesAI(creature); } @@ -177,7 +177,7 @@ public: { npc_plaguehound_trackerAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE + void Reset() override { uint64 summonerGUID = 0; @@ -193,7 +193,7 @@ public: Start(false, false, summonerGUID); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { if (waypointId != 26) return; @@ -202,7 +202,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_plaguehound_trackerAI(creature); } @@ -231,7 +231,7 @@ class npc_razael_and_lyana : public CreatureScript public: npc_razael_and_lyana() : CreatureScript("npc_razael_and_lyana") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -260,7 +260,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -304,7 +304,7 @@ class npc_daegarn : public CreatureScript public: npc_daegarn() : CreatureScript("npc_daegarn") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_DEFEAT_AT_RING) { @@ -323,7 +323,7 @@ public: bool bEventInProgress; uint64 uiPlayerGUID; - void Reset() OVERRIDE + void Reset() override { bEventInProgress = false; uiPlayerGUID = 0; @@ -339,7 +339,7 @@ public: SummonGladiator(NPC_FIRJUS); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (Player* player = ObjectAccessor::GetPlayer(*me, uiPlayerGUID)) { @@ -360,7 +360,7 @@ public: me->SummonCreature(uiEntry, afSummon[0], afSummon[1], afSummon[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30*IN_MILLISECONDS); } - void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* summoned, Unit* /*killer*/) override { uint32 uiEntry = 0; @@ -377,7 +377,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_daegarnAI(creature); } @@ -397,12 +397,12 @@ public: { npc_mindless_abominationAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_CHECK_CHARMED, 1000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -424,7 +424,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mindless_abominationAI(creature); } @@ -445,7 +445,7 @@ class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader { PrepareSpellScript(spell_mindless_abomination_explosion_fx_master_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON) || !sSpellMgr->GetSpellInfo(SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE)) return false; @@ -458,21 +458,21 @@ class spell_mindless_abomination_explosion_fx_master : public SpellScriptLoader if (!caster) return; - caster->AI()->DoCast(caster, SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE); + caster->CastSpell(caster, SPELL_COSMETIC_BLOOD_EXPLOSION_GREEN_LARGE); for (uint8 i = 0; i < 10; ++i) - caster->AI()->DoCast(caster, SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON); + caster->CastSpell(caster, SPELL_RANDOM_CIRCUMFERENCE_POINT_POISON); caster->DespawnOrUnsummon(4000); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_mindless_abomination_explosion_fx_master_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mindless_abomination_explosion_fx_master_SpellScript(); } diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index f7894c58b3e..32b9805470e 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -46,7 +46,7 @@ class npc_squire_david : public CreatureScript public: npc_squire_david() : CreatureScript("npc_squire_david") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_H) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_A) == QUEST_STATUS_INCOMPLETE)//We need more info about it. @@ -59,7 +59,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -98,13 +98,13 @@ public: uint32 uiChargeTimer; uint32 uiShieldBreakerTimer; - void Reset() OVERRIDE + void Reset() override { uiChargeTimer = 7000; uiShieldBreakerTimer = 10000; } - void MovementInform(uint32 uiType, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 uiType, uint32 /*uiId*/) override { if (uiType != POINT_MOTION_TYPE) return; @@ -112,7 +112,7 @@ public: me->setFaction(14); } - void DamageTaken(Unit* pDoneBy, uint32& uiDamage) OVERRIDE + void DamageTaken(Unit* pDoneBy, uint32& uiDamage) override { if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER) { @@ -125,7 +125,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) return; @@ -146,7 +146,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_argent_valiantAI(creature); } @@ -177,7 +177,7 @@ public: SetCombatMovement(false); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->GetAreaId() != AREA_SUNREAVER_PAVILION && me->GetAreaId() != AREA_SILVER_COVENANT_PAVILION) @@ -197,7 +197,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_guardian_pavilionAI(creature); } @@ -223,7 +223,7 @@ public: { npc_vereth_the_cunningAI(Creature* creature) : ScriptedAI(creature) { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { ScriptedAI::MoveInLineOfSight(who); @@ -243,7 +243,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_vereth_the_cunningAI(creature); } @@ -291,7 +291,7 @@ class npc_tournament_training_dummy : public CreatureScript EventMap events; bool isVulnerable; - void Reset() OVERRIDE + void Reset() override { me->SetControlled(true, UNIT_STATE_STUNNED); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); @@ -312,7 +312,7 @@ class npc_tournament_training_dummy : public CreatureScript events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!_EnterEvadeMode()) return; @@ -320,13 +320,13 @@ class npc_tournament_training_dummy : public CreatureScript Reset(); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { damage = 0; events.RescheduleEvent(EVENT_DUMMY_RESET, 10000); } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { switch (me->GetEntry()) { @@ -356,7 +356,7 @@ class npc_tournament_training_dummy : public CreatureScript isVulnerable = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -398,11 +398,11 @@ class npc_tournament_training_dummy : public CreatureScript me->SetControlled(true, UNIT_STATE_STUNNED); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tournament_training_dummyAI(creature); } @@ -523,31 +523,31 @@ public: uint64 guidMason[3]; uint64 guidHalof; - void Reset() OVERRIDE + void Reset() override { me->setRegeneratingHealth(false); DoCast(SPELL_THREAT_PULSE); - me->AI()->Talk(BANNER_SAY); + Talk(BANNER_SAY); events.ScheduleEvent(EVENT_SPAWN, 3000); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void JustSummoned(Creature* Summoned) OVERRIDE + void JustSummoned(Creature* Summoned) override { Summons.Summon(Summoned); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Summons.DespawnAll(); me->DespawnOrUnsummon(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -595,14 +595,14 @@ public: break; case EVENT_INTRO_1: { - if (Creature* Dalfors = me->GetCreature(*me, guidDalfors)) + if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_SAY_PRE_1); events.ScheduleEvent(EVENT_INTRO_2, 5000); } break; case EVENT_INTRO_2: { - if (Creature* Dalfors = me->GetCreature(*me, guidDalfors)) + if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) { Dalfors->SetFacingTo(6.215f); Dalfors->AI()->Talk(DALFORS_SAY_PRE_2); @@ -612,37 +612,37 @@ public: break; case EVENT_INTRO_3: { - if (Creature* Dalfors = me->GetCreature(*me, guidDalfors)) + if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) { Dalfors->GetMotionMaster()->MovePoint(0, DalforsPos[2]); Dalfors->SetHomePosition(DalforsPos[2]); } - if (Creature* Priest1 = me->GetCreature(*me, guidPriest[0])) + if (Creature* Priest1 = ObjectAccessor::GetCreature(*me, guidPriest[0])) { Priest1->SetFacingTo(5.7421f); Priest1->SetHomePosition(Priest1Pos[1]); } - if (Creature* Priest2 = me->GetCreature(*me, guidPriest[1])) + if (Creature* Priest2 = ObjectAccessor::GetCreature(*me, guidPriest[1])) { Priest2->SetFacingTo(5.7421f); Priest2->SetHomePosition(Priest2Pos[1]); } - if (Creature* Priest3 = me->GetCreature(*me, guidPriest[2])) + if (Creature* Priest3 = ObjectAccessor::GetCreature(*me, guidPriest[2])) { Priest3->SetFacingTo(5.7421f); Priest3->SetHomePosition(Priest3Pos[1]); } - if (Creature* Mason1 = me->GetCreature(*me, guidMason[0])) + if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0])) { Mason1->GetMotionMaster()->MovePoint(0, Mason1Pos[2]); Mason1->SetHomePosition(Mason1Pos[2]); } - if (Creature* Mason2 = me->GetCreature(*me, guidMason[1])) + if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1])) { Mason2->GetMotionMaster()->MovePoint(0, Mason2Pos[2]); Mason2->SetHomePosition(Mason2Pos[2]); } - if (Creature* Mason3 = me->GetCreature(*me, guidMason[2])) + if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2])) { Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[2]); Mason3->SetHomePosition(Mason3Pos[2]); @@ -653,17 +653,17 @@ public: break; case EVENT_MASON_ACTION: { - if (Creature* Mason1 = me->GetCreature(*me, guidMason[0])) + if (Creature* Mason1 = ObjectAccessor::GetCreature(*me, guidMason[0])) { Mason1->SetFacingTo(2.8972f); Mason1->AI()->SetData(1, 1); // triggers SAI actions on npc } - if (Creature* Mason2 = me->GetCreature(*me, guidMason[1])) + if (Creature* Mason2 = ObjectAccessor::GetCreature(*me, guidMason[1])) { Mason2->SetFacingTo(3.1241f); Mason2->AI()->SetData(1, 1); // triggers SAI actions on npc } - if (Creature* Mason3 = me->GetCreature(*me, guidMason[2])) + if (Creature* Mason3 = ObjectAccessor::GetCreature(*me, guidMason[2])) { Mason3->SetFacingTo(3.6651f); Mason3->AI()->SetData(1, 1); // triggers SAI actions on npc @@ -674,7 +674,7 @@ public: { if (Creature* LK = GetClosestCreatureWithEntry(me, NPC_LK, 100)) LK->AI()->Talk(LK_TALK_1); - if (Creature* Dalfors = me->GetCreature(*me, guidDalfors)) + if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_SAY_START); events.ScheduleEvent(EVENT_WAVE_SPAWN, 1000); } @@ -763,7 +763,7 @@ public: } if (PhaseCount == 8) - if (Creature* Halof = me->GetCreature(*me, guidHalof)) + if (Creature* Halof = ObjectAccessor::GetCreature(*me, guidHalof)) if (Halof->isDead()) { DoCast(me, SPELL_CRUSADERS_SPIRE_VICTORY, true); @@ -771,14 +771,14 @@ public: Summons.DespawnEntry(NPC_REANIMATED_CAPTAIN); Summons.DespawnEntry(NPC_SCOURGE_DRUDGE); Summons.DespawnEntry(NPC_HALOF_THE_DEATHBRINGER); - if (Creature* Dalfors = me->GetCreature(*me, guidDalfors)) + if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_YELL_FINISHED); events.ScheduleEvent(EVENT_ENDED, 10000); } } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_blessed_bannerAI(creature); } @@ -816,12 +816,12 @@ class npc_frostbrood_skytalon : public CreatureScript EventMap events; - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { me->GetMotionMaster()->MovePoint(POINT_GRAB_DECOY, summoner->GetPositionX(), summoner->GetPositionY(), summoner->GetPositionZ()); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -832,7 +832,7 @@ class npc_frostbrood_skytalon : public CreatureScript DoCast(summoner, SPELL_GRAB); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { VehicleAI::UpdateAI(diff); events.Update(diff); @@ -849,7 +849,7 @@ class npc_frostbrood_skytalon : public CreatureScript } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { switch (spell->Id) { @@ -864,7 +864,7 @@ class npc_frostbrood_skytalon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_frostbrood_skytalonAI(creature); } @@ -914,7 +914,7 @@ class npc_margrave_dhakar : public CreatureScript { npc_margrave_dhakarAI(Creature* creature) : ScriptedAI(creature) , _summons(me), _lichKingGuid(0) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); @@ -923,7 +923,7 @@ class npc_margrave_dhakar : public CreatureScript _summons.DespawnAll(); } - void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 action) override { if (player->GetQuestStatus(QUEST_FLESH_GIANT_CHAMPION) == QUEST_STATUS_INCOMPLETE && !player->IsInCombat()) { @@ -935,7 +935,7 @@ class npc_margrave_dhakar : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -963,35 +963,35 @@ class npc_margrave_dhakar : public CreatureScript } case EVENT_LK_SAY_1: { - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->AI()->Talk(SAY_LK_1); _events.ScheduleEvent(EVENT_LK_SAY_2, 5000); break; } case EVENT_LK_SAY_2: { - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->AI()->Talk(SAY_LK_2); _events.ScheduleEvent(EVENT_LK_SAY_3, 5000); break; } case EVENT_LK_SAY_3: { - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->AI()->Talk(SAY_LK_3); _events.ScheduleEvent(EVENT_LK_SAY_4, 5000); break; } case EVENT_LK_SAY_4: { - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->AI()->Talk(SAY_LK_4); _events.ScheduleEvent(EVENT_OUTRO, 12000); break; } case EVENT_LK_SAY_5: { - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->AI()->Talk(SAY_LK_5); _events.ScheduleEvent(EVENT_OUTRO, 8000); break; @@ -1001,7 +1001,7 @@ class npc_margrave_dhakar : public CreatureScript if (Creature* olakin = me->FindNearestCreature(NPC_OLAKIN, 50.0f, true)) olakin->AI()->Talk(SAY_OLAKIN_PAY); - if (Creature* lichKing = Unit::GetCreature(*me, _lichKingGuid)) + if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _lichKingGuid)) lichKing->DespawnOrUnsummon(0); _events.ScheduleEvent(EVENT_START, 5000); @@ -1029,7 +1029,7 @@ class npc_margrave_dhakar : public CreatureScript uint64 _lichKingGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_margrave_dhakarAI(creature); } @@ -1044,7 +1044,7 @@ class npc_morbidus : public CreatureScript { npc_morbidusAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { if (Creature* dhakar = me->FindNearestCreature(NPC_DHAKAR, 50.0f, true)) dhakar->AI()->Reset(); @@ -1056,7 +1056,7 @@ class npc_morbidus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_morbidusAI(creature); } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 0298500e790..3ec138dcfaa 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -67,7 +67,7 @@ public: uint64 c_guid; - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); // if we will have other way to assign this to only one npc remove this part @@ -78,7 +78,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -115,7 +115,7 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) return; @@ -128,7 +128,7 @@ public: } }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -141,7 +141,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -162,13 +162,13 @@ public: return true; } - bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* /*_Quest*/) OVERRIDE + bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* /*_Quest*/) override { creature->AI()->Talk(SAY_QUEST_ACCEPT_IRO); return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_injured_rainspeaker_oracleAI(creature); } @@ -198,7 +198,7 @@ class npc_vekjik : public CreatureScript public: npc_vekjik() : CreatureScript("npc_vekjik") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -214,7 +214,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -259,7 +259,7 @@ class npc_avatar_of_freya : public CreatureScript public: npc_avatar_of_freya() : CreatureScript("npc_avatar_of_freya") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -271,7 +271,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -308,7 +308,7 @@ public: { } - void InitializeAI() OVERRIDE + void InitializeAI() override { if (me->isDead()) return; @@ -320,7 +320,7 @@ public: Reset(); } - void UpdateAI(uint32 /*uiDiff*/) OVERRIDE + void UpdateAI(uint32 /*uiDiff*/) override { if (!UpdateVictim()) return; @@ -329,7 +329,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bushwhackerAI(creature); } @@ -369,7 +369,7 @@ public: uint32 m_uiChatTimer; - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); @@ -408,12 +408,12 @@ public: } } - void Reset() OVERRIDE + void Reset() override { m_uiChatTimer = 4000; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) { @@ -422,7 +422,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -438,12 +438,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_engineer_heliceAI(creature); } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_DISASTER) { @@ -504,7 +504,7 @@ public: { npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { sayTimer = 3500; sayStep = 0; @@ -514,7 +514,7 @@ public: orphanGUID = 0; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!phase && who && who->GetDistance2d(me) < 10.0f) if (Player* player = who->ToPlayer()) @@ -579,7 +579,7 @@ public: timer -= diff; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (phase) proceedCwEvent(diff); @@ -600,7 +600,7 @@ public: sayTimer -= diff; } - void SpellHit(Unit* caster, SpellInfo const* spellInfo) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spellInfo) override { if (spellInfo->Id != SPELL_OFFER) return; @@ -641,7 +641,7 @@ public: uint64 orphanGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_jungle_punch_targetAI(creature); } @@ -686,12 +686,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_adventurous_dwarfAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_12634) != QUEST_STATUS_INCOMPLETE) return false; @@ -709,7 +709,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); uint32 spellId = 0; @@ -804,13 +804,13 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q12620_the_lifewarden_wrath_SpellScript::HandleSendEvent, EFFECT_0, SPELL_EFFECT_SEND_EVENT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12620_the_lifewarden_wrath_SpellScript(); } @@ -927,14 +927,14 @@ public: } } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_q12589_shoot_rjr_SpellScript::CheckCast); OnEffectHitTarget += SpellEffectFn(spell_q12589_shoot_rjr_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12589_shoot_rjr_SpellScript(); } @@ -964,7 +964,7 @@ public: { npc_haiphoonAI(Creature* creature) : VehicleAI(creature) { } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (target == me) return; @@ -980,7 +980,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_haiphoonAI(creature); } @@ -1003,7 +1003,7 @@ enum ReconnaissanceFlight VIC_SAY_6 = 6, PLANE_EMOTE = 0, - AURA_ENGINE = 52255, // Engine on Fire + SPELL_ENGINE = 52255, // Engine on Fire SPELL_LAND = 52226, // Land Flying Machine SPELL_CREDIT = 53328 // Land Flying Machine Credit @@ -1018,13 +1018,20 @@ public: { npc_vics_flying_machineAI(Creature* creature) : VehicleAI(creature) { } - void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override { if (apply && passenger->GetTypeId() == TYPEID_PLAYER) + { + /// @workaround - Because accessory gets unmounted when using vehicle_template_accessory. + /// When vehicle spawns accessory is mounted to seat 0,but when player mounts + /// he uses the same seat (instead of mounting to seat 1) kicking the accessory out. + passenger->ChangeSeat(1, false); + me->GetVehicleKit()->InstallAccessory(NPC_PILOT, 0, true, TEMPSUMMON_DEAD_DESPAWN, 0); me->GetMotionMaster()->MovePath(NPC_PLANE, false); + } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != WAYPOINT_MOTION_TYPE) return; @@ -1054,13 +1061,14 @@ public: pilot->AI()->Talk(VIC_SAY_6); break; case 25: - me->AI()->Talk(PLANE_EMOTE); - me->AI()->DoCast(AURA_ENGINE); + Talk(PLANE_EMOTE); + DoCast(SPELL_ENGINE); + me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT); break; } } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_LAND) { @@ -1073,10 +1081,10 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_vics_flying_machineAI(creature); } @@ -1121,13 +1129,13 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_shango_tracks_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_shango_tracks_SpellScript(); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 70de4d4758d..a7faf776721 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -48,7 +48,7 @@ public: { npc_injured_goblinAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -65,18 +65,18 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void Reset() OVERRIDE { } + void Reset() override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Player* player = GetPlayerForEscort(); if (HasEscortState(STATE_ESCORT_ESCORTING) && player) player->FailQuest(QUEST_BITTER_DEPARTURE); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); if (!UpdateVictim()) @@ -84,7 +84,7 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 sender, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 sender, uint32 action) override { if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID) { @@ -95,12 +95,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_injured_goblinAI(creature); } - bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE) creature->AI()->Talk(SAY_QUEST_ACCEPT); @@ -124,7 +124,7 @@ class npc_roxi_ramrocket : public CreatureScript public: npc_roxi_ramrocket() : CreatureScript("npc_roxi_ramrocket") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { //Quest Menu if (creature->IsQuestGiver()) @@ -143,7 +143,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -183,18 +183,18 @@ public: bool freed; - void Reset() OVERRIDE + void Reset() override { freed = false; me->CastSpell(me, SPELL_ICE_PRISON, true); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!freed) return; @@ -203,7 +203,7 @@ public: me->DespawnOrUnsummon(); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id != SPELL_ICE_LANCE) return; @@ -218,7 +218,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_brunnhildar_prisonerAI(creature); } @@ -255,12 +255,12 @@ public: EventMap events; - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_CHECK_AREA, 5000); } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != WAYPOINT_MOTION_TYPE) return; @@ -270,7 +270,7 @@ public: events.ScheduleEvent(EVENT_REACHED_HOME, 2000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -290,28 +290,29 @@ public: events.ScheduleEvent(EVENT_CHECK_AREA, 5000); break; case EVENT_REACHED_HOME: - Unit* player = me->GetVehicleKit()->GetPassenger(0); - if (player && player->GetTypeId() == TYPEID_PLAYER) - { - // for each prisoner on drake, give credit - for (uint8 i = 1; i < 4; ++i) - if (Unit* prisoner = me->GetVehicleKit()->GetPassenger(i)) + if (Vehicle* vehicle = me->GetVehicleKit()) + if (Unit* player = vehicle->GetPassenger(0)) + if (player->GetTypeId() == TYPEID_PLAYER) { - if (prisoner->GetTypeId() != TYPEID_UNIT) - return; - prisoner->CastSpell(player, SPELL_KILL_CREDIT_PRISONER, true); - prisoner->CastSpell(prisoner, SPELL_SUMMON_LIBERATED, true); - prisoner->ExitVehicle(); + // for each prisoner on drake, give credit + for (uint8 i = 1; i < 4; ++i) + if (Unit* prisoner = me->GetVehicleKit()->GetPassenger(i)) + { + if (prisoner->GetTypeId() != TYPEID_UNIT) + return; + prisoner->CastSpell(player, SPELL_KILL_CREDIT_PRISONER, true); + prisoner->CastSpell(prisoner, SPELL_SUMMON_LIBERATED, true); + prisoner->ExitVehicle(); + } + me->CastSpell(me, SPELL_KILL_CREDIT_DRAKE, true); + player->ExitVehicle(); } - me->CastSpell(me, SPELL_KILL_CREDIT_DRAKE, true); - player->ExitVehicle(); - } break; } } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_freed_protodrakeAI(creature); } @@ -326,11 +327,11 @@ public: { npc_icefangAI(Creature* creature) : npc_escortAI(creature) { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void EnterEvadeMode() OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } + void EnterCombat(Unit* /*who*/) override { } + void EnterEvadeMode() override { } - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { if (who->GetTypeId() == TYPEID_PLAYER) { @@ -339,11 +340,11 @@ public: } } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE { } - void JustDied(Unit* /*killer*/) OVERRIDE { } - void OnCharmed(bool /*apply*/) OVERRIDE { } + void WaypointReached(uint32 /*waypointId*/) override { } + void JustDied(Unit* /*killer*/) override { } + void OnCharmed(bool /*apply*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); @@ -352,7 +353,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_icefangAI(creature); } @@ -373,7 +374,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript public: npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0), _vehicleKit(creature->GetVehicleKit()) { } - void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override { if (apply) return; @@ -382,7 +383,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript _accessoryRespawnTimer = 5 * MINUTE * IN_MILLISECONDS; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //! We need to manually reinstall accessories because the vehicle itself is friendly to players, //! so EnterEvadeMode is never triggered. The accessory on the other hand is hostile and killable. @@ -400,7 +401,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript Vehicle* _vehicleKit; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_hyldsmeet_protodrakeAI(creature); } @@ -453,10 +454,13 @@ public: { npc_brann_bronzebeard_keystoneAI(Creature* creature) : ScriptedAI(creature) { + memset(&objectGUID, 0, sizeof(objectGUID)); + playerGUID = 0; + voiceGUID = 0; objectCounter = 0; } - void Reset() OVERRIDE + void Reset() override { memset(&objectGUID, 0, sizeof(objectGUID)); playerGUID = 0; @@ -464,14 +468,14 @@ public: objectCounter = 0; } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); playerGUID = player->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_1, 100); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -500,7 +504,7 @@ public: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) { - voice->AI()->DoCast(voice, SPELL_RESURRECTION); + voice->CastSpell(voice, SPELL_RESURRECTION); if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) voice->AI()->Talk(SAY_VOICE_1, player); } @@ -542,7 +546,7 @@ public: break; case EVENT_SCRIPT_9: if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) - voice->AI()->DoCast(voice, SPELL_RESURRECTION); + voice->CastSpell(voice, SPELL_RESURRECTION); events.ScheduleEvent(EVENT_SCRIPT_10, 6000); break; case EVENT_SCRIPT_10: @@ -585,7 +589,7 @@ public: uint8 objectCounter; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_brann_bronzebeard_keystoneAI(creature); } @@ -639,18 +643,19 @@ public: { npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { + playerGUID = 0; pathEnd = false; } - void Reset() OVERRIDE + void Reset() override { playerGUID = 0; pathEnd = false; } - void OnCharmed(bool /*apply*/) OVERRIDE { } + void OnCharmed(bool /*apply*/) override { } - void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) OVERRIDE + void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override { if (apply) { @@ -662,7 +667,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != WAYPOINT_MOTION_TYPE) return; @@ -689,7 +694,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!pathEnd) return; @@ -715,7 +720,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_king_jokkum_vehicleAI(creature); } @@ -729,7 +734,7 @@ class spell_jokkum_scriptcast : public SpellScriptLoader { PrepareAuraScript(spell_jokkum_scriptcast_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_JOKKUM_SUMMON)) return false; @@ -742,13 +747,13 @@ class spell_jokkum_scriptcast : public SpellScriptLoader target->CastSpell(target, SPELL_JOKKUM_SUMMON, true); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_jokkum_scriptcast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_jokkum_scriptcast_AuraScript(); } @@ -762,7 +767,7 @@ class spell_veranus_summon : public SpellScriptLoader { PrepareAuraScript(spell_veranus_summon_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VERANUS_AND_THORIM)) return false; @@ -775,49 +780,18 @@ class spell_veranus_summon : public SpellScriptLoader target->CastSpell(target, SPELL_SUMMON_VERANUS_AND_THORIM, true); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_veranus_summon_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_veranus_summon_AuraScript(); } }; -/*##### -# spell_jokkum_eject_all -#####*/ - -class spell_jokkum_eject_all : public SpellScriptLoader -{ - public: spell_jokkum_eject_all() : SpellScriptLoader("spell_jokkum_eject_all") { } - - class spell_jokkum_eject_all_SpellScript : public SpellScript - { - PrepareSpellScript(spell_jokkum_eject_all_SpellScript); - - void HandleScriptEffect(SpellEffIndex /* effIndex */) - { - if (Unit* caster = GetCaster()) - if (caster->IsVehicle()) - caster->GetVehicleKit()->RemoveAllPassengers(); - } - - void Register() OVERRIDE - { - OnEffectHitTarget += SpellEffectFn(spell_jokkum_eject_all_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const OVERRIDE - { - return new spell_jokkum_eject_all_SpellScript(); - } -}; - enum CloseRift { SPELL_DESPAWN_RIFT = 61665 @@ -832,13 +806,13 @@ class spell_close_rift : public SpellScriptLoader { PrepareAuraScript(spell_close_rift_AuraScript); - bool Load() OVERRIDE + bool Load() override { _counter = 0; return true; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { return sSpellMgr->GetSpellInfo(SPELL_DESPAWN_RIFT); } @@ -849,7 +823,7 @@ class spell_close_rift : public SpellScriptLoader GetTarget()->CastSpell((Unit*)NULL, SPELL_DESPAWN_RIFT, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_close_rift_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } @@ -859,7 +833,7 @@ class spell_close_rift : public SpellScriptLoader }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_close_rift_AuraScript(); } @@ -877,6 +851,5 @@ void AddSC_storm_peaks() new npc_king_jokkum_vehicle(); new spell_jokkum_scriptcast(); new spell_veranus_summon(); - new spell_jokkum_eject_all(); new spell_close_rift(); } diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index e218741649d..fe74997bb39 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -115,7 +115,7 @@ class npc_wg_demolisher_engineer : public CreatureScript public: npc_wg_demolisher_engineer() : CreatureScript("npc_wg_demolisher_engineer") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -138,7 +138,7 @@ class npc_wg_demolisher_engineer : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->CLOSE_GOSSIP_MENU(); @@ -186,7 +186,7 @@ class npc_wg_spirit_guide : public CreatureScript public: npc_wg_spirit_guide() : CreatureScript("npc_wg_spirit_guide") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -204,7 +204,7 @@ class npc_wg_spirit_guide : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->CLOSE_GOSSIP_MENU(); @@ -224,14 +224,14 @@ class npc_wg_spirit_guide : public CreatureScript { npc_wg_spirit_guideAI(Creature* creature) : ScriptedAI(creature) { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!me->HasUnitState(UNIT_STATE_CASTING)) DoCast(me, SPELL_CHANNEL_SPIRIT_HEAL); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wg_spirit_guideAI(creature); } @@ -256,14 +256,14 @@ class npc_wg_queue : public CreatureScript uint32 FrostArmor_Timer; - void Reset() OVERRIDE + void Reset() override { FrostArmor_Timer = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (FrostArmor_Timer <= diff) { @@ -276,12 +276,12 @@ class npc_wg_queue : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wg_queueAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -310,7 +310,7 @@ class npc_wg_queue : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); @@ -339,7 +339,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript { go_wg_vehicle_teleporterAI(GameObject* gameObject) : GameObjectAI(gameObject), _checkTimer(1000) { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_checkTimer <= diff) { @@ -360,7 +360,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript uint32 _checkTimer; }; - GameObjectAI* GetAI(GameObject* go) const OVERRIDE + GameObjectAI* GetAI(GameObject* go) const override { return new go_wg_vehicle_teleporterAI(go); } @@ -371,7 +371,7 @@ class npc_wg_quest_giver : public CreatureScript public: npc_wg_quest_giver() : CreatureScript("npc_wg_quest_giver") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG); if (!wintergrasp) @@ -483,7 +483,7 @@ class spell_wintergrasp_force_building : public SpellScriptLoader { PrepareSpellScript(spell_wintergrasp_force_building_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BUILD_CATAPULT_FORCE) || !sSpellMgr->GetSpellInfo(SPELL_BUILD_DEMOLISHER_FORCE) @@ -499,13 +499,13 @@ class spell_wintergrasp_force_building : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), GetEffectValue(), false); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_force_building_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wintergrasp_force_building_SpellScript(); } @@ -526,13 +526,13 @@ class spell_wintergrasp_grab_passenger : public SpellScriptLoader target->CastSpell(GetCaster(), SPELL_RIDE_WG_VEHICLE, false); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_grab_passenger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wintergrasp_grab_passenger_SpellScript(); } @@ -543,7 +543,7 @@ class achievement_wg_didnt_stand_a_chance : public AchievementCriteriaScript public: achievement_wg_didnt_stand_a_chance() : AchievementCriteriaScript("achievement_wg_didnt_stand_a_chance") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (!target) return false; @@ -586,13 +586,13 @@ public: return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_wintergrasp_defender_teleport_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wintergrasp_defender_teleport_SpellScript(); } @@ -611,19 +611,18 @@ public: { if (Unit* target = GetHitUnit()) { - WorldLocation loc; - target->GetPosition(&loc); + WorldLocation loc = target->GetWorldLocation(); SetExplTargetDest(loc); } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_defender_teleport_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_wintergrasp_defender_teleport_trigger_SpellScript(); } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 8f5ae0f65ff..cf8c4cd9b36 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -49,7 +49,7 @@ public: { npc_drakuru_shacklesAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _rageclawGUID = 0; me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -85,13 +85,13 @@ public: me->setDeathState(DEAD); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_UNLOCK_SHACKLE) { if (caster->ToPlayer()->GetQuestStatus(QUEST_TROLLS_IS_GONE_CRAZY) == QUEST_STATUS_INCOMPLETE) { - if (Creature* rageclaw = Unit::GetCreature(*me, _rageclawGUID)) + if (Creature* rageclaw = ObjectAccessor::GetCreature(*me, _rageclawGUID)) { UnlockRageclaw(caster, rageclaw); caster->ToPlayer()->KilledMonster(rageclaw->GetCreatureTemplate(), _rageclawGUID); @@ -107,7 +107,7 @@ public: uint64 _rageclawGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_drakuru_shacklesAI(creature); } @@ -133,22 +133,22 @@ public: { npc_captured_rageclawAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->setFaction(35); DoCast(me, SPELL_KNEEL, true); // Little Hack for kneel - Thanks Illy :P } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_FREE_RAGECLAW) { me->RemoveAurasDueToSpell(SPELL_LEFT_CHAIN); me->RemoveAurasDueToSpell(SPELL_RIGHT_CHAIN); me->RemoveAurasDueToSpell(SPELL_KNEEL); - me->setFaction(me->GetCreatureTemplate()->faction_H); + me->setFaction(me->GetCreatureTemplate()->faction); DoCast(me, SPELL_UNSHACKLED, true); Talk(SAY_RAGECLAW); me->GetMotionMaster()->MoveRandom(10); @@ -157,7 +157,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_captured_rageclawAI(creature); } @@ -177,14 +177,14 @@ public: { npc_released_offspring_harkoaAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { float x, y, z; me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 25.0f); me->GetMotionMaster()->MovePoint(0, x, y, z); } - void MovementInform(uint32 Type, uint32 /*uiId*/) OVERRIDE + void MovementInform(uint32 Type, uint32 /*uiId*/) override { if (Type != POINT_MOTION_TYPE) return; @@ -192,7 +192,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_released_offspring_harkoaAI(creature); } @@ -224,14 +224,14 @@ public: { npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); _heading = me->GetOrientation(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -259,7 +259,7 @@ public: return; } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { _events.ScheduleEvent(EVENT_RECRUIT_1, 100); player->CLOSE_GOSSIP_MENU(); @@ -272,7 +272,7 @@ public: float _heading; // Store creature heading }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_crusade_recruitAI(creature); } @@ -295,7 +295,7 @@ class go_scourge_enclosure : public GameObjectScript public: go_scourge_enclosure() : GameObjectScript("go_scourge_enclosure") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_OUR_ONLY_HOPE) == QUEST_STATUS_INCOMPLETE) @@ -453,16 +453,20 @@ public: struct npc_alchemist_finklesteinAI : public ScriptedAI { - npc_alchemist_finklesteinAI(Creature* creature) : ScriptedAI(creature) { } + npc_alchemist_finklesteinAI(Creature* creature) : ScriptedAI(creature) + { + _playerGUID = 0; + _getingredienttry = 0; + } - void Reset() OVERRIDE + void Reset() override { _playerGUID = 0; _getingredienttry = 0; _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000)); } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == 1 && data == 1) switch (_getingredienttry) @@ -485,7 +489,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -541,7 +545,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); @@ -556,7 +560,7 @@ public: uint8 _getingredienttry; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_alchemist_finklesteinAI(creature); } @@ -567,7 +571,7 @@ class go_finklesteins_cauldron : public GameObjectScript public: go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { player->CastSpell(player, SPELL_POT_CHECK); return true; @@ -611,7 +615,7 @@ class spell_random_ingredient_aura : public SpellScriptLoader { PrepareAuraScript(spell_random_ingredient_aura_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_EASY) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_MEDIUM) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_HARD)) return false; @@ -634,13 +638,13 @@ class spell_random_ingredient_aura : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_random_ingredient_aura_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_random_ingredient_aura_AuraScript(); } @@ -658,7 +662,7 @@ class spell_random_ingredient : public SpellScriptLoader { PrepareSpellScript(spell_random_ingredient_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || @@ -698,13 +702,13 @@ class spell_random_ingredient : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_random_ingredient_SpellScript(); } @@ -722,7 +726,7 @@ class spell_pot_check : public SpellScriptLoader { PrepareSpellScript(spell_pot_check_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) || @@ -791,13 +795,13 @@ class spell_pot_check : public SpellScriptLoader player->DestroyItemCount(FetchIngredients[i][2], 1, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pot_check_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pot_check_SpellScript(); } @@ -827,13 +831,13 @@ class spell_fetch_ingredient_aura : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_fetch_ingredient_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_fetch_ingredient_aura_AuraScript(); } @@ -857,17 +861,17 @@ public: { npc_storm_cloudAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->CastSpell(me, STORM_VISUAL, true); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Reset(); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id != GYMERS_GRAB) return; @@ -881,7 +885,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_storm_cloudAI(creature); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp index b8a28a3248a..e3246a5f55f 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp @@ -151,16 +151,16 @@ void OPvPCapturePointEP_EWT::SummonSupportUnitAtNorthpassTower(uint32 team) if (m_UnitsSummonedSide != team) { m_UnitsSummonedSide = team; - const creature_type * ct = NULL; + creature_type const* ct = nullptr; if (team == ALLIANCE) - ct=EP_EWT_Summons_A; + ct = EP_EWT_Summons_A; else - ct=EP_EWT_Summons_H; + ct = EP_EWT_Summons_H; for (uint8 i = 0; i < EP_EWT_NUM_CREATURES; ++i) { DelCreature(i); - AddCreature(i, ct[i].entry, ct[i].teamval, ct[i].map, ct[i].x, ct[i].y, ct[i].z, ct[i].o, 1000000); + AddCreature(i, ct[i].entry, ct[i].map, ct[i].x, ct[i].y, ct[i].z, ct[i].o, OutdoorPvP::GetTeamIdByTeam(team), 1000000); } } } @@ -571,7 +571,7 @@ void OPvPCapturePointEP_PWT::SummonFlightMaster(uint32 team) { m_FlightMasterSpawned = team; DelCreature(EP_PWT_FLIGHTMASTER); - AddCreature(EP_PWT_FLIGHTMASTER, EP_PWT_FlightMaster.entry, team, EP_PWT_FlightMaster.map, EP_PWT_FlightMaster.x, EP_PWT_FlightMaster.y, EP_PWT_FlightMaster.z, EP_PWT_FlightMaster.o); + AddCreature(EP_PWT_FLIGHTMASTER, EP_PWT_FlightMaster.entry, EP_PWT_FlightMaster.map, EP_PWT_FlightMaster.x, EP_PWT_FlightMaster.y, EP_PWT_FlightMaster.z, EP_PWT_FlightMaster.o, OutdoorPvP::GetTeamIdByTeam(team)); /* // sky - we need update gso code @@ -773,7 +773,7 @@ class OutdoorPvP_eastern_plaguelands : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPEP(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h index ecf9d80f071..50b412348cf 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h @@ -147,20 +147,20 @@ const uint8 EP_EWT_NUM_CREATURES = 5; // should be spawned at EWT and follow a path, but trans-grid pathing isn't safe, so summon them directly at NPT const creature_type EP_EWT_Summons_A[EP_EWT_NUM_CREATURES] = { - {17635, 469, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f}, - {17647, 469, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f}, - {17647, 469, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f}, - {17647, 469, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f}, - {17647, 469, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f} + {17635, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f}, + {17647, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f}, + {17647, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f}, + {17647, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f}, + {17647, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f} }; const creature_type EP_EWT_Summons_H[EP_EWT_NUM_CREATURES] = { - {17995, 67, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f}, - {17996, 67, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f}, - {17996, 67, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f}, - {17996, 67, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f}, - {17996, 67, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f} + {17995, 0, 3167.61f, -4352.09f, 138.20f, 4.5811f}, + {17996, 0, 3172.74f, -4352.99f, 139.14f, 4.9873f}, + {17996, 0, 3165.89f, -4354.46f, 138.67f, 3.7244f}, + {17996, 0, 3164.65f, -4350.26f, 138.22f, 2.4794f}, + {17996, 0, 3169.91f, -4349.68f, 138.37f, 0.7444f} }; enum EP_TowerStates @@ -175,7 +175,7 @@ enum EP_TowerStates }; // when spawning, pay attention at setting the faction manually! -const creature_type EP_PWT_FlightMaster = {17209, 0, 0, 2987.5f, -3049.11f, 120.126f, 5.75959f}; +const creature_type EP_PWT_FlightMaster = {17209, 0, 2987.5f, -3049.11f, 120.126f, 5.75959f}; // after spawning, modify the faction so that only the controller will be able to use it with SetUInt32Value(GAMEOBJECT_FACTION, faction_id); const go_type EP_NPT_LordaeronShrine = {181682, 0, 3167.72f, -4355.91f, 138.785f, 1.69297f, 0.0f, 0.0f, 0.748956f, 0.66262f}; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp index 5af51a5d07f..99b782336ec 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp @@ -368,7 +368,7 @@ class OutdoorPvP_hellfire_peninsula : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPHP(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index 41cd17e1afd..08253022ec4 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -82,15 +82,15 @@ uint32 OPvPCapturePointNA::GetControllingFaction() const void OPvPCapturePointNA::SpawnNPCsForTeam(uint32 team) { - const creature_type * creatures = NULL; + creature_type const* creatures = nullptr; if (team == ALLIANCE) - creatures=AllianceControlNPCs; + creatures = AllianceControlNPCs; else if (team == HORDE) - creatures=HordeControlNPCs; + creatures = HordeControlNPCs; else return; for (int i = 0; i < NA_CONTROL_NPC_NUM; ++i) - AddCreature(i, creatures[i].entry, creatures[i].teamval, creatures[i].map, creatures[i].x, creatures[i].y, creatures[i].z, creatures[i].o, 1000000); + AddCreature(i, creatures[i].entry, creatures[i].map, creatures[i].x, creatures[i].y, creatures[i].z, creatures[i].o, OutdoorPvP::GetTeamIdByTeam(team), 1000000); } void OPvPCapturePointNA::DeSpawnNPCs() @@ -667,7 +667,7 @@ class OutdoorPvP_nagrand : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPNA(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index cc32397741c..011775e1715 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -183,50 +183,50 @@ enum ControlNPCTypes const creature_type HordeControlNPCs[NA_CONTROL_NPC_NUM] = { - {18816, 67, 530, -1523.92f, 7951.76f, -17.6942f, 3.51172f}, - {18821, 67, 530, -1527.75f, 7952.46f, -17.6948f, 3.99317f}, - {21474, 67, 530, -1520.14f, 7927.11f, -20.2527f, 3.39389f}, - {21484, 67, 530, -1524.84f, 7930.34f, -20.182f, 3.6405f}, - {21483, 67, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f}, - {18192, 67, 530, -1654.06f, 8000.46f, -26.59f, 3.37f}, - {18192, 67, 530, -1487.18f, 7899.1f, -19.53f, 0.954f}, - {18192, 67, 530, -1480.88f, 7908.79f, -19.19f, 4.485f}, - {18192, 67, 530, -1540.56f, 7995.44f, -20.45f, 0.947f}, - {18192, 67, 530, -1546.95f, 8000.85f, -20.72f, 6.035f}, - {18192, 67, 530, -1595.31f, 7860.53f, -21.51f, 3.747f}, - {18192, 67, 530, -1642.31f, 7995.59f, -25.8f, 3.317f}, - {18192, 67, 530, -1545.46f, 7995.35f, -20.63f, 1.094f}, - {18192, 67, 530, -1487.58f, 7907.99f, -19.27f, 5.567f}, - {18192, 67, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f}, - {18192, 67, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f}, - {18192, 67, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f}, - {18192, 67, 530, -1550.6f, 7944.45f, -21.63f, 3.559f}, - {18192, 67, 530, -1545.57f, 7935.83f, -21.13f, 3.448f}, - {18192, 67, 530, -1550.86f, 7937.56f, -21.7f, 3.801f} + {18816, 530, -1523.92f, 7951.76f, -17.6942f, 3.51172f}, + {18821, 530, -1527.75f, 7952.46f, -17.6948f, 3.99317f}, + {21474, 530, -1520.14f, 7927.11f, -20.2527f, 3.39389f}, + {21484, 530, -1524.84f, 7930.34f, -20.182f, 3.6405f}, + {21483, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f}, + {18192, 530, -1654.06f, 8000.46f, -26.59f, 3.37f}, + {18192, 530, -1487.18f, 7899.1f, -19.53f, 0.954f}, + {18192, 530, -1480.88f, 7908.79f, -19.19f, 4.485f}, + {18192, 530, -1540.56f, 7995.44f, -20.45f, 0.947f}, + {18192, 530, -1546.95f, 8000.85f, -20.72f, 6.035f}, + {18192, 530, -1595.31f, 7860.53f, -21.51f, 3.747f}, + {18192, 530, -1642.31f, 7995.59f, -25.8f, 3.317f}, + {18192, 530, -1545.46f, 7995.35f, -20.63f, 1.094f}, + {18192, 530, -1487.58f, 7907.99f, -19.27f, 5.567f}, + {18192, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f}, + {18192, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f}, + {18192, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f}, + {18192, 530, -1550.6f, 7944.45f, -21.63f, 3.559f}, + {18192, 530, -1545.57f, 7935.83f, -21.13f, 3.448f}, + {18192, 530, -1550.86f, 7937.56f, -21.7f, 3.801f} }; const creature_type AllianceControlNPCs[NA_CONTROL_NPC_NUM] = { - {18817, 469, 530, -1591.18f, 8020.39f, -22.2042f, 4.59022f}, - {18822, 469, 530, -1588.0f, 8019.0f, -22.2042f, 4.06662f}, - {21485, 469, 530, -1521.93f, 7927.37f, -20.2299f, 3.24631f}, - {21487, 469, 530, -1540.33f, 7971.95f, -20.7186f, 3.07178f}, - {21488, 469, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f}, - {18256, 469, 530, -1654.06f, 8000.46f, -26.59f, 3.37f}, - {18256, 469, 530, -1487.18f, 7899.1f, -19.53f, 0.954f}, - {18256, 469, 530, -1480.88f, 7908.79f, -19.19f, 4.485f}, - {18256, 469, 530, -1540.56f, 7995.44f, -20.45f, 0.947f}, - {18256, 469, 530, -1546.95f, 8000.85f, -20.72f, 6.035f}, - {18256, 469, 530, -1595.31f, 7860.53f, -21.51f, 3.747f}, - {18256, 469, 530, -1642.31f, 7995.59f, -25.8f, 3.317f}, - {18256, 469, 530, -1545.46f, 7995.35f, -20.63f, 1.094f}, - {18256, 469, 530, -1487.58f, 7907.99f, -19.27f, 5.567f}, - {18256, 469, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f}, - {18256, 469, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f}, - {18256, 469, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f}, - {18256, 469, 530, -1603.75f, 8000.36f, -24.18f, 4.516f}, - {18256, 469, 530, -1585.73f, 7994.68f, -23.29f, 4.439f}, - {18256, 469, 530, -1595.5f, 7991.27f, -23.53f, 4.738f} + {18817, 530, -1591.18f, 8020.39f, -22.2042f, 4.59022f}, + {18822, 530, -1588.0f, 8019.0f, -22.2042f, 4.06662f}, + {21485, 530, -1521.93f, 7927.37f, -20.2299f, 3.24631f}, + {21487, 530, -1540.33f, 7971.95f, -20.7186f, 3.07178f}, + {21488, 530, -1570.01f, 7993.8f, -22.4505f, 5.02655f}, + {18256, 530, -1654.06f, 8000.46f, -26.59f, 3.37f}, + {18256, 530, -1487.18f, 7899.1f, -19.53f, 0.954f}, + {18256, 530, -1480.88f, 7908.79f, -19.19f, 4.485f}, + {18256, 530, -1540.56f, 7995.44f, -20.45f, 0.947f}, + {18256, 530, -1546.95f, 8000.85f, -20.72f, 6.035f}, + {18256, 530, -1595.31f, 7860.53f, -21.51f, 3.747f}, + {18256, 530, -1642.31f, 7995.59f, -25.8f, 3.317f}, + {18256, 530, -1545.46f, 7995.35f, -20.63f, 1.094f}, + {18256, 530, -1487.58f, 7907.99f, -19.27f, 5.567f}, + {18256, 530, -1651.54f, 7988.56f, -26.5289f, 2.98451f}, + {18256, 530, -1602.46f, 7866.43f, -22.1177f, 4.74729f}, + {18256, 530, -1591.22f, 7875.29f, -22.3536f, 4.34587f}, + {18256, 530, -1603.75f, 8000.36f, -24.18f, 4.516f}, + {18256, 530, -1585.73f, 7994.68f, -23.29f, 4.439f}, + {18256, 530, -1595.5f, 7991.27f, -23.53f, 4.738f} }; enum WyvernStates diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index 30ca2e8cb3f..a3ef9ce7b5c 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -244,7 +244,7 @@ class OutdoorPvP_silithus : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPSI(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp index 2877c5c0dcc..f9590634008 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp @@ -366,7 +366,7 @@ class OutdoorPvP_terokkar_forest : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPTF(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp index df526ed068d..c4b811859ef 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp @@ -256,8 +256,8 @@ OPvPCapturePointZM_GraveYard::OPvPCapturePointZM_GraveYard(OutdoorPvP* pvp) m_GraveYardState = ZM_GRAVEYARD_N; m_FlagCarrierGUID = 0; // add field scouts here - AddCreature(ZM_ALLIANCE_FIELD_SCOUT, ZM_AllianceFieldScout.entry, ZM_AllianceFieldScout.teamval, ZM_AllianceFieldScout.map, ZM_AllianceFieldScout.x, ZM_AllianceFieldScout.y, ZM_AllianceFieldScout.z, ZM_AllianceFieldScout.o); - AddCreature(ZM_HORDE_FIELD_SCOUT, ZM_HordeFieldScout.entry, ZM_HordeFieldScout.teamval, ZM_HordeFieldScout.map, ZM_HordeFieldScout.x, ZM_HordeFieldScout.y, ZM_HordeFieldScout.z, ZM_HordeFieldScout.o); + AddCreature(ZM_ALLIANCE_FIELD_SCOUT, ZM_AllianceFieldScout.entry, ZM_AllianceFieldScout.map, ZM_AllianceFieldScout.x, ZM_AllianceFieldScout.y, ZM_AllianceFieldScout.z, ZM_AllianceFieldScout.o); + AddCreature(ZM_HORDE_FIELD_SCOUT, ZM_HordeFieldScout.entry, ZM_HordeFieldScout.map, ZM_HordeFieldScout.x, ZM_HordeFieldScout.y, ZM_HordeFieldScout.z, ZM_HordeFieldScout.o); // add neutral banner AddObject(0, ZM_Banner_N.entry, ZM_Banner_N.map, ZM_Banner_N.x, ZM_Banner_N.y, ZM_Banner_N.z, ZM_Banner_N.o, ZM_Banner_N.rot0, ZM_Banner_N.rot1, ZM_Banner_N.rot2, ZM_Banner_N.rot3); } @@ -460,7 +460,7 @@ class OutdoorPvP_zangarmarsh : public OutdoorPvPScript { } - OutdoorPvP* GetOutdoorPvP() const OVERRIDE + OutdoorPvP* GetOutdoorPvP() const override { return new OutdoorPvPZM(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index 4b810ddb15f..fdd093a1bfe 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -52,10 +52,10 @@ const go_type ZM_Banner_H = { 182528, 530, 253.54f, 7083.81f, 36.7728f, -0.01745 const go_type ZM_Banner_N = { 182529, 530, 253.54f, 7083.81f, 36.7728f, -0.017453f, 0.0f, 0.0f, 0.008727f, -0.999962f }; // horde field scout spawn data -const creature_type ZM_HordeFieldScout = {18564, 67, 530, 296.625f, 7818.4f, 42.6294f, 5.18363f}; +const creature_type ZM_HordeFieldScout = {18564, 530, 296.625f, 7818.4f, 42.6294f, 5.18363f}; // alliance field scout spawn data -const creature_type ZM_AllianceFieldScout = {18581, 469, 530, 374.395f, 6230.08f, 22.8351f, 0.593412f}; +const creature_type ZM_AllianceFieldScout = {18581, 530, 374.395f, 6230.08f, 22.8351f, 0.593412f}; enum ZMCreatureTypes { diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 5266a7bd137..ea877435acf 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -54,25 +54,29 @@ class npc_stolen_soul : public CreatureScript public: npc_stolen_soul() : CreatureScript("npc_stolen_soul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_stolen_soulAI(creature); } struct npc_stolen_soulAI : public ScriptedAI { - npc_stolen_soulAI(Creature* creature) : ScriptedAI(creature) { } + npc_stolen_soulAI(Creature* creature) : ScriptedAI(creature) + { + myClass = CLASS_NONE; + Class_Timer = 1000; + } uint8 myClass; uint32 Class_Timer; - void Reset() OVERRIDE + void Reset() override { myClass = CLASS_NONE; Class_Timer = 1000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } void SetMyClass(uint8 myclass) @@ -80,7 +84,7 @@ public: myClass = myclass; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -157,7 +161,7 @@ class boss_exarch_maladaar : public CreatureScript public: boss_exarch_maladaar() : CreatureScript("boss_exarch_maladaar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_exarch_maladaarAI(creature); } @@ -180,7 +184,7 @@ public: bool HasTaunted; bool Avatar_summoned; - void Reset() OVERRIDE + void Reset() override { soulmodel = 0; soulholder = 0; @@ -193,7 +197,7 @@ public: Avatar_summoned = false; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!HasTaunted && me->IsWithinDistInMap(who, 150.0f)) @@ -205,12 +209,12 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == ENTRY_STOLEN_SOUL) { @@ -219,7 +223,7 @@ public: summoned->SetDisplayId(soulmodel); summoned->setFaction(me->getFaction()); - if (Unit* target = Unit::GetUnit(*me, soulholder)) + if (Unit* target = ObjectAccessor::GetUnit(*me, soulholder)) { CAST_AI(npc_stolen_soul::npc_stolen_soulAI, summoned->AI())->SetMyClass(soulclass); @@ -228,7 +232,7 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (rand()%2) return; @@ -236,14 +240,14 @@ public: Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); //When Exarch Maladar is defeated D'ore appear. me->SummonCreature(19412, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 600000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -308,7 +312,7 @@ class npc_avatar_of_martyred : public CreatureScript public: npc_avatar_of_martyred() : CreatureScript("npc_avatar_of_martyred") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_avatar_of_martyredAI(creature); } @@ -319,16 +323,16 @@ public: uint32 Mortal_Strike_timer; - void Reset() OVERRIDE + void Reset() override { Mortal_Strike_timer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index f73ff46908b..26e9df6620c 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -53,7 +53,7 @@ class boss_shirrak_the_dead_watcher : public CreatureScript public: boss_shirrak_the_dead_watcher() : CreatureScript("boss_shirrak_the_dead_watcher") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_shirrak_the_dead_watcherAI(creature); } @@ -71,7 +71,7 @@ public: uint64 FocusedTargetGUID; - void Reset() OVERRIDE + void Reset() override { Inhibitmagic_Timer = 0; Attractmagic_Timer = 28000; @@ -80,10 +80,10 @@ public: FocusedTargetGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned && summoned->GetEntry() == NPC_FOCUS_FIRE) { @@ -92,12 +92,12 @@ public: summoned->SetLevel(me->getLevel()); summoned->AddUnitState(UNIT_STATE_ROOT); - if (Unit* pFocusedTarget = Unit::GetUnit(*me, FocusedTargetGUID)) + if (Unit* pFocusedTarget = ObjectAccessor::GetUnit(*me, FocusedTargetGUID)) summoned->AI()->AttackStart(pFocusedTarget); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Inhibitmagic_Timer if (Inhibitmagic_Timer <= diff) @@ -165,7 +165,7 @@ class npc_focus_fire : public CreatureScript public: npc_focus_fire() : CreatureScript("npc_focus_fire") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_focus_fireAI(creature); } @@ -179,16 +179,16 @@ public: uint32 FieryBlast_Timer; bool fiery1, fiery2; - void Reset() OVERRIDE + void Reset() override { FieryBlast_Timer = 3000+(rand()%1000); fiery1 = fiery2 = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp index b003039f484..4b8a764fa03 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp @@ -32,7 +32,7 @@ class instance_auchenai_crypts : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_auchenai_crypts_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index 7ccf7a7f9b2..67cc6b99e93 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -71,7 +71,7 @@ class boss_nexusprince_shaffar : public CreatureScript public: boss_nexusprince_shaffar() : CreatureScript("boss_nexusprince_shaffar") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_nexusprince_shaffarAI(creature); } @@ -91,7 +91,7 @@ public: bool HasTaunted; bool CanBlink; - void Reset() OVERRIDE + void Reset() override { Blink_Timer = 1500; Beacon_Timer = 10000; @@ -110,13 +110,13 @@ public: me->SummonCreature(NPC_BEACON, posX + dist, posY, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 7200000); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { summons.DespawnAll(); ScriptedAI::EnterEvadeMode(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!HasTaunted && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f)) @@ -126,7 +126,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -134,7 +134,7 @@ public: summons.DoZoneInCombat(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_BEACON) { @@ -147,23 +147,23 @@ public: summons.Summon(summoned); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { summons.Despawn(summon); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEAD); summons.DespawnAll(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -232,7 +232,7 @@ class npc_ethereal_beacon : public CreatureScript public: npc_ethereal_beacon() : CreatureScript("npc_ethereal_beacon") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ethereal_beaconAI(creature); } @@ -252,14 +252,14 @@ public: me->Kill(me); } - void Reset() OVERRIDE + void Reset() override { Apprentice_Timer = DUNGEON_MODE(20000, 10000); ArcaneBolt_Timer = 1000; Check_Timer = 1000; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { // Send Shaffar to fight Creature* Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100); @@ -272,12 +272,12 @@ public: Shaffar->AI()->AttackStart(who); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me->GetVictim()); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -324,7 +324,7 @@ class npc_ethereal_apprentice : public CreatureScript public: npc_ethereal_apprentice() : CreatureScript("npc_ethereal_apprentice") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ethereal_apprenticeAI(creature); } @@ -337,13 +337,13 @@ public: bool isFireboltTurn; - void Reset() OVERRIDE + void Reset() override { Cast_Timer = 3000; isFireboltTurn = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -380,14 +380,14 @@ public: { npc_yorAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_DOUBLE_BREATH, urand(6000,9000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -414,7 +414,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_yorAI(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp index 267acbc95eb..9a1d686f688 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp @@ -45,7 +45,7 @@ class boss_pandemonius : public CreatureScript public: boss_pandemonius() : CreatureScript("boss_pandemonius") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_pandemoniusAI(creature); } @@ -60,29 +60,29 @@ public: uint32 DarkShell_Timer; uint32 VoidBlast_Counter; - void Reset() OVERRIDE + void Reset() override { VoidBlast_Timer = 8000+rand()%15000; DarkShell_Timer = 20000; VoidBlast_Counter = 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp index baf8d2b7d01..48bea45a95b 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp @@ -32,7 +32,7 @@ class instance_mana_tombs : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_mana_tombs_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp index d888121403f..1787933143c 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -69,7 +69,7 @@ class boss_anzu : public CreatureScript { boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) { } - void Reset() OVERRIDE + void Reset() override { //_Reset(); events.Reset(); @@ -77,19 +77,19 @@ class boss_anzu : public CreatureScript _under66Percent = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14000); events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (me->HealthBelowPctDamaged(33, damage) && !_under33Percent) { @@ -106,7 +106,7 @@ class boss_anzu : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -157,7 +157,7 @@ class boss_anzu : public CreatureScript bool _under66Percent; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSethekkHallsAI<boss_anzuAI>(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index 25fdf84e739..098d35a292e 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -73,7 +73,7 @@ public: { boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); summon90 = false; @@ -81,7 +81,7 @@ public: summon10 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FLAME_SHOCK, 2000); @@ -93,19 +93,19 @@ public: Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summoned->AI()->AttackStart(target); @@ -124,7 +124,7 @@ public: DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -192,7 +192,7 @@ public: bool summon10; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSethekkHallsAI<boss_darkweaver_sythAI>(creature); } @@ -213,16 +213,16 @@ public: uint32 flameshock_timer; uint32 flamebuffet_timer; - void Reset() OVERRIDE + void Reset() override { me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); flameshock_timer = 2500; flamebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -247,7 +247,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_syth_fireAI(creature); } @@ -258,7 +258,7 @@ class npc_syth_arcane : public CreatureScript public: npc_syth_arcane() : CreatureScript("npc_syth_arcane") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_syth_arcaneAI(creature); } @@ -272,16 +272,16 @@ public: uint32 arcaneshock_timer; uint32 arcanebuffet_timer; - void Reset() OVERRIDE + void Reset() override { me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true); arcaneshock_timer = 2500; arcanebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -312,7 +312,7 @@ class npc_syth_frost : public CreatureScript public: npc_syth_frost() : CreatureScript("npc_syth_frost") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_syth_frostAI(creature); } @@ -326,16 +326,16 @@ public: uint32 frostshock_timer; uint32 frostbuffet_timer; - void Reset() OVERRIDE + void Reset() override { me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); frostshock_timer = 2500; frostbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -367,7 +367,7 @@ class npc_syth_shadow : public CreatureScript public: npc_syth_shadow() : CreatureScript("npc_syth_shadow") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_syth_shadowAI(creature); } @@ -381,16 +381,16 @@ public: uint32 shadowshock_timer; uint32 shadowbuffet_timer; - void Reset() OVERRIDE + void Reset() override { me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); shadowshock_timer = 2500; shadowbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp index e6c416a3b61..cd53b5c18c1 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp @@ -60,7 +60,7 @@ public: { boss_talon_king_ikissAI(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); ArcaneVolley_Timer = 5000; @@ -72,7 +72,7 @@ public: ManaShield = false; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->GetVictim() && me->CanCreatureAttack(who)) { @@ -94,25 +94,25 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -200,7 +200,7 @@ public: bool Intro; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetSethekkHallsAI<boss_talon_king_ikissAI>(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index d70cc5dd566..308e5e80105 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -38,7 +38,7 @@ class instance_sethekk_halls : public InstanceMapScript LoadDoorData(doorData); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { if (creature->GetEntry() == NPC_ANZU) { @@ -49,19 +49,19 @@ class instance_sethekk_halls : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { if (go->GetEntry() == GO_IKISS_DOOR) AddDoor(go, true); } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { if (go->GetEntry() == GO_IKISS_DOOR) AddDoor(go, false); } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -72,7 +72,7 @@ class instance_sethekk_halls : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -105,7 +105,7 @@ class instance_sethekk_halls : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_sethekk_halls_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index e0f25bb18e2..a48f5245273 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -65,7 +65,7 @@ class boss_ambassador_hellmaw : public CreatureScript _intro = false; } - void Reset() OVERRIDE + void Reset() override { if (!me->IsAlive()) return; @@ -81,7 +81,7 @@ class boss_ambassador_hellmaw : public CreatureScript DoAction(ACTION_AMBASSADOR_HELLMAW_BANISH); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasAura(SPELL_BANISH)) return; @@ -89,7 +89,7 @@ class boss_ambassador_hellmaw : public CreatureScript npc_escortAI::MoveInLineOfSight(who); } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE + void WaypointReached(uint32 /*waypointId*/) override { } @@ -118,25 +118,25 @@ class boss_ambassador_hellmaw : public CreatureScript Start(true, false, 0, NULL, false, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _instance->SetBossState(DATA_AMBASSADOR_HELLMAW, IN_PROGRESS); Talk(SAY_AGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _instance->SetBossState(DATA_AMBASSADOR_HELLMAW, DONE); Talk(SAY_DEATH); } - void UpdateEscortAI(uint32 const diff) OVERRIDE + void UpdateEscortAI(uint32 const diff) override { if (!UpdateVictim()) return; @@ -181,7 +181,7 @@ class boss_ambassador_hellmaw : public CreatureScript bool _intro; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetShadowLabyrinthAI<boss_ambassador_hellmawAI>(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp index d84181046de..2b7376a527b 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp @@ -64,12 +64,12 @@ class boss_blackheart_the_inciter : public CreatureScript { boss_blackheart_the_inciterAI(Creature* creature) : BossAI(creature, DATA_BLACKHEART_THE_INCITER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_INCITE_CHAOS, 20000); @@ -79,19 +79,19 @@ class boss_blackheart_the_inciter : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -137,7 +137,7 @@ class boss_blackheart_the_inciter : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetShadowLabyrinthAI<boss_blackheart_the_inciterAI>(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index 2bdd86afe47..d454b646647 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -90,7 +90,7 @@ class boss_grandmaster_vorpil : public CreatureScript _intro = false; } - void Reset() OVERRIDE + void Reset() override { _Reset(); _helpYell = false; @@ -116,19 +116,19 @@ class boss_grandmaster_vorpil : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SHADOWBOLT_VOLLEY, urand(7000, 14000)); @@ -141,7 +141,7 @@ class boss_grandmaster_vorpil : public CreatureScript SummonPortals(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { BossAI::MoveInLineOfSight(who); @@ -152,7 +152,7 @@ class boss_grandmaster_vorpil : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -209,7 +209,7 @@ class boss_grandmaster_vorpil : public CreatureScript bool _helpYell; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetShadowLabyrinthAI<boss_grandmaster_vorpilAI>(creature); } @@ -227,15 +227,15 @@ class npc_voidtraveler : public CreatureScript _instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { _moveTimer = 0; _sacrificed = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_moveTimer <= diff) { @@ -270,7 +270,7 @@ class npc_voidtraveler : public CreatureScript bool _sacrificed; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetShadowLabyrinthAI<npc_voidtravelerAI>(creature); } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index 130cdf31d42..31adf1522d4 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -64,7 +64,7 @@ class boss_murmur : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { _Reset(); events.ScheduleEvent(EVENT_SONIC_BOOM, 30000); @@ -84,17 +84,17 @@ class boss_murmur : public CreatureScript me->ResetPlayerDamageReq(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -167,7 +167,7 @@ class boss_murmur : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetShadowLabyrinthAI<boss_murmurAI>(creature); } @@ -183,7 +183,7 @@ class spell_murmur_sonic_boom : public SpellScriptLoader { PrepareSpellScript(spell_murmur_sonic_boom_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SONIC_BOOM_EFFECT)) return false; @@ -195,13 +195,13 @@ class spell_murmur_sonic_boom : public SpellScriptLoader GetCaster()->CastSpell((Unit*)NULL, SPELL_SONIC_BOOM_EFFECT, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_murmur_sonic_boom_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_murmur_sonic_boom_SpellScript(); } @@ -223,13 +223,13 @@ class spell_murmur_sonic_boom_effect : public SpellScriptLoader SetHitDamage(target->CountPctFromMaxHealth(80)); /// @todo: find correct value } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_murmur_sonic_boom_effect_SpellScript::CalcDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_murmur_sonic_boom_effect_SpellScript(); } @@ -265,13 +265,13 @@ class spell_murmur_thundering_storm : public SpellScriptLoader targets.remove_if(ThunderingStormCheck(GetCaster())); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_murmur_thundering_storm_SpellScript::FilterTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_murmur_thundering_storm_SpellScript(); } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp index 9e324d99879..4df80a0e15b 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp @@ -44,7 +44,7 @@ class instance_shadow_labyrinth : public InstanceMapScript FelOverseerCount = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -67,7 +67,7 @@ class instance_shadow_labyrinth : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -80,7 +80,7 @@ class instance_shadow_labyrinth : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -110,7 +110,7 @@ class instance_shadow_labyrinth : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -122,7 +122,7 @@ class instance_shadow_labyrinth : public InstanceMapScript return 0; } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -134,7 +134,7 @@ class instance_shadow_labyrinth : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -145,7 +145,7 @@ class instance_shadow_labyrinth : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -183,7 +183,7 @@ class instance_shadow_labyrinth : public InstanceMapScript uint32 FelOverseerCount; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_shadow_labyrinth_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index ba8eb2194f5..5edae14d47a 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -65,7 +65,7 @@ public: { npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) { } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override { if (action == 1) { @@ -76,7 +76,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spirit_of_olumAI(creature); } @@ -98,22 +98,22 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { events.ScheduleEvent(EVENT_GET_CHANNELERS, 3000); enteredCombat = false; } - void JustDied(Unit* /*killer*/) OVERRIDE { } + void JustDied(Unit* /*killer*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_CLEAVE, 5000); events.ScheduleEvent(EVENT_IGNORED, 7000); enteredCombat = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!enteredCombat) @@ -155,12 +155,12 @@ public: case EVENT_SET_CHANNELERS: { for (std::list<uint64>::const_iterator itr = bloodmage.begin(); itr != bloodmage.end(); ++itr) - if (Creature* bloodmage = (Unit::GetCreature(*me, *itr))) - bloodmage->AI()->DoCast(SPELL_SUMMON_CHANNEL); + if (Creature* bloodmage = (ObjectAccessor::GetCreature(*me, *itr))) + bloodmage->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL); for (std::list<uint64>::const_iterator itr = deathshaper.begin(); itr != deathshaper.end(); ++itr) - if (Creature* deathshaper = (Unit::GetCreature(*me, *itr))) - deathshaper->AI()->DoCast(SPELL_SUMMON_CHANNEL); + if (Creature* deathshaper = (ObjectAccessor::GetCreature(*me, *itr))) + deathshaper->CastSpell((Unit*)NULL, SPELL_SUMMON_CHANNEL); events.ScheduleEvent(EVENT_SET_CHANNELERS, 12000); @@ -205,7 +205,7 @@ public: bool enteredCombat; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_wrathbone_flayerAI>(creature); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp index a6a16f83a26..f03caa37cb2 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp @@ -17,14 +17,14 @@ */ /* ScriptData -SDName: Boss_Bloodboil -SD%Complete: 80 -SDComment: Bloodboil not working correctly, missing enrage -SDCategory: Black Temple +Name: Boss_Bloodboil +Complete: 80 +Category: Black Temple EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "black_temple.h" enum Bloodboil @@ -54,15 +54,12 @@ enum Bloodboil SPELL_BERSERK = 45078 }; - -//This is used to sort the players by distance in preparation for the Bloodboil cast. - class boss_gurtogg_bloodboil : public CreatureScript { public: boss_gurtogg_bloodboil() : CreatureScript("boss_gurtogg_bloodboil") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature); } @@ -93,7 +90,7 @@ public: bool Phase1; - void Reset() OVERRIDE + void Reset() override { instance->SetBossState(DATA_GURTOGG_BLOODBOIL, NOT_STARTED); @@ -118,73 +115,28 @@ public: me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); Talk(SAY_AGGRO); instance->SetBossState(DATA_GURTOGG_BLOODBOIL, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_GURTOGG_BLOODBOIL, DONE); Talk(SAY_DEATH); } - // Note: This seems like a very complicated fix. The fix needs to be handled by the core, as implementation of limited-target AoE spells are still not limited. - void CastBloodboil() - { - // Get the Threat List - std::list<HostileReference*> m_threatlist = me->getThreatManager().getThreatList(); - - if (m_threatlist.empty()) // He doesn't have anyone in his threatlist, useless to continue - return; - - std::list<Unit*> targets; - std::list<HostileReference*>::const_iterator itr = m_threatlist.begin(); - for (; itr!= m_threatlist.end(); ++itr) //store the threat list in a different container - { - Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); - //only on alive players - if (target && target->IsAlive() && target->GetTypeId() == TYPEID_PLAYER) - targets.push_back(target); - } - - //Sort the list of players - targets.sort(Trinity::ObjectDistanceOrderPred(me, false)); - //Resize so we only get top 5 - targets.resize(5); - - //Aura each player in the targets list with Bloodboil. Aura code copied+pasted from Aura command in Level3.cpp - /*SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_BLOODBOIL); - if (spellInfo) - { - for (std::list<Unit*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) - { - Unit* target = *itr; - if (!target) return; - for (uint32 i = 0; i<3; ++i) - { - uint8 eff = spellInfo->Effect[i]; - if (eff >= TOTAL_SPELL_EFFECTS) - continue; - - Aura* Aur = new Aura(spellInfo, i, target, target, target); - target->AddAura(Aur); - } - } - }*/ - } - void RevertThreatOnTarget(uint64 guid) { - if (Unit* unit = Unit::GetUnit(*me, guid)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, guid)) { if (DoGetThreat(unit)) DoModifyThreatPercent(unit, -100); @@ -193,7 +145,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -247,8 +199,7 @@ public: { if (BloodboilCount < 5) // Only cast it five times. { - //CastBloodboil(); // Causes issues on windows, so is commented out. - DoCastVictim(SPELL_BLOODBOIL); + DoCastAOE(SPELL_BLOODBOIL); ++BloodboilCount; BloodboilTimer = 10000*BloodboilCount; } @@ -274,7 +225,7 @@ public: { if (Phase1) { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { Phase1 = false; @@ -327,7 +278,41 @@ public: }; +// 42005 - Bloodboil +class spell_gurtogg_bloodboil_bloodboil : public SpellScriptLoader +{ + public: + spell_gurtogg_bloodboil_bloodboil() : SpellScriptLoader("spell_gurtogg_bloodboil_bloodboil") { } + + class spell_gurtogg_bloodboil_bloodboil_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gurtogg_bloodboil_bloodboil_SpellScript); + + void FilterTargets(std::list<WorldObject*>& targets) + { + if (targets.size() <= 5) + return; + + // Sort the list of players + targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false)); + // Resize so we only get top 5 + targets.resize(5); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gurtogg_bloodboil_bloodboil_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gurtogg_bloodboil_bloodboil_SpellScript(); + } +}; + void AddSC_boss_gurtogg_bloodboil() { new boss_gurtogg_bloodboil(); + new spell_gurtogg_bloodboil_bloodboil(); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index d74aecb9b25..b1c3d607396 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -379,14 +379,14 @@ public: { flame_of_azzinothAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { FlameBlastTimer = 15000; CheckTimer = 5000; GlaiveGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } @@ -431,7 +431,7 @@ public: GlaiveGUID = guid; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -460,7 +460,7 @@ public: uint64 GlaiveGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new flame_of_azzinothAI(creature); } @@ -481,11 +481,11 @@ public: AkamaGUID = 0; } - void Reset() OVERRIDE; + void Reset() override; - void JustSummoned(Creature* summon) OVERRIDE; + void JustSummoned(Creature* summon) override; - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { if (summon->GetCreatureTemplate()->Entry == FLAME_OF_AZZINOTH) { @@ -502,7 +502,7 @@ public: Summons.Despawn(summon); } - void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) OVERRIDE + void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) override { if (FlightCount == 7) // change hover point { @@ -517,13 +517,13 @@ public: Timer[EVENT_FLIGHT_SEQUENCE] = 1000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->setActive(true); DoZoneInCombat(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || Phase >= PHASE_TALK_SEQUENCE) return; @@ -534,10 +534,10 @@ public: ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit*) OVERRIDE { } + void MoveInLineOfSight(Unit*) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -547,7 +547,7 @@ public: instance->HandleGameObject(instance->GetData64(i), true); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -555,7 +555,7 @@ public: Talk(SAY_ILLIDAN_KILL); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (damage >= me->GetHealth() && done_by != me) damage = 0; @@ -563,7 +563,7 @@ public: done_by->AddThreat(me, -(3*(float)damage)/4); // do not let maiev tank him } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_GLAIVE_RETURNS) // Re-equip our warblades! { @@ -596,9 +596,9 @@ public: if (Conversation[count].creature == ILLIDAN_STORMRAGE) creature = me; else if (Conversation[count].creature == AKAMA) - creature = (Unit::GetCreature((*me), AkamaGUID)); + creature = (ObjectAccessor::GetCreature((*me), AkamaGUID)); else if (Conversation[count].creature == MAIEV_SHADOWSONG) - creature = (Unit::GetCreature((*me), MaievGUID)); + creature = (ObjectAccessor::GetCreature((*me), MaievGUID)); if (creature) { @@ -831,7 +831,7 @@ public: { if (GlaiveGUID[i]) { - Unit* Glaive = Unit::GetUnit(*me, GlaiveGUID[i]); + Unit* Glaive = ObjectAccessor::GetUnit(*me, GlaiveGUID[i]); if (Glaive) { Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us @@ -917,7 +917,7 @@ public: ++TransformCount; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if ((!UpdateVictim()) && Phase < PHASE_TALK_SEQUENCE) return; @@ -1121,7 +1121,7 @@ public: SummonList Summons; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_illidan_stormrageAI>(creature); } @@ -1139,7 +1139,7 @@ public: { boss_maievAI(Creature* creature) : ScriptedAI(creature) { }; - void Reset() OVERRIDE + void Reset() override { MaxTimer = 0; Phase = PHASE_NORMAL_MAIEV; @@ -1151,17 +1151,17 @@ public: me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, 45738); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterEvadeMode() OVERRIDE { } + void EnterEvadeMode() override { } void GetIllidanGUID(uint64 guid) { IllidanGUID = guid; } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != IllidanGUID) damage = 0; @@ -1176,7 +1176,7 @@ public: } } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || Timer[EVENT_MAIEV_STEALTH]) return; @@ -1194,7 +1194,7 @@ public: ScriptedAI::AttackStart(who); } - void DoAction(int32 param) OVERRIDE + void DoAction(int32 param) override { if (param > PHASE_ILLIDAN_NULL && param < PHASE_ILLIDAN_MAX) EnterPhase(PhaseIllidan(param)); @@ -1266,7 +1266,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if ((!UpdateVictim()) && !Timer[EVENT_MAIEV_STEALTH]) @@ -1343,7 +1343,7 @@ public: uint32 MaxTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_maievAI(creature); } @@ -1362,7 +1362,7 @@ public: JustCreated = true; } - void Reset() OVERRIDE + void Reset() override { WalkCount = 0; instance->SetBossState(DATA_ILLIDAN_STORMRAGE, NOT_STARTED); @@ -1408,24 +1408,24 @@ public: } // 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() OVERRIDE + void EnterEvadeMode() override { me->RemoveAllAuras(); me->DeleteThreatList(); me->CombatStop(true); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void MovementInform(uint32 MovementType, uint32 /*Data*/) OVERRIDE + void MovementInform(uint32 MovementType, uint32 /*Data*/) override { if (MovementType == POINT_MOTION_TYPE) Timer = 1; } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (damage > me->GetHealth() || done_by->GetGUID() != IllidanGUID) damage = 0; @@ -1437,7 +1437,7 @@ public: std::vector<Unit*> eliteList; for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && unit->GetEntry() == ILLIDARI_ELITE) eliteList.push_back(unit); } @@ -1588,9 +1588,9 @@ public: Unit* Spirit[2] = { NULL, NULL }; if (ChannelCount <= 5) { - Channel = Unit::GetUnit(*me, ChannelGUID); - Spirit[0] = Unit::GetUnit(*me, SpiritGUID[0]); - Spirit[1] = Unit::GetUnit(*me, SpiritGUID[1]); + Channel = ObjectAccessor::GetUnit(*me, ChannelGUID); + Spirit[0] = ObjectAccessor::GetUnit(*me, SpiritGUID[0]); + Spirit[1] = ObjectAccessor::GetUnit(*me, SpiritGUID[1]); if (!Channel || !Spirit[0] || !Spirit[1]) return; } @@ -1666,7 +1666,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsVisible()) { @@ -1749,7 +1749,7 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); EnterPhase(PHASE_CHANNEL); @@ -1772,7 +1772,7 @@ public: uint32 Check_Timer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_akama_illidanAI>(creature); } @@ -1957,7 +1957,7 @@ public: { cage_trap_triggerAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { IllidanGUID = 0; @@ -1969,9 +1969,9 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Active) @@ -1996,7 +1996,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (DespawnTimer) { @@ -2007,7 +2007,7 @@ public: // if (IllidanGUID && !SummonedBeams) // { - // if (Unit* Illidan = Unit::GetUnit(*me, IllidanGUID) + // if (Unit* Illidan = ObjectAccessor::GetUnit(*me, IllidanGUID) // { // /// @todo Find proper spells and properly apply 'caged' Illidan effect // } @@ -2022,7 +2022,7 @@ public: bool SummonedBeams; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new cage_trap_triggerAI(creature); } @@ -2033,7 +2033,7 @@ class gameobject_cage_trap : public GameObjectScript public: gameobject_cage_trap() : GameObjectScript("gameobject_cage_trap") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { float x, y, z; player->GetPosition(x, y, z); @@ -2055,34 +2055,34 @@ public: { shadow_demonAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void Reset() OVERRIDE + void Reset() override { TargetGUID = 0; DoCast(me, SPELL_SHADOW_DEMON_PASSIVE, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Unit* target = Unit::GetUnit(*me, TargetGUID)) + if (Unit* target = ObjectAccessor::GetUnit(*me, TargetGUID)) target->RemoveAurasDueToSpell(SPELL_PARALYZE); } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) return; - if (me->GetVictim()->GetTypeId() != TYPEID_PLAYER) + if (me->EnsureVictim()->GetTypeId() != TYPEID_PLAYER) return; // Only cast the below on players. - if (!me->GetVictim()->HasAura(SPELL_PARALYZE)) + if (!me->EnsureVictim()->HasAura(SPELL_PARALYZE)) { - TargetGUID = me->GetVictim()->GetGUID(); + TargetGUID = me->EnsureVictim()->GetGUID(); me->AddThreat(me->GetVictim(), 10000000.0f); DoCastVictim(SPELL_PURPLE_BEAM, true); DoCastVictim(SPELL_PARALYZE, true); @@ -2096,7 +2096,7 @@ public: uint64 TargetGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new shadow_demonAI(creature); } @@ -2111,14 +2111,14 @@ public: { blade_of_azzinothAI(Creature* creature) : NullCreatureAI(creature) { } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE) me->SetDisplayId(MODEL_BLADE);// appear when hit by Illidan's glaive } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new blade_of_azzinothAI(creature); } @@ -2137,7 +2137,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { IllidanGUID = instance->GetData64(DATA_ILLIDAN_STORMRAGE); @@ -2145,7 +2145,7 @@ public: DoCast(me, SPELL_SHADOWFIEND_PASSIVE, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } @@ -2154,10 +2154,10 @@ public: { if (me->isAttackReady() && me->IsWithinMeleeRange(me->GetVictim())) { - if (!me->GetVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND) - && !me->GetVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2)) + if (!me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND) + && !me->EnsureVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2)) { - if (Creature* illidan = Unit::GetCreature((*me), IllidanGUID))// summon only in 1. phase + if (Creature* illidan = ObjectAccessor::GetCreature((*me), IllidanGUID))// summon only in 1. phase if (CAST_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->Phase == PHASE_NORMAL) me->CastSpell(me->GetVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); // do not stack } @@ -2166,7 +2166,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->GetVictim()) { @@ -2202,7 +2202,7 @@ public: uint32 CheckTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_parasitic_shadowfiendAI>(creature); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp index 7081607e755..db3fcea35db 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp @@ -82,7 +82,7 @@ class boss_mother_shahraz : public CreatureScript public: boss_mother_shahraz() : CreatureScript("boss_mother_shahraz") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_shahrazAI>(creature); } @@ -111,7 +111,7 @@ public: bool Enraged; - void Reset() OVERRIDE + void Reset() override { instance->SetBossState(DATA_MOTHER_SHAHRAZ, NOT_STARTED); @@ -133,7 +133,7 @@ public: Enraged = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetBossState(DATA_MOTHER_SHAHRAZ, IN_PROGRESS); @@ -141,12 +141,12 @@ public: Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_MOTHER_SHAHRAZ, DONE); @@ -171,7 +171,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -245,7 +245,7 @@ public: { if (TargetGUID[i]) { - if (Unit* unit = Unit::GetUnit(*me, TargetGUID[i])) + if (Unit* unit = ObjectAccessor::GetUnit(*me, TargetGUID[i])) unit->CastSpell(unit, SPELL_ATTRACTION, true); TargetGUID[i] = 0; } diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index ca0ea947295..9b304c3cd7b 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -104,7 +104,7 @@ class npc_enslaved_soul : public CreatureScript public: npc_enslaved_soul() : CreatureScript("npc_enslaved_soul") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_enslaved_soulAI(creature); } @@ -115,15 +115,15 @@ public: uint64 ReliquaryGUID; - void Reset() OVERRIDE { ReliquaryGUID = 0; } + void Reset() override { ReliquaryGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, ENSLAVED_SOUL_PASSIVE, true); DoZoneInCombat(); } - void JustDied(Unit* /*killer*/) OVERRIDE; + void JustDied(Unit* /*killer*/) override; }; }; @@ -132,7 +132,7 @@ class boss_reliquary_of_souls : public CreatureScript public: boss_reliquary_of_souls() : CreatureScript("boss_reliquary_of_souls") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_reliquary_of_soulsAI>(creature); } @@ -156,7 +156,7 @@ public: uint32 SoulCount; uint32 SoulDeathCount; - void Reset() OVERRIDE + void Reset() override { instance->SetBossState(DATA_RELIQUARY_OF_SOULS, NOT_STARTED); @@ -175,7 +175,7 @@ public: me->RemoveAurasDueToSpell(SPELL_SUBMERGE); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) return; @@ -192,7 +192,7 @@ public: AttackStartNoMove(who); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { me->AddThreat(who, 10000.0f); DoZoneInCombat(); @@ -229,7 +229,7 @@ public: ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit) { DoModifyThreatPercent(unit, -100); @@ -239,12 +239,12 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_RELIQUARY_OF_SOULS, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Phase) return; @@ -258,7 +258,7 @@ public: Creature* Essence = NULL; if (EssenceGUID) { - Essence = Unit::GetCreature(*me, EssenceGUID); + Essence = ObjectAccessor::GetCreature(*me, EssenceGUID); if (!Essence) { EnterEvadeMode(); @@ -295,13 +295,13 @@ public: Timer = 1000; if (Phase == 3) { - if (!Essence->IsAlive()) + if (Essence && !Essence->IsAlive()) DoCast(me, 7, true); else return; } else { - if (Essence->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (Essence && Essence->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) { MergeThreatList(Essence); Essence->RemoveAllAuras(); @@ -312,31 +312,37 @@ public: break; case 4: Timer = 1500; - if (Essence->IsWithinDistInMap(me, 10)) + if (Essence) { - Essence->SetUInt32Value(UNIT_NPC_EMOTESTATE, 374); //rotate and disappear - Timer = 2000; - me->RemoveAurasDueToSpell(SPELL_SUBMERGE); - } - else - { - MergeThreatList(Essence); - Essence->RemoveAllAuras(); - Essence->DeleteThreatList(); - Essence->GetMotionMaster()->MoveFollow(me, 0, 0); - return; + if (Essence->IsWithinDistInMap(me, 10)) + { + Essence->SetUInt32Value(UNIT_NPC_EMOTESTATE, 374); //rotate and disappear + Timer = 2000; + me->RemoveAurasDueToSpell(SPELL_SUBMERGE); + } + else + { + MergeThreatList(Essence); + Essence->RemoveAllAuras(); + Essence->DeleteThreatList(); + Essence->GetMotionMaster()->MoveFollow(me, 0, 0); + return; + } } break; case 5: - if (Phase == 1) - { - Essence->AI()->Talk(SUFF_SAY_AFTER); - } - else + if (Essence) { - Essence->AI()->Talk(DESI_SAY_AFTER); + if (Phase == 1) + { + Essence->AI()->Talk(SUFF_SAY_AFTER); + } + else + { + Essence->AI()->Talk(DESI_SAY_AFTER); + } + Essence->DespawnOrUnsummon(); } - Essence->DespawnOrUnsummon(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); EssenceGUID = 0; SoulCount = 0; @@ -372,7 +378,7 @@ public: void npc_enslaved_soul::npc_enslaved_soulAI::JustDied(Unit* /*killer*/) { if (ReliquaryGUID) - if (Creature* Reliquary = (Unit::GetCreature((*me), ReliquaryGUID))) + if (Creature* Reliquary = (ObjectAccessor::GetCreature((*me), ReliquaryGUID))) ++(CAST_AI(boss_reliquary_of_souls::boss_reliquary_of_soulsAI, Reliquary->AI())->SoulDeathCount); DoCast(me, SPELL_SOUL_RELEASE, true); @@ -383,7 +389,7 @@ class boss_essence_of_suffering : public CreatureScript public: boss_essence_of_suffering() : CreatureScript("boss_essence_of_suffering") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_essence_of_sufferingAI(creature); } @@ -400,7 +406,7 @@ public: uint32 SoulDrainTimer; uint32 AuraTimer; - void Reset() OVERRIDE + void Reset() override { StatAuraGUID = 0; @@ -411,7 +417,7 @@ public: AuraTimer = 5000; } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (damage >= me->GetHealth()) { @@ -422,7 +428,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) { @@ -434,7 +440,7 @@ public: } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SUFF_SAY_SLAY); } @@ -448,7 +454,7 @@ public: ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); for (; itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && unit->IsAlive() && (unit->GetTypeId() == TYPEID_PLAYER)) // Only alive players targets.push_back(unit); } @@ -463,7 +469,7 @@ public: me->AddThreat(target, 1000000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (me->IsInCombat()) { @@ -506,7 +512,7 @@ class boss_essence_of_desire : public CreatureScript public: boss_essence_of_desire() : CreatureScript("boss_essence_of_desire") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_essence_of_desireAI(creature); } @@ -519,7 +525,7 @@ public: uint32 DeadenTimer; uint32 SoulShockTimer; - void Reset() OVERRIDE + void Reset() override { RuneShieldTimer = 60000; DeadenTimer = 30000; @@ -527,7 +533,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_CONFUSE, true); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by == me) return; @@ -546,7 +552,7 @@ public: } } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)) for (uint8 i = 0; i < 3; ++i) @@ -556,19 +562,19 @@ public: me->InterruptSpell(CURRENT_GENERIC_SPELL, false); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(DESI_SAY_FREED); DoZoneInCombat(); DoCast(me, AURA_OF_DESIRE, true); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(DESI_SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -609,7 +615,7 @@ class boss_essence_of_anger : public CreatureScript public: boss_essence_of_anger() : CreatureScript("boss_essence_of_anger") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_essence_of_angerAI(creature); } @@ -628,7 +634,7 @@ public: bool CheckedAggro; - void Reset() OVERRIDE + void Reset() override { AggroTargetGUID = 0; @@ -641,7 +647,7 @@ public: CheckedAggro = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(ANGER_SAY_FREED); @@ -649,35 +655,35 @@ public: DoCast(me, AURA_OF_ANGER, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(ANGER_SAY_DEATH); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(ANGER_SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) return; if (!CheckedAggro) { - AggroTargetGUID = me->GetVictim()->GetGUID(); + AggroTargetGUID = me->EnsureVictim()->GetGUID(); CheckedAggro = true; } if (CheckTankTimer <= diff) { - if (me->GetVictim()->GetGUID() != AggroTargetGUID) + if (me->EnsureVictim()->GetGUID() != AggroTargetGUID) { Talk(ANGER_SAY_BEFORE); DoCast(me, SPELL_SELF_SEETHE, true); - AggroTargetGUID = me->GetVictim()->GetGUID(); + AggroTargetGUID = me->EnsureVictim()->GetGUID(); } CheckTankTimer = 2000; } else CheckTankTimer -= diff; diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 48d1af27649..b59d073c17d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -171,7 +171,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void Reset() OVERRIDE + void Reset() override { if (!HasKilledAkamaAndReseting) { @@ -196,14 +196,14 @@ public: HasKilledAkamaAndReseting = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_SHADE_OF_AKAMA, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) { @@ -215,7 +215,7 @@ public: ScriptedAI::AttackStart(who); } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data == SETDATA_DATA && value == SETDATA_CHANNELER_DIED) me->RemoveAuraFromStack(SPELL_SHADE_SOUL_CHANNEL_2); @@ -223,7 +223,7 @@ public: UpdateSpeed(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL) { @@ -253,7 +253,7 @@ public: me->AddUnitState(UNIT_STATE_ROOT); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (HasKilledAkamaAndReseting) return; @@ -402,7 +402,7 @@ public: bool HasKilledAkamaAndReseting; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_shade_of_akamaAI>(creature); } @@ -424,7 +424,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->setFaction(FACTION_FRIENDLY); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -435,7 +435,7 @@ public: ShadeHasDied = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA))) if (Shade->IsAlive()) @@ -444,7 +444,7 @@ public: me->GetMotionMaster()->MoveIdle(); } - void SpellHit(Unit* /*caster*/, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_THREAT && !StartCombat) { @@ -457,13 +457,13 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 2000); events.ScheduleEvent(EVENT_DESTRUCTIVE_POISON, 5000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (StartChannel) { @@ -524,7 +524,7 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) OVERRIDE + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override { if (action == 0) { @@ -544,7 +544,7 @@ public: }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_akamaAI>(creature); } @@ -566,7 +566,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); @@ -575,16 +575,16 @@ public: events.ScheduleEvent(EVENT_CHANNEL, 2000); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA))) Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -616,7 +616,7 @@ public: EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_channelerAI>(creature); } @@ -638,7 +638,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { Summons.DespawnAll(); @@ -649,12 +649,12 @@ public: leftSide = true; } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { Summons.Summon(summon); } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data == SETDATA_DATA) { @@ -687,7 +687,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (doSpawning) { @@ -724,7 +724,7 @@ public: bool doSpawning; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_creature_generator_akamaAI>(creature); } @@ -747,7 +747,7 @@ public: startedBanishing = false; } - void Reset() OVERRIDE + void Reset() override { if (!startedBanishing) { @@ -768,29 +768,29 @@ public: switchToCombat = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Shade = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SHADE_OF_AKAMA))) Shade->AI()->SetData(SETDATA_DATA, SETDATA_CHANNELER_DIED); me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid))) + if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid))) CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!switchToCombat) return; ScriptedAI::AttackStart(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -846,7 +846,7 @@ public: bool switchToCombat; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_sorcererAI>(creature); } @@ -868,7 +868,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { summonerGuid = 0; @@ -876,18 +876,18 @@ public: AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid))) + if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid))) CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_HEROIC_STRIKE, 5000); events.ScheduleEvent(EVENT_SHIELD_BASH, urand(10000, 16000)); @@ -895,7 +895,7 @@ public: events.ScheduleEvent(EVENT_WINDFURY, urand(8000, 12000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -936,7 +936,7 @@ public: uint64 summonerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_defenderAI>(creature); } @@ -958,7 +958,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { summonerGuid = 0; @@ -966,24 +966,24 @@ public: AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid))) + if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid))) CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_DEBILITATING_POISON, urand(500, 2000)); events.ScheduleEvent(EVENT_EVISCERATE, urand(2000, 5000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1016,7 +1016,7 @@ public: uint64 summonerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_rogueAI>(creature); } @@ -1038,7 +1038,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { summonerGuid = 0; @@ -1046,24 +1046,24 @@ public: AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid))) + if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid))) CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 18000); events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 6000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1096,7 +1096,7 @@ public: uint64 summonerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_elementalistAI>(creature); } @@ -1118,7 +1118,7 @@ public: instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { spiritMend = false; chainHeal = false; @@ -1128,23 +1128,23 @@ public: AttackStart(target); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->DespawnOrUnsummon(5000); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { - if (Creature* summoner = (Unit::GetCreature((*me), summonerGuid))) + if (Creature* summoner = (ObjectAccessor::GetCreature((*me), summonerGuid))) CAST_AI(npc_creature_generator_akama::npc_creature_generator_akamaAI, summoner->AI())->JustSummoned(me); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_SPIRIT_HEAL, urand (5000, 6000)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -1193,7 +1193,7 @@ public: bool chainHeal; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ashtongue_spiritbinderAI>(creature); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index 551213b8b2c..a705659337f 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -63,7 +63,7 @@ class molten_flame : public CreatureScript public: molten_flame() : CreatureScript("molten_flame") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new molten_flameAI(creature); } @@ -72,7 +72,7 @@ public: { molten_flameAI(Creature* creature) : NullCreatureAI(creature) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { float x, y, z; me->GetNearPoint(me, x, y, z, 1, 100, float(M_PI*2*rand_norm())); @@ -88,7 +88,7 @@ class boss_supremus : public CreatureScript public: boss_supremus() : CreatureScript("boss_supremus") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_supremusAI>(creature); } @@ -105,7 +105,7 @@ public: SummonList summons; uint32 phase; - void Reset() OVERRIDE + void Reset() override { if (me->IsAlive()) instance->SetBossState(DATA_SUPREMUS, NOT_STARTED); @@ -116,7 +116,7 @@ public: summons.DespawnAll(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetBossState(DATA_SUPREMUS, IN_PROGRESS); @@ -152,19 +152,19 @@ public: events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000, GCD_CAST); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_SUPREMUS, DONE); summons.DespawnAll(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summons.Summon(summon); } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { summons.Despawn(summon); } @@ -178,7 +178,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && me->IsWithinMeleeRange(unit)) { if (unit->GetHealth() > health) @@ -192,7 +192,7 @@ public: return target; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -256,7 +256,7 @@ class npc_volcano : public CreatureScript public: npc_volcano() : CreatureScript("npc_volcano") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_volcanoAI(creature); } @@ -268,7 +268,7 @@ public: SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -278,17 +278,17 @@ public: } uint32 wait; - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void DoAction(int32 /*info*/) OVERRIDE + void DoAction(int32 /*info*/) override { me->RemoveAura(SPELL_VOLCANIC_ERUPTION); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (wait <= diff)//wait 3secs before casting { diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 8deac58461c..0d9537b8b7a 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -56,7 +56,7 @@ class npc_doom_blossom : public CreatureScript public: npc_doom_blossom() : CreatureScript("npc_doom_blossom") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_doom_blossomAI(creature); } @@ -69,16 +69,16 @@ public: uint32 ShadowBoltTimer; uint64 TeronGUID; - void Reset() OVERRIDE + void Reset() override { CheckTeronTimer = 5000; ShadowBoltTimer = 12000; TeronGUID = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } void Despawn() @@ -87,7 +87,7 @@ public: me->RemoveCorpse(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckTeronTimer <= diff) { @@ -95,7 +95,7 @@ public: { DoZoneInCombat(); - Creature* Teron = (Unit::GetCreature((*me), TeronGUID)); + Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID)); if ((Teron) && (!Teron->IsAlive() || Teron->IsInEvadeMode())) Despawn(); } @@ -125,7 +125,7 @@ class npc_shadowy_construct : public CreatureScript public: npc_shadowy_construct() : CreatureScript("npc_shadowy_construct") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_shadowy_constructAI(creature); } @@ -140,7 +140,7 @@ public: uint32 CheckPlayerTimer; uint32 CheckTeronTimer; - void Reset() OVERRIDE + void Reset() override { GhostGUID = 0; TeronGUID = 0; @@ -149,9 +149,9 @@ public: CheckTeronTimer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || (!who->IsAlive()) || (who->GetGUID() == GhostGUID)) @@ -161,7 +161,7 @@ public: } /* Comment it out for now. NOTE TO FUTURE DEV: UNCOMMENT THIS OUT ONLY AFTER MIND CONTROL IS IMPLEMENTED - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != GhostGUID) damage = 0; // Only the ghost can deal damage. @@ -177,7 +177,7 @@ public: std::list<Unit*> targets; for (; itr != threatlist.end(); ++itr) { - Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (unit && unit->IsAlive()) targets.push_back(unit); } @@ -186,11 +186,11 @@ public: if (target && me->IsWithinDistInMap(target, me->GetAttackDistance(target))) { DoCast(target, SPELL_ATROPHY); - me->AI()->AttackStart(target); + AttackStart(target); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckPlayerTimer <= diff) { @@ -200,7 +200,7 @@ public: if (CheckTeronTimer <= diff) { - Creature* Teron = (Unit::GetCreature((*me), TeronGUID)); + Creature* Teron = (ObjectAccessor::GetCreature((*me), TeronGUID)); if (!Teron || !Teron->IsAlive() || Teron->IsInEvadeMode()) me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); @@ -215,7 +215,7 @@ class boss_teron_gorefiend : public CreatureScript public: boss_teron_gorefiend() : CreatureScript("boss_teron_gorefiend") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_teron_gorefiendAI>(creature); } @@ -244,7 +244,7 @@ public: bool Intro; bool Done; - void Reset() OVERRIDE + void Reset() override { instance->SetBossState(DATA_TERON_GOREFIEND, NOT_STARTED); @@ -265,9 +265,9 @@ public: Done = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Intro && who->GetTypeId() == TYPEID_PLAYER && me->CanCreatureAttack(who)) @@ -288,12 +288,12 @@ public: ScriptedAI::MoveInLineOfSight(who); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_TERON_GOREFIEND, DONE); @@ -324,7 +324,7 @@ public: ThreatContainer::StorageType::const_iterator i = threatlist.begin(); for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && unit->IsAlive()) { float threat = DoGetThreat(unit); @@ -344,7 +344,7 @@ public: Unit* ghost = NULL; if (GhostGUID) - ghost = Unit::GetUnit(*me, GhostGUID); + ghost = ObjectAccessor::GetUnit(*me, GhostGUID); if (ghost && ghost->IsAlive() && ghost->HasAura(SPELL_SHADOW_OF_DEATH)) { /*float x, y, z; @@ -378,7 +378,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Intro && !Done) { @@ -391,7 +391,7 @@ public: Done = true; if (AggroTargetGUID) { - Unit* unit = Unit::GetUnit(*me, AggroTargetGUID); + Unit* unit = ObjectAccessor::GetUnit(*me, AggroTargetGUID); if (unit) AttackStart(unit); diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp index 39fcbc16297..2362f534b05 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -76,7 +76,7 @@ class boss_najentus : public CreatureScript public: boss_najentus() : CreatureScript("boss_najentus") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_najentusAI>(creature); } @@ -93,7 +93,7 @@ public: uint64 SpineTargetGUID; - void Reset() OVERRIDE + void Reset() override { events.Reset(); @@ -102,20 +102,20 @@ public: instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, NOT_STARTED); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); events.DelayEvents(5000, GCD_YELL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, DONE); Talk(SAY_DEATH); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { if (spell->Id == SPELL_HURL_SPINE && me->HasAura(SPELL_TIDAL_SHIELD)) { @@ -125,7 +125,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, IN_PROGRESS); @@ -141,7 +141,7 @@ public: if (!SpineTargetGUID) return false; - Unit* target = Unit::GetUnit(*me, SpineTargetGUID); + Unit* target = ObjectAccessor::GetUnit(*me, SpineTargetGUID); if (target && target->HasAura(SPELL_IMPALING_SPINE)) target->RemoveAurasDueToSpell(SPELL_IMPALING_SPINE); SpineTargetGUID=0; @@ -155,7 +155,7 @@ public: events.RescheduleEvent(EVENT_SHIELD, 60000 + inc); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -222,7 +222,7 @@ class go_najentus_spine : public GameObjectScript public: go_najentus_spine() : GameObjectScript("go_najentus_spine") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) if (Creature* Najentus = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_HIGH_WARLORD_NAJENTUS))) diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index 2db95b6ea53..8fd9a421a49 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -120,7 +120,7 @@ class npc_blood_elf_council_voice_trigger : public CreatureScript public: npc_blood_elf_council_voice_trigger() : CreatureScript("npc_blood_elf_council_voice_trigger") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_blood_elf_council_voice_triggerAI(c); } @@ -142,7 +142,7 @@ public: bool EventStarted; - void Reset() OVERRIDE + void Reset() override { EnrageTimer = 900000; // 15 minutes AggroYellTimer = 500; @@ -164,13 +164,13 @@ public: } else TC_LOG_ERROR("scripts", ERROR_INST_DATA); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!EventStarted) return; @@ -182,7 +182,7 @@ public: { if (AggroYellTimer <= diff) { - if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter])) + if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter])) { pMember->AI()->Talk(CouncilAggro[YellCounter].entry); AggroYellTimer = CouncilAggro[YellCounter].timer; @@ -197,7 +197,7 @@ public: { if (EnrageTimer <= diff) { - if (Creature* pMember = Creature::GetCreature(*me, Council[YellCounter])) + if (Creature* pMember = ObjectAccessor::GetCreature(*me, Council[YellCounter])) { pMember->CastSpell(pMember, SPELL_BERSERK, true); pMember->AI()->Talk(CouncilEnrage[YellCounter].entry); @@ -216,7 +216,7 @@ class npc_illidari_council : public CreatureScript public: npc_illidari_council() : CreatureScript("npc_illidari_council") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_illidari_councilAI>(creature); } @@ -241,7 +241,7 @@ public: bool EventBegun; - void Reset() OVERRIDE + void Reset() override { CheckTimer = 2000; EndEventTimer = 0; @@ -251,7 +251,7 @@ public: Creature* pMember = NULL; for (uint8 i = 0; i < 4; ++i) { - pMember = Unit::GetCreature((*me), Council[i]); + pMember = ObjectAccessor::GetCreature((*me), Council[i]); if (!pMember) continue; @@ -274,9 +274,9 @@ public: me->SetDisplayId(11686); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } void StartEvent(Unit* target) @@ -311,7 +311,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!EventBegun) return; @@ -330,7 +330,7 @@ public: return; } - Creature* pMember = (Unit::GetCreature(*me, Council[DeathCount])); + Creature* pMember = (ObjectAccessor::GetCreature(*me, Council[DeathCount])); if (pMember && pMember->IsAlive()) pMember->DealDamage(pMember, pMember->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); ++DeathCount; @@ -347,7 +347,7 @@ public: { if (Council[i]) { - if (Creature* Member = (Unit::GetCreature((*me), Council[i]))) + if (Creature* Member = (ObjectAccessor::GetCreature((*me), Council[i]))) { // This is the evade/death check. if (Member->IsAlive() && !Member->GetVictim()) @@ -390,7 +390,7 @@ struct boss_illidari_councilAI : public ScriptedAI bool LoadedGUIDs; - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ILLIDARI_COUNCIL))) CAST_AI(npc_illidari_council::npc_illidari_councilAI, controller->AI())->StartEvent(who); @@ -403,11 +403,11 @@ struct boss_illidari_councilAI : public ScriptedAI LoadGUIDs(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { for (uint8 i = 0; i < 4; ++i) { - if (Unit* unit = Unit::GetUnit(*me, Council[i])) + if (Unit* unit = ObjectAccessor::GetUnit(*me, Council[i])) if (unit != me && unit->GetVictim()) { AttackStart(unit->GetVictim()); @@ -417,7 +417,7 @@ struct boss_illidari_councilAI : public ScriptedAI ScriptedAI::EnterEvadeMode(); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by == me) return; @@ -425,7 +425,7 @@ struct boss_illidari_councilAI : public ScriptedAI damage /= 4; for (uint8 i = 0; i < 4; ++i) { - if (Creature* unit = Unit::GetCreature(*me, Council[i])) + if (Creature* unit = ObjectAccessor::GetCreature(*me, Council[i])) if (unit != me && damage < unit->GetHealth()) { unit->ModifyHealth(-int32(damage)); @@ -450,7 +450,7 @@ class boss_gathios_the_shatterer : public CreatureScript public: boss_gathios_the_shatterer() : CreatureScript("boss_gathios_the_shatterer") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_gathios_the_shattererAI>(creature); } @@ -465,7 +465,7 @@ public: uint32 AuraTimer; uint32 BlessingTimer; - void Reset() OVERRIDE + void Reset() override { ConsecrationTimer = 40000; HammerOfJusticeTimer = 10000; @@ -474,12 +474,12 @@ public: BlessingTimer = 60000; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_GATH_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_GATH_DEATH); } @@ -493,7 +493,7 @@ public: member = urand(1, 3); if (member != 2) // No need to create another pointer to us using Unit::GetUnit - unit = Unit::GetUnit(*me, Council[member]); + unit = ObjectAccessor::GetUnit(*me, Council[member]); return unit; } @@ -507,13 +507,13 @@ public: } for (uint8 i = 0; i < 4; ++i) { - Unit* unit = Unit::GetUnit(*me, Council[i]); + Unit* unit = ObjectAccessor::GetUnit(*me, Council[i]); if (unit) unit->CastSpell(unit, spellid, true, 0, 0, me->GetGUID()); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -582,7 +582,7 @@ class boss_high_nethermancer_zerevor : public CreatureScript public: boss_high_nethermancer_zerevor() : CreatureScript("boss_high_nethermancer_zerevor") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_high_nethermancer_zerevorAI>(creature); } @@ -598,7 +598,7 @@ public: uint32 Cooldown; uint32 ArcaneExplosionTimer; - void Reset() OVERRIDE + void Reset() override { BlizzardTimer = urand(30, 91) * 1000; FlamestrikeTimer = urand(30, 91) * 1000; @@ -608,17 +608,17 @@ public: Cooldown = 0; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_ZERE_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_ZERE_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -686,7 +686,7 @@ class boss_lady_malande : public CreatureScript public: boss_lady_malande() : CreatureScript("boss_lady_malande") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lady_malandeAI>(creature); } @@ -700,7 +700,7 @@ public: uint32 DivineWrathTimer; uint32 ReflectiveShieldTimer; - void Reset() OVERRIDE + void Reset() override { EmpoweredSmiteTimer = 38000; CircleOfHealingTimer = 20000; @@ -708,17 +708,17 @@ public: ReflectiveShieldTimer = 0; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_MALA_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_MALA_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -764,7 +764,7 @@ class boss_veras_darkshadow : public CreatureScript public: boss_veras_darkshadow() : CreatureScript("boss_veras_darkshadow") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_veras_darkshadowAI>(creature); } @@ -781,7 +781,7 @@ public: bool HasVanished; - void Reset() OVERRIDE + void Reset() override { EnvenomTargetGUID = 0; @@ -794,17 +794,17 @@ public: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_VERA_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_VERA_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -878,7 +878,7 @@ public: { PrepareAuraScript(spell_boss_lady_malande_shield_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { return sSpellMgr->GetSpellInfo(SPELL_REFLECTIVE_SHIELD_T); } @@ -892,13 +892,13 @@ public: target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_T, &bp, NULL, NULL, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { AfterEffectAbsorb += AuraEffectAbsorbFn(spell_boss_lady_malande_shield_AuraScript::Trigger, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_boss_lady_malande_shield_AuraScript(); } diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index 91ee58ea286..5b91367a9c9 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -65,7 +65,7 @@ class instance_black_temple : public InstanceMapScript memset(IllidanDoorGUIDs, 0, 2 * sizeof(uint64)); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -110,7 +110,7 @@ class instance_black_temple : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -140,7 +140,7 @@ class instance_black_temple : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -161,7 +161,7 @@ class instance_black_temple : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -202,7 +202,7 @@ class instance_black_temple : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -213,7 +213,7 @@ class instance_black_temple : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -266,7 +266,7 @@ class instance_black_temple : public InstanceMapScript uint64 IllidanDoorGUIDs[2]; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_black_temple_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 414a3bce14a..0c69a236ef8 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -112,7 +112,7 @@ set(scripts_STAT_SRCS Outland/BlackTemple/instance_black_temple.cpp Outland/BlackTemple/boss_reliquary_of_souls.cpp Outland/BlackTemple/boss_warlord_najentus.cpp - Outland/BlackTemple/boss_bloodboil.cpp + Outland/BlackTemple/boss_gurtogg_bloodboil.cpp Outland/BlackTemple/boss_illidan.cpp Outland/zone_shadowmoon_valley.cpp Outland/zone_blades_edge_mountains.cpp 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 9055bb1862d..c6b62ee8de7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -102,7 +102,7 @@ class boss_fathomlord_karathress : public CreatureScript public: boss_fathomlord_karathress() : CreatureScript("boss_fathomlord_karathress") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fathomlord_karathressAI>(creature); } @@ -127,7 +127,7 @@ public: uint64 Advisors[MAX_ADVISORS]; - void Reset() OVERRIDE + void Reset() override { CataclysmicBolt_Timer = 10000; Enrage_Timer = 600000; //10 minutes @@ -191,12 +191,12 @@ public: instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -206,17 +206,17 @@ public: me->SummonCreature(SEER_OLUM, OLUM_X, OLUM_Y, OLUM_Z, OLUM_O, TEMPSUMMON_TIMED_DESPAWN, 3600000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { StartEvent(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Only if not incombat check if the event is started if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT)) { - if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) + if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) { AttackStart(target); GetAdvisors(); @@ -298,7 +298,7 @@ class boss_fathomguard_sharkkis : public CreatureScript public: boss_fathomguard_sharkkis() : CreatureScript("boss_fathomguard_sharkkis") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fathomguard_sharkkisAI>(creature); } @@ -322,7 +322,7 @@ public: uint64 SummonedPet; - void Reset() OVERRIDE + void Reset() override { LeechingThrow_Timer = 20000; TheBeastWithin_Timer = 30000; @@ -340,24 +340,24 @@ public: instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS))) CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID()); instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Only if not incombat check if the event is started if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT)) { - if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) + if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) AttackStart(target); } @@ -437,7 +437,7 @@ class boss_fathomguard_tidalvess : public CreatureScript public: boss_fathomguard_tidalvess() : CreatureScript("boss_fathomguard_tidalvess") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fathomguard_tidalvessAI>(creature); } @@ -456,7 +456,7 @@ public: uint32 PoisonCleansing_Timer; uint32 Earthbind_Timer; - void Reset() OVERRIDE + void Reset() override { FrostShock_Timer = 25000; Spitfire_Timer = 60000; @@ -466,25 +466,25 @@ public: instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS))) CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventTidalvessDeath(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID()); instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); DoCast(me, SPELL_WINDFURY_WEAPON); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Only if not incombat check if the event is started if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT)) { - if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) + if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) AttackStart(target); } @@ -515,7 +515,7 @@ public: if (Spitfire_Timer <= diff) { DoCast(me, SPELL_SPITFIRE_TOTEM); - if (Unit* SpitfireTotem = Unit::GetUnit(*me, CREATURE_SPITFIRE_TOTEM)) + if (Unit* SpitfireTotem = ObjectAccessor::GetUnit(*me, CREATURE_SPITFIRE_TOTEM)) SpitfireTotem->ToCreature()->AI()->AttackStart(me->GetVictim()); Spitfire_Timer = 60000; @@ -553,7 +553,7 @@ class boss_fathomguard_caribdis : public CreatureScript public: boss_fathomguard_caribdis() : CreatureScript("boss_fathomguard_caribdis") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_fathomguard_caribdisAI>(creature); } @@ -572,7 +572,7 @@ public: uint32 Heal_Timer; uint32 Cyclone_Timer; - void Reset() OVERRIDE + void Reset() override { WaterBoltVolley_Timer = 35000; TidalSurge_Timer = 15000+rand()%5000; @@ -582,24 +582,24 @@ public: instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS))) CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventCaribdisDeath(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { instance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID()); instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Only if not incombat check if the event is started if (!me->IsInCombat() && instance->GetData(DATA_KARATHRESSEVENT)) { - if (Unit* target = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) + if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESSEVENT_STARTER))) AttackStart(target); } @@ -626,7 +626,8 @@ public: { DoCastVictim(SPELL_TIDAL_SURGE); // Hacky way to do it - won't trigger elseways - me->GetVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true); + if (me->GetVictim()) + me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true); TidalSurge_Timer = 15000+rand()%5000; } else TidalSurge_Timer -= diff; @@ -674,13 +675,13 @@ public: switch (rand()%4) { case 0: - unit = Unit::GetUnit(*me, instance->GetData64(DATA_KARATHRESS)); + unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_KARATHRESS)); break; case 1: - unit = Unit::GetUnit(*me, instance->GetData64(DATA_SHARKKIS)); + unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_SHARKKIS)); break; case 2: - unit = Unit::GetUnit(*me, instance->GetData64(DATA_TIDALVESS)); + unit = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_TIDALVESS)); break; case 3: unit = me; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index 56055d8a5b4..bcde75584fb 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -84,7 +84,7 @@ class boss_hydross_the_unstable : public CreatureScript public: boss_hydross_the_unstable() : CreatureScript("boss_hydross_the_unstable") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_hydross_the_unstableAI>(creature); } @@ -113,7 +113,7 @@ public: bool beam; SummonList Summons; - void Reset() OVERRIDE + void Reset() override { DeSummonBeams(); beams[0] = 0; @@ -162,26 +162,26 @@ public: { for (uint8 i = 0; i < 2; ++i) { - if (Creature* mob = Unit::GetCreature(*me, beams[i])) + if (Creature* mob = ObjectAccessor::GetCreature(*me, beams[i])) { mob->setDeathState(DEAD); mob->RemoveCorpse(); } } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(CorruptedForm ? SAY_CORRUPT_SLAY : SAY_CLEAN_SLAY); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == ENTRY_PURE_SPAWN) { @@ -197,12 +197,12 @@ public: } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { Summons.Despawn(summon); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(CorruptedForm ? SAY_CORRUPT_DEATH : SAY_CLEAN_DEATH); @@ -210,7 +210,7 @@ public: Summons.DespawnAll(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!beam) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 8d6eb064194..0745a85bf02 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -138,7 +138,7 @@ class boss_lady_vashj : public CreatureScript public: boss_lady_vashj() : CreatureScript("boss_lady_vashj") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lady_vashjAI>(creature); } @@ -179,7 +179,7 @@ public: bool CanAttack; bool JustCreated; - void Reset() OVERRIDE + void Reset() override { AggroTimer = 19000; ShockBlastTimer = 1+rand()%60000; @@ -207,7 +207,7 @@ public: { if (ShieldGeneratorChannel[i]) { - if (Unit* remo = Unit::GetUnit(*me, ShieldGeneratorChannel[i])) + if (Unit* remo = ObjectAccessor::GetUnit(*me, ShieldGeneratorChannel[i])) { remo->setDeathState(JUST_DIED); ShieldGeneratorChannel[i] = 0; @@ -227,12 +227,12 @@ public: if (TaintedElementalTimer > 50000) TaintedElementalTimer = 50000; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -248,7 +248,7 @@ public: instance->SetData(DATA_LADYVASHJEVENT, IN_PROGRESS); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { // remove old tainted cores to prevent cheating in phase 2 Map* map = me->GetMap(); @@ -262,7 +262,7 @@ public: AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Intro) @@ -310,7 +310,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!CanAttack && Intro) { @@ -431,7 +431,7 @@ public: std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (target && target->IsWithinDistInMap(me, 5)) // if in melee range { inMeleeRange = true; @@ -548,7 +548,7 @@ class npc_enchanted_elemental : public CreatureScript public: npc_enchanted_elemental() : CreatureScript("npc_enchanted_elemental") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_enchanted_elementalAI>(creature); } @@ -567,7 +567,7 @@ public: uint64 VashjGUID; - void Reset() OVERRIDE + void Reset() override { me->SetSpeed(MOVE_WALK, 0.6f); // walk me->SetSpeed(MOVE_RUN, 0.6f); // run @@ -592,12 +592,12 @@ public: VashjGUID = instance->GetData64(DATA_LADYVASHJ); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!VashjGUID) return; @@ -620,7 +620,7 @@ public: if (me->IsWithinDist3d(MIDDLE_X, MIDDLE_Y, MIDDLE_Z, 3)) DoCast(me, SPELL_SURGE); } - if (Creature* vashj = Unit::GetCreature(*me, VashjGUID)) + if (Creature* vashj = ObjectAccessor::GetCreature(*me, VashjGUID)) if (!vashj->IsInCombat() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead()) me->Kill(me); Move = 1000; @@ -637,7 +637,7 @@ class npc_tainted_elemental : public CreatureScript public: npc_tainted_elemental() : CreatureScript("npc_tainted_elemental") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_tainted_elementalAI>(creature); } @@ -654,24 +654,24 @@ public: uint32 PoisonBoltTimer; uint32 DespawnTimer; - void Reset() OVERRIDE + void Reset() override { PoisonBoltTimer = 5000+rand()%5000; DespawnTimer = 30000; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - if (Creature* vashj = Unit::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ))) + if (Creature* vashj = ObjectAccessor::GetCreature((*me), instance->GetData64(DATA_LADYVASHJ))) CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->EventTaintedElementalDeath(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { me->AddThreat(who, 0.1f); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // PoisonBoltTimer if (PoisonBoltTimer <= diff) @@ -705,7 +705,7 @@ class npc_toxic_sporebat : public CreatureScript public: npc_toxic_sporebat() : CreatureScript("npc_toxic_sporebat") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_toxic_sporebatAI>(creature); } @@ -725,7 +725,7 @@ public: uint32 BoltTimer; uint32 CheckTimer; - void Reset() OVERRIDE + void Reset() override { me->SetDisableGravity(true); me->setFaction(14); @@ -735,12 +735,12 @@ public: CheckTimer = 1000; } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -749,7 +749,7 @@ public: MovementTimer = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Random movement if (MovementTimer <= diff) @@ -778,7 +778,7 @@ public: if (CheckTimer <= diff) { // check if vashj is death - Unit* Vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ)); + Unit* Vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ)); if (!Vashj || !Vashj->IsAlive() || CAST_AI(boss_lady_vashj::boss_lady_vashjAI, Vashj->ToCreature()->AI())->Phase != 3) { // remove @@ -801,7 +801,7 @@ class npc_shield_generator_channel : public CreatureScript public: npc_shield_generator_channel() : CreatureScript("npc_shield_generator_channel") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_shield_generator_channelAI>(creature); } @@ -817,7 +817,7 @@ public: uint32 CheckTimer; bool Cast; - void Reset() OVERRIDE + void Reset() override { CheckTimer = 0; Cast = false; @@ -826,14 +826,14 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CheckTimer <= diff) { - Unit* vashj = Unit::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ)); + Unit* vashj = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LADYVASHJ)); if (vashj && vashj->IsAlive()) { @@ -856,7 +856,7 @@ class item_tainted_core : public ItemScript public: item_tainted_core() : ItemScript("item_tainted_core") { } - bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& targets) OVERRIDE + bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& targets) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance) @@ -865,7 +865,7 @@ public: return true; } - Creature* vashj = Unit::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ)); + Creature* vashj = ObjectAccessor::GetCreature((*player), instance->GetData64(DATA_LADYVASHJ)); if (vashj && (CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase == 2)) { if (GameObject* gObj = targets.GetGOTarget()) @@ -901,7 +901,7 @@ public: } // get and remove channel - if (Unit* channel = Unit::GetCreature(*vashj, CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier])) + if (Unit* channel = ObjectAccessor::GetCreature(*vashj, CAST_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->ShieldGeneratorChannel[channelIdentifier])) channel->setDeathState(JUST_DIED); // call Unsummon() instance->SetData(identifier, 1); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index f9370b44c20..cc09952d336 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -74,7 +74,7 @@ class npc_inner_demon : public CreatureScript public: npc_inner_demon() : CreatureScript("npc_inner_demon") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_inner_demonAI(creature); } @@ -91,33 +91,33 @@ public: uint32 Link_Timer; uint64 victimGUID; - void Reset() OVERRIDE + void Reset() override { ShadowBolt_Timer = 10000; Link_Timer = 1000; } - void SetGUID(uint64 guid, int32 id/* = 0 */) OVERRIDE + void SetGUID(uint64 guid, int32 id/* = 0 */) override { if (id == INNER_DEMON_VICTIM) victimGUID = guid; } - uint64 GetGUID(int32 id/* = 0 */) const OVERRIDE + uint64 GetGUID(int32 id/* = 0 */) const override { if (id == INNER_DEMON_VICTIM) return victimGUID; return 0; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - Unit* unit = Unit::GetUnit(*me, victimGUID); + Unit* unit = ObjectAccessor::GetUnit(*me, victimGUID); if (unit && unit->HasAura(SPELL_INSIDIOUS_WHISPER)) unit->RemoveAurasDueToSpell(SPELL_INSIDIOUS_WHISPER); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID()) { @@ -126,22 +126,22 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!victimGUID) return; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) return; - if (me->GetVictim()->GetGUID() != victimGUID) + if (me->EnsureVictim()->GetGUID() != victimGUID) { DoModifyThreatPercent(me->GetVictim(), -100); - Unit* owner = Unit::GetUnit(*me, victimGUID); + Unit* owner = ObjectAccessor::GetUnit(*me, victimGUID); if (owner && owner->IsAlive()) { me->AddThreat(owner, 999999); @@ -179,7 +179,7 @@ class boss_leotheras_the_blind : public CreatureScript public: boss_leotheras_the_blind() : CreatureScript("boss_leotheras_the_blind") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_leotheras_the_blindAI>(creature); } @@ -218,7 +218,7 @@ public: uint64 Demon; uint64 SpellBinderGUID[3]; - void Reset() OVERRIDE + void Reset() override { CheckChannelers(); BanishTimer = 1000; @@ -249,7 +249,7 @@ public: { for (uint8 i = 0; i < 3; ++i) { - if (Creature* add = Unit::GetCreature(*me, SpellBinderGUID[i])) + if (Creature* add = ObjectAccessor::GetCreature(*me, SpellBinderGUID[i])) add->DisappearAndDie(); float nx = x; @@ -263,7 +263,7 @@ public: SpellBinderGUID[i] = binder->GetGUID(); } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasAura(AURA_BANISH)) @@ -297,7 +297,7 @@ public: uint8 AliveChannelers = 0; for (uint8 i = 0; i < 3; ++i) { - Unit* add = Unit::GetUnit(*me, SpellBinderGUID[i]); + Unit* add = ObjectAccessor::GetUnit(*me, SpellBinderGUID[i]); if (add && add->IsAlive()) ++AliveChannelers; } @@ -350,7 +350,7 @@ public: if (InnderDemon[i]) { //delete creature - Creature* creature = Unit::GetCreature((*me), InnderDemon[i]); + Creature* creature = ObjectAccessor::GetCreature((*me), InnderDemon[i]); if (creature && creature->IsAlive()) { creature->DespawnOrUnsummon(); @@ -368,10 +368,10 @@ public: { if (InnderDemon[i] > 0) { - Creature* unit = Unit::GetCreature((*me), InnderDemon[i]); + Creature* unit = ObjectAccessor::GetCreature((*me), InnderDemon[i]); if (unit && unit->IsAlive()) { - Unit* unit_target = Unit::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM)); + Unit* unit_target = ObjectAccessor::GetUnit(*unit, unit->AI()->GetGUID(INNER_DEMON_VICTIM)); if (unit_target && unit_target->IsAlive()) { unit->CastSpell(unit_target, SPELL_CONSUMING_MADNESS, true); @@ -382,7 +382,7 @@ public: } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -390,20 +390,20 @@ public: Talk(DemonForm ? SAY_DEMON_SLAY : SAY_NIGHTELF_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); //despawn copy if (Demon) { - if (Creature* pDemon = Unit::GetCreature(*me, Demon)) + if (Creature* pDemon = ObjectAccessor::GetCreature(*me, Demon)) pDemon->DespawnOrUnsummon(); } instance->SetData(DATA_LEOTHERASTHEBLINDEVENT, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (me->HasAura(AURA_BANISH)) return; @@ -411,7 +411,7 @@ public: me->LoadEquipment(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (me->HasAura(AURA_BANISH) || !UpdateVictim()) @@ -518,8 +518,8 @@ public: std::vector<Unit*> TargetList; for (ThreatContainer::StorageType::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr) { - Unit* tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid()); - if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->GetVictim()->GetGUID() && TargetList.size()<5) + Unit* tempTarget = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); + if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->EnsureVictim()->GetGUID() && TargetList.size()<5) TargetList.push_back(tempTarget); } //SpellInfo* spell = GET_SPELL(SPELL_INSIDIOUS_WHISPER); @@ -599,7 +599,7 @@ class boss_leotheras_the_blind_demonform : public CreatureScript public: boss_leotheras_the_blind_demonform() : CreatureScript("boss_leotheras_the_blind_demonform") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_leotheras_the_blind_demonformAI(creature); } @@ -611,7 +611,7 @@ public: uint32 ChaosBlast_Timer; bool DealDamage; - void Reset() OVERRIDE + void Reset() override { ChaosBlast_Timer = 1000; DealDamage = true; @@ -622,7 +622,7 @@ public: Talk(SAY_FREE); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() != TYPEID_PLAYER) return; @@ -630,18 +630,18 @@ public: Talk(SAY_DEMON_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { //invisibility (blizzlike, at the end of the fight he doesn't die, he disappears) DoCast(me, 8149, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { StartEvent(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -672,7 +672,7 @@ class npc_greyheart_spellbinder : public CreatureScript public: npc_greyheart_spellbinder() : CreatureScript("npc_greyheart_spellbinder") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_greyheart_spellbinderAI>(creature); } @@ -695,24 +695,24 @@ public: bool AddedBanish; - void Reset() OVERRIDE + void Reset() override { Mindblast_Timer = urand(3000, 8000); Earthshock_Timer = urand(5000, 10000); instance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, 0); - Creature* leotheras = Unit::GetCreature(*me, leotherasGUID); + Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID); if (leotheras && leotheras->IsAlive()) CAST_AI(boss_leotheras_the_blind::boss_leotheras_the_blindAI, leotheras->AI())->CheckChannelers(/*false*/); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { me->InterruptNonMeleeSpells(false); instance->SetData64(DATA_LEOTHERAS_EVENT_STARTER, who->GetGUID()); } - void JustRespawned() OVERRIDE + void JustRespawned() override { AddedBanish = false; Reset(); @@ -724,14 +724,14 @@ public: { if (leotherasGUID) { - Creature* leotheras = Unit::GetCreature(*me, leotherasGUID); + Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID); if (leotheras && leotheras->IsAlive()) DoCast(leotheras, BANISH_BEAM); } } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!leotherasGUID) leotherasGUID = instance->GetData64(DATA_LEOTHERAS); @@ -739,7 +739,7 @@ public: if (!me->IsInCombat() && instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER)) { Unit* victim = NULL; - victim = Unit::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER)); + victim = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LEOTHERAS_EVENT_STARTER)); if (victim) AttackStart(victim); } @@ -791,7 +791,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE { } + void JustDied(Unit* /*killer*/) override { } }; }; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 718c32cd8ae..1f58573465f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -79,7 +79,7 @@ class boss_the_lurker_below : public CreatureScript public: boss_the_lurker_below() : CreatureScript("boss_the_lurker_below") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_the_lurker_belowAI>(creature); } @@ -117,7 +117,7 @@ public: return true; } - void Reset() OVERRIDE + void Reset() override { me->SetSwim(true); me->SetDisableGravity(true); @@ -147,7 +147,7 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_THELURKERBELOWEVENT, DONE); instance->SetData(DATA_STRANGE_POOL, IN_PROGRESS); @@ -155,12 +155,12 @@ public: Summons.DespawnAll(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_THELURKERBELOWEVENT, IN_PROGRESS); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!CanStartEvent) // boss is invisible, don't attack @@ -173,13 +173,13 @@ public: } } - void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE + void MovementInform(uint32 type, uint32 /*id*/) override { if (type == ROTATE_MOTION_TYPE) me->SetReactState(REACT_AGGRESSIVE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!CanStartEvent) // boss is invisible, don't attack { @@ -365,7 +365,7 @@ class npc_coilfang_ambusher : public CreatureScript public: npc_coilfang_ambusher() : CreatureScript("npc_coilfang_ambusher") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_coilfang_ambusherAI(creature); } @@ -380,13 +380,13 @@ public: uint32 MultiShotTimer; uint32 ShootBowTimer; - void Reset() OVERRIDE + void Reset() override { MultiShotTimer = 10000; ShootBowTimer = 4000; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || me->GetVictim()) @@ -396,7 +396,7 @@ public: AttackStart(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (MultiShotTimer <= diff) { @@ -425,7 +425,7 @@ class go_strange_pool : public GameObjectScript public: go_strange_pool() : GameObjectScript("go_strange_pool") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { // 25% if (InstanceScript* instanceScript = go->GetInstanceScript()) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index 77fd36f2f5e..75d2026537e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -89,7 +89,7 @@ class boss_morogrim_tidewalker : public CreatureScript public: boss_morogrim_tidewalker() : CreatureScript("boss_morogrim_tidewalker") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_morogrim_tidewalkerAI>(creature); } @@ -116,7 +116,7 @@ public: bool Earthquake; bool Phase2; - void Reset() OVERRIDE + void Reset() override { TidalWave_Timer = 10000; WateryGrave_Timer = 30000; @@ -140,19 +140,19 @@ public: instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { PlayerList = &me->GetMap()->GetPlayers(); Playercount = PlayerList->getSize(); @@ -170,7 +170,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -289,7 +289,7 @@ class npc_water_globule : public CreatureScript public: npc_water_globule() : CreatureScript("npc_water_globule") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_water_globuleAI(creature); } @@ -300,7 +300,7 @@ public: uint32 Check_Timer; - void Reset() OVERRIDE + void Reset() override { Check_Timer = 1000; @@ -309,9 +309,9 @@ public: me->setFaction(14); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || me->GetVictim()) @@ -325,7 +325,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 528726723ed..bc557d97ef5 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -64,7 +64,7 @@ class go_bridge_console : public GameObjectScript public: go_bridge_console() : GameObjectScript("go_bridge_console") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); @@ -89,7 +89,7 @@ class instance_serpent_shrine : public InstanceMapScript { } - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -122,7 +122,7 @@ class instance_serpent_shrine : public InstanceMapScript } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -131,7 +131,7 @@ class instance_serpent_shrine : public InstanceMapScript return false; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { //Water checks if (WaterCheckTimer <= diff) @@ -191,7 +191,7 @@ class instance_serpent_shrine : public InstanceMapScript FrenzySpawnTimer -= diff; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -216,7 +216,7 @@ class instance_serpent_shrine : public InstanceMapScript } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -246,7 +246,7 @@ class instance_serpent_shrine : public InstanceMapScript } } - void SetData64(uint32 type, uint64 data) OVERRIDE + void SetData64(uint32 type, uint64 data) override { if (type == DATA_KARATHRESSEVENT_STARTER) KarathressEvent_Starter = data; @@ -254,7 +254,7 @@ class instance_serpent_shrine : public InstanceMapScript LeotherasEventStarter = data; } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -282,7 +282,7 @@ class instance_serpent_shrine : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -352,7 +352,7 @@ class instance_serpent_shrine : public InstanceMapScript SaveToDB(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -392,7 +392,7 @@ class instance_serpent_shrine : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; std::ostringstream stream; @@ -402,7 +402,7 @@ class instance_serpent_shrine : public InstanceMapScript return stream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -447,7 +447,7 @@ class instance_serpent_shrine : public InstanceMapScript bool DoSpawnFrenzy; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_serpentshrine_cavern_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index 70b36e31713..848e9140f25 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -39,7 +39,7 @@ class boss_hydromancer_thespia : public CreatureScript public: boss_hydromancer_thespia() : CreatureScript("boss_hydromancer_thespia") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_thespiaAI>(creature); } @@ -57,7 +57,7 @@ public: uint32 LungBurst_Timer; uint32 EnvelopingWinds_Timer; - void Reset() OVERRIDE + void Reset() override { LightningCloud_Timer = 15000; LungBurst_Timer = 7000; @@ -66,26 +66,26 @@ public: instance->SetBossState(DATA_HYDROMANCER_THESPIA, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEAD); instance->SetBossState(DATA_HYDROMANCER_THESPIA, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetBossState(DATA_HYDROMANCER_THESPIA, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -136,7 +136,7 @@ class npc_coilfang_waterelemental : public CreatureScript public: npc_coilfang_waterelemental() : CreatureScript("npc_coilfang_waterelemental") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_coilfang_waterelementalAI(creature); } @@ -147,14 +147,14 @@ public: uint32 WaterBoltVolley_Timer; - void Reset() OVERRIDE + void Reset() override { WaterBoltVolley_Timer = 3000+rand()%3000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp index 3661ebc8cc3..5dbc6a91418 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -55,7 +55,7 @@ class boss_mekgineer_steamrigger : public CreatureScript public: boss_mekgineer_steamrigger() : CreatureScript("boss_mekgineer_steamrigger") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_mekgineer_steamriggerAI>(creature); } @@ -76,7 +76,7 @@ public: bool Summon50; bool Summon25; - void Reset() OVERRIDE + void Reset() override { Shrink_Timer = 20000; Saw_Blade_Timer = 15000; @@ -89,19 +89,19 @@ public: instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, NOT_STARTED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, DONE); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); @@ -123,7 +123,7 @@ public: DoSpawnCreature(NPC_STREAMRIGGER_MECHANIC, 7, -5, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 240000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -192,7 +192,7 @@ class npc_steamrigger_mechanic : public CreatureScript public: npc_steamrigger_mechanic() : CreatureScript("npc_steamrigger_mechanic") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_steamrigger_mechanicAI>(creature); } @@ -208,19 +208,19 @@ public: uint32 Repair_Timer; - void Reset() OVERRIDE + void Reset() override { Repair_Timer = 2000; } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE + void MoveInLineOfSight(Unit* /*who*/) override { //react only if attacked } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Repair_Timer <= diff) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index fe035fc1dec..536ea77a98b 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -48,7 +48,7 @@ class npc_naga_distiller : public CreatureScript public: npc_naga_distiller() : CreatureScript("npc_naga_distiller") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_naga_distillerAI>(creature); } @@ -62,7 +62,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -75,7 +75,7 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void StartRageGen(Unit* /*caster*/) { @@ -87,7 +87,7 @@ public: instance->SetData(DATA_DISTILLER, IN_PROGRESS); } - void DamageTaken(Unit* /*done_by*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*done_by*/, uint32 &damage) override { if (me->GetHealth() <= damage) instance->SetData(DATA_DISTILLER, DONE); @@ -101,7 +101,7 @@ class boss_warlord_kalithresh : public CreatureScript public: boss_warlord_kalithresh() : CreatureScript("boss_warlord_kalithresh") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_warlord_kalithreshAI>(creature); } @@ -120,7 +120,7 @@ public: uint32 Rage_Timer; bool CanRage; - void Reset() OVERRIDE + void Reset() override { Reflection_Timer = 10000; Impale_Timer = 7000+rand()%7000; @@ -130,19 +130,19 @@ public: instance->SetBossState(DATA_WARLORD_KALITHRESH, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetBossState(DATA_WARLORD_KALITHRESH, IN_PROGRESS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { //hack :( if (spell->Id == SPELL_WARLORDS_RAGE_PROC) @@ -150,14 +150,14 @@ public: me->RemoveAurasDueToSpell(SPELL_WARLORDS_RAGE_PROC); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); instance->SetBossState(DATA_WARLORD_KALITHRESH, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index bd2d4d5f416..19e8c5187ba 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -24,7 +24,7 @@ class go_main_chambers_access_panel : public GameObjectScript public: go_main_chambers_access_panel() : GameObjectScript("go_main_chambers_access_panel") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) @@ -65,7 +65,7 @@ class instance_steam_vault : public InstanceMapScript DistillerState = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -83,7 +83,7 @@ class instance_steam_vault : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -95,7 +95,7 @@ class instance_steam_vault : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -111,20 +111,20 @@ class instance_steam_vault : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { if (type == DATA_DISTILLER) DistillerState = data; } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_DISTILLER) return DistillerState; return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -156,7 +156,7 @@ class instance_steam_vault : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -167,7 +167,7 @@ class instance_steam_vault : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -208,7 +208,7 @@ class instance_steam_vault : public InstanceMapScript uint8 DistillerState; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_steam_vault_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp index 7243b6e6738..1037f92cc42 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp @@ -60,18 +60,18 @@ class boss_mennu_the_betrayer : public CreatureScript { boss_mennu_the_betrayerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30000); @@ -82,12 +82,12 @@ class boss_mennu_the_betrayer : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -129,7 +129,7 @@ class boss_mennu_the_betrayer : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_mennu_the_betrayerAI(creature); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp index 856e90405cb..a71c9660623 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp @@ -51,17 +51,17 @@ class boss_quagmirran : public CreatureScript { boss_quagmirranAI(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_ACID_SPRAY, 25000); @@ -70,9 +70,9 @@ class boss_quagmirran : public CreatureScript events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31000); } - void KilledUnit(Unit* /*victim*/) OVERRIDE { } + void KilledUnit(Unit* /*victim*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -112,7 +112,7 @@ class boss_quagmirran : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_quagmirranAI(creature); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp index a819b59d359..6fb41f2eab5 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp @@ -50,18 +50,18 @@ class boss_rokmar_the_crackler : public CreatureScript { boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); rokmarFrenzy = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10000); @@ -69,9 +69,9 @@ class boss_rokmar_the_crackler : public CreatureScript events.ScheduleEvent(EVENT_WATER_SPIT, 14000); } - void KilledUnit(Unit* /*victim*/) OVERRIDE { } + void KilledUnit(Unit* /*victim*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -115,7 +115,7 @@ class boss_rokmar_the_crackler : public CreatureScript bool rokmarFrenzy; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_rokmar_the_cracklerAI(creature); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp index e942d0987fc..b6860d3e74c 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp @@ -31,7 +31,7 @@ class instance_the_slave_pens : public InstanceMapScript public: instance_the_slave_pens() : InstanceMapScript(SPScriptName, 547) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_slave_pens_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp index 1ea58bce0ca..ae7d5fd2308 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp @@ -41,7 +41,7 @@ class boss_hungarfen : public CreatureScript public: boss_hungarfen() : CreatureScript("boss_hungarfen") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_hungarfenAI(creature); } @@ -56,18 +56,18 @@ public: uint32 Mushroom_Timer; uint32 AcidGeyser_Timer; - void Reset() OVERRIDE + void Reset() override { Root = false; Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode AcidGeyser_Timer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -109,7 +109,7 @@ class npc_underbog_mushroom : public CreatureScript public: npc_underbog_mushroom() : CreatureScript("npc_underbog_mushroom") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_underbog_mushroomAI(creature); } @@ -122,7 +122,7 @@ public: uint32 Grow_Timer; uint32 Shrink_Timer; - void Reset() OVERRIDE + void Reset() override { Stop = false; Grow_Timer = 0; @@ -132,14 +132,14 @@ public: DoCast(me, SPELL_SPORE_CLOUD, true); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Stop) return; diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp index 13ebf22436c..7e37c22565a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp @@ -47,7 +47,7 @@ class boss_the_black_stalker : public CreatureScript public: boss_the_black_stalker() : CreatureScript("boss_the_black_stalker") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_the_black_stalkerAI(creature); } @@ -68,7 +68,7 @@ public: uint32 check_Timer; std::list<uint64> Striders; - void Reset() OVERRIDE + void Reset() override { Levitate_Timer = 12000; ChainLightning_Timer = 6000; @@ -80,9 +80,9 @@ public: Striders.clear(); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon && summon->GetEntry() == ENTRY_SPORE_STRIDER) { @@ -95,14 +95,14 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { for (std::list<uint64>::const_iterator i = Striders.begin(); i != Striders.end(); ++i) - if (Creature* strider = Unit::GetCreature(*me, *i)) + if (Creature* strider = ObjectAccessor::GetCreature(*me, *i)) strider->DisappearAndDie(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -132,7 +132,7 @@ public: { if (LevitatedTarget_Timer <= diff) { - if (Unit* target = Unit::GetUnit(*me, LevitatedTarget)) + if (Unit* target = ObjectAccessor::GetUnit(*me, LevitatedTarget)) { if (!target->HasAura(SPELL_LEVITATE)) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp index 9249cadbe49..f950a61133e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp @@ -30,7 +30,7 @@ class instance_the_underbog : public InstanceMapScript public: instance_the_underbog() : InstanceMapScript("instance_the_underbog", 546) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_underbog_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index 917dda1389a..592ffc1f69e 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -83,7 +83,7 @@ class boss_gruul : public CreatureScript bool m_bPerformingGroundSlam; - void Reset() OVERRIDE + void Reset() override { _Reset(); m_uiGrowth_Timer= 30000; @@ -95,25 +95,25 @@ class boss_gruul : public CreatureScript m_uiReverberation_Timer= 60000+45000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void SpellHitTarget(Unit* target, const SpellInfo* pSpell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* pSpell) override { //This to emulate effect1 (77) of SPELL_GROUND_SLAM, knock back to any direction //It's initially wrong, since this will cause fall damage, which is by comments, not intended. @@ -153,7 +153,7 @@ class boss_gruul : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -250,7 +250,7 @@ class boss_gruul : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_gruulAI>(creature); } @@ -265,7 +265,7 @@ class spell_gruul_shatter : public SpellScriptLoader { PrepareSpellScript(spell_gruul_shatter_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_STONED)) return false; @@ -283,13 +283,13 @@ class spell_gruul_shatter : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gruul_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gruul_shatter_SpellScript(); } @@ -318,13 +318,13 @@ class spell_gruul_shatter_effect : public SpellScriptLoader SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius))); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_gruul_shatter_effect_SpellScript::CalculateDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gruul_shatter_effect_SpellScript(); } diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index f14e6badc35..89aad2534f0 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -90,7 +90,7 @@ public: bool Phase2; - void Reset() OVERRIDE + void Reset() override { ArcingSmash_Timer = 10000; MightyBlow_Timer = 40000; @@ -105,12 +105,12 @@ public: instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -123,14 +123,14 @@ public: Talk(SAY_OGRE_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -194,7 +194,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_high_king_maulgarAI>(creature); } @@ -218,7 +218,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { DarkDecay_Timer = 10000; Summon_Timer = 15000; @@ -227,7 +227,7 @@ public: instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who) return; @@ -242,13 +242,13 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR))) maulgar->AI()->DoAction(ACTION_ADD_DEATH); @@ -256,7 +256,7 @@ public: instance->SetBossState(DATA_MAULGAR, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -289,7 +289,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_olm_the_summonerAI>(creature); } @@ -315,7 +315,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { GreaterPolymorph_Timer = 5000; LightningBolt_Timer = 10000; @@ -325,13 +325,13 @@ public: instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR))) maulgar->AI()->DoAction(ACTION_ADD_DEATH); @@ -339,7 +339,7 @@ public: instance->SetBossState(DATA_MAULGAR, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -378,7 +378,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_kiggler_the_crazedAI>(creature); } @@ -402,7 +402,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { GreaterPowerWordShield_Timer = 5000; Heal_Timer = urand(25000, 40000); @@ -411,13 +411,13 @@ public: instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR))) maulgar->AI()->DoAction(ACTION_ADD_DEATH); @@ -425,7 +425,7 @@ public: instance->SetBossState(DATA_MAULGAR, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -455,7 +455,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_blindeye_the_seerAI>(creature); } @@ -479,7 +479,7 @@ public: InstanceScript* instance; - void Reset() OVERRIDE + void Reset() override { GreaterFireball_Timer = 1000; SpellShield_Timer = 5000; @@ -488,13 +488,13 @@ public: instance->SetBossState(DATA_MAULGAR, NOT_STARTED); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Creature* maulgar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MAULGAR))) maulgar->AI()->DoAction(ACTION_ADD_DEATH); @@ -502,7 +502,7 @@ public: instance->SetBossState(DATA_MAULGAR, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -530,7 +530,7 @@ public: std::vector<Unit*> target_list; for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); //15 yard radius minimum if (target && target->IsWithinDist(me, 15, false)) target_list.push_back(target); @@ -546,7 +546,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetGruulsLairAI<boss_krosh_firehandAI>(creature); } diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp index caba33e1513..ae3971a943e 100644 --- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp +++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp @@ -51,7 +51,7 @@ class instance_gruuls_lair : public InstanceMapScript MaulgarGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -69,7 +69,7 @@ class instance_gruuls_lair : public InstanceMapScript } } - void OnCreatureRemove(Creature* creature) OVERRIDE + void OnCreatureRemove(Creature* creature) override { switch (creature->GetEntry()) { @@ -85,7 +85,7 @@ class instance_gruuls_lair : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -98,7 +98,7 @@ class instance_gruuls_lair : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -111,7 +111,7 @@ class instance_gruuls_lair : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -123,7 +123,7 @@ class instance_gruuls_lair : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -134,7 +134,7 @@ class instance_gruuls_lair : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -170,7 +170,7 @@ class instance_gruuls_lair : public InstanceMapScript uint64 MaulgarGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_gruuls_lair_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index f610d6dd7e0..063a30ca875 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -57,7 +57,7 @@ class boss_broggok : public CreatureScript uint32 PoisonBolt_Timer; bool canAttack; - void Reset() OVERRIDE + void Reset() override { _Reset(); AcidSpray_Timer = 10000; @@ -66,13 +66,13 @@ class boss_broggok : public CreatureScript DoAction(ACTION_RESET_BROGGOK); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -107,12 +107,12 @@ class boss_broggok : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -134,7 +134,7 @@ class boss_broggok : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetBloodFurnaceAI<boss_broggokAI>(creature); } @@ -153,15 +153,15 @@ class npc_broggok_poison_cloud : public CreatureScript creature->SetReactState(REACT_PASSIVE); } - void IsSummonedBy(Unit* /*summoner*/) OVERRIDE + void IsSummonedBy(Unit* /*summoner*/) override { DoCast(me, SPELL_POISON_CLOUD_PASSIVE, true); } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_broggok_poison_cloudAI(creature); } @@ -172,7 +172,7 @@ class go_broggok_lever : public GameObjectScript public: go_broggok_lever() : GameObjectScript("go_broggok_lever") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (InstanceScript* instance = go->GetInstanceScript()) if (instance->GetBossState(DATA_BROGGOK) != DONE && instance->GetBossState(DATA_BROGGOK) != IN_PROGRESS) @@ -197,7 +197,7 @@ class spell_broggok_poison_cloud : public SpellScriptLoader { PrepareAuraScript(spell_broggok_poison_cloud_AuraScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell)) return false; @@ -213,13 +213,13 @@ class spell_broggok_poison_cloud : public SpellScriptLoader GetTarget()->CastCustomSpell(triggerSpell, SPELLVALUE_RADIUS_MOD, mod, (Unit*)NULL, TRIGGERED_FULL_MASK, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_broggok_poison_cloud_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_broggok_poison_cloud_AuraScript(); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index 4c04c06b091..c85a26a25ab 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -78,7 +78,7 @@ class boss_kelidan_the_breaker : public CreatureScript bool addYell; uint64 Channelers[5]; - void Reset() OVERRIDE + void Reset() override { _Reset(); ShadowVolley_Timer = 1000; @@ -92,7 +92,7 @@ class boss_kelidan_the_breaker : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _EnterCombat(); Talk(SAY_WAKE); @@ -101,7 +101,7 @@ class boss_kelidan_the_breaker : public CreatureScript DoStartMovement(who); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (rand()%2) return; @@ -118,7 +118,7 @@ class boss_kelidan_the_breaker : public CreatureScript } for (uint8 i=0; i<5; ++i) { - Creature* channeler = Unit::GetCreature(*me, Channelers[i]); + Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]); if (who && channeler && !channeler->IsInCombat()) channeler->AI()->AttackStart(who); } @@ -128,14 +128,14 @@ class boss_kelidan_the_breaker : public CreatureScript { for (uint8 i=0; i<5; ++i) { - Creature* channeler = Unit::GetCreature(*me, Channelers[i]); + Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]); if (channeler && channeler->IsAlive()) return; } me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); if (killer) - me->AI()->AttackStart(killer); + AttackStart(killer); } uint64 GetChanneled(Creature* channeler1) @@ -147,7 +147,7 @@ class boss_kelidan_the_breaker : public CreatureScript uint8 i; for (i=0; i<5; ++i) { - Creature* channeler = Unit::GetCreature(*me, Channelers[i]); + Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]); if (channeler && channeler->GetGUID() == channeler1->GetGUID()) break; } @@ -158,7 +158,7 @@ class boss_kelidan_the_breaker : public CreatureScript { for (uint8 i=0; i<5; ++i) { - Creature* channeler = Unit::GetCreature(*me, Channelers[i]); + Creature* channeler = ObjectAccessor::GetCreature(*me, Channelers[i]); if (!channeler || channeler->isDead()) channeler = me->SummonCreature(ENTRY_CHANNELER, ShadowmoonChannelers[i][0], ShadowmoonChannelers[i][1], ShadowmoonChannelers[i][2], ShadowmoonChannelers[i][3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000); if (channeler) @@ -168,13 +168,13 @@ class boss_kelidan_the_breaker : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DIE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -246,7 +246,7 @@ class boss_kelidan_the_breaker : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetBloodFurnaceAI<boss_kelidan_the_breakerAI>(creature); } @@ -279,7 +279,7 @@ class npc_shadowmoon_channeler : public CreatureScript uint32 MarkOfShadow_Timer; uint32 check_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowBolt_Timer = 1000+rand()%1000; MarkOfShadow_Timer = 5000+rand()%2000; @@ -288,7 +288,7 @@ class npc_shadowmoon_channeler : public CreatureScript me->InterruptNonMeleeSpells(true); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerEngaged(who); @@ -297,13 +297,13 @@ class npc_shadowmoon_channeler : public CreatureScript DoStartMovement(who); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerDied(killer); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -313,7 +313,7 @@ class npc_shadowmoon_channeler : public CreatureScript if (Creature* Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) { uint64 channeler = CAST_AI(boss_kelidan_the_breaker::boss_kelidan_the_breakerAI, Kelidan->AI())->GetChanneled(me); - if (Unit* channeled = Unit::GetUnit(*me, channeler)) + if (Unit* channeled = ObjectAccessor::GetUnit(*me, channeler)) DoCast(channeled, SPELL_CHANNELING); } check_Timer = 5000; @@ -344,7 +344,7 @@ class npc_shadowmoon_channeler : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetBloodFurnaceAI<npc_shadowmoon_channelerAI>(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp index 6ab356bfa4a..a24abac44d6 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp @@ -56,7 +56,7 @@ class boss_the_maker : public CreatureScript uint32 Domination_Timer; uint32 Knockdown_Timer; - void Reset() OVERRIDE + void Reset() override { _Reset(); AcidSpray_Timer = 15000; @@ -65,25 +65,25 @@ class boss_the_maker : public CreatureScript Knockdown_Timer = 10000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DIE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -129,7 +129,7 @@ class boss_the_maker : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetBloodFurnaceAI<boss_the_makerAI>(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index bc399e4b43f..4f1200be37b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -63,7 +63,7 @@ class instance_blood_furnace : public InstanceMapScript PrisonerCounter8 = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -84,13 +84,13 @@ class instance_blood_furnace : public InstanceMapScript } } - void OnUnitDeath(Unit* unit) OVERRIDE + void OnUnitDeath(Unit* unit) override { if (unit->GetTypeId() == TYPEID_UNIT && unit->GetEntry() == NPC_PRISONER) PrisonerDied(unit->GetGUID()); } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -136,7 +136,7 @@ class instance_blood_furnace : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -153,7 +153,7 @@ class instance_blood_furnace : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -170,7 +170,7 @@ class instance_blood_furnace : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -322,7 +322,7 @@ class instance_blood_furnace : public InstanceMapScript } } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -333,7 +333,7 @@ class instance_blood_furnace : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -386,7 +386,7 @@ class instance_blood_furnace : public InstanceMapScript uint8 PrisonerCounter8; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_blood_furnace_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp index a68b3181e6f..b735a831e35 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp @@ -63,7 +63,7 @@ class boss_omor_the_unscarred : public CreatureScript SetCombatMovement(false); } - void Reset() OVERRIDE + void Reset() override { Talk(SAY_WIPE); @@ -80,13 +80,13 @@ class boss_omor_the_unscarred : public CreatureScript _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (rand()%2) return; @@ -94,7 +94,7 @@ class boss_omor_the_unscarred : public CreatureScript Talk(SAY_KILL_1); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { Talk(SAY_SUMMON); @@ -104,13 +104,13 @@ class boss_omor_the_unscarred : public CreatureScript ++SummonedCount; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DIE); _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -222,7 +222,7 @@ class boss_omor_the_unscarred : public CreatureScript bool CanPullBack; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_omor_the_unscarredAI>(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 1193e45e73b..b15bd18c97c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -76,22 +76,22 @@ class boss_nazan : public CreatureScript flight = true; } - void Reset() OVERRIDE + void Reset() override { Fireball_Timer = 4000; Fly_Timer = 45000; Turn_Timer = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->GetEntry() == NPC_VAZRUDEN_HERALD) VazrudenGUID = summoner->GetGUID(); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned && summoned->GetEntry() == NPC_LIQUID_FIRE) { @@ -102,13 +102,13 @@ class boss_nazan : public CreatureScript } } - void SpellHitTarget(Unit* target, const SpellInfo* entry) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* entry) override { if (target && entry->Id == uint32(SPELL_FIREBALL)) me->SummonCreature(NPC_LIQUID_FIRE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -124,7 +124,7 @@ class boss_nazan : public CreatureScript if (flight) // phase 1 - the flight { - Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID); + Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID); if (Fly_Timer < diff || !(Vazruden && Vazruden->IsAlive() && Vazruden->HealthAbovePct(20))) { flight = false; @@ -134,7 +134,7 @@ class boss_nazan : public CreatureScript me->SetWalk(true); me->GetMotionMaster()->Clear(); if (Unit* victim = SelectTarget(SELECT_TARGET_NEAREST, 0)) - me->AI()->AttackStart(victim); + AttackStart(victim); DoStartMovement(me->GetVictim()); Talk(EMOTE); return; @@ -188,7 +188,7 @@ class boss_nazan : public CreatureScript uint64 VazrudenGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_nazanAI(creature); } @@ -203,7 +203,7 @@ class boss_vazruden : public CreatureScript { boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) { } - void Reset() OVERRIDE + void Reset() override { Revenge_Timer = 4000; UnsummonCheck = 2000; @@ -211,26 +211,26 @@ class boss_vazruden : public CreatureScript _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); _EnterCombat(); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who && who->GetEntry() != NPC_VAZRUDEN) Talk(SAY_KILL); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer && killer != me) Talk(SAY_DIE); _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -266,7 +266,7 @@ class boss_vazruden : public CreatureScript uint32 UnsummonCheck; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_vazrudenAI(creature); } @@ -288,7 +288,7 @@ class boss_vazruden_the_herald : public CreatureScript VazrudenGUID = 0; } - void Reset() OVERRIDE + void Reset() override { phase = 0; waypoint = 0; @@ -300,7 +300,7 @@ class boss_vazruden_the_herald : public CreatureScript { if (summoned) { - Creature* Nazan = Unit::GetCreature(*me, NazanGUID); + Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID); if (!Nazan) Nazan = me->FindNearestCreature(NPC_NAZAN, 5000); if (Nazan) @@ -309,7 +309,7 @@ class boss_vazruden_the_herald : public CreatureScript NazanGUID = 0; } - Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID); + Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID); if (!Vazruden) Vazruden = me->FindNearestCreature(NPC_VAZRUDEN, 5000); if (Vazruden) @@ -337,7 +337,7 @@ class boss_vazruden_the_herald : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (phase == 0) { @@ -347,7 +347,7 @@ class boss_vazruden_the_herald : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (!summoned) return; @@ -375,7 +375,7 @@ class boss_vazruden_the_herald : public CreatureScript sentryDown = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { switch (phase) { @@ -404,8 +404,8 @@ class boss_vazruden_the_herald : public CreatureScript default: // adds do the job now if (check <= diff) { - Creature* Nazan = Unit::GetCreature(*me, NazanGUID); - Creature* Vazruden = Unit::GetCreature(*me, VazrudenGUID); + Creature* Nazan = ObjectAccessor::GetCreature(*me, NazanGUID); + Creature* Vazruden = ObjectAccessor::GetCreature(*me, VazrudenGUID); if ((Nazan && Nazan->IsAlive()) || (Vazruden && Vazruden->IsAlive())) { if ((Nazan && Nazan->GetVictim()) || (Vazruden && Vazruden->GetVictim())) @@ -443,7 +443,7 @@ class boss_vazruden_the_herald : public CreatureScript bool lootSpawned; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_vazruden_the_heraldAI(creature); } @@ -458,20 +458,20 @@ class npc_hellfire_sentry : public CreatureScript { npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { KidneyShot_Timer = urand(3000, 7000); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (Creature* herald = me->FindNearestCreature(NPC_VAZRUDEN_HERALD, 150)) CAST_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(killer); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -492,7 +492,7 @@ class npc_hellfire_sentry : public CreatureScript uint32 KidneyShot_Timer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_hellfire_sentryAI(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp index f1bf63397bf..82f101980fe 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp @@ -61,7 +61,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript { boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) { } - void Reset() OVERRIDE + void Reset() override { hasTaunted = false; yelledForHeal = false; @@ -69,7 +69,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript _Reset(); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_MORTAL_WOUND, 5000); @@ -77,7 +77,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript _EnterCombat(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->GetVictim() && me->CanCreatureAttack(who)) @@ -99,18 +99,18 @@ class boss_watchkeeper_gargolmar : public CreatureScript } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DIE); _JustDied(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -167,7 +167,7 @@ class boss_watchkeeper_gargolmar : public CreatureScript bool retaliation; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_watchkeeper_gargolmarAI(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index a8fd639de6d..9a0e7c22308 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -36,13 +36,13 @@ class instance_ramparts : public InstanceMapScript { instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { SetBossNumber(EncounterCount); felIronChestGUID = 0; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -53,7 +53,7 @@ class instance_ramparts : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -72,7 +72,7 @@ class instance_ramparts : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -83,7 +83,7 @@ class instance_ramparts : public InstanceMapScript return saveStream.str(); } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { @@ -121,7 +121,7 @@ class instance_ramparts : public InstanceMapScript bool spawned; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_ramparts_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index e1d83931166..1bdaf4fc260 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -108,12 +108,12 @@ class npc_abyssal : public CreatureScript uint32 Despawn_Timer; uint32 trigger; - void Reset() OVERRIDE + void Reset() override { FireBlast_Timer = 6000; } - void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit*, const SpellInfo* spell) override { if (trigger == 2 && spell->Id == SPELL_BLAZE_TARGET) { @@ -136,23 +136,23 @@ class npc_abyssal : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!trigger) ScriptedAI::AttackStart(who); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!trigger) ScriptedAI::MoveInLineOfSight(who); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (trigger) { @@ -188,7 +188,7 @@ class npc_abyssal : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_abyssalAI(creature); } @@ -227,7 +227,7 @@ class boss_magtheridon : public CreatureScript bool Phase3; bool NeedCheckCube; - void Reset() OVERRIDE + void Reset() override { Berserk_Timer = 1320000; Quake_Timer = 40000; @@ -247,7 +247,7 @@ class boss_magtheridon : public CreatureScript DoCast(me, SPELL_SHADOW_CAGE_C, true); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SetData(DATA_MAGTHERIDON_EVENT, NOT_STARTED); instance->SetData(DATA_COLLAPSE, false); @@ -257,7 +257,7 @@ class boss_magtheridon : public CreatureScript { // to avoid multiclicks from 1 cube if (uint64 guid = Cube[cubeGUID]) - DebuffClicker(Unit::GetUnit(*me, guid)); + DebuffClicker(ObjectAccessor::GetUnit(*me, guid)); Cube[cubeGUID] = clickerGUID; NeedCheckCube = true; } @@ -280,7 +280,7 @@ class boss_magtheridon : public CreatureScript // if not - apply mind exhaustion and delete from clicker's list for (CubeMap::iterator i = Cube.begin(); i != Cube.end(); ++i) { - Unit* clicker = Unit::GetUnit(*me, (*i).second); + Unit* clicker = ObjectAccessor::GetUnit(*me, (*i).second); if (!clicker || !clicker->HasAura(SPELL_SHADOW_GRASP)) { DebuffClicker(clicker); @@ -304,28 +304,28 @@ class boss_magtheridon : public CreatureScript NeedCheckCube = false; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_PLAYER_KILLED); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_MAGTHERIDON_EVENT, DONE); Talk(SAY_DEATH); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!me->HasUnitState(UNIT_STATE_STUNNED)) ScriptedAI::AttackStart(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_MAGTHERIDON_EVENT, IN_PROGRESS); DoZoneInCombat(); @@ -336,7 +336,7 @@ class boss_magtheridon : public CreatureScript Talk(SAY_FREED); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) { @@ -449,7 +449,7 @@ class boss_magtheridon : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_magtheridonAI>(creature); } @@ -480,7 +480,7 @@ class npc_hellfire_channeler : public CreatureScript uint32 Check_Timer; - void Reset() OVERRIDE + void Reset() override { ShadowBoltVolley_Timer = urand(8000, 10000); DarkMending_Timer = 10000; @@ -490,7 +490,7 @@ class npc_hellfire_channeler : public CreatureScript Check_Timer = 5000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_CHANNELER_EVENT, IN_PROGRESS); @@ -498,30 +498,30 @@ class npc_hellfire_channeler : public CreatureScript DoZoneInCombat(); } - void JustReachedHome() OVERRIDE + void JustReachedHome() override { instance->SetData(DATA_CHANNELER_EVENT, NOT_STARTED); DoCast(me, SPELL_SHADOW_GRASP_C, false); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->AI()->AttackStart(me->GetVictim()); } - void DamageTaken(Unit*, uint32 &damage) OVERRIDE + void DamageTaken(Unit*, uint32 &damage) override { if (damage >= me->GetHealth()) DoCast(me, SPELL_SOUL_TRANSFER, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_CHANNELER_EVENT, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -565,7 +565,7 @@ class npc_hellfire_channeler : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_hellfire_channelerAI>(creature); } @@ -579,7 +579,7 @@ public: { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); @@ -588,7 +588,7 @@ public: if (instance->GetData(DATA_MAGTHERIDON_EVENT) != IN_PROGRESS) return true; - Creature* Magtheridon =Unit::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON)); + Creature* Magtheridon =ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_MAGTHERIDON)); if (!Magtheridon || !Magtheridon->IsAlive()) return true; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index 73f741fade1..71d9203fcac 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -66,7 +66,7 @@ class instance_magtheridons_lair : public InstanceMapScript uint32 CageTimer; uint32 RespawnTimer; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -79,7 +79,7 @@ class instance_magtheridons_lair : public InstanceMapScript RespawnTimer = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -88,7 +88,7 @@ class instance_magtheridons_lair : public InstanceMapScript return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -101,7 +101,7 @@ class instance_magtheridons_lair : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -123,7 +123,7 @@ class instance_magtheridons_lair : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -133,7 +133,7 @@ class instance_magtheridons_lair : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -211,14 +211,14 @@ class instance_magtheridons_lair : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { if (type == DATA_MAGTHERIDON_EVENT) return m_auiEncounter[0]; return 0; } - void Update(uint32 diff) OVERRIDE + void Update(uint32 diff) override { if (CageTimer) { @@ -254,7 +254,7 @@ class instance_magtheridons_lair : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_magtheridons_lair_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index 69906880705..88c3041b62c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -85,7 +85,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript { boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -105,14 +105,14 @@ class boss_grand_warlock_nethekurse : public CreatureScript Cleave_Timer = 5000; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DIE); instance->SetBossState(DATA_NETHEKURSE, DONE); } - void SetData(uint32 data, uint32 value) OVERRIDE + void SetData(uint32 data, uint32 value) override { if (data != SETDATA_DATA) return; @@ -157,7 +157,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (IsIntroEvent || !IsMainEvent) return; @@ -171,7 +171,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!IntroOnce && me->IsWithinDistInMap(who, 30.0f)) @@ -192,12 +192,12 @@ class boss_grand_warlock_nethekurse : public CreatureScript ScriptedAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->setFaction(16); summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -208,12 +208,12 @@ class boss_grand_warlock_nethekurse : public CreatureScript summoned->CastSpell(summoned, SPELL_CONSUMPTION, false, 0, 0, me->GetGUID()); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsIntroEvent) { @@ -290,7 +290,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript bool Phase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_grand_warlock_nethekurseAI>(creature); } @@ -312,32 +312,32 @@ class npc_fel_orc_convert : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE + void Reset() override { me->SetNoCallAssistance(true); //we don't want any assistance (WE R HEROZ!) } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { events.ScheduleEvent(EVENT_HEMORRHAGE, 3000); - if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE))) + if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE))) if (me->IsWithinDist(Kurse, 45.0f)) Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetBossState(DATA_NETHEKURSE) != IN_PROGRESS) return; - if (Creature* Kurse = Unit::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE))) + if (Creature* Kurse = ObjectAccessor::GetCreature(*me, instance->GetData64(NPC_GRAND_WARLOCK_NETHEKURSE))) Kurse->AI()->SetData(SETDATA_DATA, SETDATA_PEON_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -358,7 +358,7 @@ class npc_fel_orc_convert : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_fel_orc_convertAI>(creature); } @@ -377,13 +377,13 @@ class npc_lesser_shadow_fissure : public CreatureScript { npc_lesser_shadow_fissureAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void MoveInLineOfSight(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void EnterCombat(Unit* /*who*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_lesser_shadow_fissureAI(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index 2ed70ded6ef..b03fc651e12 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -140,15 +140,15 @@ class boss_warbringer_omrogg : public CreatureScript RightHeadGUID = 0; } - void Reset() OVERRIDE + void Reset() override { - if (Unit* LeftHead = Unit::GetUnit(*me, LeftHeadGUID)) + if (Unit* LeftHead = ObjectAccessor::GetUnit(*me, LeftHeadGUID)) { LeftHead->setDeathState(JUST_DIED); LeftHeadGUID = 0; } - if (Unit* RightHead = Unit::GetUnit(*me, RightHeadGUID)) + if (Unit* RightHead = ObjectAccessor::GetUnit(*me, RightHeadGUID)) { RightHead->setDeathState(JUST_DIED); RightHeadGUID = 0; @@ -172,8 +172,8 @@ class boss_warbringer_omrogg : public CreatureScript void DoYellForThreat() { - Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID); - Creature* RightHead = Unit::GetCreature(*me, RightHeadGUID); + Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID); + Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID); if (!LeftHead || !RightHead) return; @@ -188,12 +188,12 @@ class boss_warbringer_omrogg : public CreatureScript ThreatYell = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { me->SummonCreature(NPC_LEFT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0); me->SummonCreature(NPC_RIGHT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0); - if (Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID)) + if (Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID)) { iaggro = rand()%3; @@ -206,7 +206,7 @@ class boss_warbringer_omrogg : public CreatureScript instance->SetBossState(DATA_OMROGG, IN_PROGRESS); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_LEFT_HEAD) LeftHeadGUID = summoned->GetGUID(); @@ -219,10 +219,10 @@ class boss_warbringer_omrogg : public CreatureScript summoned->SetVisible(false); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { - Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID); - Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID); + Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID); + Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID); if (!LeftHead || !RightHead) return; @@ -245,10 +245,10 @@ class boss_warbringer_omrogg : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { - Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID); - Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID); + Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID); + Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID); if (!LeftHead || !RightHead) return; @@ -260,14 +260,14 @@ class boss_warbringer_omrogg : public CreatureScript instance->SetBossState(DATA_OMROGG, DONE); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Delay_Timer <= diff) { Delay_Timer = 3500; - Creature* LeftHead = Creature::GetCreature(*me, LeftHeadGUID); - Creature* RightHead = Creature::GetCreature(*me, RightHeadGUID); + Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID); + Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID); if (!LeftHead || !RightHead) return; @@ -383,7 +383,7 @@ class boss_warbringer_omrogg : public CreatureScript uint32 ResetThreat_Timer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_warbringer_omroggAI>(creature); } @@ -405,9 +405,9 @@ class npc_omrogg_heads : public CreatureScript instance = creature->GetInstanceScript(); } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void SetData(uint32 data, uint32 value) { @@ -417,7 +417,7 @@ class npc_omrogg_heads : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -433,7 +433,7 @@ class npc_omrogg_heads : public CreatureScript EventMap events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_omrogg_headsAI>(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index bdb109910a8..66aa02bbeaf 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -67,7 +67,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript { boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { } - void Reset() OVERRIDE + void Reset() override { removeAdds(); @@ -85,7 +85,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript resetcheck_timer = 5000; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); removeAdds(); @@ -93,12 +93,12 @@ class boss_warchief_kargath_bladefist : public CreatureScript instance->SetBossState(DATA_KARGATH, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { switch (summoned->GetEntry()) { @@ -114,7 +114,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript } } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { if (victim->GetTypeId() == TYPEID_PLAYER) { @@ -122,7 +122,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (InBlade) { @@ -145,7 +145,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript { for (std::vector<uint64>::const_iterator itr = adds.begin(); itr!= adds.end(); ++itr) { - Creature* creature = Unit::GetCreature(*me, *itr); + Creature* creature = ObjectAccessor::GetCreature(*me, *itr); if (creature && creature->IsAlive()) { creature->GetMotionMaster()->Clear(true); @@ -157,7 +157,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript for (std::vector<uint64>::const_iterator itr = assassins.begin(); itr!= assassins.end(); ++itr) { - Creature* creature = Unit::GetCreature(*me, *itr); + Creature* creature = ObjectAccessor::GetCreature(*me, *itr); if (creature && creature->IsAlive()) { creature->GetMotionMaster()->Clear(true); @@ -175,7 +175,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassExit[0], AssassExit[1]-8, AssassExit[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Return since we have no target if (!UpdateVictim()) @@ -308,7 +308,7 @@ class boss_warchief_kargath_bladefist : public CreatureScript bool InBlade; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_warchief_kargath_bladefistAI>(creature); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index 25ecf5331ad..a220f26e18b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -32,7 +32,7 @@ class instance_shattered_halls : public InstanceMapScript public: instance_shattered_halls() : InstanceMapScript("instance_shattered_halls", 540) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_shattered_halls_InstanceMapScript(map); } @@ -41,7 +41,7 @@ class instance_shattered_halls : public InstanceMapScript { instance_shattered_halls_InstanceMapScript(Map* map) : InstanceScript(map) { } - void Initialize() OVERRIDE + void Initialize() override { SetBossNumber(EncounterCount); nethekurseGUID = 0; @@ -49,7 +49,7 @@ class instance_shattered_halls : public InstanceMapScript nethekurseDoor2GUID = 0; } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -62,7 +62,7 @@ class instance_shattered_halls : public InstanceMapScript } } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -72,7 +72,7 @@ class instance_shattered_halls : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -97,7 +97,7 @@ class instance_shattered_halls : public InstanceMapScript return true; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -114,7 +114,7 @@ class instance_shattered_halls : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -125,7 +125,7 @@ class instance_shattered_halls : public InstanceMapScript return saveStream.str(); } - void Load(const char* strIn) OVERRIDE + void Load(const char* strIn) override { if (!strIn) { diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index a961800025d..bcc8b0c5a48 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -107,7 +107,7 @@ class boss_alar : public CreatureScript int8 cur_wp; - void Reset() OVERRIDE + void Reset() override { instance->SetData(DATA_ALAREVENT, NOT_STARTED); @@ -133,7 +133,7 @@ class boss_alar : public CreatureScript me->setActive(false); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_ALAREVENT, IN_PROGRESS); @@ -142,21 +142,21 @@ class boss_alar : public CreatureScript me->setActive(true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { instance->SetData(DATA_ALAREVENT, DONE); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon->GetEntry() == CREATURE_EMBER_OF_ALAR) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summon->AI()->AttackStart(target); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (Phase1) AttackStartNoMove(who); @@ -164,7 +164,7 @@ class boss_alar : public CreatureScript ScriptedAI::AttackStart(who); } - void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (damage >= me->GetHealth() && Phase1) { @@ -186,7 +186,7 @@ class boss_alar : public CreatureScript } } - void SpellHit(Unit*, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit*, const SpellInfo* spell) override { if (spell->Id == SPELL_DIVE_BOMB_VISUAL) { @@ -196,7 +196,7 @@ class boss_alar : public CreatureScript } } - void MovementInform(uint32 type, uint32 /*id*/) OVERRIDE + void MovementInform(uint32 type, uint32 /*id*/) override { if (type == POINT_MOTION_TYPE) { @@ -206,7 +206,7 @@ class boss_alar : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) // sometimes IsInCombat but !incombat, faction bug? return; @@ -435,7 +435,7 @@ class boss_alar : public CreatureScript Unit* target = NULL; target = me->SelectNearestTargetInAttackDistance(5); if (target) - me->AI()->AttackStart(target); + AttackStart(target); else { DoCast(me, SPELL_FLAME_BUFFET, true); @@ -446,7 +446,7 @@ class boss_alar : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_alarAI>(creature); } @@ -469,22 +469,22 @@ class npc_ember_of_alar : public CreatureScript InstanceScript* instance; bool toDie; - void Reset() OVERRIDE + void Reset() override { toDie = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoZoneInCombat(); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { me->setDeathState(JUST_DIED); } - void DamageTaken(Unit* killer, uint32& damage) OVERRIDE + void DamageTaken(Unit* killer, uint32& damage) override { if (damage >= me->GetHealth() && killer != me && !toDie) { @@ -494,7 +494,7 @@ class npc_ember_of_alar : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); if (instance->GetData(DATA_ALAREVENT) == 2) { - if (Unit* Alar = Unit::GetUnit(*me, instance->GetData64(DATA_ALAR))) + if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ALAR))) { int32 AlarHealth = int32(Alar->GetHealth()) - int32(Alar->CountPctFromMaxHealth(3)); if (AlarHealth > 0) @@ -507,7 +507,7 @@ class npc_ember_of_alar : public CreatureScript } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -523,7 +523,7 @@ class npc_ember_of_alar : public CreatureScript }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ember_of_alarAI>(creature); } @@ -537,15 +537,15 @@ class npc_flame_patch_alar : public CreatureScript struct npc_flame_patch_alarAI : public ScriptedAI { npc_flame_patch_alarAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_flame_patch_alarAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index 7caf1fd1771..2cac4a0be1a 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -130,7 +130,7 @@ class boss_high_astromancer_solarian : public CreatureScript bool AppearDelay; bool BlindingLight; - void Reset() OVERRIDE + void Reset() override { ArcaneMissiles_Timer = 2000; m_uiWrathOfTheAstromancer_Timer = 15000; @@ -157,12 +157,12 @@ class boss_high_astromancer_solarian : public CreatureScript Summons.DespawnAll(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->SetObjectScale(defaultsize); me->SetDisplayId(MODEL_HUMAN); @@ -170,7 +170,7 @@ class boss_high_astromancer_solarian : public CreatureScript instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); DoZoneInCombat(); @@ -205,7 +205,7 @@ class boss_high_astromancer_solarian : public CreatureScript return (z*sqrt(radius*radius - (x - CENTER_X)*(x - CENTER_X)) + CENTER_Y); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -414,7 +414,7 @@ class boss_high_astromancer_solarian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_high_astromancer_solarianAI>(creature); } @@ -442,18 +442,18 @@ class npc_solarium_priest : public CreatureScript uint32 holysmiteTimer; uint32 aoesilenceTimer; - void Reset() OVERRIDE + void Reset() override { healTimer = 9000; holysmiteTimer = 1; aoesilenceTimer = 15000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -464,7 +464,7 @@ class npc_solarium_priest : public CreatureScript switch (urand(0, 1)) { case 0: - target = Unit::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER)); + target = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_ASTROMANCER)); break; case 1: target = me; @@ -500,7 +500,7 @@ class npc_solarium_priest : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_solarium_priestAI>(creature); } @@ -515,7 +515,7 @@ class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader { PrepareAuraScript(spell_astromancer_wrath_of_the_astromancer_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WRATH_OF_THE_ASTROMANCER_DOT)) return false; @@ -532,13 +532,13 @@ class spell_astromancer_wrath_of_the_astromancer : public SpellScriptLoader target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), false); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_astromancer_wrath_of_the_astromancer_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_astromancer_wrath_of_the_astromancer_AuraScript(); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 077539b6b88..a24e1d5d34f 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -143,7 +143,7 @@ uint32 m_auiSpellSummonWeapon[]= }; const float CAPERNIAN_DISTANCE = 20.0f; //she casts away from the target -const float KAEL_VISIBLE_RANGE = 50.0f; +//const float KAEL_VISIBLE_RANGE = 50.0f; const float afGravityPos[3] = {795.0f, 0.0f, 70.0f}; @@ -165,7 +165,7 @@ struct advisorbase_ai : public ScriptedAI uint32 DelayRes_Timer; uint64 DelayRes_Target; - void Reset() OVERRIDE + void Reset() override { if (m_bDoubled_Health) { @@ -183,11 +183,11 @@ struct advisorbase_ai : public ScriptedAI //reset encounter if (instance->GetData(DATA_KAELTHASEVENT) == 1 || instance->GetData(DATA_KAELTHASEVENT) == 3) - if (Creature* Kaelthas = Unit::GetCreature(*me, instance->GetData64(DATA_KAELTHAS))) + if (Creature* Kaelthas = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KAELTHAS))) Kaelthas->AI()->EnterEvadeMode(); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -196,7 +196,7 @@ struct advisorbase_ai : public ScriptedAI ScriptedAI::MoveInLineOfSight(who); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -217,7 +217,7 @@ struct advisorbase_ai : public ScriptedAI DelayRes_Timer = 2000; } - void DamageTaken(Unit* killer, uint32 &damage) OVERRIDE + void DamageTaken(Unit* killer, uint32 &damage) override { if (damage < me->GetHealth()) return; @@ -253,7 +253,7 @@ struct advisorbase_ai : public ScriptedAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (DelayRes_Timer) { @@ -262,7 +262,7 @@ struct advisorbase_ai : public ScriptedAI DelayRes_Timer = 0; FakeDeath = false; - Unit* Target = Unit::GetUnit(*me, DelayRes_Target); + Unit* Target = ObjectAccessor::GetUnit(*me, DelayRes_Target); if (!Target) Target = me->GetVictim(); @@ -318,7 +318,7 @@ class boss_kaelthas : public CreatureScript uint64 m_auiAdvisorGuid[MAX_ADVISORS]; - void Reset() OVERRIDE + void Reset() override { Fireball_Timer = 5000+rand()%10000; ArcaneDisruption_Timer = 45000; @@ -351,7 +351,7 @@ class boss_kaelthas : public CreatureScript { for (uint8 i = 0; i < MAX_ADVISORS; ++i) { - if (Creature* creature = Unit::GetCreature(*me, m_auiAdvisorGuid[i])) + if (Creature* creature = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i])) { creature->Respawn(); creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -399,7 +399,7 @@ class boss_kaelthas : public CreatureScript } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->HasUnitState(UNIT_STATE_STUNNED) && me->CanCreatureAttack(who)) @@ -427,18 +427,18 @@ class boss_kaelthas : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (!instance->GetData(DATA_KAELTHASEVENT) && !Phase) StartEvent(); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { // if not phoenix, then it's one of the 7 weapons if (summoned->GetEntry() != NPC_PHOENIX) @@ -450,12 +450,12 @@ class boss_kaelthas : public CreatureScript } } - void SummonedCreatureDespawn(Creature* summon) OVERRIDE + void SummonedCreatureDespawn(Creature* summon) override { summons.Despawn(summon); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -468,12 +468,12 @@ class boss_kaelthas : public CreatureScript for (uint8 i = 0; i < MAX_ADVISORS; ++i) { - if (Unit* pAdvisor = Unit::GetUnit(*me, m_auiAdvisorGuid[i])) + if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i])) pAdvisor->Kill(pAdvisor); } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Phase 1 switch (Phase) @@ -502,7 +502,7 @@ class boss_kaelthas : public CreatureScript case 1: if (Phase_Timer <= diff) { - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0])); if (Advisor) { @@ -520,7 +520,7 @@ class boss_kaelthas : public CreatureScript //Subphase 2 - Start case 2: - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[0])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[0])); if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD)) { @@ -536,7 +536,7 @@ class boss_kaelthas : public CreatureScript case 3: if (Phase_Timer <= diff) { - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1])); if (Advisor) { @@ -554,7 +554,7 @@ class boss_kaelthas : public CreatureScript //Subphase 3 - Start case 4: - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[1])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[1])); if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD)) { @@ -570,7 +570,7 @@ class boss_kaelthas : public CreatureScript case 5: if (Phase_Timer <= diff) { - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2])); if (Advisor) { @@ -588,7 +588,7 @@ class boss_kaelthas : public CreatureScript //Subphase 4 - Start case 6: - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[2])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[2])); if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD)) { @@ -604,7 +604,7 @@ class boss_kaelthas : public CreatureScript case 7: if (Phase_Timer <= diff) { - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3])); if (Advisor) { @@ -623,7 +623,7 @@ class boss_kaelthas : public CreatureScript //End of phase 1 case 8: - Advisor = (Unit::GetCreature(*me, m_auiAdvisorGuid[3])); + Advisor = (ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[3])); if (Advisor && (Advisor->getStandState() == UNIT_STAND_STATE_DEAD)) { @@ -692,7 +692,7 @@ class boss_kaelthas : public CreatureScript Creature* Advisor; for (uint8 i = 0; i < MAX_ADVISORS; ++i) { - Advisor = Unit::GetCreature(*me, m_auiAdvisorGuid[i]); + Advisor = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]); if (!Advisor) TC_LOG_ERROR("scripts", "SD2: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i); @@ -896,7 +896,7 @@ class boss_kaelthas : public CreatureScript // 1) Kael'thas will portal the whole raid right into his body for (i = threatlist.begin(); i != threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); if (unit && (unit->GetTypeId() == TYPEID_PLAYER)) { //Use work around packet to prevent player from being dropped from combat @@ -917,7 +917,7 @@ class boss_kaelthas : public CreatureScript // 2) At that point he will put a Gravity Lapse debuff on everyone for (i = threatlist.begin(); i != threatlist.end(); ++i) { - if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) { DoCast(unit, SPELL_KNOCKBACK, true); //Gravity lapse - needs an exception in Spell system to work @@ -949,7 +949,7 @@ class boss_kaelthas : public CreatureScript //Remove flight for (i = threatlist.begin(); i != threatlist.end(); ++i) { - if (Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) { //Using packet workaround WorldPacket data(SMSG_MOVE_UNSET_CAN_FLY, 12); @@ -1000,7 +1000,7 @@ class boss_kaelthas : public CreatureScript } } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_kaelthasAI>(creature); } @@ -1023,7 +1023,7 @@ class boss_thaladred_the_darkener : public CreatureScript uint32 Silence_Timer; uint32 PsychicBlow_Timer; - void Reset() OVERRIDE + void Reset() override { Gaze_Timer = 100; Silence_Timer = 20000; @@ -1032,7 +1032,7 @@ class boss_thaladred_the_darkener : public CreatureScript advisorbase_ai::Reset(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1044,13 +1044,13 @@ class boss_thaladred_the_darkener : public CreatureScript me->AddThreat(who, 5000000.0f); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_KAELTHASEVENT) == 3) Talk(SAY_THALADRED_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { advisorbase_ai::UpdateAI(diff); @@ -1098,7 +1098,7 @@ class boss_thaladred_the_darkener : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_thaladred_the_darkenerAI>(creature); } @@ -1119,13 +1119,13 @@ class boss_lord_sanguinar : public CreatureScript uint32 Fear_Timer; - void Reset() OVERRIDE + void Reset() override { Fear_Timer = 20000; advisorbase_ai::Reset(); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1136,13 +1136,13 @@ class boss_lord_sanguinar : public CreatureScript Talk(SAY_SANGUINAR_AGGRO); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_KAELTHASEVENT) == 3) Talk(SAY_SANGUINAR_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { advisorbase_ai::UpdateAI(diff); @@ -1166,7 +1166,7 @@ class boss_lord_sanguinar : public CreatureScript DoMeleeAttackIfReady(); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_lord_sanguinarAI>(creature); } @@ -1190,7 +1190,7 @@ class boss_grand_astromancer_capernian : public CreatureScript uint32 Yell_Timer; bool Yell; - void Reset() OVERRIDE + void Reset() override { Fireball_Timer = 2000; Conflagration_Timer = 20000; @@ -1201,13 +1201,13 @@ class boss_grand_astromancer_capernian : public CreatureScript advisorbase_ai::Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_KAELTHASEVENT) == 3) Talk(SAY_CAPERNIAN_DEATH); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (!who || FakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1222,7 +1222,7 @@ class boss_grand_astromancer_capernian : public CreatureScript } } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1231,7 +1231,7 @@ class boss_grand_astromancer_capernian : public CreatureScript return; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { advisorbase_ai::UpdateAI(diff); @@ -1288,7 +1288,7 @@ class boss_grand_astromancer_capernian : public CreatureScript ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i!= threatlist.end(); ++i) { - Unit* unit = Unit::GetUnit(*me, (*i)->getUnitGuid()); + Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); //if in melee range if (unit && unit->IsWithinDistInMap(me, 5)) { @@ -1310,7 +1310,7 @@ class boss_grand_astromancer_capernian : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_grand_astromancer_capernianAI>(creature); } @@ -1332,7 +1332,7 @@ class boss_master_engineer_telonicus : public CreatureScript uint32 Bomb_Timer; uint32 RemoteToy_Timer; - void Reset() OVERRIDE + void Reset() override { Bomb_Timer = 10000; RemoteToy_Timer = 5000; @@ -1340,13 +1340,13 @@ class boss_master_engineer_telonicus : public CreatureScript advisorbase_ai::Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_KAELTHASEVENT) == 3) Talk(SAY_TELONICUS_DEATH); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return; @@ -1357,7 +1357,7 @@ class boss_master_engineer_telonicus : public CreatureScript Talk(SAY_TELONICUS_AGGRO); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { advisorbase_ai::UpdateAI(diff); @@ -1393,7 +1393,7 @@ class boss_master_engineer_telonicus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_master_engineer_telonicusAI>(creature); } @@ -1419,7 +1419,7 @@ class npc_kael_flamestrike : public CreatureScript bool Casting; bool KillSelf; - void Reset() OVERRIDE + void Reset() override { Timer = 5000; Casting = false; @@ -1429,12 +1429,12 @@ class npc_kael_flamestrike : public CreatureScript me->setFaction(14); } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Casting) { @@ -1461,7 +1461,7 @@ class npc_kael_flamestrike : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kael_flamestrikeAI(creature); } @@ -1482,20 +1482,20 @@ class npc_phoenix_tk : public CreatureScript uint32 Cycle_Timer; - void Reset() OVERRIDE + void Reset() override { Cycle_Timer = 2000; DoCast(me, SPELL_BURN, true); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { //is this spell in use anylonger? //DoCast(me, SPELL_EMBER_BLAST, true); me->SummonCreature(NPC_PHOENIX_EGG, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 16000); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1515,7 +1515,7 @@ class npc_phoenix_tk : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_phoenix_tkAI(creature); } @@ -1536,16 +1536,16 @@ class npc_phoenix_egg_tk : public CreatureScript uint32 Rebirth_Timer; - void Reset() OVERRIDE + void Reset() override { Rebirth_Timer = 15000; } //ignore any - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->Attack(who, false)) { @@ -1556,13 +1556,13 @@ class npc_phoenix_egg_tk : public CreatureScript } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AddThreat(me->GetVictim(), 0.0f); summoned->CastSpell(summoned, SPELL_REBIRTH, false); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Rebirth_Timer) return; @@ -1577,7 +1577,7 @@ class npc_phoenix_egg_tk : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_phoenix_egg_tkAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 1a972f65360..634d54ed58b 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -68,7 +68,7 @@ class boss_void_reaver : public CreatureScript bool Enraged; - void Reset() OVERRIDE + void Reset() override { Pounding_Timer = 15000; ArcaneOrb_Timer = 3000; @@ -81,12 +81,12 @@ class boss_void_reaver : public CreatureScript instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); DoZoneInCombat(); @@ -94,14 +94,14 @@ class boss_void_reaver : public CreatureScript instance->SetData(DATA_VOIDREAVEREVENT, DONE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); instance->SetData(DATA_VOIDREAVEREVENT, IN_PROGRESS); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -122,7 +122,7 @@ class boss_void_reaver : public CreatureScript std::vector<Unit*> target_list; for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { - target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); + target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); if (!target) continue; // exclude pets & totems, 18 yard radius minimum @@ -168,7 +168,7 @@ class boss_void_reaver : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<boss_void_reaverAI>(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index fcace2a3ab4..0da16967a49 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -60,7 +60,7 @@ class instance_the_eye : public InstanceMapScript uint32 m_auiEncounter[MAX_ENCOUNTER]; - void Initialize() OVERRIDE + void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); @@ -76,7 +76,7 @@ class instance_the_eye : public InstanceMapScript AlarEventPhase = 0; } - bool IsEncounterInProgress() const OVERRIDE + bool IsEncounterInProgress() const override { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) @@ -85,7 +85,7 @@ class instance_the_eye : public InstanceMapScript return false; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -113,7 +113,7 @@ class instance_the_eye : public InstanceMapScript } } - uint64 GetData64(uint32 identifier) const OVERRIDE + uint64 GetData64(uint32 identifier) const override { switch (identifier) { @@ -128,7 +128,7 @@ class instance_the_eye : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -151,7 +151,7 @@ class instance_the_eye : public InstanceMapScript SaveToDB(); } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -163,7 +163,7 @@ class instance_the_eye : public InstanceMapScript return 0; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -174,7 +174,7 @@ class instance_the_eye : public InstanceMapScript return stream.str(); } - void Load(const char* in) OVERRIDE + void Load(const char* in) override { if (!in) { @@ -192,7 +192,7 @@ class instance_the_eye : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_eye_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp index a09dd4c756e..32af9f647ad 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp @@ -52,17 +52,17 @@ class npc_crystalcore_devastator : public CreatureScript uint32 Knockaway_Timer; uint32 Countercharge_Timer; - void Reset() OVERRIDE + void Reset() override { Countercharge_Timer = 9000; Knockaway_Timer = 25000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -100,7 +100,7 @@ class npc_crystalcore_devastator : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_crystalcore_devastatorAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp index 05050b4be2e..a60609e0656 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp @@ -59,13 +59,13 @@ class boss_gatewatcher_gyrokill : public CreatureScript { boss_gatewatcher_gyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 10000); @@ -74,12 +74,12 @@ class boss_gatewatcher_gyrokill : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -115,7 +115,7 @@ class boss_gatewatcher_gyrokill : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gatewatcher_gyrokillAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp index e34e4ebdb23..151244f86c9 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp @@ -48,9 +48,9 @@ enum Spells enum Events { - EVENT_STREAM_OF_MACHINE_FLUID = 0, - EVENT_JACKHAMMER = 1, - EVENT_SHADOW_POWER = 2 + EVENT_STREAM_OF_MACHINE_FLUID = 1, + EVENT_JACKHAMMER = 2, + EVENT_SHADOW_POWER = 3 }; class boss_gatewatcher_iron_hand : public CreatureScript @@ -62,7 +62,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript { boss_gatewatcher_iron_handAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_IRON_HAND) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 55000); @@ -71,19 +71,19 @@ class boss_gatewatcher_iron_hand : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { if (roll_chance_i(50)) Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -122,7 +122,7 @@ class boss_gatewatcher_iron_hand : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_gatewatcher_iron_handAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp index b15318647a9..f8861d1fa7f 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp @@ -75,7 +75,7 @@ class boss_mechano_lord_capacitus : public CreatureScript { boss_mechano_lord_capacitusAI(Creature* creature) : BossAI(creature, DATA_MECHANOLORD_CAPACITUS) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(YELL_AGGRO); @@ -88,18 +88,18 @@ class boss_mechano_lord_capacitus : public CreatureScript events.ScheduleEvent(EVENT_POSITIVE_SHIFT, 15 * IN_MILLISECONDS); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(YELL_KILL); } - void JustDied(Unit* /*victim*/) OVERRIDE + void JustDied(Unit* /*victim*/) override { _JustDied(); Talk(YELL_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -132,11 +132,12 @@ class boss_mechano_lord_capacitus : public CreatureScript events.ScheduleEvent(EVENT_POSITIVE_SHIFT, urand(45, 60) * IN_MILLISECONDS); break; case EVENT_SUMMON_NETHER_CHARGE: - Position pos; - me->GetRandomNearPosition(pos, 5.0f); + { + Position pos = me->GetRandomNearPosition(5.0f); me->SummonCreature(NPC_NETHER_CHARGE, pos, TEMPSUMMON_TIMED_DESPAWN, 18000); events.ScheduleEvent(EVENT_SUMMON_NETHER_CHARGE, 10 * IN_MILLISECONDS); break; + } case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); break; @@ -149,7 +150,7 @@ class boss_mechano_lord_capacitus : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_mechano_lord_capacitusAI(creature); } @@ -164,7 +165,7 @@ class spell_capacitus_polarity_charge : public SpellScriptLoader { PrepareSpellScript(spell_capacitus_polarity_charge_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE)) return false; @@ -210,14 +211,14 @@ class spell_capacitus_polarity_charge : public SpellScriptLoader SetHitDamage(0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_capacitus_polarity_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_capacitus_polarity_charge_SpellScript(); } @@ -232,7 +233,7 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader { PrepareSpellScript(spell_capacitus_polarity_shift_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY)) return false; @@ -247,13 +248,13 @@ class spell_capacitus_polarity_shift : public SpellScriptLoader target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_capacitus_polarity_shift_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_capacitus_polarity_shift_SpellScript(); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index d7e8eabd32f..3e4e6a213bd 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -67,7 +67,7 @@ class boss_nethermancer_sepethrea : public CreatureScript { boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) { } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { _EnterCombat(); events.ScheduleEvent(EVENT_FROST_ATTACK, urand(7000, 10000)); @@ -80,18 +80,18 @@ class boss_nethermancer_sepethrea : public CreatureScript Talk(SAY_SUMMON); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -136,7 +136,7 @@ class boss_nethermancer_sepethrea : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_nethermancer_sepethreaAI(creature); } @@ -162,7 +162,7 @@ class npc_ragin_flames : public CreatureScript bool onlyonce; - void Reset() OVERRIDE + void Reset() override { inferno_Timer = 10000; flame_timer = 500; @@ -173,11 +173,11 @@ class npc_ragin_flames : public CreatureScript me->SetSpeed(MOVE_RUN, DUNGEON_MODE(0.5f, 0.7f)); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Check_Timer if (Check_Timer <= diff) @@ -218,7 +218,7 @@ class npc_ragin_flames : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetInstanceAI<npc_ragin_flamesAI>(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index 8d6dde82770..3c6fe2040fc 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -75,7 +75,7 @@ class boss_pathaleon_the_calculator : public CreatureScript { boss_pathaleon_the_calculatorAI(Creature* creature) : BossAI(creature, DATA_PATHALEON_THE_CALCULATOR) { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_SUMMON, 30000); @@ -86,18 +86,18 @@ class boss_pathaleon_the_calculator : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void DamageTaken(Unit* /*attacker*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { if (me->HealthBelowPctDamaged(20, damage) && !me->HasAura(SPELL_FRENZY)) { @@ -106,7 +106,7 @@ class boss_pathaleon_the_calculator : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -158,7 +158,7 @@ class boss_pathaleon_the_calculator : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_pathaleon_the_calculatorAI(creature); } @@ -179,7 +179,7 @@ class npc_nether_wraith : public CreatureScript uint32 Die_Timer; bool Detonation; - void Reset() OVERRIDE + void Reset() override { ArcaneMissiles_Timer = urand(1000, 4000); Detonation_Timer = 20000; @@ -187,9 +187,9 @@ class npc_nether_wraith : public CreatureScript Detonation = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -230,7 +230,7 @@ class npc_nether_wraith : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nether_wraithAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index 9d2556d809b..4dddee83459 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -55,7 +55,7 @@ class instance_mechanar : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* gameObject) OVERRIDE + void OnGameObjectRemove(GameObject* gameObject) override { switch (gameObject->GetEntry()) { @@ -69,7 +69,7 @@ class instance_mechanar : public InstanceMapScript } } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -89,7 +89,7 @@ class instance_mechanar : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -100,7 +100,7 @@ class instance_mechanar : public InstanceMapScript return saveStream.str(); } - void Load(const char* str) OVERRIDE + void Load(const char* str) override { if (!str) { @@ -133,7 +133,7 @@ class instance_mechanar : public InstanceMapScript } }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_mechanar_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 3cc2e5dcc89..3befc3742ff 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -88,7 +88,7 @@ class npc_millhouse_manastorm : public CreatureScript uint32 Pyroblast_Timer; uint32 Fireball_Timer; - void Reset() OVERRIDE + void Reset() override { EventProgress_Timer = 2000; LowHp = false; @@ -105,7 +105,7 @@ class npc_millhouse_manastorm : public CreatureScript Talk(SAY_COMPLETE); } - void AttackStart(Unit* who) OVERRIDE + void AttackStart(Unit* who) override { if (me->Attack(who, true)) { @@ -116,13 +116,13 @@ class npc_millhouse_manastorm : public CreatureScript } } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); @@ -131,7 +131,7 @@ class npc_millhouse_manastorm : public CreatureScript ->FailQuest();*/ } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Init) { @@ -213,7 +213,7 @@ class npc_millhouse_manastorm : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetArcatrazAI<npc_millhouse_manastormAI>(creature); } @@ -282,7 +282,7 @@ class npc_warden_mellichar : public CreatureScript uint32 EventProgress_Timer; uint32 Phase; - void Reset() OVERRIDE + void Reset() override { IsRunning = false; CanSpawn = false; @@ -296,9 +296,9 @@ class npc_warden_mellichar : public CreatureScript instance->SetBossState(DATA_HARBINGER_SKYRISS, NOT_STARTED); } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (IsRunning) return; @@ -316,7 +316,7 @@ class npc_warden_mellichar : public CreatureScript } } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(YELL_INTRO1); DoCast(me, SPELL_BUBBLE_VISUAL); @@ -377,7 +377,7 @@ class npc_warden_mellichar : public CreatureScript CanSpawn = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!IsRunning) return; @@ -490,7 +490,7 @@ class npc_warden_mellichar : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetArcatrazAI<npc_warden_mellicharAI>(creature); } @@ -516,7 +516,7 @@ class npc_zerekethvoidzone : public CreatureScript { npc_zerekethvoidzoneAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetUInt32Value(UNIT_NPC_FLAGS, 0); me->setFaction(16); @@ -525,10 +525,10 @@ class npc_zerekethvoidzone : public CreatureScript DoCast(me, SPELL_VOID_ZONE_DAMAGE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_zerekethvoidzoneAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp index bfc304e6a99..41bc93cfdfe 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp @@ -59,15 +59,20 @@ class boss_dalliah_the_doomsayer : public CreatureScript struct boss_dalliah_the_doomsayerAI : public BossAI { - boss_dalliah_the_doomsayerAI(Creature* creature) : BossAI(creature, DATA_DALLIAH) { } + boss_dalliah_the_doomsayerAI(Creature* creature) : BossAI(creature, DATA_DALLIAH) + { + soccothratesTaunt = false; + soccothratesDeath = false; + } - void Reset() OVERRIDE + void Reset() override { _Reset(); + soccothratesTaunt = false; soccothratesDeath = false; } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -77,7 +82,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript soccothrates->AI()->SetData(1, 1); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_GIFT_OF_THE_DOOMSAYER, urand(1000, 4000)); @@ -88,12 +93,12 @@ class boss_dalliah_the_doomsayer : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { switch (data) { @@ -106,7 +111,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -182,7 +187,7 @@ class boss_dalliah_the_doomsayer : public CreatureScript bool soccothratesDeath; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetArcatrazAI<boss_dalliah_the_doomsayerAI>(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index e94de3af56e..1917bae1a6c 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -81,7 +81,7 @@ class boss_harbinger_skyriss : public CreatureScript uint32 Domination_Timer; uint32 ManaBurn_Timer; - void Reset() OVERRIDE + void Reset() override { if (!Intro) me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); @@ -97,7 +97,7 @@ class boss_harbinger_skyriss : public CreatureScript ManaBurn_Timer = 25000; } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!Intro) return; @@ -105,15 +105,15 @@ class boss_harbinger_skyriss : public CreatureScript ScriptedAI::MoveInLineOfSight(who); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); _JustDied(); } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (!summon) return; @@ -126,7 +126,7 @@ class boss_harbinger_skyriss : public CreatureScript summon->AI()->AttackStart(target); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { //won't yell killing pet/other unit if (victim->GetEntry() == NPC_ALPHA_POD_TARGET) @@ -148,7 +148,7 @@ class boss_harbinger_skyriss : public CreatureScript DoCast(me, SPELL_33_ILLUSION); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Intro) { @@ -262,7 +262,7 @@ class boss_harbinger_skyriss : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetArcatrazAI<boss_harbinger_skyrissAI>(creature); } @@ -277,12 +277,12 @@ class boss_harbinger_skyriss_illusion : public CreatureScript { boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_harbinger_skyriss_illusionAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp index 044be4c1534..a519ec7207c 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp @@ -82,9 +82,14 @@ class boss_wrath_scryer_soccothrates : public CreatureScript struct boss_wrath_scryer_soccothratesAI : public BossAI { - boss_wrath_scryer_soccothratesAI(Creature* creature) : BossAI(creature, DATA_SOCCOTHRATES) { } + boss_wrath_scryer_soccothratesAI(Creature* creature) : BossAI(creature, DATA_SOCCOTHRATES) + { + preFight = false; + dalliahTaunt = false; + dalliahDeath = false; + } - void Reset() OVERRIDE + void Reset() override { _Reset(); preFight = false; @@ -93,7 +98,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript DoCast(me, SPELL_FEL_IMMOLATION); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); @@ -103,7 +108,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript dalliah->AI()->SetData(1, 1); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000)); @@ -113,12 +118,12 @@ class boss_wrath_scryer_soccothrates : public CreatureScript preFight = false; } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (instance->GetData(DATA_CONVERSATION) == NOT_STARTED && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 70.0f)) { @@ -130,7 +135,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript } } - void SetData(uint32 /*type*/, uint32 data) OVERRIDE + void SetData(uint32 /*type*/, uint32 data) override { switch (data) { @@ -143,7 +148,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -271,7 +276,7 @@ class boss_wrath_scryer_soccothrates : public CreatureScript bool dalliahDeath; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return GetArcatrazAI<boss_wrath_scryer_soccothratesAI>(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp index 54246453100..4b43edef2e0 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp @@ -50,18 +50,18 @@ class boss_zereketh_the_unbound : public CreatureScript { boss_zereketh_the_unboundAI(Creature* creature) : BossAI(creature, DATA_ZEREKETH) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); events.ScheduleEvent(EVENT_VOID_ZONE, urand (6000, 10000)); @@ -70,12 +70,12 @@ class boss_zereketh_the_unbound : public CreatureScript Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -113,7 +113,7 @@ class boss_zereketh_the_unbound : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_zereketh_the_unboundAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index 90feaa8d091..a6d0b348984 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -49,7 +49,7 @@ class instance_arcatraz : public InstanceMapScript memset(StasisPodStates, NOT_STARTED, 5 * sizeof(uint8)); } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -67,7 +67,7 @@ class instance_arcatraz : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* go) OVERRIDE + void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { @@ -98,7 +98,7 @@ class instance_arcatraz : public InstanceMapScript } } - void OnGameObjectRemove(GameObject* go) OVERRIDE + void OnGameObjectRemove(GameObject* go) override { switch (go->GetEntry()) { @@ -111,7 +111,7 @@ class instance_arcatraz : public InstanceMapScript } } - void SetData(uint32 type, uint32 data) OVERRIDE + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -132,7 +132,7 @@ class instance_arcatraz : public InstanceMapScript } } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { switch (type) { @@ -150,7 +150,7 @@ class instance_arcatraz : public InstanceMapScript return 0; } - uint64 GetData64(uint32 data) const OVERRIDE + uint64 GetData64(uint32 data) const override { switch (data) { @@ -168,7 +168,7 @@ class instance_arcatraz : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -191,7 +191,7 @@ class instance_arcatraz : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -202,7 +202,7 @@ class instance_arcatraz : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -245,7 +245,7 @@ class instance_arcatraz : public InstanceMapScript uint8 StasisPodStates[5]; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_arcatraz_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index fefb791715f..7b831e82a75 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -52,13 +52,13 @@ class boss_commander_sarannis : public CreatureScript { boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _phase = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -66,18 +66,18 @@ class boss_commander_sarannis : public CreatureScript events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 15200); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (me->HealthBelowPctDamaged(50, damage) && _phase) { @@ -88,12 +88,12 @@ class boss_commander_sarannis : public CreatureScript } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { BossAI::JustSummoned(summon); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -129,7 +129,7 @@ class boss_commander_sarannis : public CreatureScript bool _phase; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_commander_sarannisAI(creature); } @@ -167,13 +167,13 @@ class spell_commander_sarannis_summon_reinforcements : public SpellScriptLoader GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[3], TEMPSUMMON_CORPSE_DESPAWN); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_commander_sarannis_summon_reinforcements_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_commander_sarannis_summon_reinforcements_SpellScript(); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index db62a0e91b3..2c15a6dd30d 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -74,7 +74,7 @@ class boss_high_botanist_freywinn : public CreatureScript uint32 DeadAddsCount; bool MoveFree; - void Reset() OVERRIDE + void Reset() override { Adds_List.clear(); @@ -85,12 +85,12 @@ class boss_high_botanist_freywinn : public CreatureScript MoveFree = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_FRAYER) Adds_List.push_back(summoned->GetGUID()); @@ -107,17 +107,17 @@ class boss_high_botanist_freywinn : public CreatureScript } } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -151,7 +151,7 @@ class boss_high_botanist_freywinn : public CreatureScript { for (std::list<uint64>::iterator itr = Adds_List.begin(); itr != Adds_List.end(); ++itr) { - if (Unit* temp = Unit::GetUnit(*me, *itr)) + if (Unit* temp = ObjectAccessor::GetUnit(*me, *itr)) { if (!temp->IsAlive()) { @@ -200,7 +200,7 @@ class boss_high_botanist_freywinn : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_high_botanist_freywinnAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index 839b452e631..8cab7485510 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -70,7 +70,7 @@ class boss_laj : public CreatureScript uint32 Transform_Timer; uint32 Allergic_Timer; - void Reset() OVERRIDE + void Reset() override { me->SetDisplayId(MODEL_DEFAULT); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); @@ -157,17 +157,17 @@ class boss_laj : public CreatureScript CanSummon = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { if (summon && me->GetVictim()) summon->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0)); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -213,7 +213,7 @@ class boss_laj : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lajAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index cc3ffc26edf..d2a1d101ae4 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -54,14 +54,14 @@ class boss_thorngrin_the_tender : public CreatureScript { boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { } - void Reset() OVERRIDE + void Reset() override { _Reset(); _phase1 = true; _phase2 = true; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); @@ -70,18 +70,18 @@ class boss_thorngrin_the_tender : public CreatureScript events.ScheduleEvent(EVENT_ENRAGE, 12000); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { _JustDied(); Talk(SAY_DEATH); } - void DamageTaken(Unit* /*killer*/, uint32 &damage) OVERRIDE + void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (me->HealthBelowPctDamaged(50, damage) && _phase1) { @@ -95,7 +95,7 @@ class boss_thorngrin_the_tender : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -140,7 +140,7 @@ class boss_thorngrin_the_tender : public CreatureScript bool _phase2; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_thorngrin_the_tenderAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index 7b83fa7009d..a1335290d5a 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -81,23 +81,23 @@ class npc_warp_splinter_treant : public CreatureScript uint64 WarpGuid; uint32 check_Timer; - void Reset() OVERRIDE + void Reset() override { check_Timer = 0; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) { if (WarpGuid && check_Timer <= diff) { - if (Unit* Warp = Unit::GetUnit(*me, WarpGuid)) + if (Unit* Warp = ObjectAccessor::GetUnit(*me, WarpGuid)) { if (me->IsWithinMeleeRange(Warp, 2.5f)) { @@ -115,11 +115,11 @@ class npc_warp_splinter_treant : public CreatureScript return; } - if (me->GetVictim()->GetGUID() != WarpGuid) + if (me->EnsureVictim()->GetGUID() != WarpGuid) DoMeleeAttackIfReady(); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_warp_splinter_treantAI(creature); } @@ -151,7 +151,7 @@ class boss_warp_splinter : public CreatureScript float Treant_Spawn_Pos_X; float Treant_Spawn_Pos_Y; - void Reset() OVERRIDE + void Reset() override { War_Stomp_Timer = urand(25000, 40000); Summon_Treants_Timer = 45000; @@ -160,17 +160,17 @@ class boss_warp_splinter : public CreatureScript me->SetSpeed(MOVE_RUN, 0.7f, true); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* /*victim*/) OVERRIDE + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } @@ -191,7 +191,7 @@ class boss_warp_splinter : public CreatureScript Talk(SAY_SUMMON); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -227,7 +227,7 @@ class boss_warp_splinter : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_warp_splinterAI(creature); } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp index 72202c5d896..f8929f7e42a 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp @@ -35,7 +35,7 @@ class instance_the_botanica : public InstanceMapScript WarpSplinterGUID = 0; } - void OnCreatureCreate(Creature* creature) OVERRIDE + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { @@ -59,7 +59,7 @@ class instance_the_botanica : public InstanceMapScript } } - uint64 GetData64(uint32 type) const OVERRIDE + uint64 GetData64(uint32 type) const override { switch (type) { @@ -80,7 +80,7 @@ class instance_the_botanica : public InstanceMapScript return 0; } - bool SetBossState(uint32 type, EncounterState state) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) return false; @@ -100,7 +100,7 @@ class instance_the_botanica : public InstanceMapScript return true; } - std::string GetSaveData() OVERRIDE + std::string GetSaveData() override { OUT_SAVE_INST_DATA; @@ -111,7 +111,7 @@ class instance_the_botanica : public InstanceMapScript return saveStream.str(); } - void Load(char const* str) OVERRIDE + void Load(char const* str) override { if (!str) { @@ -152,7 +152,7 @@ class instance_the_botanica : public InstanceMapScript uint64 WarpSplinterGUID; }; - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_botanica_InstanceMapScript(map); } diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp index 3da0ee61aa3..eea03aae343 100644 --- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp +++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp @@ -69,7 +69,7 @@ class boss_doomlord_kazzak : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SHADOW_VOLLEY, urand(6000, 10000)); @@ -82,17 +82,17 @@ class boss_doomlord_kazzak : public CreatureScript _events.ScheduleEvent(EVENT_BERSERK, 180000); } - void JustRespawned() OVERRIDE + void JustRespawned() override { Talk(SAY_INTRO); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { // When Kazzak kills a player (not pets/totems), he regens some health if (victim->GetTypeId() != TYPEID_PLAYER) @@ -103,12 +103,12 @@ class boss_doomlord_kazzak : public CreatureScript Talk(SAY_KILL); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Return since we have no target if (!UpdateVictim()) @@ -169,7 +169,7 @@ class boss_doomlord_kazzak : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_doomlordkazzakAI(creature); } @@ -184,7 +184,7 @@ class spell_mark_of_kazzak : public SpellScriptLoader { PrepareAuraScript(spell_mark_of_kazzak_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_KAZZAK_DAMAGE)) return false; @@ -209,14 +209,14 @@ class spell_mark_of_kazzak : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mark_of_kazzak_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH); OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazzak_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mark_of_kazzak_AuraScript(); } diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp index 46777abce6a..a193e8ff880 100644 --- a/src/server/scripts/Outland/boss_doomwalker.cpp +++ b/src/server/scripts/Outland/boss_doomwalker.cpp @@ -59,7 +59,7 @@ class boss_doomwalker : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_ENRAGE, 0); @@ -70,7 +70,7 @@ class boss_doomwalker : public CreatureScript _inEnrage = false; } - void KilledUnit(Unit* victim) OVERRIDE + void KilledUnit(Unit* victim) override { victim->CastSpell(victim, SPELL_MARK_DEATH, 0); @@ -80,17 +80,17 @@ class boss_doomwalker : public CreatureScript Talk(SAY_SLAY); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who && who->GetTypeId() == TYPEID_PLAYER && me->IsValidAttackTarget(who)) @@ -98,7 +98,7 @@ class boss_doomwalker : public CreatureScript who->CastSpell(who, SPELL_AURA_DEATH, 1); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -159,7 +159,7 @@ class boss_doomwalker : public CreatureScript bool _inEnrage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_doomwalkerAI(creature); } diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 3f1579c42b1..d21b92d3e92 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -75,15 +75,15 @@ public: uint64 OgreGUID; - void Reset() OVERRIDE + void Reset() override { OgreGUID = 0; } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void UpdateAI(uint32 /*diff*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bloodmaul_brutebaneAI(creature); } @@ -115,16 +115,17 @@ public: { npc_bloodmaul_bruteAI(Creature* creature) : ScriptedAI(creature) { + PlayerGUID = 0; hp30 = false; } - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; hp30 = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (urand (0, 100) < 35) Talk(SAY_AGGRO); @@ -133,14 +134,14 @@ public: events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, 15000); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (killer->GetTypeId() == TYPEID_PLAYER) if (killer->ToPlayer()->GetQuestRewardStatus(QUEST_INTO_THE_SOULGRINDER)) Talk(SAY_DEATH); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who || (!who->IsAlive())) return; @@ -154,7 +155,7 @@ public: } } - void MovementInform(uint32 /*type*/, uint32 id) OVERRIDE + void MovementInform(uint32 /*type*/, uint32 id) override { if (id == 1) { @@ -172,7 +173,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -210,7 +211,7 @@ public: bool hp30; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bloodmaul_bruteAI(creature); } @@ -259,7 +260,7 @@ public: uint32 ManaBurn_Timer; uint32 IntangiblePresence_Timer; - void Reset() OVERRIDE + void Reset() override { IsNihil = false; NihilSpeech_Timer = 3000; @@ -270,9 +271,9 @@ public: IntangiblePresence_Timer = 15000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) @@ -282,7 +283,7 @@ public: } //in case Creature was not summoned (not expected) - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -295,7 +296,7 @@ public: } } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_T_PHASE_MODULATOR && caster->GetTypeId() == TYPEID_PLAYER) { @@ -326,7 +327,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (IsNihil) { @@ -391,7 +392,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_nether_drakeAI(creature); } @@ -417,11 +418,11 @@ public: { npc_daranelleAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) @@ -438,7 +439,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_daranelleAI(creature); } @@ -467,7 +468,7 @@ class go_legion_obelisk : public GameObjectScript public: go_legion_obelisk() : GameObjectScript("go_legion_obelisk") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_YOURE_FIRED) == QUEST_STATUS_INCOMPLETE) { @@ -521,7 +522,7 @@ class go_thunderspike : public GameObjectScript public: go_thunderspike() : GameObjectScript("go_thunderspike") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_THUNDERSPIKE) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_GOR_GRIMGUT, 25.0f, true)) if (Creature* gorGrimgut = go->SummonCreature(NPC_GOR_GRIMGUT, -2413.4f, 6914.48f, 25.01f, 3.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000)) @@ -623,7 +624,7 @@ class npc_simon_bunny : public CreatureScript EventMap _events; std::list<uint8> colorSequence, playableSequence, playerSequence; - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { _events.Update(diff); @@ -677,7 +678,7 @@ class npc_simon_bunny : public CreatureScript } } - void DoAction(int32 action) OVERRIDE + void DoAction(int32 action) override { switch (action) { @@ -703,7 +704,7 @@ class npc_simon_bunny : public CreatureScript } // Called by color clusters script (go_simon_cluster) and used for knowing the button pressed by player - void SetData(uint32 type, uint32 /*data*/) OVERRIDE + void SetData(uint32 type, uint32 /*data*/) override { if (!listening) return; @@ -726,7 +727,7 @@ class npc_simon_bunny : public CreatureScript } // Used for getting involved player guid. Parameter id is used for defining if is a large(Monument) or small(Relic) node - void SetGUID(uint64 guid, int32 id) OVERRIDE + void SetGUID(uint64 guid, int32 id) override { me->SetCanFly(true); @@ -1016,7 +1017,7 @@ class npc_simon_bunny : public CreatureScript } } - void SpellHitTarget(Unit* target, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* target, const SpellInfo* spell) override { // Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target. // Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself @@ -1048,7 +1049,7 @@ class npc_simon_bunny : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_simon_bunnyAI(creature); } @@ -1059,7 +1060,7 @@ class go_simon_cluster : public GameObjectScript public: go_simon_cluster() : GameObjectScript("go_simon_cluster") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (Creature* bunny = go->FindNearestCreature(NPC_SIMON_BUNNY, 12.0f, true)) bunny->AI()->SetData(go->GetEntry(), 0); @@ -1085,14 +1086,14 @@ class go_apexis_relic : public GameObjectScript public: go_apexis_relic() : GameObjectScript("go_apexis_relic") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { player->PrepareGossipMenu(go, go->GetGOInfo()->questgiver.gossipID); player->SendPreparedGossip(go); return true; } - bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 /*action*/) override { player->CLOSE_GOSSIP_MENU(); @@ -1134,7 +1135,7 @@ public: timer = 500; } - void Reset() OVERRIDE + void Reset() override { if (GetClosestCreatureWithEntry(me, NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY, 25.0f)) me->DespawnOrUnsummon(); @@ -1149,13 +1150,13 @@ public: timer = 500; } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { if (summoner->isType(TYPEMASK_PLAYER)) playerGuid = summoner->GetGUID(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (timer <= diff) { @@ -1173,7 +1174,7 @@ public: uint32 timer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_oscillating_frequency_scanner_master_bunnyAI(creature); } @@ -1195,13 +1196,13 @@ class spell_oscillating_field : public SpellScriptLoader player->CompleteQuest(QUEST_GAUGING_THE_RESONANT_FREQUENCY); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_oscillating_field_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_oscillating_field_SpellScript(); } diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 3736994e9a3..0da70207a04 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -60,7 +60,7 @@ public: { npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { faction_Timer = 8000; envelopingWinds_Timer = 9000; @@ -72,7 +72,7 @@ public: Talk(SAY_SUMMON); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (faction_Timer) { @@ -118,7 +118,7 @@ public: uint32 shock_Timer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_aeranasAI(creature); } @@ -155,13 +155,13 @@ public: Reset(); } - void Reset() OVERRIDE + void Reset() override { ryga = NULL; DoCast(me, SPELL_ANCESTRAL_WOLF_BUFF, true); } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!ryga && who->GetEntry() == NPC_RYGA && me->IsWithinDistInMap(who, 15.0f)) @@ -171,7 +171,7 @@ public: npc_escortAI::MoveInLineOfSight(who); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -192,7 +192,7 @@ public: Creature* ryga; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_ancestral_wolfAI(creature); } @@ -225,15 +225,15 @@ public: { npc_wounded_blood_elfAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) Talk(SAY_ELF_AGGRO); } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } @@ -247,7 +247,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -282,7 +282,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wounded_blood_elfAI(creature); } @@ -307,18 +307,18 @@ public: { npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { checkTimer = 5000; //check for creature every 5 sec helboarGUID = 0; } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE || id != 1) return; - if (Creature* helboar = me->GetCreature(*me, helboarGUID)) + if (Creature* helboar = ObjectAccessor::GetCreature(*me, helboarGUID)) { helboar->RemoveCorpse(); DoCast(SPELL_SUMMON_POO); @@ -328,7 +328,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (checkTimer <= diff) { @@ -355,7 +355,7 @@ public: uint64 helboarGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fel_guard_houndAI(creature); } diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 8d5c81d1c01..3b9d865cb3b 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -60,7 +60,7 @@ class npc_greatmother_geyah : public CreatureScript public: npc_greatmother_geyah() : CreatureScript("npc_greatmother_geyah") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -121,7 +121,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -178,17 +178,15 @@ class npc_maghar_captive : public CreatureScript public: npc_maghar_captive() : CreatureScript("npc_maghar_captive") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_TOTEM_KARDASH_H) { - if (npc_maghar_captiveAI* pEscortAI = dynamic_cast<npc_maghar_captiveAI*>(creature->AI())) + if (npc_maghar_captiveAI* EscortAI = dynamic_cast<npc_maghar_captiveAI*>(creature->AI())) { creature->SetStandState(UNIT_STAND_STATE_STAND); creature->setFaction(232); - - pEscortAI->Start(true, false, player->GetGUID(), quest); - + EscortAI->Start(true, false, player->GetGUID(), quest); creature->AI()->Talk(SAY_MAG_START); creature->SummonCreature(NPC_MURK_RAIDER, m_afAmbushA[0]+2.5f, m_afAmbushA[1]-2.5f, m_afAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); @@ -199,7 +197,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_maghar_captiveAI(creature); } @@ -208,23 +206,35 @@ public: { npc_maghar_captiveAI(Creature* creature) : npc_escortAI(creature) { Reset(); } - uint32 m_uiChainLightningTimer; - uint32 m_uiHealTimer; - uint32 m_uiFrostShockTimer; + uint32 ChainLightningTimer; + uint32 HealTimer; + uint32 FrostShockTimer; - void Reset() OVERRIDE + void Reset() override { - m_uiChainLightningTimer = 1000; - m_uiHealTimer = 0; - m_uiFrostShockTimer = 6000; + ChainLightningTimer = 1000; + HealTimer = 0; + FrostShockTimer = 6000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_EARTHBIND_TOTEM, false); } - void WaypointReached(uint32 waypointId) OVERRIDE + void JustDied(Unit* /*killer*/) override + { + if (!HasEscortState(STATE_ESCORT_ESCORTING)) + return; + + if (Player* player = GetPlayerForEscort()) + { + if (player->GetQuestStatus(QUEST_TOTEM_KARDASH_H) != QUEST_STATUS_COMPLETE) + player->FailQuest(QUEST_TOTEM_KARDASH_H); + } + } + + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -249,7 +259,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_MURK_BRUTE) summoned->AI()->Talk(SAY_MAG_NO_ESCAPE); @@ -263,9 +273,9 @@ public: } - void SpellHitTarget(Unit* /*target*/, const SpellInfo* pSpell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override { - if (pSpell->Id == SPELL_CHAIN_LIGHTNING) + if (spell->Id == SPELL_CHAIN_LIGHTNING) { if (rand()%10) return; @@ -274,38 +284,42 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 diff) override { - npc_escortAI::UpdateAI(uiDiff); - if (!me->GetVictim()) + npc_escortAI::UpdateAI(diff); + + if (!UpdateVictim()) + return; + + if (me->HasUnitState(UNIT_STATE_CASTING)) return; - if (m_uiChainLightningTimer <= uiDiff) + if (ChainLightningTimer <= diff) { DoCastVictim(SPELL_CHAIN_LIGHTNING); - m_uiChainLightningTimer = urand(7000, 14000); + ChainLightningTimer = urand(7000, 14000); } else - m_uiChainLightningTimer -= uiDiff; + ChainLightningTimer -= diff; if (HealthBelowPct(30)) { - if (m_uiHealTimer <= uiDiff) + if (HealTimer <= diff) { DoCast(me, SPELL_HEALING_WAVE); - m_uiHealTimer = 5000; + HealTimer = 5000; } else - m_uiHealTimer -= uiDiff; + HealTimer -= diff; } - if (m_uiFrostShockTimer <= uiDiff) + if (FrostShockTimer <= diff) { DoCastVictim(SPELL_FROST_SHOCK); - m_uiFrostShockTimer = urand(7500, 15000); + FrostShockTimer = urand(7500, 15000); } else - m_uiFrostShockTimer -= uiDiff; + FrostShockTimer -= diff; DoMeleeAttackIfReady(); } @@ -321,7 +335,7 @@ class npc_creditmarker_visit_with_ancestors : public CreatureScript public: npc_creditmarker_visit_with_ancestors() : CreatureScript("npc_creditmarker_visit_with_ancestors") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_creditmarker_visit_with_ancestorsAI(creature); } @@ -330,11 +344,11 @@ public: { npc_creditmarker_visit_with_ancestorsAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!who) @@ -385,7 +399,7 @@ class go_corkis_prison : public GameObjectScript public: go_corkis_prison() : GameObjectScript("go_corkis_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->SetGoState(GO_STATE_READY); if (go->GetEntry() == GO_CORKIS_PRISON) @@ -426,7 +440,7 @@ class npc_corki : public CreatureScript public: npc_corki() : CreatureScript("npc_corki") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_corkiAI(creature); } @@ -438,13 +452,13 @@ public: uint32 Say_Timer; bool ReleasedFromCage; - void Reset() OVERRIDE + void Reset() override { Say_Timer = 5000; ReleasedFromCage = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (ReleasedFromCage) { @@ -458,7 +472,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == 1) { @@ -510,13 +524,14 @@ class npc_kurenai_captive : public CreatureScript public: npc_kurenai_captive() : CreatureScript("npc_kurenai_captive") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_TOTEM_KARDASH_A) { if (npc_kurenai_captiveAI* EscortAI = dynamic_cast<npc_kurenai_captiveAI*>(creature->AI())) { creature->SetStandState(UNIT_STAND_STATE_STAND); + creature->setFaction(231); EscortAI->Start(true, false, player->GetGUID(), quest); creature->AI()->Talk(SAY_KUR_START); @@ -528,7 +543,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kurenai_captiveAI(creature); } @@ -541,19 +556,19 @@ public: uint32 HealTimer; uint32 FrostShockTimer; - void Reset() OVERRIDE + void Reset() override { ChainLightningTimer = 1000; HealTimer = 0; FrostShockTimer = 6000; } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { DoCast(me, SPELL_KUR_EARTHBIND_TOTEM, false); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (!HasEscortState(STATE_ESCORT_ESCORTING)) return; @@ -565,7 +580,7 @@ public: } } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { switch (waypointId) { @@ -594,7 +609,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_KUR_MURK_BRUTE) Talk(SAY_KUR_NO_ESCAPE); @@ -608,7 +623,7 @@ public: summoned->AI()->AttackStart(me); } - void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) OVERRIDE + void SpellHitTarget(Unit* /*target*/, const SpellInfo* spell) override { if (spell->Id == SPELL_KUR_CHAIN_LIGHTNING) { @@ -627,8 +642,10 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { + npc_escortAI::UpdateAI(diff); + if (!UpdateVictim()) return; @@ -678,7 +695,7 @@ class go_warmaul_prison : public GameObjectScript public: go_warmaul_prison() : GameObjectScript("go_warmaul_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_FINDING_THE_SURVIVORS) != QUEST_STATUS_INCOMPLETE) diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 72e7332381b..cb75ee3b2ad 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -74,7 +74,7 @@ class npc_manaforge_control_console : public CreatureScript public: npc_manaforge_control_console() : CreatureScript("npc_manaforge_control_console") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_manaforge_control_consoleAI(creature); } @@ -91,7 +91,7 @@ public: uint64 goConsole; Creature* add; - void Reset() OVERRIDE + void Reset() override { Event_Timer = 3000; Wave_Timer = 0; @@ -102,9 +102,9 @@ public: add = NULL; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - /*void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + /*void SpellHit(Unit* caster, const SpellInfo* spell) override { //we have no way of telling the Creature was hit by spell -> got aura applied after 10-12 seconds //then no way for the mobs to actually stop the shutdown as intended. @@ -112,7 +112,7 @@ public: DoSay("Silence! I kill you!", LANG_UNIVERSAL, NULL); }*/ - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { Talk(EMOTE_ABORT); @@ -234,7 +234,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (Event_Timer <= diff) { @@ -243,7 +243,7 @@ public: case 1: if (someplayer) { - Unit* u = Unit::GetUnit(*me, someplayer); + Unit* u = ObjectAccessor::GetUnit(*me, someplayer); if (u && u->GetTypeId() == TYPEID_PLAYER) Talk(EMOTE_START, u); } @@ -311,7 +311,7 @@ class go_manaforge_control_console : public GameObjectScript public: go_manaforge_control_console() : GameObjectScript("go_manaforge_control_console") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) { @@ -393,7 +393,7 @@ class npc_commander_dawnforge : public CreatureScript public: npc_commander_dawnforge() : CreatureScript("npc_commander_dawnforge") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_commander_dawnforgeAI(creature); } @@ -411,7 +411,7 @@ public: uint32 Phase_Timer; bool isEvent; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; ardonisGUID = 0; @@ -423,9 +423,9 @@ public: isEvent = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { pathaleonGUID = summoned->GetGUID(); } @@ -488,7 +488,7 @@ public: return false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Is event even running? if (!isEvent) @@ -626,7 +626,7 @@ class at_commander_dawnforge : public AreaTriggerScript public: at_commander_dawnforge() : AreaTriggerScript("at_commander_dawnforge") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) OVERRIDE + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { //if player lost aura or not have at all, we should not try start event. if (!player->HasAura(SPELL_SUNFURY_DISGUISE)) @@ -669,7 +669,7 @@ public: //if (quest->GetQuestId() == QUEST_DIMENSIUS) //creature->AI()->Talk(WHISPER_DABIRI, player); - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -681,7 +681,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -721,14 +721,22 @@ class npc_phase_hunter : public CreatureScript public: npc_phase_hunter() : CreatureScript("npc_phase_hunter") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_phase_hunterAI(creature); } struct npc_phase_hunterAI : public ScriptedAI { - npc_phase_hunterAI(Creature* creature) : ScriptedAI(creature) { } + npc_phase_hunterAI(Creature* creature) : ScriptedAI(creature) + { + Weak = false; + Materialize = false; + Drained = false; + WeakPercent = 25; + PlayerGUID = 0; + ManaBurnTimer = 5000; + } bool Weak; bool Materialize; @@ -739,7 +747,7 @@ public: uint32 ManaBurnTimer; - void Reset() OVERRIDE + void Reset() override { Weak = false; Materialize = false; @@ -754,18 +762,18 @@ public: me->UpdateEntry(NPC_PHASE_HUNTER_ENTRY); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) PlayerGUID = who->GetGUID(); } - //void SpellHit(Unit* /*caster*/, const SpellInfo* /*spell*/) OVERRIDE + //void SpellHit(Unit* /*caster*/, const SpellInfo* /*spell*/) override //{ // DoCast(me, SPELL_DE_MATERIALIZE); //} - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Materialize) { @@ -787,7 +795,7 @@ public: for (std::list<HostileReference*>::const_iterator itr = AggroList.begin(); itr != AggroList.end(); ++itr) { - if (Unit* unit = Unit::GetUnit(*me, (*itr)->getUnitGuid())) + if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) { if (unit->GetCreateMana() > 0) UnitsWithMana.push_back(unit); @@ -846,7 +854,7 @@ class npc_bessy : public CreatureScript public: npc_bessy() : CreatureScript("npc_bessy") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == Q_ALMABTRIEB) { @@ -857,7 +865,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_bessyAI(creature); } @@ -866,13 +874,13 @@ public: { npc_bessyAI(Creature* creature) : npc_escortAI(creature) { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(Q_ALMABTRIEB); } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -901,12 +909,12 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { summoned->AI()->AttackStart(me); } - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); } @@ -928,7 +936,7 @@ class npc_maxx_a_million_escort : public CreatureScript public: npc_maxx_a_million_escort() : CreatureScript("npc_maxx_a_million_escort") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_maxx_a_million_escortAI(creature); } @@ -940,13 +948,13 @@ public: bool bTake; uint32 uiTakeTimer; - void Reset() OVERRIDE + void Reset() override { bTake=false; uiTakeTimer=3000; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -972,13 +980,13 @@ public: } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) player->FailQuest(QUEST_MARK_V_IS_ALIVE); } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -1002,7 +1010,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_MARK_V_IS_ALIVE) { @@ -1031,7 +1039,7 @@ class go_captain_tyralius_prison : public GameObjectScript public: go_captain_tyralius_prison() : GameObjectScript("go_captain_tyralius_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (Creature* tyralius = go->FindNearestCreature(NPC_CAPTAIN_TYRALIUS, 1.0f)) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index f0defe88083..cfcc05a625c 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -72,7 +72,7 @@ class npc_mature_netherwing_drake : public CreatureScript public: npc_mature_netherwing_drake() : CreatureScript("npc_mature_netherwing_drake") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_mature_netherwing_drakeAI(creature); } @@ -89,7 +89,7 @@ public: uint32 EatTimer; uint32 CastTimer; - void Reset() OVERRIDE + void Reset() override { uiPlayerGUID = 0; @@ -100,7 +100,7 @@ public: CastTimer = 5000; } - void SpellHit(Unit* pCaster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* pCaster, SpellInfo const* spell) override { if (bCanEat || bIsEating) return; @@ -112,7 +112,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -125,7 +125,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (bCanEat || bIsEating) { @@ -133,7 +133,7 @@ public: { if (bCanEat && !bIsEating) { - if (Unit* unit = Unit::GetUnit(*me, uiPlayerGUID)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, uiPlayerGUID)) { if (GameObject* go = unit->FindNearestGameObject(GO_CARCASS, 10)) { @@ -210,7 +210,7 @@ class npc_enslaved_netherwing_drake : public CreatureScript public: npc_enslaved_netherwing_drake() : CreatureScript("npc_enslaved_netherwing_drake") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_enslaved_netherwing_drakeAI(creature); } @@ -228,7 +228,7 @@ public: uint32 FlyTimer; bool Tapped; - void Reset() OVERRIDE + void Reset() override { if (!Tapped) me->setFaction(FACTION_DEFAULT); @@ -238,7 +238,7 @@ public: me->SetVisible(true); } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (!caster) return; @@ -264,7 +264,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -273,7 +273,7 @@ public: { if (PlayerGUID) { - Unit* player = Unit::GetUnit(*me, PlayerGUID); + Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID); if (player) DoCast(player, SPELL_FORCE_OF_NELTHARAKU, true); @@ -286,7 +286,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) { @@ -311,10 +311,10 @@ public: Position pos; if (Unit* EscapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30)) - EscapeDummy->GetPosition(&pos); + pos = EscapeDummy->GetPosition(); else { - me->GetRandomNearPosition(pos, 20); + pos = me->GetRandomNearPosition(20); pos.m_positionZ += 25; } @@ -341,7 +341,7 @@ class npc_dragonmaw_peon : public CreatureScript public: npc_dragonmaw_peon() : CreatureScript("npc_dragonmaw_peon") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dragonmaw_peonAI(creature); } @@ -354,14 +354,14 @@ public: bool Tapped; uint32 PoisonTimer; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; Tapped = false; PoisonTimer = 0; } - void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (!caster) return; @@ -379,7 +379,7 @@ public: } } - void MovementInform(uint32 type, uint32 id) OVERRIDE + void MovementInform(uint32 type, uint32 id) override { if (type != POINT_MOTION_TYPE) return; @@ -391,7 +391,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (PoisonTimer) { @@ -420,7 +420,7 @@ class npc_drake_dealer_hurlunk : public CreatureScript public: npc_drake_dealer_hurlunk() : CreatureScript("npc_drake_dealer_hurlunk") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -429,7 +429,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsVendor() && player->GetReputationRank(1015) == REP_EXALTED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); @@ -452,7 +452,7 @@ class npcs_flanis_swiftwing_and_kagrosh : public CreatureScript public: npcs_flanis_swiftwing_and_kagrosh() : CreatureScript("npcs_flanis_swiftwing_and_kagrosh") { } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -478,7 +478,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(10583) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(30658, 1, true)) player->ADD_GOSSIP_ITEM(0, GOSSIP_HSK1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -508,7 +508,7 @@ class npc_oronok_tornheart : public CreatureScript public: npc_oronok_tornheart() : CreatureScript("npc_oronok_tornheart") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -548,7 +548,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -585,7 +585,7 @@ class npc_karynaku : public CreatureScript public: npc_karynaku() : CreatureScript("npc_karynaku") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ALLY_OF_NETHER) player->ActivateTaxiPathTo(TAXI_PATH_ID); @@ -639,7 +639,7 @@ class npc_overlord_morghor : public CreatureScript public: npc_overlord_morghor() : CreatureScript("npc_overlord_morghor") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest *_Quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest *_Quest) override { if (_Quest->GetQuestId() == QUEST_LORD_ILLIDAN_STORMRAGE) { @@ -650,7 +650,7 @@ public: return false; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_overlord_morghorAI(creature); } @@ -667,7 +667,7 @@ public: bool Event; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; IllidanGUID = 0; @@ -900,7 +900,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!ConversationTimer) return; @@ -943,7 +943,7 @@ class npc_earthmender_wilda : public CreatureScript public: npc_earthmender_wilda() : CreatureScript("npc_earthmender_wilda") { } - bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override { if (quest->GetQuestId() == QUEST_ESCAPE_COILSCAR) { @@ -956,7 +956,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_earthmender_wildaAI(creature); } @@ -967,12 +967,12 @@ public: uint32 m_uiHealingTimer; - void Reset() OVERRIDE + void Reset() override { m_uiHealingTimer = 0; } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -1030,7 +1030,7 @@ public: } } - void JustSummoned(Creature* summoned) OVERRIDE + void JustSummoned(Creature* summoned) override { if (summoned->GetEntry() == NPC_COILSKAR_ASSASSIN) summoned->AI()->AttackStart(me); @@ -1048,7 +1048,7 @@ public: DoSummon(NPC_COILSKAR_ASSASSIN, me, 15.0f, 5000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { //don't always use if (rand()%5) @@ -1063,7 +1063,7 @@ public: } } - void UpdateAI(uint32 uiDiff) OVERRIDE + void UpdateAI(uint32 uiDiff) override { npc_escortAI::UpdateAI(uiDiff); @@ -1186,7 +1186,7 @@ class npc_torloth_the_magnificent : public CreatureScript public: npc_torloth_the_magnificent() : CreatureScript("npc_torloth_the_magnificent") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_torloth_the_magnificentAI(c); } @@ -1204,7 +1204,7 @@ public: bool Timers; - void Reset() OVERRIDE + void Reset() override { AnimationTimer = 4000; AnimationCount = 0; @@ -1217,7 +1217,7 @@ public: me->SetTarget(0); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void HandleAnimation() { @@ -1225,7 +1225,7 @@ public: if (TorlothAnim[AnimationCount].creature == 1) { - creature = (Unit::GetCreature(*me, LordIllidanGUID)); + creature = (ObjectAccessor::GetCreature(*me, LordIllidanGUID)); if (!creature) return; @@ -1264,7 +1264,7 @@ public: ++AnimationCount; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (AnimationTimer) { @@ -1309,7 +1309,7 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { switch (killer->GetTypeId()) { @@ -1326,7 +1326,7 @@ public: break; } - if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID))) + if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID))) LordIllidan->AI()->EnterEvadeMode(); } }; @@ -1341,7 +1341,7 @@ class npc_lord_illidan_stormrage : public CreatureScript public: npc_lord_illidan_stormrage() : CreatureScript("npc_lord_illidan_stormrage") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_lord_illidan_stormrageAI(c); } @@ -1362,7 +1362,7 @@ public: bool Announced; bool Failed; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; @@ -1378,10 +1378,10 @@ public: me->SetVisible(false); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) OVERRIDE { } + void AttackStart(Unit* /*who*/) override { } void SummonNextWave(); @@ -1445,7 +1445,7 @@ public: Announced = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!PlayerGUID || !EventStarted) return; @@ -1483,7 +1483,7 @@ class npc_illidari_spawn : public CreatureScript public: npc_illidari_spawn() : CreatureScript("npc_illidari_spawn") { } - CreatureAI* GetAI(Creature* c) const OVERRIDE + CreatureAI* GetAI(Creature* c) const override { return new npc_illidari_spawnAI(c); } @@ -1496,23 +1496,23 @@ public: uint32 SpellTimer1, SpellTimer2, SpellTimer3; bool Timers; - void Reset() OVERRIDE + void Reset() override { LordIllidanGUID = 0; Timers = false; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { me->RemoveCorpse(); - if (Creature* LordIllidan = (Unit::GetCreature(*me, LordIllidanGUID))) + if (Creature* LordIllidan = (ObjectAccessor::GetCreature(*me, LordIllidanGUID))) if (LordIllidan) CAST_AI(npc_lord_illidan_stormrage::npc_lord_illidan_stormrageAI, LordIllidan->AI())->LiveCounter(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -1669,7 +1669,7 @@ class go_crystal_prison : public GameObjectScript public: go_crystal_prison() : GameObjectScript("go_crystal_prison") { } - bool OnQuestAccept(Player* player, GameObject* /*go*/, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, GameObject* /*go*/, Quest const* quest) override { if (quest->GetQuestId() == QUEST_BATTLE_OF_THE_CRIMSON_WATCH) { @@ -1738,7 +1738,7 @@ class npc_enraged_spirit : public CreatureScript public: npc_enraged_spirit() : CreatureScript("npc_enraged_spirit") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_enraged_spiritAI(creature); } @@ -1747,11 +1747,11 @@ public: { npc_enraged_spiritAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // always spawn spirit on death // if totem around @@ -1813,7 +1813,6 @@ public: enum ZuluhedChains { - QUEST_ZULUHED = 10866, NPC_KARYNAKU = 22112, }; @@ -1828,18 +1827,18 @@ class spell_unlocking_zuluheds_chains : public SpellScriptLoader void HandleAfterHit() { - if (GetCaster()->GetTypeId() == TYPEID_PLAYER) - if (Creature* karynaku = GetCaster()->FindNearestCreature(NPC_KARYNAKU, 15.0f)) - GetCaster()->ToPlayer()->KilledMonsterCredit(NPC_KARYNAKU, karynaku->GetGUID()); + if (Player* caster = GetCaster()->ToPlayer()) + if (Creature* karynaku = caster->FindNearestCreature(NPC_KARYNAKU, 15.0f)) + caster->KilledMonsterCredit(NPC_KARYNAKU, karynaku->GetGUID()); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_unlocking_zuluheds_chains_SpellScript::HandleAfterHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_unlocking_zuluheds_chains_SpellScript(); } @@ -1867,14 +1866,7 @@ public: { npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE - { - tapped = false; - tuberGUID = 0; - resetTimer = 60000; - } - - void SetData(uint32 id, uint32 data) OVERRIDE + void SetData(uint32 id, uint32 data) override { if (id == TYPE_BOAR && data == DATA_BOAR) { @@ -1884,52 +1876,26 @@ public: // Despawn the tuber if (GameObject* tuber = me->FindNearestGameObject(GO_SHADOWMOON_TUBER_MOUND, 5.0f)) { - tuberGUID = tuber->GetGUID(); - // @Workaround: find how to properly despawn the GO - tuber->SetPhaseMask(2, true); + tuber->SetLootState(GO_JUST_DEACTIVATED); + me->DespawnOrUnsummon(); } } } - void SpellHit(Unit* /*caster*/, const SpellInfo* spell) OVERRIDE + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override { - if (!tapped && spell->Id == SPELL_WHISTLE) + if (spell->Id == SPELL_WHISTLE) { if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f)) { - // Disable trigger and force nearest boar to walk to him - tapped = true; boar->SetWalk(false); boar->GetMotionMaster()->MovePoint(POINT_TUBER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); } } } - - void UpdateAI(uint32 diff) OVERRIDE - { - if (tapped) - { - if (resetTimer <= diff) - { - // Respawn the tuber - if (tuberGUID) - if (GameObject* tuber = GameObject::GetGameObject(*me, tuberGUID)) - // @Workaround: find how to properly respawn the GO - tuber->SetPhaseMask(1, true); - - Reset(); - } - else - resetTimer -= diff; - } - } - private: - bool tapped; - uint64 tuberGUID; - uint32 resetTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_shadowmoon_tuber_nodeAI(creature); } diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index a5cdb600311..9a62cde005c 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -58,7 +58,7 @@ class npc_raliq_the_drunk : public CreatureScript public: npc_raliq_the_drunk() : CreatureScript("npc_raliq_the_drunk") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -70,7 +70,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_RALIQ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -79,7 +79,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_raliq_the_drunkAI(creature); } @@ -94,13 +94,13 @@ public: uint32 m_uiNormFaction; uint32 Uppercut_Timer; - void Reset() OVERRIDE + void Reset() override { Uppercut_Timer = 5000; me->RestoreFaction(); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -139,7 +139,7 @@ class npc_salsalabim : public CreatureScript public: npc_salsalabim() : CreatureScript("npc_salsalabim") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_10004) == QUEST_STATUS_INCOMPLETE) { @@ -155,7 +155,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_salsalabimAI(creature); } @@ -166,13 +166,13 @@ public: uint32 MagneticPull_Timer; - void Reset() OVERRIDE + void Reset() override { MagneticPull_Timer = 15000; me->RestoreFaction(); } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetTypeId() == TYPEID_PLAYER && me->HealthBelowPctDamaged(20, damage)) { @@ -182,7 +182,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -214,7 +214,7 @@ class npc_shattrathflaskvendors : public CreatureScript public: npc_shattrathflaskvendors() : CreatureScript("npc_shattrathflaskvendors") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -223,7 +223,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->GetEntry() == 23484) { @@ -268,7 +268,7 @@ class npc_zephyr : public CreatureScript public: npc_zephyr() : CreatureScript("npc_zephyr") { } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -277,7 +277,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetReputationRank(989) >= REP_REVERED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HZ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); @@ -323,7 +323,7 @@ class npc_kservant : public CreatureScript public: npc_kservant() : CreatureScript("npc_kservant") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kservantAI(creature); } @@ -333,7 +333,7 @@ public: public: npc_kservantAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -411,7 +411,7 @@ public: } } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) @@ -428,7 +428,7 @@ public: } } - void Reset() OVERRIDE { } + void Reset() override { } }; }; @@ -444,7 +444,7 @@ class npc_ishanah : public CreatureScript public: npc_ishanah() : CreatureScript("npc_ishanah") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -455,7 +455,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -485,7 +485,7 @@ class npc_khadgar : public CreatureScript public: npc_khadgar() : CreatureScript("npc_khadgar") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -522,7 +522,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 3fb106e8cd8..a902bd49154 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -61,7 +61,7 @@ class npc_unkor_the_ruthless : public CreatureScript public: npc_unkor_the_ruthless() : CreatureScript("npc_unkor_the_ruthless") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_unkor_the_ruthlessAI(creature); } @@ -74,7 +74,7 @@ public: uint32 UnkorUnfriendly_Timer; uint32 Pulverize_Timer; - void Reset() OVERRIDE + void Reset() override { CanDoQuest = false; UnkorUnfriendly_Timer = 0; @@ -83,7 +83,7 @@ public: me->setFaction(FACTION_HOSTILE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } void DoNice() { @@ -96,7 +96,7 @@ public: UnkorUnfriendly_Timer = 60000; } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { Player* player = done_by->ToPlayer(); @@ -126,7 +126,7 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CanDoQuest) { @@ -168,7 +168,7 @@ class npc_infested_root_walker : public CreatureScript public: npc_infested_root_walker() : CreatureScript("npc_infested_root_walker") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_infested_root_walkerAI(creature); } @@ -177,10 +177,10 @@ public: { npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by && done_by->GetTypeId() == TYPEID_PLAYER) if (me->GetHealth() <= damage) @@ -199,7 +199,7 @@ class npc_skywing : public CreatureScript public: npc_skywing() : CreatureScript("npc_skywing") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_skywingAI(creature); } @@ -209,7 +209,7 @@ public: public: npc_skywingAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -223,9 +223,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (HasEscortState(STATE_ESCORT_ESCORTING)) @@ -237,9 +237,9 @@ public: Start(false, false, who->GetGUID()); } - void Reset() OVERRIDE { } + void Reset() override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { npc_escortAI::UpdateAI(diff); } @@ -255,7 +255,7 @@ class npc_rotting_forest_rager : public CreatureScript public: npc_rotting_forest_rager() : CreatureScript("npc_rotting_forest_rager") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_rotting_forest_ragerAI(creature); } @@ -264,10 +264,10 @@ public: { npc_rotting_forest_ragerAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE + void DamageTaken(Unit* done_by, uint32 &damage) override { if (done_by->GetTypeId() == TYPEID_PLAYER) if (me->GetHealth() <= damage) @@ -298,7 +298,7 @@ class npc_netherweb_victim : public CreatureScript public: npc_netherweb_victim() : CreatureScript("npc_netherweb_victim") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_netherweb_victimAI(creature); } @@ -307,12 +307,12 @@ public: { npc_netherweb_victimAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { Player* player = killer->ToPlayer(); if (!player) @@ -361,7 +361,7 @@ class npc_floon : public CreatureScript public: npc_floon() : CreatureScript("npc_floon") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -379,7 +379,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FLOON1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); @@ -388,7 +388,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_floonAI(creature); } @@ -405,7 +405,7 @@ public: uint32 Frostbolt_Timer; uint32 FrostNova_Timer; - void Reset() OVERRIDE + void Reset() override { Silence_Timer = 2000; Frostbolt_Timer = 4000; @@ -414,9 +414,9 @@ public: me->setFaction(m_uiNormFaction); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -469,7 +469,7 @@ public: { npc_isla_starmaneAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -508,12 +508,12 @@ public: } } - void Reset() OVERRIDE + void Reset() override { me->RestoreFaction(); } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (Player* player = GetPlayerForEscort()) { @@ -525,7 +525,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A) { @@ -535,7 +535,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_isla_starmaneAI(creature); } @@ -554,7 +554,7 @@ class go_skull_pile : public GameObjectScript public: go_skull_pile() : GameObjectScript("go_skull_pile") { } - bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) @@ -564,7 +564,7 @@ public: return true; } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if ((player->GetQuestStatus(11885) == QUEST_STATUS_INCOMPLETE) || player->GetQuestRewardStatus(11885)) { @@ -612,7 +612,7 @@ class npc_slim : public CreatureScript public: npc_slim() : CreatureScript("npc_slim") { } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -621,7 +621,7 @@ public: return true; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsVendor() && player->GetReputationRank(FACTION_CONSORTIUM) >= REP_FRIENDLY) { @@ -650,7 +650,7 @@ class npc_akuno : public CreatureScript public: npc_akuno() : CreatureScript("npc_akuno") { } - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPING_THE_TOMB) { @@ -665,7 +665,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_akunoAI(creature); } @@ -674,7 +674,7 @@ public: { npc_akunoAI(Creature* creature) : npc_escortAI(creature) { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -693,7 +693,7 @@ public: } } - void JustSummoned(Creature* summon) OVERRIDE + void JustSummoned(Creature* summon) override { summon->AI()->AttackStart(me); } diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index f8ef3d7c3bd..b9736c523c3 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -69,7 +69,7 @@ class npcs_ashyen_and_keleth : public CreatureScript public: npcs_ashyen_and_keleth() : CreatureScript("npcs_ashyen_and_keleth") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetReputationRank(942) > REP_NEUTRAL) { @@ -84,7 +84,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) @@ -183,16 +183,16 @@ public: uint32 m_uiNormFaction; uint32 LightningBolt_Timer; - void Reset() OVERRIDE + void Reset() override { LightningBolt_Timer = 2000; if (me->getFaction() != m_uiNormFaction) me->setFaction(m_uiNormFaction); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -207,12 +207,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_cooshcooshAI(creature); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_COOSH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); @@ -221,7 +221,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) @@ -247,7 +247,7 @@ class npc_elder_kuruti : public CreatureScript public: npc_elder_kuruti() : CreatureScript("npc_elder_kuruti") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(9803) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KUR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); @@ -257,7 +257,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -300,7 +300,7 @@ class npc_mortog_steamhead : public CreatureScript public: npc_mortog_steamhead() : CreatureScript("npc_mortog_steamhead") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsVendor() && player->GetReputationRank(942) == REP_EXALTED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); @@ -310,7 +310,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -344,9 +344,9 @@ public: { npc_kayra_longmaneAI(Creature* creature) : npc_escortAI(creature) { } - void Reset() OVERRIDE { } + void Reset() override { } - void WaypointReached(uint32 waypointId) OVERRIDE + void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) @@ -379,7 +379,7 @@ public: } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ESCAPE_FROM) { @@ -391,7 +391,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_kayra_longmaneAI(creature); } @@ -414,7 +414,7 @@ class npc_timothy_daniels : public CreatureScript public: npc_timothy_daniels() : CreatureScript("npc_timothy_daniels") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -427,7 +427,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 61c3de0e6b1..34da2a242f4 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -45,7 +45,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript { npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { // Not needed to be despawned now _despawnTimer = 0; @@ -68,7 +68,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript } } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { // Stop Feeding Gargoyle when it dies if (Unit* owner = me->GetOwner()) @@ -76,7 +76,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript } // Fly away when dismissed - void SpellHit(Unit* source, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* source, SpellInfo const* spell) override { if (spell->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive()) return; @@ -107,7 +107,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript _despawnTimer = 4 * IN_MILLISECONDS; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (_despawnTimer > 0) { @@ -125,7 +125,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript uint32 _despawnTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_dk_ebon_gargoyleAI(creature); } diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 2a41b293967..cfb4820c040 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -41,7 +41,7 @@ class npc_pet_gen_mojo : public CreatureScript { npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _victimGUID = 0; @@ -49,10 +49,10 @@ class npc_pet_gen_mojo : public CreatureScript me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void UpdateAI(uint32 /*diff*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void UpdateAI(uint32 /*diff*/) override { } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { me->HandleEmoteCommand(emote); Unit* owner = me->GetOwner(); @@ -79,7 +79,7 @@ class npc_pet_gen_mojo : public CreatureScript uint64 _victimGUID; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_gen_mojoAI(creature); } diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp index 8a0b78b5478..0346cebb220 100644 --- a/src/server/scripts/Pet/pet_hunter.cpp +++ b/src/server/scripts/Pet/pet_hunter.cpp @@ -44,9 +44,9 @@ class npc_pet_hunter_snake_trap : public CreatureScript { npc_pet_hunter_snake_trapAI(Creature* creature) : ScriptedAI(creature) { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void Reset() OVERRIDE + void Reset() override { _spellTimer = 0; @@ -71,7 +71,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript } // Redefined for random target selection: - void MoveInLineOfSight(Unit* who) OVERRIDE + void MoveInLineOfSight(Unit* who) override { if (!me->GetVictim() && me->CanCreatureAttack(who)) { @@ -91,12 +91,12 @@ class npc_pet_hunter_snake_trap : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - if (!UpdateVictim()) + if (!UpdateVictim() || !me->GetVictim()) return; - if (me->GetVictim()->HasBreakableByDamageCrowdControlAura(me)) + if (me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me)) { me->InterruptNonMeleeSpells(false); return; @@ -124,7 +124,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript uint32 _spellTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_hunter_snake_trapAI(creature); } diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 69e924c0d43..260784fd26a 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -40,7 +40,7 @@ class npc_pet_mage_mirror_image : public CreatureScript { npc_pet_mage_mirror_imageAI(Creature* creature) : CasterAI(creature) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { CasterAI::InitializeAI(); Unit* owner = me->GetOwner(); @@ -55,7 +55,7 @@ class npc_pet_mage_mirror_image : public CreatureScript } // Do not reload Creature templates on evade mode enter - prevent visual lost - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (me->IsInEvadeMode() || !me->IsAlive()) return; @@ -71,7 +71,7 @@ class npc_pet_mage_mirror_image : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_mage_mirror_imageAI(creature); } diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp index fc106a2a786..4a6d147615e 100644 --- a/src/server/scripts/Pet/pet_priest.cpp +++ b/src/server/scripts/Pet/pet_priest.cpp @@ -44,7 +44,7 @@ class npc_pet_pri_lightwell : public CreatureScript DoCast(me, SPELL_PRIEST_LIGHTWELL_CHARGES, false); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!me->IsAlive()) return; @@ -55,7 +55,7 @@ class npc_pet_pri_lightwell : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_pri_lightwellAI(creature); } @@ -70,7 +70,7 @@ class npc_pet_pri_shadowfiend : public CreatureScript { npc_pet_pri_shadowfiendAI(Creature* creature) : PetAI(creature) { } - void JustDied(Unit* /*killer*/) OVERRIDE + void JustDied(Unit* /*killer*/) override { if (me->IsSummon()) if (Unit* owner = me->ToTempSummon()->GetSummoner()) @@ -79,7 +79,7 @@ class npc_pet_pri_shadowfiend : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_pri_shadowfiendAI(creature); } diff --git a/src/server/scripts/Pet/pet_shaman.cpp b/src/server/scripts/Pet/pet_shaman.cpp index 03e6c55b109..b9b89d92784 100644 --- a/src/server/scripts/Pet/pet_shaman.cpp +++ b/src/server/scripts/Pet/pet_shaman.cpp @@ -51,14 +51,14 @@ class npc_pet_shaman_earth_elemental : public CreatureScript npc_pet_shaman_earth_elementalAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -78,7 +78,7 @@ class npc_pet_shaman_earth_elemental : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_shaman_earth_elementalAI(creature); } @@ -93,7 +93,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript { npc_pet_shaman_fire_elementalAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { _events.Reset(); _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(5000, 20000)); @@ -102,7 +102,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -140,7 +140,7 @@ class npc_pet_shaman_fire_elemental : public CreatureScript EventMap _events; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_pet_shaman_fire_elementalAI(creature); } diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index e2e4d30541c..245ec7e88cf 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -25,6 +25,7 @@ #include "ScriptMgr.h" #include "SpellScript.h" #include "SpellAuraEffects.h" +#include "Containers.h" enum DeathKnightSpells { @@ -38,9 +39,11 @@ enum DeathKnightSpells SPELL_DK_DEATH_COIL_DAMAGE = 47632, SPELL_DK_DEATH_COIL_HEAL = 47633, SPELL_DK_DEATH_STRIKE_HEAL = 45470, + SPELL_DK_FROST_FEVER = 55095, SPELL_DK_FROST_PRESENCE = 48263, SPELL_DK_FROST_PRESENCE_TRIGGERED = 61261, SPELL_DK_GHOUL_EXPLODE = 47496, + SPELL_DK_GLYPH_OF_DISEASE = 63334, SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625, SPELL_DK_IMPROVED_BLOOD_PRESENCE_R1 = 50365, SPELL_DK_IMPROVED_FROST_PRESENCE_R1 = 50384, @@ -49,6 +52,9 @@ enum DeathKnightSpells SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622, SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962, SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736, + SPELL_DK_MASTER_OF_GHOULS = 52143, + SPELL_DK_BLOOD_PLAGUE = 55078, + SPELL_DK_RAISE_DEAD_USE_REAGENT = 48289, SPELL_DK_RUNIC_POWER_ENERGIZE = 49088, SPELL_DK_SCENT_OF_BLOOD = 50422, SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890, @@ -63,6 +69,11 @@ enum DeathKnightSpellIcons DK_ICON_ID_IMPROVED_DEATH_STRIKE = 2751 }; +enum Misc +{ + NPC_DK_GHOUL = 26125 +}; + // 50462 - Anti-Magic Shell (on raid member) class spell_dk_anti_magic_shell_raid : public SpellScriptLoader { @@ -75,7 +86,7 @@ class spell_dk_anti_magic_shell_raid : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -92,14 +103,14 @@ class spell_dk_anti_magic_shell_raid : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell_raid_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_shell_raid_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_anti_magic_shell_raid_AuraScript(); } @@ -116,14 +127,14 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader PrepareAuraScript(spell_dk_anti_magic_shell_self_AuraScript); uint32 absorbPct, hpPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); hpPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster()); return true; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_RUNIC_POWER_ENERGIZE)) return false; @@ -148,7 +159,7 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell_self_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_shell_self_AuraScript::Absorb, EFFECT_0); @@ -156,7 +167,7 @@ class spell_dk_anti_magic_shell_self : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_anti_magic_shell_self_AuraScript(); } @@ -174,13 +185,13 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_ANTI_MAGIC_SHELL_TALENT)) return false; @@ -189,7 +200,7 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) { - SpellInfo const* talentSpell = sSpellMgr->GetSpellInfo(SPELL_DK_ANTI_MAGIC_SHELL_TALENT); + SpellInfo const* talentSpell = sSpellMgr->EnsureSpellInfo(SPELL_DK_ANTI_MAGIC_SHELL_TALENT); amount = talentSpell->Effects[EFFECT_0].CalcValue(GetCaster()); if (Player* player = GetCaster()->ToPlayer()) amount += int32(2 * player->GetTotalAttackPowerValue(BASE_ATTACK)); @@ -200,14 +211,14 @@ class spell_dk_anti_magic_zone : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_zone_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_zone_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_anti_magic_zone_AuraScript(); } @@ -223,14 +234,14 @@ class spell_dk_blood_boil : public SpellScriptLoader { PrepareSpellScript(spell_dk_blood_boil_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_BOIL_TRIGGERED)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _executed = false; return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCaster()->getClass() == CLASS_DEATH_KNIGHT; @@ -245,7 +256,7 @@ class spell_dk_blood_boil : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_DK_BLOOD_BOIL_TRIGGERED, true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_dk_blood_boil_SpellScript::HandleAfterHit); } @@ -253,7 +264,7 @@ class spell_dk_blood_boil : public SpellScriptLoader bool _executed; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_blood_boil_SpellScript(); } @@ -269,14 +280,14 @@ class spell_dk_blood_gorged : public SpellScriptLoader { PrepareAuraScript(spell_dk_blood_gorged_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_GORGED_HEAL)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -295,7 +306,7 @@ class spell_dk_blood_gorged : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_DK_BLOOD_GORGED_HEAL, SPELLVALUE_BASE_POINT0, bp, _procTarget, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_dk_blood_gorged_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_dk_blood_gorged_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); @@ -305,12 +316,36 @@ class spell_dk_blood_gorged : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_blood_gorged_AuraScript(); } }; +class CorpseExplosionCheck +{ +public: + explicit CorpseExplosionCheck(uint64 casterGUID, bool allowGhoul) : _casterGUID(casterGUID), + _allowGhoul(allowGhoul) { } + + bool operator()(WorldObject* obj) const + { + if (Unit* target = obj->ToUnit()) + { + if ((target->isDead() || (_allowGhoul && target->GetEntry() == NPC_DK_GHOUL && target->GetOwnerGUID() == _casterGUID)) + && !(target->GetCreatureTypeMask() & CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL) + && target->GetDisplayId() == target->GetNativeDisplayId()) + return false; + } + + return true; + } + +private: + uint64 _casterGUID; + bool _allowGhoul; +}; + // 49158 - Corpse Explosion (51325, 51326, 51327, 51328) class spell_dk_corpse_explosion : public SpellScriptLoader { @@ -321,44 +356,90 @@ class spell_dk_corpse_explosion : public SpellScriptLoader { PrepareSpellScript(spell_dk_corpse_explosion_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { - if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_DK_GHOUL_EXPLODE)) - return false; - if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_VISUAL)) + if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED) + || !sSpellMgr->GetSpellInfo(SPELL_DK_GHOUL_EXPLODE) + || !sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_VISUAL) + || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue())) return false; return true; } - void HandleDummy(SpellEffIndex /*effIndex*/) + bool Load() override + { + _target = NULL; + return true; + } + + void CheckTarget(WorldObject*& target) + { + if (CorpseExplosionCheck(GetCaster()->GetGUID(), true)(target)) + target = NULL; + + _target = target; + } + + void CheckTargets(std::list<WorldObject*>& targets) + { + WorldObject* target = _target; + if (!target) + { + targets.remove_if(CorpseExplosionCheck(GetCaster()->GetGUID(), false)); + if (targets.empty()) + { + FinishCast(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW); + return; + } + target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + } + else + targets.clear(); + } + + void HandleDamage(SpellEffIndex effIndex, Unit* target) + { + if (effIndex == EFFECT_0) + GetCaster()->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_1].CalcValue(), SPELLVALUE_BASE_POINT0, GetEffectValue(), target, true); + else if (effIndex == EFFECT_1) + GetCaster()->CastCustomSpell(GetEffectValue(), SPELLVALUE_BASE_POINT0, GetSpell()->CalculateDamage(EFFECT_0, NULL), target, true); + } + + void HandleCorpseExplosion(SpellEffIndex effIndex) { if (Unit* unitTarget = GetHitUnit()) { - int32 bp = 0; if (unitTarget->IsAlive()) // Living ghoul as a target { - bp = int32(unitTarget->CountPctFromMaxHealth(25)); - unitTarget->CastCustomSpell(unitTarget, SPELL_DK_GHOUL_EXPLODE, &bp, NULL, NULL, false); + unitTarget->CastSpell(unitTarget, SPELL_DK_GHOUL_EXPLODE, false); + // Corpse Explosion (Suicide) and Set corpse look handled in SpellScript of SPELL_DK_GHOUL_EXPLODE } else // Some corpse { - bp = GetEffectValue(); - GetCaster()->CastCustomSpell(unitTarget, GetSpellInfo()->Effects[EFFECT_1].CalcValue(), &bp, NULL, NULL, true); + HandleDamage(effIndex, unitTarget); // Corpse Explosion (Suicide) unitTarget->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED, true); + // Set corpse look + GetCaster()->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_VISUAL, true); } - // Set corpse look - GetCaster()->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_VISUAL, true); } } - void Register() OVERRIDE + void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_dk_corpse_explosion_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dk_corpse_explosion_SpellScript::CheckTarget, EFFECT_0, TARGET_UNIT_TARGET_ANY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_corpse_explosion_SpellScript::CheckTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY); + OnEffectHitTarget += SpellEffectFn(spell_dk_corpse_explosion_SpellScript::HandleCorpseExplosion, EFFECT_0, SPELL_EFFECT_DUMMY); + OnEffectHitTarget += SpellEffectFn(spell_dk_corpse_explosion_SpellScript::HandleCorpseExplosion, EFFECT_1, SPELL_EFFECT_DUMMY); } + + private: + WorldObject* _target; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_corpse_explosion_SpellScript(); } @@ -374,7 +455,7 @@ class spell_dk_death_coil : public SpellScriptLoader { PrepareSpellScript(spell_dk_death_coil_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_COIL_DAMAGE) || !sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_COIL_HEAL)) return false; @@ -418,14 +499,14 @@ class spell_dk_death_coil : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dk_death_coil_SpellScript::CheckCast); OnEffectHitTarget += SpellEffectFn(spell_dk_death_coil_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_death_coil_SpellScript(); } @@ -459,14 +540,14 @@ class spell_dk_death_gate : public SpellScriptLoader target->CastSpell(target, GetEffectValue(), false); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dk_death_gate_SpellScript::CheckClass); OnEffectHitTarget += SpellEffectFn(spell_dk_death_gate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_death_gate_SpellScript(); } @@ -493,14 +574,14 @@ class spell_dk_death_grip : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dk_death_grip_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_death_grip_SpellScript(); } @@ -549,14 +630,14 @@ class spell_dk_death_pact : public SpellScriptLoader targetList.push_back(target); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dk_death_pact_SpellScript::CheckCast); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_death_pact_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_death_pact_SpellScript(); } @@ -572,7 +653,7 @@ class spell_dk_death_strike : public SpellScriptLoader { PrepareSpellScript(spell_dk_death_strike_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_DEATH_STRIKE_HEAL)) return false; @@ -593,14 +674,14 @@ class spell_dk_death_strike : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dk_death_strike_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_death_strike_SpellScript(); } @@ -616,29 +697,39 @@ class spell_dk_ghoul_explode : public SpellScriptLoader { PrepareSpellScript(spell_dk_ghoul_explode_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { - if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED)) + if (!sSpellMgr->GetSpellInfo(SPELL_DK_CORPSE_EXPLOSION_TRIGGERED) + || spellInfo->Effects[EFFECT_2].CalcValue() <= 0) return false; return true; } + void HandleDamage(SpellEffIndex /*effIndex*/) + { + int32 value = int32(GetCaster()->CountPctFromMaxHealth(GetSpellInfo()->Effects[EFFECT_2].CalcValue(GetCaster()))); + SetEffectValue(value); + } + void Suicide(SpellEffIndex /*effIndex*/) { if (Unit* unitTarget = GetHitUnit()) { // Corpse Explosion (Suicide) unitTarget->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED, true); + // Set corpse look + GetCaster()->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_VISUAL, true); } } - void Register() OVERRIDE + void Register() override { + OnEffectLaunchTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::Suicide, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_ghoul_explode_SpellScript(); } @@ -654,7 +745,7 @@ class spell_dk_icebound_fortitude : public SpellScriptLoader { PrepareAuraScript(spell_dk_icebound_fortitude_AuraScript); - bool Load() OVERRIDE + bool Load() override { Unit* caster = GetCaster(); return caster && caster->GetTypeId() == TYPEID_PLAYER; @@ -681,13 +772,13 @@ class spell_dk_icebound_fortitude : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_icebound_fortitude_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_icebound_fortitude_AuraScript(); } @@ -703,7 +794,7 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader { PrepareAuraScript(spell_dk_improved_blood_presence_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE) @@ -727,14 +818,14 @@ class spell_dk_improved_blood_presence : public SpellScriptLoader target->RemoveAura(SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_blood_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_blood_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_improved_blood_presence_AuraScript(); } @@ -750,7 +841,7 @@ class spell_dk_improved_frost_presence : public SpellScriptLoader { PrepareAuraScript(spell_dk_improved_frost_presence_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE) @@ -774,14 +865,14 @@ class spell_dk_improved_frost_presence : public SpellScriptLoader target->RemoveAura(SPELL_DK_FROST_PRESENCE_TRIGGERED); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_frost_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_improved_frost_presence_AuraScript(); } @@ -797,7 +888,7 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader { PrepareAuraScript(spell_dk_improved_unholy_presence_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE) @@ -832,19 +923,104 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dk_improved_unholy_presence_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_dk_improved_unholy_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_improved_unholy_presence_AuraScript(); } }; +// ID - 50842 Pestilence +class spell_dk_pestilence : public SpellScriptLoader +{ + public: + spell_dk_pestilence() : SpellScriptLoader("spell_dk_pestilence") { } + + class spell_dk_pestilence_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_pestilence_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_GLYPH_OF_DISEASE) + || !sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PLAGUE) + || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_FEVER)) + return false; + return true; + } + + void OnHit(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + Unit* hitUnit = GetHitUnit(); + Unit* victim = GetExplTargetUnit(); + + if (!victim) + return; + + if (victim != hitUnit || caster->HasAura(SPELL_DK_GLYPH_OF_DISEASE)) + { + if (Aura* aurOld = victim->GetAura(SPELL_DK_BLOOD_PLAGUE, caster->GetGUID())) // Check Blood Plague application on victim. + { + if (AuraEffect* aurEffOld = aurOld->GetEffect(EFFECT_0)) + { + float donePct = aurEffOld->GetDonePct(); + float critChance = aurEffOld->GetCritChance(); + + caster->CastSpell(hitUnit, SPELL_DK_BLOOD_PLAGUE, true); // Spread the disease to hitUnit. + + if (Aura* aurNew = hitUnit->GetAura(SPELL_DK_BLOOD_PLAGUE, caster->GetGUID())) // Check Blood Plague application on hitUnit. + { + if (AuraEffect* aurEffNew = aurNew->GetEffect(EFFECT_0)) + { + aurEffNew->SetCritChance(critChance); // Blood Plague can crit if caster has T9. + aurEffNew->SetDonePct(donePct); + aurEffNew->SetDamage(caster->SpellDamageBonusDone(hitUnit, aurEffNew->GetSpellInfo(), std::max(aurEffNew->GetAmount(), 0), DOT) * donePct); + } + } + } + } + + if (Aura* aurOld = victim->GetAura(SPELL_DK_FROST_FEVER, caster->GetGUID())) // Check Frost Fever application on victim. + { + if (AuraEffect* aurEffOld = aurOld->GetEffect(EFFECT_0)) + { + float donePct = aurEffOld->GetDonePct(); + + caster->CastSpell(hitUnit, SPELL_DK_FROST_FEVER, true); // Spread the disease to hitUnit. + + if (Aura* aurNew = hitUnit->GetAura(SPELL_DK_FROST_FEVER, caster->GetGUID())) // Check Frost Fever application on hitUnit. + { + if (AuraEffect* aurEffNew = aurNew->GetEffect(EFFECT_0)) + { + aurEffNew->SetDonePct(donePct); + aurEffNew->SetDamage(caster->SpellDamageBonusDone(hitUnit, aurEffNew->GetSpellInfo(), std::max(aurEffNew->GetAmount(), 0), DOT) * donePct); + } + } + } + } + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_pestilence_SpellScript::OnHit, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dk_pestilence_SpellScript(); + } +}; + + // 48266 - Blood Presence // 48263 - Frost Presence // 48265 - Unholy Presence @@ -857,7 +1033,7 @@ class spell_dk_presence : public SpellScriptLoader { PrepareAuraScript(spell_dk_presence_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_PRESENCE) || !sSpellMgr->GetSpellInfo(SPELL_DK_FROST_PRESENCE) @@ -925,7 +1101,7 @@ class spell_dk_presence : public SpellScriptLoader target->RemoveAura(SPELL_DK_UNHOLY_PRESENCE_TRIGGERED); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedBloodPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedFrostPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); @@ -934,12 +1110,168 @@ class spell_dk_presence : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_presence_AuraScript(); } }; +class RaiseDeadCheck +{ + public: + explicit RaiseDeadCheck(Player const* caster) : _caster(caster) { } + + bool operator()(WorldObject* obj) const + { + if (Unit* target = obj->ToUnit()) + { + if (!target->IsAlive() + && _caster->isHonorOrXPTarget(target) + && target->GetCreatureType() == CREATURE_TYPE_HUMANOID + && target->GetDisplayId() == target->GetNativeDisplayId()) + return false; + } + + return true; + } + + private: + Player const* _caster; +}; + +// 46584 - Raise Dead +class spell_dk_raise_dead : public SpellScriptLoader +{ + public: + spell_dk_raise_dead() : SpellScriptLoader("spell_dk_raise_dead") { } + + class spell_dk_raise_dead_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_raise_dead_SpellScript); + + bool Validate(SpellInfo const* spellInfo) override + { + if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue()) + || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_2].CalcValue()) + || !sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_DEAD_USE_REAGENT) + || !sSpellMgr->GetSpellInfo(SPELL_DK_MASTER_OF_GHOULS)) + return false; + return true; + } + + bool Load() override + { + _result = SPELL_CAST_OK; + _corpse = false; + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + SpellCastResult CheckCast() + { + /// process spell target selection before cast starts + /// targets of effect_1 are used to check cast + GetSpell()->SelectSpellTargets(); + /// cleanup spell target map, and fill it again on normal way + GetSpell()->CleanupTargetList(); + /// _result is set in spell target selection + return _result; + } + + SpellCastResult CheckReagents() + { + /// @workaround: there is no access to castresult of other spells, check it manually + SpellInfo const* reagentSpell = sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_DEAD_USE_REAGENT); + Player* player = GetCaster()->ToPlayer(); + if (!player->CanNoReagentCast(reagentSpell)) + { + for (uint32 i = 0; i < MAX_SPELL_REAGENTS; i++) + { + if (reagentSpell->Reagent[i] <= 0) + continue; + + if (!player->HasItemCount(reagentSpell->Reagent[i], reagentSpell->ReagentCount[i])) + { + Spell::SendCastResult(player, reagentSpell, 0, SPELL_FAILED_REAGENTS); + return SPELL_FAILED_DONT_REPORT; + } + } + } + return SPELL_CAST_OK; + } + + void CheckTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(RaiseDeadCheck(GetCaster()->ToPlayer())); + + if (targets.empty()) + { + if (GetSpell()->getState() == SPELL_STATE_PREPARING) + _result = CheckReagents(); + + return; + } + + WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); + targets.clear(); + targets.push_back(target); + _corpse = true; + } + + void CheckTarget(WorldObject*& target) + { + // Don't add caster to target map, if we found a corpse to raise dead + if (_corpse) + target = NULL; + } + + void ConsumeReagents() + { + // No corpse found, take reagents + if (!_corpse) + GetCaster()->CastSpell(GetCaster(), SPELL_DK_RAISE_DEAD_USE_REAGENT, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST)); + } + + uint32 GetGhoulSpellId() + { + // Do we have talent Master of Ghouls? + if (GetCaster()->HasAura(SPELL_DK_MASTER_OF_GHOULS)) + // summon as pet + return GetSpellInfo()->Effects[EFFECT_2].CalcValue(); + + // or guardian + return GetSpellInfo()->Effects[EFFECT_1].CalcValue(); + } + + void HandleRaiseDead(SpellEffIndex /*effIndex*/) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(GetGhoulSpellId()); + SpellCastTargets targets; + targets.SetDst(*GetHitUnit()); + + GetCaster()->CastSpell(targets, spellInfo, NULL, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_raise_dead_SpellScript::CheckCast); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_raise_dead_SpellScript::CheckTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENTRY); + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dk_raise_dead_SpellScript::CheckTarget, EFFECT_2, TARGET_UNIT_CASTER); + OnCast += SpellCastFn(spell_dk_raise_dead_SpellScript::ConsumeReagents); + OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_2, SPELL_EFFECT_DUMMY); + } + + private: + SpellCastResult _result; + bool _corpse; + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dk_raise_dead_SpellScript(); + } +}; + // 59754 Rune Tap - Party class spell_dk_rune_tap_party : public SpellScriptLoader { @@ -955,13 +1287,13 @@ class spell_dk_rune_tap_party : public SpellScriptLoader targets.remove(GetCaster()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_rune_tap_party_SpellScript::CheckTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_rune_tap_party_SpellScript(); } @@ -977,7 +1309,7 @@ class spell_dk_scent_of_blood : public SpellScriptLoader { PrepareAuraScript(spell_dk_scent_of_blood_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_SCENT_OF_BLOOD)) return false; @@ -991,13 +1323,13 @@ class spell_dk_scent_of_blood : public SpellScriptLoader GetTarget()->RemoveAuraFromStack(GetSpellInfo()->Id); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_dk_scent_of_blood_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_scent_of_blood_AuraScript(); } @@ -1014,13 +1346,13 @@ class spell_dk_scourge_strike : public SpellScriptLoader PrepareSpellScript(spell_dk_scourge_strike_SpellScript); float multiplier; - bool Load() OVERRIDE + bool Load() override { multiplier = 1.0f; return true; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DK_SCOURGE_STRIKE_TRIGGERED)) return false; @@ -1053,14 +1385,14 @@ class spell_dk_scourge_strike : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dk_scourge_strike_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY); AfterHit += SpellHitFn(spell_dk_scourge_strike_SpellScript::HandleAfterHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dk_scourge_strike_SpellScript(); } @@ -1078,7 +1410,7 @@ class spell_dk_spell_deflection : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -1097,14 +1429,14 @@ class spell_dk_spell_deflection : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_spell_deflection_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_spell_deflection_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_spell_deflection_AuraScript(); } @@ -1125,13 +1457,13 @@ class spell_dk_vampiric_blood : public SpellScriptLoader amount = GetUnitOwner()->CountPctFromMaxHealth(amount); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_vampiric_blood_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_vampiric_blood_AuraScript(); } @@ -1147,7 +1479,7 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader { PrepareAuraScript(spell_dk_will_of_the_necropolis_AuraScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1); if (!firstRankSpellInfo) @@ -1166,7 +1498,7 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -1182,7 +1514,7 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader { // min pct of hp is stored in effect 0 of talent spell uint8 rank = GetSpellInfo()->GetRank(); - SpellInfo const* talentProto = sSpellMgr->GetSpellInfo(sSpellMgr->GetSpellWithRank(SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1, rank)); + SpellInfo const* talentProto = sSpellMgr->EnsureSpellInfo(sSpellMgr->GetSpellWithRank(SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1, rank)); int32 remainingHp = int32(GetTarget()->GetHealth() - dmgInfo.GetDamage()); int32 minHp = int32(GetTarget()->CountPctFromMaxHealth(talentProto->Effects[EFFECT_0].CalcValue(GetCaster()))); @@ -1192,14 +1524,14 @@ class spell_dk_will_of_the_necropolis : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_will_of_the_necropolis_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dk_will_of_the_necropolis_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_will_of_the_necropolis_AuraScript(); } @@ -1223,7 +1555,9 @@ void AddSC_deathknight_spell_scripts() new spell_dk_improved_blood_presence(); new spell_dk_improved_frost_presence(); new spell_dk_improved_unholy_presence(); + new spell_dk_pestilence(); new spell_dk_presence(); + new spell_dk_raise_dead(); new spell_dk_rune_tap_party(); new spell_dk_scent_of_blood(); new spell_dk_scourge_strike(); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index f33a409cf25..e466c15d417 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -63,13 +63,13 @@ class spell_dru_dash : public SpellScriptLoader amount = 0; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_dash_AuraScript(); } @@ -85,7 +85,7 @@ class spell_dru_enrage : public SpellScriptLoader { PrepareSpellScript(spell_dru_enrage_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_KING_OF_THE_JUNGLE) || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE_MOD_DAMAGE)) @@ -99,13 +99,13 @@ class spell_dru_enrage : public SpellScriptLoader GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_dru_enrage_SpellScript::OnHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_enrage_SpellScript(); } @@ -121,7 +121,7 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader { PrepareSpellScript(spell_dru_glyph_of_starfire_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_INCREASED_MOONFIRE_DURATION) || !sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_SPLENDOR)) return false; @@ -151,13 +151,13 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dru_glyph_of_starfire_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_glyph_of_starfire_SpellScript(); } @@ -187,13 +187,13 @@ class spell_dru_idol_lifebloom : public SpellScriptLoader spellMod->value = aurEff->GetAmount() / 7; } - void Register() OVERRIDE + void Register() override { DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dru_idol_lifebloom_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_idol_lifebloom_AuraScript(); } @@ -214,13 +214,13 @@ class spell_dru_innervate : public SpellScriptLoader amount = CalculatePct(int32(GetUnitOwner()->GetCreatePowers(POWER_MANA) / aurEff->GetTotalTicks()), amount); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_innervate_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_innervate_AuraScript(); } @@ -243,13 +243,13 @@ class spell_dru_insect_swarm : public SpellScriptLoader amount += relicAurEff->GetAmount() / aurEff->GetTotalTicks(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_insect_swarm_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_insect_swarm_AuraScript(); } @@ -265,7 +265,7 @@ class spell_dru_lifebloom : public SpellScriptLoader { PrepareAuraScript(spell_dru_lifebloom_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL)) return false; @@ -324,14 +324,14 @@ class spell_dru_lifebloom : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_lifebloom_AuraScript(); } @@ -347,7 +347,7 @@ class spell_dru_living_seed : public SpellScriptLoader { PrepareAuraScript(spell_dru_living_seed_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC)) return false; @@ -361,13 +361,13 @@ class spell_dru_living_seed : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_living_seed_AuraScript(); } @@ -383,7 +383,7 @@ class spell_dru_living_seed_proc : public SpellScriptLoader { PrepareAuraScript(spell_dru_living_seed_proc_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL)) return false; @@ -396,13 +396,13 @@ class spell_dru_living_seed_proc : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_living_seed_proc_AuraScript(); } @@ -420,7 +420,7 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -439,14 +439,14 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_moonkin_form_passive_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_moonkin_form_passive_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_moonkin_form_passive_AuraScript(); } @@ -467,13 +467,13 @@ class spell_dru_owlkin_frenzy : public SpellScriptLoader amount = CalculatePct(GetUnitOwner()->GetCreatePowers(POWER_MANA), amount); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_owlkin_frenzy_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_PERIODIC_ENERGIZE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_owlkin_frenzy_AuraScript(); } @@ -495,14 +495,14 @@ class spell_dru_predatory_strikes : public SpellScriptLoader target->UpdateAttackPowerAndDamage(); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_predatory_strikes_AuraScript(); } @@ -520,7 +520,7 @@ class spell_dru_primal_tenacity : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster()); return true; @@ -539,14 +539,14 @@ class spell_dru_primal_tenacity : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_primal_tenacity_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_primal_tenacity_AuraScript::Absorb, EFFECT_1); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_primal_tenacity_AuraScript(); } @@ -562,7 +562,7 @@ class spell_dru_rip : public SpellScriptLoader { PrepareAuraScript(spell_dru_rip_AuraScript); - bool Load() OVERRIDE + bool Load() override { Unit* caster = GetCaster(); return caster && caster->GetTypeId() == TYPEID_PLAYER; @@ -588,13 +588,13 @@ class spell_dru_rip : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_rip_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_rip_AuraScript(); } @@ -612,7 +612,7 @@ class spell_dru_savage_defense : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -630,14 +630,14 @@ class spell_dru_savage_defense : public SpellScriptLoader aurEff->SetAmount(0); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_savage_defense_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_savage_defense_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_savage_defense_AuraScript(); } @@ -662,7 +662,7 @@ class spell_dru_savage_roar : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast); } @@ -672,7 +672,7 @@ class spell_dru_savage_roar : public SpellScriptLoader { PrepareAuraScript(spell_dru_savage_roar_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR)) return false; @@ -690,19 +690,19 @@ class spell_dru_savage_roar : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_savage_roar_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_savage_roar_AuraScript(); } @@ -723,13 +723,13 @@ class spell_dru_starfall_aoe : public SpellScriptLoader targets.remove(GetExplTargetUnit()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_starfall_aoe_SpellScript(); } @@ -768,14 +768,14 @@ class spell_dru_starfall_dummy : public SpellScriptLoader caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_starfall_dummy_SpellScript(); } @@ -800,7 +800,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dru_survival_instincts_SpellScript::CheckCast); } @@ -810,7 +810,7 @@ class spell_dru_survival_instincts : public SpellScriptLoader { PrepareAuraScript(spell_dru_survival_instincts_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS)) return false; @@ -829,19 +829,19 @@ class spell_dru_survival_instincts : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts_AuraScript::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_survival_instincts_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_survival_instincts_AuraScript(); } @@ -857,7 +857,7 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader { PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -869,13 +869,13 @@ class spell_dru_swift_flight_passive : public SpellScriptLoader amount = 310; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dru_swift_flight_passive_AuraScript(); } @@ -897,13 +897,13 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader GetHitUnit()->CastCustomSpell(SPELL_DRUID_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_dru_tiger_s_fury_SpellScript::OnHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_tiger_s_fury_SpellScript(); } @@ -926,13 +926,13 @@ class spell_dru_typhoon : public SpellScriptLoader PreventHitDefaultEffect(effIndex); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_dru_typhoon_SpellScript::HandleKnockBack, EFFECT_0, SPELL_EFFECT_KNOCK_BACK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_typhoon_SpellScript(); } @@ -948,7 +948,7 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader { PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -981,13 +981,13 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_t10_restoration_4p_bonus_SpellScript(); } @@ -1020,7 +1020,7 @@ class spell_dru_wild_growth : public SpellScriptLoader { PrepareSpellScript(spell_dru_wild_growth_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (spellInfo->Effects[EFFECT_2].IsEffect() || spellInfo->Effects[EFFECT_2].CalcValue() <= 0) return false; @@ -1038,15 +1038,26 @@ class spell_dru_wild_growth : public SpellScriptLoader targets.sort(Trinity::HealthPctOrderPred()); targets.resize(maxTargets); } + + _targets = targets; } - void Register() OVERRIDE + void SetTargets(std::list<WorldObject*>& targets) + { + targets = _targets; + } + + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY); } + + private: + std::list<WorldObject*> _targets; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dru_wild_growth_SpellScript(); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 1e9a8713019..4c72d790059 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -36,6 +36,7 @@ #include "SkillDiscovery.h" #include "SpellScript.h" #include "SpellAuraEffects.h" +#include "Vehicle.h" class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader { @@ -48,7 +49,7 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader uint32 limit; - bool Load() OVERRIDE + bool Load() override { // Max absorb stored in 1 dummy effect limit = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); @@ -60,13 +61,13 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader absorbAmount = std::min(limit, absorbAmount); } - void Register() OVERRIDE + void Register() override { OnEffectAbsorb += AuraEffectAbsorbFn(spell_gen_absorb0_hitlimit1_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_absorb0_hitlimit1_AuraScript(); } @@ -91,7 +92,7 @@ class spell_gen_adaptive_warding : public SpellScriptLoader { PrepareAuraScript(spell_gen_adaptive_warding_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FIRE) || !sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_NATURE) || @@ -150,14 +151,14 @@ class spell_gen_adaptive_warding : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_gen_adaptive_warding_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_gen_adaptive_warding_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_adaptive_warding_AuraScript(); } @@ -179,13 +180,13 @@ class spell_gen_allow_cast_from_item_only : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_allow_cast_from_item_only_SpellScript(); } @@ -206,7 +207,7 @@ class spell_gen_animal_blood : public SpellScriptLoader { PrepareAuraScript(spell_gen_animal_blood_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SPAWN_BLOOD_POOL)) return false; @@ -227,14 +228,14 @@ class spell_gen_animal_blood : public SpellScriptLoader owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_animal_blood_AuraScript(); } @@ -257,13 +258,13 @@ class spell_gen_aura_of_anger : public SpellScriptLoader aurEff->SetAmount(100 * aurEff->GetTickNumber()); } - void Register() OVERRIDE + void Register() override { OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_aura_of_anger_AuraScript(); } @@ -288,7 +289,7 @@ class spell_gen_aura_service_uniform : public SpellScriptLoader { PrepareAuraScript(spell_gen_aura_service_uniform_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SERVICE_UNIFORM)) return false; @@ -315,14 +316,14 @@ class spell_gen_aura_service_uniform : public SpellScriptLoader target->RestoreDisplayId(); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_aura_service_uniform_AuraScript(); } @@ -359,13 +360,13 @@ class spell_gen_av_drekthar_presence : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_gen_av_drekthar_presence_AuraScript::CheckAreaTarget); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_av_drekthar_presence_AuraScript(); } @@ -385,7 +386,7 @@ class spell_gen_bandage : public SpellScriptLoader { PrepareSpellScript(spell_gen_bandage_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RECENTLY_BANDAGED)) return false; @@ -408,14 +409,14 @@ class spell_gen_bandage : public SpellScriptLoader GetCaster()->CastSpell(target, SPELL_RECENTLY_BANDAGED, true); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_gen_bandage_SpellScript::CheckCast); AfterHit += SpellHitFn(spell_gen_bandage_SpellScript::HandleScript); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_bandage_SpellScript(); } @@ -456,13 +457,13 @@ class spell_gen_bonked : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_bonked_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_bonked_SpellScript(); } @@ -508,7 +509,7 @@ class spell_gen_break_shield: public SpellScriptLoader class spell_gen_break_shield_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_break_shield_SpellScript) + PrepareSpellScript(spell_gen_break_shield_SpellScript); void HandleScriptEffect(SpellEffIndex effIndex) { @@ -565,13 +566,13 @@ class spell_gen_break_shield: public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_break_shield_SpellScript(); } @@ -593,13 +594,13 @@ class spell_gen_burn_brutallus : public SpellScriptLoader aurEff->SetAmount(aurEff->GetAmount() * 2); } - void Register() OVERRIDE + void Register() override { OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_burn_brutallus_AuraScript(); } @@ -619,7 +620,7 @@ class spell_gen_cannibalize : public SpellScriptLoader { PrepareSpellScript(spell_gen_cannibalize_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CANNIBALIZE_TRIGGERED)) return false; @@ -645,14 +646,14 @@ class spell_gen_cannibalize : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_CANNIBALIZE_TRIGGERED, false); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_gen_cannibalize_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_gen_cannibalize_SpellScript::CheckIfCorpseNear); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_cannibalize_SpellScript(); } @@ -670,9 +671,9 @@ class spell_gen_chaos_blast : public SpellScriptLoader class spell_gen_chaos_blast_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_chaos_blast_SpellScript) + PrepareSpellScript(spell_gen_chaos_blast_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CHAOS_BLAST)) return false; @@ -686,13 +687,13 @@ class spell_gen_chaos_blast : public SpellScriptLoader caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, NULL, NULL, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_chaos_blast_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_chaos_blast_SpellScript(); } @@ -710,17 +711,17 @@ class spell_gen_clone : public SpellScriptLoader void HandleScriptEffect(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); - GetHitUnit()->CastSpell(GetCaster(), GetEffectValue(), true); + GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_clone_SpellScript(); } @@ -750,19 +751,16 @@ class spell_gen_clone_weapon : public SpellScriptLoader void HandleScriptEffect(SpellEffIndex effIndex) { PreventHitDefaultEffect(effIndex); - Unit* caster = GetCaster(); - - if (Unit* target = GetHitUnit()) - caster->CastSpell(target, GetEffectValue(), true); + GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_clone_weapon_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_clone_weapon_SpellScript(); } @@ -777,9 +775,7 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader { PrepareAuraScript(spell_gen_clone_weapon_auraScript); - uint32 prevItem; - - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_AURA) || !sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_2_AURA) || @@ -791,6 +787,12 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader return true; } + bool Load() override + { + prevItem = 0; + return true; + } + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* caster = GetCaster(); @@ -870,15 +872,17 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_gen_clone_weapon_auraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); OnEffectRemove += AuraEffectRemoveFn(spell_gen_clone_weapon_auraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } + private: + uint32 prevItem; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_clone_weapon_auraScript(); } @@ -891,7 +895,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader class spell_gen_count_pct_from_max_hp_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript) + PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript); public: spell_gen_count_pct_from_max_hp_SpellScript(int32 damagePct) : SpellScript(), _damagePct(damagePct) { } @@ -904,7 +908,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(_damagePct)); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_gen_count_pct_from_max_hp_SpellScript::RecalculateDamage); } @@ -913,7 +917,7 @@ class spell_gen_count_pct_from_max_hp : public SpellScriptLoader int32 _damagePct; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_count_pct_from_max_hp_SpellScript(_damagePct); } @@ -938,7 +942,7 @@ class spell_gen_create_lance : public SpellScriptLoader { PrepareSpellScript(spell_gen_create_lance_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_ALLIANCE) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_HORDE)) @@ -959,13 +963,13 @@ class spell_gen_create_lance : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_create_lance_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_create_lance_SpellScript(); } @@ -990,13 +994,13 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader target->ToCreature()->SetReactState(REACT_PASSIVE); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_gen_creature_permanent_feign_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_creature_permanent_feign_death_AuraScript(); } @@ -1022,7 +1026,7 @@ class spell_gen_dalaran_disguise : public SpellScriptLoader { PrepareSpellScript(spell_gen_dalaran_disguise_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { switch (spellInfo->Id) { @@ -1064,13 +1068,13 @@ class spell_gen_dalaran_disguise : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_dalaran_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_dalaran_disguise_SpellScript(); } @@ -1094,7 +1098,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader { PrepareAuraScript(spell_gen_damage_reduction_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA)) return false; @@ -1119,7 +1123,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -1127,7 +1131,7 @@ class spell_gen_damage_reduction_aura : public SpellScriptLoader }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_damage_reduction_AuraScript(); } @@ -1149,7 +1153,7 @@ class spell_gen_defend : public SpellScriptLoader { PrepareAuraScript(spell_gen_defend_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_1)) return false; @@ -1189,9 +1193,9 @@ class spell_gen_defend : public SpellScriptLoader rider->RemoveAurasDueToSpell(GetId()); } - void Register() OVERRIDE + void Register() override { - SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId); + SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(m_scriptSpellId); // Defend spells cast by NPCs (add visuals) if (spell->Effects[EFFECT_0].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN) @@ -1213,7 +1217,7 @@ class spell_gen_defend : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_defend_AuraScript(); } @@ -1228,7 +1232,7 @@ class spell_gen_despawn_self : public SpellScriptLoader { PrepareSpellScript(spell_gen_despawn_self_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1239,13 +1243,13 @@ class spell_gen_despawn_self : public SpellScriptLoader GetCaster()->ToCreature()->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_despawn_self_SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_despawn_self_SpellScript(); } @@ -1266,12 +1270,12 @@ class spell_gen_divine_storm_cd_reset : public SpellScriptLoader { PrepareSpellScript(spell_gen_divine_storm_cd_reset_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM)) return false; @@ -1285,13 +1289,13 @@ class spell_gen_divine_storm_cd_reset : public SpellScriptLoader caster->RemoveSpellCooldown(SPELL_DIVINE_STORM, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_divine_storm_cd_reset_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_divine_storm_cd_reset_SpellScript(); } @@ -1322,13 +1326,13 @@ class spell_gen_ds_flush_knockback : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_ds_flush_knockback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_ds_flush_knockback_SpellScript(); } @@ -1349,7 +1353,7 @@ class spell_gen_dummy_trigger : public SpellScriptLoader { PrepareSpellScript(spell_gen_dummy_trigger_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD)) @@ -1367,13 +1371,13 @@ class spell_gen_dummy_trigger : public SpellScriptLoader caster->CastCustomSpell(target, SPELL_PERSISTANT_SHIELD_TRIGGERED, &damage, NULL, NULL, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_dummy_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_dummy_trigger_SpellScript(); } @@ -1388,7 +1392,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader { PrepareSpellScript(spell_gen_dungeon_credit_SpellScript); - bool Load() OVERRIDE + bool Load() override { _handled = false; return GetCaster()->GetTypeId() == TYPEID_UNIT; @@ -1406,7 +1410,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, GetSpellInfo()->Id, caster); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_gen_dungeon_credit_SpellScript::CreditEncounter); } @@ -1415,7 +1419,7 @@ class spell_gen_dungeon_credit : public SpellScriptLoader bool _handled; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_dungeon_credit_SpellScript(); } @@ -1442,7 +1446,8 @@ class spell_gen_elune_candle : public SpellScriptLoader class spell_gen_elune_candle_SpellScript : public SpellScript { PrepareSpellScript(spell_gen_elune_candle_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HEAD) || !sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_CHEST) || @@ -1481,13 +1486,13 @@ class spell_gen_elune_candle : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_elune_candle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_elune_candle_SpellScript(); } @@ -1507,9 +1512,9 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader class spell_gen_gadgetzan_transporter_backfire_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript) + PrepareSpellScript(spell_gen_gadgetzan_transporter_backfire_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH) || !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_EVIL_TWIN) || @@ -1530,13 +1535,13 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader caster->CastSpell(caster, SPELL_TRANSPORTER_MALFUNCTION_MISS, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_gadgetzan_transporter_backfire_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_gadgetzan_transporter_backfire_SpellScript(); } @@ -1583,13 +1588,13 @@ class spell_gen_gift_of_naaru : public SpellScriptLoader amount += int32(std::max(healTick, 0)); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_gift_of_naaru_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_gift_of_naaru_AuraScript(); } @@ -1608,9 +1613,9 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader class spell_gen_gnomish_transporter_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript) + PrepareSpellScript(spell_gen_gnomish_transporter_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_FAILURE)) @@ -1623,13 +1628,13 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), roll_chance_i(50) ? SPELL_TRANSPORTER_SUCCESS : SPELL_TRANSPORTER_FAILURE, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_gnomish_transporter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_gnomish_transporter_SpellScript(); } @@ -1644,7 +1649,7 @@ class spell_gen_gunship_portal : public SpellScriptLoader { PrepareSpellScript(spell_gen_gunship_portal_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -1657,13 +1662,13 @@ class spell_gen_gunship_portal : public SpellScriptLoader bg->DoAction(1, caster->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_gunship_portal_SpellScript(); } @@ -1708,14 +1713,14 @@ class spell_gen_launch : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST); AfterHit += SpellHitFn(spell_gen_launch_SpellScript::Launch); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_launch_SpellScript(); } @@ -1737,13 +1742,13 @@ class spell_gen_lifeblood : public SpellScriptLoader amount += int32(CalculatePct(owner->GetMaxHealth(), 1.5f / aurEff->GetTotalTicks())); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_lifeblood_AuraScript(); } @@ -1770,7 +1775,7 @@ class spell_gen_lifebloom : public SpellScriptLoader public: spell_gen_lifebloom_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(_spellId)) return false; @@ -1787,7 +1792,7 @@ class spell_gen_lifebloom : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), _spellId, true, NULL, aurEff, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_gen_lifebloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL); } @@ -1796,7 +1801,7 @@ class spell_gen_lifebloom : public SpellScriptLoader uint32 _spellId; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_lifebloom_AuraScript(_spellId); } @@ -1848,13 +1853,13 @@ class spell_gen_magic_rooster : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_magic_rooster_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_magic_rooster_SpellScript(); } @@ -1924,7 +1929,7 @@ class spell_gen_mount : public SpellScriptLoader spell_gen_mount_SpellScript(uint32 mount0, uint32 mount60, uint32 mount100, uint32 mount150, uint32 mount280, uint32 mount310) : SpellScript(), _mount0(mount0), _mount60(mount60), _mount100(mount100), _mount150(mount150), _mount280(mount280), _mount310(mount310) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (_mount0 && !sSpellMgr->GetSpellInfo(_mount0)) return false; @@ -2004,7 +2009,7 @@ class spell_gen_mount : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_mount_SpellScript::HandleMount, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); } @@ -2018,7 +2023,7 @@ class spell_gen_mount : public SpellScriptLoader uint32 _mount310; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_mount_SpellScript(_mount0, _mount60, _mount100, _mount150, _mount280, _mount310); } @@ -2089,7 +2094,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader class spell_gen_mounted_charge_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_mounted_charge_SpellScript) + PrepareSpellScript(spell_gen_mounted_charge_SpellScript); void HandleScriptEffect(SpellEffIndex effIndex) { @@ -2175,9 +2180,9 @@ class spell_gen_mounted_charge: public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), spellId, false); } - void Register() OVERRIDE + void Register() override { - SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId); + SpellInfo const* spell = sSpellMgr->EnsureSpellInfo(m_scriptSpellId); if (spell->HasEffect(SPELL_EFFECT_SCRIPT_EFFECT)) OnEffectHitTarget += SpellEffectFn(spell_gen_mounted_charge_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT); @@ -2187,7 +2192,7 @@ class spell_gen_mounted_charge: public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_mounted_charge_SpellScript(); } @@ -2208,7 +2213,7 @@ class spell_gen_netherbloom : public SpellScriptLoader { PrepareSpellScript(spell_gen_netherbloom_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { for (uint8 i = 0; i < 5; ++i) if (!sSpellMgr->GetSpellInfo(SPELL_NETHERBLOOM_POLLEN_1 + i)) @@ -2239,13 +2244,13 @@ class spell_gen_netherbloom : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_netherbloom_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_netherbloom_SpellScript(); } @@ -2266,7 +2271,7 @@ class spell_gen_nightmare_vine : public SpellScriptLoader { PrepareSpellScript(spell_gen_nightmare_vine_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NIGHTMARE_POLLEN)) return false; @@ -2285,13 +2290,13 @@ class spell_gen_nightmare_vine : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_nightmare_vine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_nightmare_vine_SpellScript(); } @@ -2317,7 +2322,7 @@ class spell_gen_obsidian_armor : public SpellScriptLoader { PrepareAuraScript(spell_gen_obsidian_armor_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) || !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) || @@ -2371,14 +2376,14 @@ class spell_gen_obsidian_armor : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_obsidian_armor_AuraScript(); } @@ -2490,7 +2495,7 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader uint32 _pennantSpellId; - bool Load() OVERRIDE + bool Load() override { _pennantSpellId = 0; return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; @@ -2624,14 +2629,14 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_gen_on_tournament_mount_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); OnEffectRemove += AuraEffectRemoveFn(spell_gen_on_tournament_mount_AuraScript::HandleRemoveEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_on_tournament_mount_AuraScript(); } @@ -2646,7 +2651,7 @@ class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader { PrepareSpellScript(spell_gen_oracle_wolvar_reputation_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -2670,13 +2675,13 @@ class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader // EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_gen_oracle_wolvar_reputation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_oracle_wolvar_reputation_SpellScript(); } @@ -2698,7 +2703,7 @@ class spell_gen_orc_disguise : public SpellScriptLoader { PrepareSpellScript(spell_gen_orc_disguise_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_TRIGGER) || !sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_MALE) || @@ -2720,13 +2725,13 @@ class spell_gen_orc_disguise : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_orc_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_orc_disguise_SpellScript(); } @@ -2748,7 +2753,7 @@ class spell_gen_parachute : public SpellScriptLoader { PrepareAuraScript(spell_gen_parachute_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PARACHUTE) || !sSpellMgr->GetSpellInfo(SPELL_PARACHUTE_BUFF)) @@ -2766,13 +2771,13 @@ class spell_gen_parachute : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_parachute_AuraScript(); } @@ -2790,7 +2795,7 @@ class spell_gen_parachute_ic : public SpellScriptLoader class spell_gen_parachute_ic_AuraScript : public AuraScript { - PrepareAuraScript(spell_gen_parachute_ic_AuraScript) + PrepareAuraScript(spell_gen_parachute_ic_AuraScript); void HandleTriggerSpell(AuraEffect const* /*aurEff*/) { @@ -2799,13 +2804,13 @@ class spell_gen_parachute_ic : public SpellScriptLoader target->CastSpell(target, SPELL_PARACHUTE_IC, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_parachute_ic_AuraScript(); } @@ -2827,7 +2832,7 @@ class spell_gen_pet_summoned : public SpellScriptLoader { PrepareSpellScript(spell_gen_pet_summoned_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -2838,40 +2843,38 @@ class spell_gen_pet_summoned : public SpellScriptLoader if (player->GetLastPetNumber()) { PetType newPetType = (player->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET; - if (Pet* newPet = new Pet(player, newPetType)) + Pet* newPet = new Pet(player, newPetType); + if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true)) { - if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true)) - { - // revive the pet if it is dead - if (newPet->getDeathState() == DEAD) - newPet->setDeathState(ALIVE); + // revive the pet if it is dead + if (newPet->getDeathState() == DEAD) + newPet->setDeathState(ALIVE); - newPet->SetFullHealth(); - newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType())); + newPet->SetFullHealth(); + newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType())); - switch (newPet->GetEntry()) - { - case NPC_DOOMGUARD: - case NPC_INFERNAL: - newPet->SetEntry(NPC_IMP); - break; - default: - break; - } + switch (newPet->GetEntry()) + { + case NPC_DOOMGUARD: + case NPC_INFERNAL: + newPet->SetEntry(NPC_IMP); + break; + default: + break; } - else - delete newPet; } + else + delete newPet; } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_pet_summoned_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_pet_summoned_SpellScript(); } @@ -2886,7 +2889,7 @@ class spell_gen_profession_research : public SpellScriptLoader { PrepareSpellScript(spell_gen_profession_research_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -2914,14 +2917,14 @@ class spell_gen_profession_research : public SpellScriptLoader caster->UpdateCraftSkill(spellId); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_gen_profession_research_SpellScript::CheckRequirement); OnEffectHitTarget += SpellEffectFn(spell_gen_profession_research_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_profession_research_SpellScript(); } @@ -2945,13 +2948,13 @@ class spell_gen_remove_flight_auras : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_remove_flight_auras_SpellScript(); } @@ -3008,13 +3011,13 @@ class spell_gen_replenishment : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_gen_replenishment_SpellScript::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_replenishment_SpellScript(); } @@ -3023,7 +3026,7 @@ class spell_gen_replenishment : public SpellScriptLoader { PrepareAuraScript(spell_gen_replenishment_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetUnitOwner()->GetPower(POWER_MANA); } @@ -3043,13 +3046,13 @@ class spell_gen_replenishment : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_replenishment_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_replenishment_AuraScript(); } @@ -3069,14 +3072,14 @@ class spell_gen_seaforium_blast : public SpellScriptLoader { PrepareSpellScript(spell_gen_seaforium_blast_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { // OriginalCaster is always available in Spell::prepare return GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER; @@ -3091,13 +3094,13 @@ class spell_gen_seaforium_blast : public SpellScriptLoader originalCaster->CastSpell(originalCaster, SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_seaforium_blast_SpellScript::AchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_seaforium_blast_SpellScript(); } @@ -3119,20 +3122,20 @@ class spell_gen_spectator_cheer_trigger : public SpellScriptLoader class spell_gen_spectator_cheer_trigger_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript) + PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript); void HandleDummy(SpellEffIndex /*effIndex*/) { GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_spectator_cheer_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_spectator_cheer_trigger_SpellScript(); } @@ -3147,7 +3150,7 @@ class spell_gen_spirit_healer_res : public SpellScriptLoader { PrepareSpellScript(spell_gen_spirit_healer_res_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetOriginalCaster() && GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -3163,13 +3166,13 @@ class spell_gen_spirit_healer_res : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_spirit_healer_res_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_spirit_healer_res_SpellScript(); } @@ -3193,7 +3196,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader public: spell_gen_summon_elemental_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(_spellId)) return false; @@ -3215,7 +3218,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader owner->ToPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_gen_summon_elemental_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_gen_summon_elemental_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -3225,7 +3228,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader uint32 _spellId; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_summon_elemental_AuraScript(_spellId); } @@ -3248,7 +3251,7 @@ class spell_gen_summon_tournament_mount : public SpellScriptLoader { PrepareSpellScript(spell_gen_summon_tournament_mount_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LANCE_EQUIPPED)) return false; @@ -3269,18 +3272,45 @@ class spell_gen_summon_tournament_mount : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_gen_summon_tournament_mount_SpellScript::CheckIfLanceEquiped); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_summon_tournament_mount_SpellScript(); } }; +// 41213, 43416, 69222, 73076 - Throw Shield +class spell_gen_throw_shield : public SpellScriptLoader +{ + public: + spell_gen_throw_shield() : SpellScriptLoader("spell_gen_throw_shield") { } + + class spell_gen_throw_shield_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_throw_shield_SpellScript); + + void HandleScriptEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_throw_shield_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_throw_shield_SpellScript(); + } +}; enum MountedDuelSpells { @@ -3297,7 +3327,7 @@ class spell_gen_tournament_duel : public SpellScriptLoader { PrepareSpellScript(spell_gen_tournament_duel_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ON_TOURNAMENT_MOUNT) || !sSpellMgr->GetSpellInfo(SPELL_MOUNTED_DUEL)) @@ -3322,13 +3352,13 @@ class spell_gen_tournament_duel : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_tournament_duel_SpellScript(); } @@ -3343,7 +3373,7 @@ class spell_gen_tournament_pennant : public SpellScriptLoader { PrepareAuraScript(spell_gen_tournament_pennant_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -3355,13 +3385,13 @@ class spell_gen_tournament_pennant : public SpellScriptLoader caster->RemoveAurasDueToSpell(GetId()); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_gen_tournament_pennant_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_tournament_pennant_AuraScript(); } @@ -3384,12 +3414,12 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader { PrepareSpellScript(spell_pvp_trinket_wotf_shared_cd_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER) || !sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF)) @@ -3404,13 +3434,13 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader GetCaster()->ToPlayer()->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell()); } - void Register() OVERRIDE + void Register() override { AfterCast += SpellCastFn(spell_pvp_trinket_wotf_shared_cd_SpellScript::HandleScript); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pvp_trinket_wotf_shared_cd_SpellScript(); } @@ -3451,7 +3481,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader ModStackAmount(-1, AURA_REMOVE_BY_EXPIRE); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); @@ -3460,7 +3490,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader std::list<uint32> _applyTimes; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_turkey_marker_AuraScript(); } @@ -3500,13 +3530,13 @@ class spell_gen_upper_deck_create_foam_sword : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_upper_deck_create_foam_sword_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_upper_deck_create_foam_sword_SpellScript(); } @@ -3526,7 +3556,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader { PrepareAuraScript(spell_gen_vehicle_scaling_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -3557,7 +3587,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader amount = uint16((avgILvl - baseItemLevel) * factor); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); @@ -3565,7 +3595,7 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_vehicle_scaling_AuraScript(); } @@ -3584,7 +3614,7 @@ class spell_gen_vendor_bark_trigger : public SpellScriptLoader class spell_gen_vendor_bark_trigger_SpellScript : public SpellScript { - PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript) + PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript); void HandleDummy(SpellEffIndex /* effIndex */) { @@ -3593,13 +3623,13 @@ class spell_gen_vendor_bark_trigger : public SpellScriptLoader vendor->AI()->Talk(SAY_AMPHITHEATER_VENDOR); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_gen_vendor_bark_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_vendor_bark_trigger_SpellScript(); } @@ -3622,13 +3652,13 @@ class spell_gen_wg_water : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_gen_wg_water_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_gen_wg_water_SpellScript(); } @@ -3648,7 +3678,7 @@ class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader { PrepareAuraScript(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_YOGG_SARON_WHISPER_DUMMY)) return false; @@ -3661,18 +3691,45 @@ class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader GetTarget()->CastSpell((Unit*)NULL, SPELL_YOGG_SARON_WHISPER_DUMMY, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript(); } }; +class spell_gen_eject_all_passengers : public SpellScriptLoader +{ + public: + spell_gen_eject_all_passengers() : SpellScriptLoader("spell_gen_eject_all_passengers") { } + + class spell_gen_eject_all_passengers_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_eject_all_passengers_SpellScript); + + void RemoveVehicleAuras() + { + if (Vehicle* vehicle = GetHitUnit()->GetVehicleKit()) + vehicle->RemoveAllPassengers(); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_gen_eject_all_passengers_SpellScript::RemoveVehicleAuras); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_eject_all_passengers_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -3745,6 +3802,7 @@ void AddSC_generic_spell_scripts() new spell_gen_summon_elemental("spell_gen_summon_fire_elemental", SPELL_SUMMON_FIRE_ELEMENTAL); new spell_gen_summon_elemental("spell_gen_summon_earth_elemental", SPELL_SUMMON_EARTH_ELEMENTAL); new spell_gen_summon_tournament_mount(); + new spell_gen_throw_shield(); new spell_gen_tournament_duel(); new spell_gen_tournament_pennant(); new spell_pvp_trinket_wotf_shared_cd(); @@ -3754,4 +3812,5 @@ void AddSC_generic_spell_scripts() new spell_gen_vendor_bark_trigger(); new spell_gen_wg_water(); new spell_gen_whisper_gulch_yogg_saron_whisper(); + new spell_gen_eject_all_passengers(); } diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 07d95aa63f5..85bf85fa2d2 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -99,14 +99,14 @@ class spell_love_is_in_the_air_romantic_picnic : public SpellScriptLoader target->RemoveAura(SPELL_ROMANTIC_PICNIC_ACHIEV); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_love_is_in_the_air_romantic_picnic_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectPeriodic += AuraEffectPeriodicFn(spell_love_is_in_the_air_romantic_picnic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_love_is_in_the_air_romantic_picnic_AuraScript(); } @@ -136,7 +136,7 @@ class spell_hallow_end_trick : public SpellScriptLoader { PrepareSpellScript(spell_hallow_end_trick_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) || !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE) @@ -177,13 +177,13 @@ class spell_hallow_end_trick : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hallow_end_trick_SpellScript(); } @@ -209,7 +209,7 @@ class spell_hallow_end_trick_or_treat : public SpellScriptLoader { PrepareSpellScript(spell_hallow_end_trick_or_treat_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TRICK) || !sSpellMgr->GetSpellInfo(SPELL_TREAT) || !sSpellMgr->GetSpellInfo(SPELL_TRICKED_OR_TREATED)) return false; @@ -226,13 +226,13 @@ class spell_hallow_end_trick_or_treat : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hallow_end_trick_or_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hallow_end_trick_or_treat_SpellScript(); } @@ -247,7 +247,7 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader { PrepareSpellScript(spell_hallow_end_tricky_treat_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TRICKY_TREAT_SPEED)) return false; @@ -265,13 +265,13 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader caster->CastSpell(caster, SPELL_UPSET_TUMMY, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hallow_end_tricky_treat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hallow_end_tricky_treat_SpellScript(); } @@ -296,14 +296,14 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader class spell_pilgrims_bounty_buff_food_AuraScript : public AuraScript { - PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript) + PrepareAuraScript(spell_pilgrims_bounty_buff_food_AuraScript); private: uint32 const _triggeredSpellId; public: spell_pilgrims_bounty_buff_food_AuraScript(uint32 triggeredSpellId) : AuraScript(), _triggeredSpellId(triggeredSpellId) { } - bool Load() OVERRIDE + bool Load() override { _handled = false; return true; @@ -319,7 +319,7 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), _triggeredSpellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_pilgrims_bounty_buff_food_AuraScript::HandleTriggerSpell, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } @@ -327,7 +327,7 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader bool _handled; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pilgrims_bounty_buff_food_AuraScript(_triggeredSpellId); } @@ -349,7 +349,7 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader { PrepareSpellScript(spell_winter_veil_mistletoe_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_MISTLETOE) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_HOLLY) || @@ -367,13 +367,13 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_winter_veil_mistletoe_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_winter_veil_mistletoe_SpellScript(); } @@ -397,7 +397,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader { PrepareSpellScript(spell_winter_veil_px_238_winter_wondervolt_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_1) || !sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_2) || @@ -429,7 +429,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_winter_veil_px_238_winter_wondervolt_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } @@ -438,7 +438,7 @@ class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_winter_veil_px_238_winter_wondervolt_SpellScript(); } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 2f8a5daae84..c3f994135aa 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -67,12 +67,12 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader { PrepareAuraScript(spell_hun_aspect_of_the_beast_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET)) return false; @@ -93,14 +93,14 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader caster->CastSpell(caster, SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET, true); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_hun_aspect_of_the_beast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_of_the_beast_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_aspect_of_the_beast_AuraScript(); } @@ -116,7 +116,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader { PrepareAuraScript(spell_hun_ascpect_of_the_viper_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER) || @@ -153,7 +153,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_HUNTER_VICIOUS_VIPER); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_hun_ascpect_of_the_viper_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_OBS_MOD_POWER); AfterEffectApply += AuraEffectApplyFn(spell_hun_ascpect_of_the_viper_AuraScript::OnApply, EFFECT_0, SPELL_AURA_OBS_MOD_POWER, AURA_EFFECT_HANDLE_REAL); @@ -161,7 +161,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_ascpect_of_the_viper_AuraScript(); } @@ -177,7 +177,7 @@ class spell_hun_chimera_shot : public SpellScriptLoader { PrepareSpellScript(spell_hun_chimera_shot_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_SERPENT) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_VIPER) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_CHIMERA_SHOT_SCORPID)) return false; @@ -202,16 +202,21 @@ class spell_hun_chimera_shot : public SpellScriptLoader flag96 familyFlag = aura->GetSpellInfo()->SpellFamilyFlags; if (!(familyFlag[1] & 0x00000080 || familyFlag[0] & 0x0000C000)) continue; - if (AuraEffect const* aurEff = aura->GetEffect(0)) + if (AuraEffect* aurEff = aura->GetEffect(0)) { // Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting. if (familyFlag[0] & 0x4000) { int32 TickCount = aurEff->GetTotalTicks(); spellId = SPELL_HUNTER_CHIMERA_SHOT_SERPENT; - basePoint = caster->SpellDamageBonusDone(unitTarget, aura->GetSpellInfo(), aurEff->GetAmount(), DOT, aura->GetStackAmount()); + basePoint = aurEff->GetDamage(); ApplyPct(basePoint, TickCount * 40); basePoint = unitTarget->SpellDamageBonusTaken(caster, aura->GetSpellInfo(), basePoint, DOT, aura->GetStackAmount()); + + // Recalculate bonus damage on roll. + uint32 damage = std::max(aurEff->GetAmount(), 0); + sScriptMgr->ModifyPeriodicDamageAurasTick(unitTarget, caster, damage); + aurEff->SetDamage(caster->SpellDamageBonusDone(unitTarget, aurEff->GetSpellInfo(), damage, DOT) * aurEff->GetDonePct()); } // Viper Sting - Instantly restores mana to you equal to 60% of the total amount drained by your Viper Sting. else if (familyFlag[1] & 0x00000080) @@ -248,13 +253,13 @@ class spell_hun_chimera_shot : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_chimera_shot_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_chimera_shot_SpellScript(); } @@ -279,13 +284,13 @@ class spell_hun_disengage : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_hun_disengage_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_disengage_SpellScript(); } @@ -301,7 +306,7 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader { PrepareAuraScript(spell_hun_improved_mend_pet_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_IMPROVED_MEND_PET)) return false; @@ -319,14 +324,14 @@ class spell_hun_improved_mend_pet : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_IMPROVED_MEND_PET, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_hun_improved_mend_pet_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_hun_improved_mend_pet_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_improved_mend_pet_AuraScript(); } @@ -341,7 +346,7 @@ class spell_hun_invigoration : public SpellScriptLoader { PrepareSpellScript(spell_hun_invigoration_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_INVIGORATION_TRIGGERED)) return false; @@ -356,13 +361,13 @@ class spell_hun_invigoration : public SpellScriptLoader unitTarget->CastSpell(unitTarget, SPELL_HUNTER_INVIGORATION_TRIGGERED, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_invigoration_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_invigoration_SpellScript(); } @@ -378,7 +383,7 @@ class spell_hun_last_stand_pet : public SpellScriptLoader { PrepareSpellScript(spell_hun_last_stand_pet_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_LAST_STAND_TRIGGERED)) return false; @@ -392,13 +397,13 @@ class spell_hun_last_stand_pet : public SpellScriptLoader caster->CastCustomSpell(caster, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_last_stand_pet_SpellScript(); } @@ -414,7 +419,7 @@ class spell_hun_masters_call : public SpellScriptLoader { PrepareSpellScript(spell_hun_masters_call_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MASTERS_CALL_TRIGGERED) || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue()) || !sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_1].CalcValue())) return false; @@ -443,14 +448,14 @@ class spell_hun_masters_call : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnEffectHitTarget += SpellEffectFn(spell_hun_masters_call_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_masters_call_SpellScript(); } @@ -466,7 +471,7 @@ class spell_hun_misdirection : public SpellScriptLoader { PrepareAuraScript(spell_hun_misdirection_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MISDIRECTION_PROC)) return false; @@ -490,7 +495,7 @@ class spell_hun_misdirection : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); DoCheckProc += AuraCheckProcFn(spell_hun_misdirection_AuraScript::CheckProc); @@ -498,7 +503,7 @@ class spell_hun_misdirection : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_misdirection_AuraScript(); } @@ -519,13 +524,13 @@ class spell_hun_misdirection_proc : public SpellScriptLoader GetTarget()->ResetRedirectThreat(); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_proc_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_misdirection_proc_AuraScript(); } @@ -541,14 +546,14 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader { PrepareSpellScript(spell_hun_pet_carrion_feeder_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster()->IsPet()) return false; return true; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_CARRION_FEEDER_TRIGGERED)) return false; @@ -575,14 +580,14 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader caster->CastSpell(caster, SPELL_HUNTER_PET_CARRION_FEEDER_TRIGGERED, false); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_hun_pet_carrion_feeder_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_hun_pet_carrion_feeder_SpellScript::CheckIfCorpseNear); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_pet_carrion_feeder_SpellScript(); } @@ -598,14 +603,14 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader { PrepareSpellScript(spell_hun_pet_heart_of_the_phoenix_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster()->IsPet()) return false; return true; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF)) return false; @@ -623,13 +628,13 @@ class spell_hun_pet_heart_of_the_phoenix : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_pet_heart_of_the_phoenix_SpellScript(); } @@ -645,7 +650,7 @@ class spell_hun_readiness : public SpellScriptLoader { PrepareSpellScript(spell_hun_readiness_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -672,13 +677,13 @@ class spell_hun_readiness : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_readiness_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_readiness_SpellScript(); } @@ -694,7 +699,7 @@ class spell_hun_scatter_shot : public SpellScriptLoader { PrepareSpellScript(spell_hun_scatter_shot_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -708,13 +713,13 @@ class spell_hun_scatter_shot : public SpellScriptLoader caster->SendAttackSwingCancelAttack(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_hun_scatter_shot_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_scatter_shot_SpellScript(); } @@ -730,7 +735,7 @@ class spell_hun_sniper_training : public SpellScriptLoader { PrepareAuraScript(spell_hun_sniper_training_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_SNIPER_TRAINING_R1) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1)) return false; @@ -744,8 +749,13 @@ class spell_hun_sniper_training : public SpellScriptLoader { Unit* target = GetTarget(); uint32 spellId = SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_HUNTER_SNIPER_TRAINING_R1; - if (!target->HasAura(spellId)) - target->CastSpell(target, spellId, true, 0, aurEff); + target->CastSpell(target, spellId, true, 0, aurEff); + if (Player* playerTarget = GetUnitOwner()->ToPlayer()) + { + int32 baseAmount = aurEff->GetBaseAmount(); + int32 amount = playerTarget->CalculateSpellDamage(playerTarget, GetSpellInfo(), aurEff->GetEffIndex(), &baseAmount); + GetEffect(EFFECT_0)->SetAmount(amount); + } } } @@ -761,14 +771,14 @@ class spell_hun_sniper_training : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_hun_sniper_training_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_hun_sniper_training_AuraScript::HandleUpdatePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_sniper_training_AuraScript(); } @@ -814,13 +824,13 @@ class spell_hun_tame_beast : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_hun_tame_beast_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_tame_beast_SpellScript(); } @@ -845,14 +855,14 @@ class spell_hun_target_only_pet_and_owner : public SpellScriptLoader targets.push_back(owner); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_target_only_pet_and_owner_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_PARTY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_hun_target_only_pet_and_owner_SpellScript(); } @@ -868,7 +878,7 @@ class spell_hun_viper_attack_speed : public SpellScriptLoader { PrepareAuraScript(spell_hun_viper_attack_speed_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER) || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_VICIOUS_VIPER)) @@ -888,14 +898,14 @@ class spell_hun_viper_attack_speed : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_HUNTER_VICIOUS_VIPER); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_hun_viper_attack_speed_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_hun_viper_attack_speed_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_viper_attack_speed_AuraScript(); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 837023f3bdd..30f9e914037 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -47,7 +47,7 @@ class spell_item_trigger_spell : public SpellScriptLoader public: spell_item_trigger_spell_SpellScript(uint32 triggeredSpellId) : SpellScript(), _triggeredSpellId(triggeredSpellId) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(_triggeredSpellId)) return false; @@ -61,13 +61,13 @@ class spell_item_trigger_spell : public SpellScriptLoader caster->CastSpell(caster, _triggeredSpellId, true, item); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_trigger_spell_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_trigger_spell_SpellScript(_triggeredSpellId); } @@ -88,7 +88,7 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader { PrepareAuraScript(spell_item_aegis_of_preservation_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_AEGIS_HEAL)) return false; @@ -101,13 +101,13 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_item_aegis_of_preservation_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_aegis_of_preservation_AuraScript(); } @@ -130,13 +130,13 @@ class spell_item_arcane_shroud : public SpellScriptLoader amount += 2 * diff; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_arcane_shroud_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_arcane_shroud_AuraScript(); } @@ -157,7 +157,7 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader { PrepareAuraScript(spell_item_blessing_of_ancient_kings_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PROTECTION_OF_ANCIENT_KINGS)) return false; @@ -186,14 +186,14 @@ class spell_item_blessing_of_ancient_kings : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_item_blessing_of_ancient_kings_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_item_blessing_of_ancient_kings_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_blessing_of_ancient_kings_AuraScript(); } @@ -220,7 +220,7 @@ class spell_item_defibrillate : public SpellScriptLoader public: spell_item_defibrillate_SpellScript(uint8 chance, uint32 failSpell) : SpellScript(), _chance(chance), _failSpell(failSpell) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (_failSpell && !sSpellMgr->GetSpellInfo(_failSpell)) return false; @@ -237,7 +237,7 @@ class spell_item_defibrillate : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_defibrillate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_RESURRECT); } @@ -247,7 +247,7 @@ class spell_item_defibrillate : public SpellScriptLoader uint32 _failSpell; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_defibrillate_SpellScript(_chance, _failSpell); } @@ -272,7 +272,7 @@ class spell_item_desperate_defense : public SpellScriptLoader { PrepareAuraScript(spell_item_desperate_defense_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DESPERATE_RAGE)) return false; @@ -285,13 +285,13 @@ class spell_item_desperate_defense : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_item_desperate_defense_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_desperate_defense_AuraScript(); } @@ -317,12 +317,12 @@ class spell_item_deviate_fish : public SpellScriptLoader { PrepareSpellScript(spell_item_deviate_fish_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { for (uint32 spellId = SPELL_SLEEPY; spellId <= SPELL_HEALTHY_SPIRIT; ++spellId) if (!sSpellMgr->GetSpellInfo(spellId)) @@ -337,13 +337,13 @@ class spell_item_deviate_fish : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_deviate_fish_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_deviate_fish_SpellScript(); } @@ -371,18 +371,57 @@ class spell_item_echoes_of_light : public SpellScriptLoader targets.push_back(target); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_item_echoes_of_light_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_echoes_of_light_SpellScript(); } }; +// 7434 - Fate Rune of Unsurpassed Vigor +enum FateRuneOfUnsurpassedVigor +{ + SPELL_UNSURPASSED_VIGOR = 25733 +}; + +class spell_item_fate_rune_of_unsurpassed_vigor : public SpellScriptLoader +{ + public: + spell_item_fate_rune_of_unsurpassed_vigor() : SpellScriptLoader("spell_item_fate_rune_of_unsurpassed_vigor") { } + + class spell_item_fate_rune_of_unsurpassed_vigor_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_fate_rune_of_unsurpassed_vigor_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_UNSURPASSED_VIGOR)) + return false; + return true; + } + + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + { + GetTarget()->CastSpell(GetTarget(), SPELL_UNSURPASSED_VIGOR, true); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_item_fate_rune_of_unsurpassed_vigor_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_item_fate_rune_of_unsurpassed_vigor_AuraScript(); + } +}; + // http://www.wowhead.com/item=47499 Flask of the North // 67019 Flask of the North enum FlaskOfTheNorthSpells @@ -401,7 +440,7 @@ class spell_item_flask_of_the_north : public SpellScriptLoader { PrepareSpellScript(spell_item_flask_of_the_north_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_SP) || !sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_AP) || !sSpellMgr->GetSpellInfo(SPELL_FLASK_OF_THE_NORTH_STR)) return false; @@ -441,13 +480,13 @@ class spell_item_flask_of_the_north : public SpellScriptLoader caster->CastSpell(caster, possibleSpells[irand(0, (possibleSpells.size() - 1))], true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_flask_of_the_north_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_flask_of_the_north_SpellScript(); } @@ -470,7 +509,7 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader { PrepareSpellScript(spell_item_gnomish_death_ray_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_GNOMISH_DEATH_RAY_SELF) || !sSpellMgr->GetSpellInfo(SPELL_GNOMISH_DEATH_RAY_TARGET)) return false; @@ -489,13 +528,13 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_gnomish_death_ray_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_gnomish_death_ray_SpellScript(); } @@ -521,12 +560,12 @@ class spell_item_make_a_wish : public SpellScriptLoader { PrepareSpellScript(spell_item_make_a_wish_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MR_PINCHYS_BLESSING) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_MIGHTY_MR_PINCHY) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_FURIOUS_MR_PINCHY) || !sSpellMgr->GetSpellInfo(SPELL_TINY_MAGICAL_CRAWDAD) || !sSpellMgr->GetSpellInfo(SPELL_MR_PINCHYS_GIFT)) return false; @@ -547,13 +586,13 @@ class spell_item_make_a_wish : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_make_a_wish_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_make_a_wish_SpellScript(); } @@ -603,13 +642,13 @@ class spell_item_mingos_fortune_generator : public SpellScriptLoader CreateItem(effIndex, newitemid); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_mingos_fortune_generator_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_mingos_fortune_generator_SpellScript(); } @@ -630,7 +669,7 @@ class spell_item_necrotic_touch : public SpellScriptLoader { PrepareAuraScript(spell_item_necrotic_touch_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ITEM_NECROTIC_TOUCH_PROC)) return false; @@ -649,14 +688,14 @@ class spell_item_necrotic_touch : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_item_necrotic_touch_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_item_necrotic_touch_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_necrotic_touch_AuraScript(); } @@ -680,7 +719,7 @@ class spell_item_net_o_matic : public SpellScriptLoader { PrepareSpellScript(spell_item_net_o_matic_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_NET_O_MATIC_TRIGGERED3)) return false; @@ -702,13 +741,13 @@ class spell_item_net_o_matic : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_net_o_matic_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_net_o_matic_SpellScript(); } @@ -732,12 +771,12 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader { PrepareSpellScript(spell_item_noggenfogger_elixir_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_NOGGENFOGGER_ELIXIR_TRIGGERED3)) return false; @@ -757,13 +796,13 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_noggenfogger_elixir_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_noggenfogger_elixir_SpellScript(); } @@ -786,13 +825,13 @@ class spell_item_piccolo_of_the_flaming_fire : public SpellScriptLoader target->HandleEmoteCommand(EMOTE_STATE_DANCE); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_piccolo_of_the_flaming_fire_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_piccolo_of_the_flaming_fire_SpellScript(); } @@ -817,12 +856,12 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader { PrepareSpellScript(spell_item_savory_deviate_delight_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { for (uint32 spellId = SPELL_FLIP_OUT_MALE; spellId <= SPELL_YAAARRRR_FEMALE; ++spellId) if (!sSpellMgr->GetSpellInfo(spellId)) @@ -844,13 +883,13 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_savory_deviate_delight_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_savory_deviate_delight_SpellScript(); } @@ -878,7 +917,7 @@ class spell_item_scroll_of_recall : public SpellScriptLoader { PrepareSpellScript(spell_item_scroll_of_recall_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -917,13 +956,13 @@ class spell_item_scroll_of_recall : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_scroll_of_recall_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_scroll_of_recall_SpellScript(); } @@ -958,13 +997,13 @@ class spell_item_unsated_craving : public SpellScriptLoader return true; } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_item_unsated_craving_AuraScript::CheckProc); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_unsated_craving_AuraScript(); } @@ -989,13 +1028,13 @@ class spell_item_shadows_fate : public SpellScriptLoader caster->CastSpell(target, SPELL_SOUL_FEAST, TRIGGERED_FULL_MASK); } - void Register() OVERRIDE + void Register() override { OnProc += AuraProcFn(spell_item_shadows_fate_AuraScript::HandleProc); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_shadows_fate_AuraScript(); } @@ -1020,7 +1059,7 @@ class spell_item_shadowmourne : public SpellScriptLoader { PrepareAuraScript(spell_item_shadowmourne_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE)) return false; @@ -1054,14 +1093,14 @@ class spell_item_shadowmourne : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_item_shadowmourne_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_item_shadowmourne_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_shadowmourne_AuraScript(); } @@ -1077,7 +1116,7 @@ class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader { PrepareAuraScript(spell_item_shadowmourne_soul_fragment_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) return false; @@ -1112,14 +1151,14 @@ class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY)); AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_shadowmourne_soul_fragment_AuraScript(); } @@ -1146,7 +1185,7 @@ class spell_item_six_demon_bag : public SpellScriptLoader { PrepareSpellScript(spell_item_six_demon_bag_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FROSTBOLT) || !sSpellMgr->GetSpellInfo(SPELL_POLYMORPH) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_FELHOUND_MINION) || !sSpellMgr->GetSpellInfo(SPELL_FIREBALL) || !sSpellMgr->GetSpellInfo(SPELL_CHAIN_LIGHTNING) || !sSpellMgr->GetSpellInfo(SPELL_ENVELOPING_WINDS)) return false; @@ -1184,13 +1223,13 @@ class spell_item_six_demon_bag : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_six_demon_bag_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_six_demon_bag_SpellScript(); } @@ -1213,13 +1252,13 @@ class spell_item_the_eye_of_diminution : public SpellScriptLoader amount += diff; } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_the_eye_of_diminution_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_item_the_eye_of_diminution_AuraScript(); } @@ -1243,11 +1282,11 @@ class spell_item_underbelly_elixir : public SpellScriptLoader { PrepareSpellScript(spell_item_underbelly_elixir_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED1) || !sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED2) || !sSpellMgr->GetSpellInfo(SPELL_UNDERBELLY_ELIXIR_TRIGGERED3)) return false; @@ -1266,13 +1305,13 @@ class spell_item_underbelly_elixir : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_underbelly_elixir_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_underbelly_elixir_SpellScript(); } @@ -1294,7 +1333,7 @@ class spell_item_red_rider_air_rifle : public SpellScriptLoader { PrepareSpellScript(spell_item_red_rider_air_rifle_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_HOLD_VISUAL) || !sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_SHOOT) || !sSpellMgr->GetSpellInfo(SPELL_AIR_RIFLE_SHOOT_SELF)) return false; @@ -1318,13 +1357,13 @@ class spell_item_red_rider_air_rifle : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_red_rider_air_rifle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_red_rider_air_rifle_SpellScript(); } @@ -1369,13 +1408,13 @@ class spell_item_create_heart_candy : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_create_heart_candy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_create_heart_candy_SpellScript(); } @@ -1390,7 +1429,7 @@ class spell_item_book_of_glyph_mastery : public SpellScriptLoader { PrepareSpellScript(spell_item_book_of_glyph_mastery_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -1416,14 +1455,14 @@ class spell_item_book_of_glyph_mastery : public SpellScriptLoader caster->learnSpell(discoveredSpellId, false); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_item_book_of_glyph_mastery_SpellScript::CheckRequirement); OnEffectHitTarget += SpellEffectFn(spell_item_book_of_glyph_mastery_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_book_of_glyph_mastery_SpellScript(); } @@ -1457,13 +1496,13 @@ class spell_item_gift_of_the_harvester : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_item_gift_of_the_harvester_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_gift_of_the_harvester_SpellScript(); } @@ -1497,13 +1536,13 @@ class spell_item_map_of_the_geyser_fields : public SpellScriptLoader return SPELL_FAILED_CUSTOM_ERROR; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_item_map_of_the_geyser_fields_SpellScript::CheckSinkholes); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_map_of_the_geyser_fields_SpellScript(); } @@ -1525,7 +1564,7 @@ class spell_item_vanquished_clutches : public SpellScriptLoader { PrepareSpellScript(spell_item_vanquished_clutches_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CRUSHER) || !sSpellMgr->GetSpellInfo(SPELL_CONSTRICTOR) || !sSpellMgr->GetSpellInfo(SPELL_CORRUPTOR)) return false; @@ -1539,13 +1578,13 @@ class spell_item_vanquished_clutches : public SpellScriptLoader caster->CastSpell(caster, spellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_vanquished_clutches_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_vanquished_clutches_SpellScript(); } @@ -1576,7 +1615,7 @@ class spell_item_ashbringer : public SpellScriptLoader { PrepareSpellScript(spell_item_ashbringer_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -1594,13 +1633,13 @@ class spell_item_ashbringer : public SpellScriptLoader player->PlayDirectSound(sound_id, player); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_item_ashbringer_SpellScript::OnDummyEffect, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_ashbringer_SpellScript(); } @@ -1652,13 +1691,13 @@ class spell_magic_eater_food : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_magic_eater_food_AuraScript::HandleTriggerSpell, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_magic_eater_food_AuraScript(); } @@ -1679,13 +1718,13 @@ class spell_item_shimmering_vessel : public SpellScriptLoader target->setDeathState(JUST_RESPAWNED); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_shimmering_vessel_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_shimmering_vessel_SpellScript(); } @@ -1706,12 +1745,12 @@ class spell_item_purify_helboar_meat : public SpellScriptLoader { PrepareSpellScript(spell_item_purify_helboar_meat_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_PURIFIED_HELBOAR_MEAT) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_TOXIC_HELBOAR_MEAT)) return false; @@ -1724,13 +1763,13 @@ class spell_item_purify_helboar_meat : public SpellScriptLoader caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_purify_helboar_meat_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_purify_helboar_meat_SpellScript(); } @@ -1750,7 +1789,7 @@ class spell_item_crystal_prison_dummy_dnd : public SpellScriptLoader { PrepareSpellScript(spell_item_crystal_prison_dummy_dnd_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sObjectMgr->GetGameObjectTemplate(OBJECT_IMPRISONED_DOOMGUARD)) return false; @@ -1767,13 +1806,13 @@ class spell_item_crystal_prison_dummy_dnd : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_crystal_prison_dummy_dnd_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_crystal_prison_dummy_dnd_SpellScript(); } @@ -1797,7 +1836,7 @@ class spell_item_reindeer_transformation : public SpellScriptLoader { PrepareSpellScript(spell_item_reindeer_transformation_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_310) || !sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_280) || !sSpellMgr->GetSpellInfo(SPELL_FLYING_REINDEER_60) || !sSpellMgr->GetSpellInfo(SPELL_REINDEER_100) @@ -1835,13 +1874,13 @@ class spell_item_reindeer_transformation : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_reindeer_transformation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_reindeer_transformation_SpellScript(); } @@ -1862,7 +1901,7 @@ class spell_item_nigh_invulnerability : public SpellScriptLoader { PrepareSpellScript(spell_item_nigh_invulnerability_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NIGH_INVULNERABILITY) || !sSpellMgr->GetSpellInfo(SPELL_COMPLETE_VULNERABILITY)) return false; @@ -1881,13 +1920,13 @@ class spell_item_nigh_invulnerability : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_nigh_invulnerability_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_nigh_invulnerability_SpellScript(); } @@ -1908,7 +1947,7 @@ class spell_item_poultryizer : public SpellScriptLoader { PrepareSpellScript(spell_item_poultryizer_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_POULTRYIZER_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_POULTRYIZER_BACKFIRE)) return false; @@ -1921,13 +1960,13 @@ class spell_item_poultryizer : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), roll_chance_i(80) ? SPELL_POULTRYIZER_SUCCESS : SPELL_POULTRYIZER_BACKFIRE, true, GetCastItem()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_poultryizer_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_poultryizer_SpellScript(); } @@ -1948,11 +1987,11 @@ class spell_item_socrethars_stone : public SpellScriptLoader { PrepareSpellScript(spell_item_socrethars_stone_SpellScript); - bool Load() OVERRIDE + bool Load() override { return (GetCaster()->GetAreaId() == 3900 || GetCaster()->GetAreaId() == 3742); } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SOCRETHAR_TO_SEAT) || !sSpellMgr->GetSpellInfo(SPELL_SOCRETHAR_FROM_SEAT)) return false; @@ -1975,13 +2014,13 @@ class spell_item_socrethars_stone : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_socrethars_stone_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_socrethars_stone_SpellScript(); } @@ -2003,14 +2042,14 @@ class spell_item_demon_broiled_surprise : public SpellScriptLoader { PrepareSpellScript(spell_item_demon_broiled_surprise_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_DEMON_BROILED_SURPRISE) || !sObjectMgr->GetCreatureTemplate(NPC_ABYSSAL_FLAMEBRINGER) || !sObjectMgr->GetQuestTemplate(QUEST_SUPER_HOT_STEW)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -2033,14 +2072,14 @@ class spell_item_demon_broiled_surprise : public SpellScriptLoader return SPELL_FAILED_NOT_HERE; } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_demon_broiled_surprise_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_item_demon_broiled_surprise_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_demon_broiled_surprise_SpellScript(); } @@ -2060,7 +2099,7 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader { PrepareSpellScript(spell_item_complete_raptor_capture_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RAPTOR_CAPTURE_CREDIT)) return false; @@ -2079,13 +2118,13 @@ class spell_item_complete_raptor_capture : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_complete_raptor_capture_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_complete_raptor_capture_SpellScript(); } @@ -2106,7 +2145,7 @@ class spell_item_impale_leviroth : public SpellScriptLoader { PrepareSpellScript(spell_item_impale_leviroth_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sObjectMgr->GetCreatureTemplate(NPC_LEVIROTH)) return false; @@ -2120,13 +2159,13 @@ class spell_item_impale_leviroth : public SpellScriptLoader target->CastSpell(target, SPELL_LEVIROTH_SELF_IMPALE, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_impale_leviroth_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_impale_leviroth_SpellScript(); } @@ -2151,7 +2190,7 @@ class spell_item_brewfest_mount_transformation : public SpellScriptLoader { PrepareSpellScript(spell_item_brewfest_mount_transformation_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MOUNT_RAM_100) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_RAM_60) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_KODO_100) || !sSpellMgr->GetSpellInfo(SPELL_MOUNT_KODO_60)) return false; @@ -2187,13 +2226,13 @@ class spell_item_brewfest_mount_transformation : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_brewfest_mount_transformation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_brewfest_mount_transformation_SpellScript(); } @@ -2214,14 +2253,14 @@ class spell_item_nitro_boots : public SpellScriptLoader { PrepareSpellScript(spell_item_nitro_boots_SpellScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCastItem()) return false; return true; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_NITRO_BOOTS_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_NITRO_BOOTS_BACKFIRE)) return false; @@ -2231,16 +2270,17 @@ class spell_item_nitro_boots : public SpellScriptLoader void HandleDummy(SpellEffIndex /* effIndex */) { Unit* caster = GetCaster(); - caster->CastSpell(caster, roll_chance_i(95) ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem()); + bool success = caster->GetMap()->IsDungeon() || roll_chance_i(95); + caster->CastSpell(caster, success ? SPELL_NITRO_BOOTS_SUCCESS : SPELL_NITRO_BOOTS_BACKFIRE, true, GetCastItem()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_nitro_boots_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_nitro_boots_SpellScript(); } @@ -2261,12 +2301,12 @@ class spell_item_teach_language : public SpellScriptLoader { PrepareSpellScript(spell_item_teach_language_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_LEARN_GNOMISH_BINARY) || !sSpellMgr->GetSpellInfo(SPELL_LEARN_GOBLIN_BINARY)) return false; @@ -2281,13 +2321,13 @@ class spell_item_teach_language : public SpellScriptLoader caster->CastSpell(caster, caster->GetTeam() == ALLIANCE ? SPELL_LEARN_GNOMISH_BINARY : SPELL_LEARN_GOBLIN_BINARY, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_teach_language_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_teach_language_SpellScript(); } @@ -2307,12 +2347,12 @@ class spell_item_rocket_boots : public SpellScriptLoader { PrepareSpellScript(spell_item_rocket_boots_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROCKET_BOOTS_PROC)) return false; @@ -2336,14 +2376,14 @@ class spell_item_rocket_boots : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_item_rocket_boots_SpellScript::CheckCast); OnEffectHitTarget += SpellEffectFn(spell_item_rocket_boots_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_rocket_boots_SpellScript(); } @@ -2364,7 +2404,7 @@ class spell_item_pygmy_oil : public SpellScriptLoader { PrepareSpellScript(spell_item_pygmy_oil_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PYGMY_OIL_PYGMY_AURA) || !sSpellMgr->GetSpellInfo(SPELL_PYGMY_OIL_SMALLER_AURA)) return false; @@ -2389,13 +2429,13 @@ class spell_item_pygmy_oil : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_pygmy_oil_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_pygmy_oil_SpellScript(); } @@ -2416,13 +2456,13 @@ class spell_item_unusual_compass : public SpellScriptLoader caster->SetFacingTo(frand(0.0f, 2.0f * M_PI)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_unusual_compass_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_unusual_compass_SpellScript(); } @@ -2445,12 +2485,12 @@ class spell_item_chicken_cover : public SpellScriptLoader { PrepareSpellScript(spell_item_chicken_cover_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CHICKEN_NET) || !sSpellMgr->GetSpellInfo(SPELL_CAPTURE_CHICKEN_ESCAPE) || !sObjectMgr->GetQuestTemplate(QUEST_CHICKEN_PARTY) || !sObjectMgr->GetQuestTemplate(QUEST_FLOWN_THE_COOP)) return false; @@ -2470,13 +2510,13 @@ class spell_item_chicken_cover : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_chicken_cover_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_chicken_cover_SpellScript(); } @@ -2515,13 +2555,13 @@ class spell_item_refocus : public SpellScriptLoader caster->RemoveSpellCooldown(SPELL_VOLLEY, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_refocus_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_refocus_SpellScript(); } @@ -2543,13 +2583,13 @@ class spell_item_muisek_vessel : public SpellScriptLoader target->DespawnOrUnsummon(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_muisek_vessel_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_muisek_vessel_SpellScript(); } @@ -2574,13 +2614,13 @@ public: GetCaster()->CastSpell(GetCaster(), SPELL_FORCE_CAST_SUMMON_GNOME_SOUL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_item_greatmothers_soulcatcher_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_item_greatmothers_soulcatcher_SpellScript(); } @@ -2606,6 +2646,7 @@ void AddSC_item_spell_scripts() new spell_item_desperate_defense(); new spell_item_deviate_fish(); new spell_item_echoes_of_light(); + new spell_item_fate_rune_of_unsurpassed_vigor(); new spell_item_flask_of_the_north(); new spell_item_gnomish_death_ray(); new spell_item_make_a_wish(); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index ba59f701445..edb9cd04b44 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -53,7 +53,7 @@ enum MageSpells class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript { public: - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED)) return false; @@ -84,7 +84,7 @@ class spell_mage_blast_wave : public SpellScriptLoader { PrepareSpellScript(spell_mage_blast_wave_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_BLAST_WAVE)) return false; @@ -97,13 +97,13 @@ class spell_mage_blast_wave : public SpellScriptLoader PreventHitDefaultEffect(effIndex); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_mage_blast_wave_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mage_blast_wave_SpellScript(); } @@ -119,7 +119,7 @@ class spell_mage_burnout : public SpellScriptLoader { PrepareAuraScript(spell_mage_burnout_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_BURNOUT)) return false; @@ -141,14 +141,14 @@ class spell_mage_burnout : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_MAGE_BURNOUT, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_mage_burnout_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_mage_burnout_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_burnout_AuraScript(); } @@ -164,7 +164,7 @@ class spell_mage_cold_snap : public SpellScriptLoader { PrepareSpellScript(spell_mage_cold_snap_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -176,7 +176,7 @@ class spell_mage_cold_snap : public SpellScriptLoader const SpellCooldowns& cm = caster->GetSpellCooldownMap(); for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); if (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && @@ -189,13 +189,13 @@ class spell_mage_cold_snap : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mage_cold_snap_SpellScript(); } @@ -212,7 +212,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader { PrepareAuraScript(spell_mage_fire_frost_ward_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED)) return false; @@ -254,7 +254,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_fire_frost_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Absorb, EFFECT_0); @@ -262,7 +262,7 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_fire_frost_ward_AuraScript(); } @@ -278,14 +278,14 @@ class spell_mage_focus_magic : public SpellScriptLoader { PrepareAuraScript(spell_mage_focus_magic_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FOCUS_MAGIC_PROC)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -303,7 +303,7 @@ class spell_mage_focus_magic : public SpellScriptLoader GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); @@ -313,7 +313,7 @@ class spell_mage_focus_magic : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_focus_magic_AuraScript(); } @@ -349,14 +349,14 @@ class spell_mage_ice_barrier : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier_AuraScript::Trigger, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_ice_barrier_AuraScript(); } @@ -372,7 +372,7 @@ class spell_mage_ignite : public SpellScriptLoader { PrepareAuraScript(spell_mage_ignite_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE)) return false; @@ -388,7 +388,7 @@ class spell_mage_ignite : public SpellScriptLoader { PreventDefaultAction(); - SpellInfo const* igniteDot = sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE); + SpellInfo const* igniteDot = sSpellMgr->EnsureSpellInfo(SPELL_MAGE_IGNITE); int32 pct = 8 * GetSpellInfo()->GetRank(); int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks()); @@ -396,14 +396,14 @@ class spell_mage_ignite : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_ignite_AuraScript(); } @@ -419,7 +419,7 @@ class spell_mage_living_bomb : public SpellScriptLoader { PrepareAuraScript(spell_mage_living_bomb_AuraScript); - bool Validate(SpellInfo const* spell) OVERRIDE + bool Validate(SpellInfo const* spell) override { if (!sSpellMgr->GetSpellInfo(uint32(spell->Effects[EFFECT_1].CalcValue()))) return false; @@ -436,13 +436,13 @@ class spell_mage_living_bomb : public SpellScriptLoader caster->CastSpell(GetTarget(), uint32(aurEff->GetAmount()), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_mage_living_bomb_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_living_bomb_AuraScript(); } @@ -473,14 +473,14 @@ class spell_mage_mana_shield : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_mana_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MANA_SHIELD); AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_mana_shield_AuraScript::Trigger, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_mana_shield_AuraScript(); } @@ -496,7 +496,7 @@ class spell_mage_master_of_elements : public SpellScriptLoader { PrepareAuraScript(spell_mage_master_of_elements_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE)) return false; @@ -519,14 +519,14 @@ class spell_mage_master_of_elements : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_mage_master_of_elements_AuraScript(); } @@ -550,7 +550,7 @@ class spell_mage_polymorph_cast_visual : public SpellScriptLoader static const uint32 PolymorhForms[6]; - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { // check if spell ids exist in dbc for (uint32 i = 0; i < 6; ++i) @@ -566,13 +566,13 @@ class spell_mage_polymorph_cast_visual : public SpellScriptLoader target->CastSpell(target, PolymorhForms[urand(0, 5)], true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mage_polymorph_cast_visual_SpellScript(); } @@ -598,7 +598,7 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader { PrepareSpellScript(spell_mage_summon_water_elemental_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT)) return false; @@ -615,13 +615,13 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader caster->CastSpell(caster, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mage_summon_water_elemental_SpellScript(); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index b5265561d85..447cb645e76 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -66,6 +66,9 @@ enum PaladinSpells SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790, + SPELL_PALADIN_SANCTIFIED_WRATH = 57318, + SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1 = 53375, + SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS = 25742, SPELL_PALADIN_CONCENTRACTION_AURA = 19746, @@ -103,7 +106,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader PAL_SPELL_ARDENT_DEFENDER_HEAL = 66235, }; - bool Load() OVERRIDE + bool Load() override { healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); @@ -149,14 +152,14 @@ class spell_pal_ardent_defender : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_ardent_defender_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_pal_ardent_defender_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_ardent_defender_AuraScript(); } @@ -172,7 +175,7 @@ class spell_pal_aura_mastery : public SpellScriptLoader { PrepareAuraScript(spell_pal_aura_mastery_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_AURA_MASTERY_IMMUNE)) return false; @@ -189,14 +192,14 @@ class spell_pal_aura_mastery : public SpellScriptLoader GetTarget()->RemoveOwnedAura(SPELL_PALADIN_AURA_MASTERY_IMMUNE, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_pal_aura_mastery_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_pal_aura_mastery_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_aura_mastery_AuraScript(); } @@ -212,7 +215,7 @@ class spell_pal_aura_mastery_immune : public SpellScriptLoader { PrepareAuraScript(spell_pal_aura_mastery_immune_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_CONCENTRACTION_AURA)) return false; @@ -224,18 +227,64 @@ class spell_pal_aura_mastery_immune : public SpellScriptLoader return target->HasAura(SPELL_PALADIN_CONCENTRACTION_AURA, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_pal_aura_mastery_immune_AuraScript::CheckAreaTarget); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_aura_mastery_immune_AuraScript(); } }; +// 31884 - Avenging Wrath +class spell_pal_avenging_wrath : public SpellScriptLoader +{ + public: + spell_pal_avenging_wrath() : SpellScriptLoader("spell_pal_avenging_wrath") { } + + class spell_pal_avenging_wrath_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_avenging_wrath_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_WRATH) + || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1)) + return false; + return true; + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_PALADIN_SANCTIFIED_WRATH_TALENT_R1, EFFECT_2)) + { + int32 basepoints = aurEff->GetAmount(); + target->CastCustomSpell(target, SPELL_PALADIN_SANCTIFIED_WRATH, &basepoints, &basepoints, NULL, true, NULL, aurEff); + } + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_PALADIN_SANCTIFIED_WRATH); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_pal_avenging_wrath_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_pal_avenging_wrath_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_pal_avenging_wrath_AuraScript(); + } +}; + // 37877 - Blessing of Faith class spell_pal_blessing_of_faith : public SpellScriptLoader { @@ -246,7 +295,7 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader { PrepareSpellScript(spell_pal_blessing_of_faith_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_DRUID) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PALADIN) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_PRIEST) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_LOWER_CITY_SHAMAN)) return false; @@ -280,13 +329,13 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pal_blessing_of_faith_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_blessing_of_faith_SpellScript(); } @@ -303,7 +352,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader { PrepareAuraScript(spell_pal_blessing_of_sanctuary_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF)) return false; @@ -336,7 +385,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); AfterEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -345,7 +394,7 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_blessing_of_sanctuary_AuraScript(); } @@ -364,7 +413,7 @@ class spell_pal_divine_sacrifice : public SpellScriptLoader uint32 groupSize, minHpPct; int32 remainingAmount; - bool Load() OVERRIDE + bool Load() override { if (Unit* caster = GetCaster()) { @@ -394,13 +443,13 @@ class spell_pal_divine_sacrifice : public SpellScriptLoader caster->RemoveAura(SPELL_PALADIN_DIVINE_SACRIFICE); } - void Register() OVERRIDE + void Register() override { OnEffectSplit += AuraEffectSplitFn(spell_pal_divine_sacrifice_AuraScript::Split, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_divine_sacrifice_AuraScript(); } @@ -418,14 +467,14 @@ class spell_pal_divine_storm : public SpellScriptLoader uint32 healPct; - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_DUMMY)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(GetCaster()); return true; @@ -437,13 +486,13 @@ class spell_pal_divine_storm : public SpellScriptLoader caster->CastCustomSpell(SPELL_PALADIN_DIVINE_STORM_DUMMY, SPELLVALUE_BASE_POINT0, (GetHitDamage() * healPct) / 100, caster, true); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_pal_divine_storm_SpellScript::TriggerHeal); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_divine_storm_SpellScript(); } @@ -459,7 +508,7 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader { PrepareSpellScript(spell_pal_divine_storm_dummy_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_STORM_HEAL)) return false; @@ -482,14 +531,14 @@ class spell_pal_divine_storm_dummy : public SpellScriptLoader private: uint32 _targetCount; - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pal_divine_storm_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pal_divine_storm_dummy_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_divine_storm_dummy_SpellScript(); } @@ -519,13 +568,13 @@ class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader spellMod->value = aurEff->GetAmount(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_pal_exorcism_and_holy_wrath_damage_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_exorcism_and_holy_wrath_damage_AuraScript(); } @@ -541,7 +590,7 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader { PrepareAuraScript(spell_pal_eye_for_an_eye_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE)) return false; @@ -556,13 +605,13 @@ class spell_pal_eye_for_an_eye : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_pal_eye_for_an_eye_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_eye_for_an_eye_AuraScript(); } @@ -589,13 +638,13 @@ class spell_pal_glyph_of_holy_light : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pal_glyph_of_holy_light_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_glyph_of_holy_light_SpellScript(); } @@ -611,7 +660,7 @@ class spell_pal_guarded_by_the_light : public SpellScriptLoader { PrepareSpellScript(spell_pal_guarded_by_the_light_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_DIVINE_PLEA)) return false; @@ -625,13 +674,13 @@ class spell_pal_guarded_by_the_light : public SpellScriptLoader aura->RefreshDuration(); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pal_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_guarded_by_the_light_SpellScript(); } @@ -649,7 +698,7 @@ class spell_pal_hand_of_sacrifice : public SpellScriptLoader int32 remainingAmount; - bool Load() OVERRIDE + bool Load() override { if (Unit* caster = GetCaster()) { @@ -669,13 +718,13 @@ class spell_pal_hand_of_sacrifice : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectSplit += AuraEffectSplitFn(spell_pal_hand_of_sacrifice_AuraScript::Split, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_hand_of_sacrifice_AuraScript(); } @@ -702,13 +751,13 @@ class spell_pal_hand_of_salvation : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_hand_of_salvation_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_hand_of_salvation_AuraScript(); } @@ -724,7 +773,7 @@ class spell_pal_holy_shock : public SpellScriptLoader { PrepareSpellScript(spell_pal_holy_shock_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PALADIN_HOLY_SHOCK_R1); if (!firstRankSpellInfo) @@ -773,14 +822,14 @@ class spell_pal_holy_shock : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_pal_holy_shock_SpellScript::CheckCast); OnEffectHitTarget += SpellEffectFn(spell_pal_holy_shock_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_holy_shock_SpellScript(); } @@ -805,7 +854,7 @@ class spell_pal_improved_aura : public SpellScriptLoader public: spell_pal_improved_aura_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(_spellId) || !sSpellMgr->GetSpellInfo(SPELL_PALADIN_SANCTIFIED_RETRIBUTION_R1) @@ -817,8 +866,8 @@ class spell_pal_improved_aura : public SpellScriptLoader void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - if (!target->GetOwnedAura(_spellId)) - target->CastSpell(target, _spellId, true); + GetTarget()->RemoveOwnedAura(_spellId, GetCasterGUID()); // need to remove to reapply spellmods + target->CastSpell(target, _spellId, true); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -832,7 +881,7 @@ class spell_pal_improved_aura : public SpellScriptLoader GetTarget()->RemoveOwnedAura(_spellId, GetCasterGUID()); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_pal_improved_aura_AuraScript::HandleEffectApply, EFFECT_FIRST_FOUND, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_pal_improved_aura_AuraScript::HandleEffectRemove, EFFECT_FIRST_FOUND, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL); @@ -842,7 +891,7 @@ class spell_pal_improved_aura : public SpellScriptLoader uint32 _spellId; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_improved_aura_AuraScript(_spellId); } @@ -881,13 +930,13 @@ class spell_pal_improved_aura_effect : public SpellScriptLoader return false; } - void Register() OVERRIDE + void Register() override { DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_pal_improved_aura_effect_AuraScript::CheckAreaTarget); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_improved_aura_effect_AuraScript(); } @@ -903,7 +952,7 @@ class spell_pal_item_healing_discount : public SpellScriptLoader { PrepareAuraScript(spell_pal_item_healing_discount_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_ITEM_HEALING_TRANCE)) return false; @@ -916,13 +965,13 @@ class spell_pal_item_healing_discount : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_pal_item_healing_discount_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_item_healing_discount_AuraScript(); } @@ -943,7 +992,7 @@ class spell_pal_judgement : public SpellScriptLoader public: spell_pal_judgement_SpellScript(uint32 spellId) : SpellScript(), _spellId(spellId) { } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_JUDGEMENT_DAMAGE) || !sSpellMgr->GetSpellInfo(_spellId)) @@ -971,7 +1020,7 @@ class spell_pal_judgement : public SpellScriptLoader GetCaster()->CastSpell(GetHitUnit(), spellId2, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } @@ -980,7 +1029,7 @@ class spell_pal_judgement : public SpellScriptLoader uint32 const _spellId; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_judgement_SpellScript(_spellId); } @@ -1006,13 +1055,13 @@ class spell_pal_judgement_of_command : public SpellScriptLoader GetCaster()->CastSpell(unitTarget, spell_proto, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pal_judgement_of_command_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_judgement_of_command_SpellScript(); } @@ -1028,7 +1077,7 @@ class spell_pal_lay_on_hands : public SpellScriptLoader { PrepareSpellScript(spell_pal_lay_on_hands_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_FORBEARANCE)) return false; @@ -1061,14 +1110,14 @@ class spell_pal_lay_on_hands : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_pal_lay_on_hands_SpellScript::CheckCast); AfterHit += SpellHitFn(spell_pal_lay_on_hands_SpellScript::HandleScript); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_lay_on_hands_SpellScript(); } @@ -1084,7 +1133,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader { PrepareSpellScript(spell_pal_righteous_defense_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT)) return false; @@ -1120,7 +1169,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader GetCaster()->CastSpell(target, SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT, true); } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast); //! WORKAROUND @@ -1132,7 +1181,7 @@ class spell_pal_righteous_defense : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pal_righteous_defense_SpellScript(); } @@ -1170,13 +1219,13 @@ class spell_pal_sacred_shield : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_sacred_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_sacred_shield_AuraScript(); } @@ -1192,7 +1241,7 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader { PrepareAuraScript(spell_pal_seal_of_righteousness_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS)) return false; @@ -1215,14 +1264,14 @@ class spell_pal_seal_of_righteousness : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_pal_seal_of_righteousness_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_pal_seal_of_righteousness_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pal_seal_of_righteousness_AuraScript(); } @@ -1233,6 +1282,7 @@ void AddSC_paladin_spell_scripts() new spell_pal_ardent_defender(); new spell_pal_aura_mastery(); new spell_pal_aura_mastery_immune(); + new spell_pal_avenging_wrath(); new spell_pal_blessing_of_faith(); new spell_pal_blessing_of_sanctuary(); new spell_pal_divine_sacrifice(); diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp index a7742630ccd..775f9f505f9 100644 --- a/src/server/scripts/Spells/spell_pet.cpp +++ b/src/server/scripts/Spells/spell_pet.cpp @@ -95,7 +95,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader { PrepareAuraScript(spell_gen_pet_calculate_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -185,7 +185,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { switch (m_scriptSpellId) { @@ -214,7 +214,7 @@ class spell_gen_pet_calculate : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_gen_pet_calculate_AuraScript(); } @@ -229,7 +229,7 @@ public: { PrepareAuraScript(spell_warl_pet_scaling_01_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -338,7 +338,7 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_warl_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectApply += AuraEffectApplyFn(spell_warl_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); @@ -351,7 +351,7 @@ public: uint32 _tempBonus; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_scaling_01_AuraScript(); } @@ -366,7 +366,7 @@ public: { PrepareAuraScript(spell_warl_pet_scaling_02_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -451,7 +451,7 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_warl_pet_scaling_02_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectApply += AuraEffectApplyFn(spell_warl_pet_scaling_02_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); @@ -464,7 +464,7 @@ public: uint32 _tempBonus; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_scaling_02_AuraScript(); } @@ -479,7 +479,7 @@ public: { PrepareAuraScript(spell_warl_pet_scaling_03_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -522,7 +522,7 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateFrostResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE); @@ -530,7 +530,7 @@ public: } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_scaling_03_AuraScript(); } @@ -546,7 +546,7 @@ public: { PrepareAuraScript(spell_warl_pet_scaling_04_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -565,13 +565,13 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_04_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_scaling_04_AuraScript(); } @@ -586,7 +586,7 @@ public: { PrepareAuraScript(spell_warl_pet_scaling_05_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -638,7 +638,7 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE); @@ -646,7 +646,7 @@ public: } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_scaling_05_AuraScript(); } @@ -661,7 +661,7 @@ public: { PrepareAuraScript(spell_warl_pet_passive_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -712,14 +712,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritSpell, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritMelee, EFFECT_1, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_passive_AuraScript(); } @@ -734,7 +734,7 @@ public: { PrepareAuraScript(spell_warl_pet_passive_damage_done_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -763,14 +763,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_passive_damage_done_AuraScript(); } @@ -785,7 +785,7 @@ public: { PrepareAuraScript(spell_warl_pet_passive_voidwalker_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -801,13 +801,13 @@ public: amount += /* aurEff */ect->GetAmount(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_voidwalker_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_pet_passive_voidwalker_AuraScript(); } @@ -823,7 +823,7 @@ public: { PrepareAuraScript(spell_sha_pet_scaling_04_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -860,14 +860,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_pet_scaling_04_AuraScript(); } @@ -897,7 +897,7 @@ public: if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value AddPct(mod, spellInfo->Effects[EFFECT_0].CalcValue()); } @@ -940,7 +940,7 @@ public: if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value mod += CalculatePct(1.0f, spellInfo->Effects[EFFECT_1].CalcValue()); } @@ -970,7 +970,7 @@ public: if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value mod += CalculatePct(1.0f, spellInfo->Effects[EFFECT_1].CalcValue()); } @@ -980,7 +980,7 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_hun_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectApply += AuraEffectApplyFn(spell_hun_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); @@ -993,7 +993,7 @@ public: uint32 _tempHealth; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_scaling_01_AuraScript(); } @@ -1008,7 +1008,7 @@ public: { PrepareAuraScript(spell_hun_pet_scaling_02_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1072,7 +1072,7 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFrostResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFireResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE); @@ -1080,7 +1080,7 @@ public: } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_scaling_02_AuraScript(); } @@ -1095,7 +1095,7 @@ public: { PrepareAuraScript(spell_hun_pet_scaling_03_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1159,7 +1159,7 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE); @@ -1167,7 +1167,7 @@ public: } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_scaling_03_AuraScript(); } @@ -1182,7 +1182,7 @@ public: { PrepareAuraScript(spell_hun_pet_scaling_04_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1240,7 +1240,7 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE); @@ -1248,7 +1248,7 @@ public: } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_scaling_04_AuraScript(); } @@ -1263,7 +1263,7 @@ public: { PrepareAuraScript(spell_hun_pet_passive_crit_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1312,14 +1312,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritSpell, EFFECT_1, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritMelee, EFFECT_0, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_passive_crit_AuraScript(); } @@ -1334,7 +1334,7 @@ public: { PrepareAuraScript(spell_hun_pet_passive_damage_done_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1371,13 +1371,13 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_pet_passive_damage_done_AuraScript(); } @@ -1392,7 +1392,7 @@ public: { PrepareAuraScript(spell_hun_animal_handler_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1412,13 +1412,13 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_animal_handler_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_ATTACK_POWER_PCT); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_hun_animal_handler_AuraScript(); } @@ -1434,7 +1434,7 @@ public: { PrepareAuraScript(spell_dk_avoidance_passive_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1457,13 +1457,13 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_avoidance_passive_AuraScript::CalculateAvoidanceAmount, EFFECT_0, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_avoidance_passive_AuraScript(); } @@ -1478,7 +1478,7 @@ public: { PrepareAuraScript(spell_dk_pet_scaling_01_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1554,7 +1554,7 @@ public: } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_dk_pet_scaling_01_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); AfterEffectApply += AuraEffectApplyFn(spell_dk_pet_scaling_01_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); @@ -1566,7 +1566,7 @@ public: uint32 _tempHealth; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_pet_scaling_01_AuraScript(); } @@ -1581,7 +1581,7 @@ public: { PrepareAuraScript(spell_dk_pet_scaling_02_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1603,13 +1603,13 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_pet_scaling_02_AuraScript(); } @@ -1624,7 +1624,7 @@ public: { PrepareAuraScript(spell_dk_pet_scaling_03_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1665,14 +1665,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_pet_scaling_03_AuraScript(); } @@ -1687,7 +1687,7 @@ public: { PrepareAuraScript(spell_dk_rune_weapon_scaling_02_AuraScript); - bool Load() OVERRIDE + bool Load() override { if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER) return false; @@ -1724,14 +1724,14 @@ public: } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateDamageDoneAmount, EFFECT_0, SPELL_AURA_MOD_DAMAGE_DONE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_dk_rune_weapon_scaling_02_AuraScript(); } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 71e5dac28ec..76781e0fdc2 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -98,7 +98,7 @@ class spell_pri_circle_of_healing : public SpellScriptLoader { PrepareSpellScript(spell_pri_circle_of_healing_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING)) return false; @@ -118,13 +118,13 @@ class spell_pri_circle_of_healing : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_circle_of_healing_SpellScript(); } @@ -140,7 +140,7 @@ class spell_pri_divine_aegis : public SpellScriptLoader { PrepareAuraScript(spell_pri_divine_aegis_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_DIVINE_AEGIS)) return false; @@ -167,14 +167,14 @@ class spell_pri_divine_aegis : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_divine_aegis_AuraScript(); } @@ -203,13 +203,13 @@ class spell_pri_divine_hymn : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_divine_hymn_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_divine_hymn_SpellScript(); } @@ -225,7 +225,7 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader { PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL)) return false; @@ -236,18 +236,18 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader { PreventDefaultAction(); - SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); + SpellInfo const* triggeredSpellInfo = sSpellMgr->EnsureSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); int32 heal = int32(CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_glyph_of_prayer_of_healing_AuraScript(); } @@ -265,14 +265,14 @@ class spell_pri_guardian_spirit : public SpellScriptLoader uint32 healPct; - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); return true; @@ -297,14 +297,14 @@ class spell_pri_guardian_spirit : public SpellScriptLoader absorbAmount = dmgInfo.GetDamage(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_guardian_spirit_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_pri_guardian_spirit_AuraScript::Absorb, EFFECT_1); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_guardian_spirit_AuraScript(); } @@ -334,13 +334,13 @@ class spell_pri_hymn_of_hope : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_hymn_of_hope_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_hymn_of_hope_SpellScript(); } @@ -356,7 +356,7 @@ class spell_pri_item_greater_heal_refund : public SpellScriptLoader { PrepareAuraScript(spell_pri_item_greater_heal_refund_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_ITEM_EFFICIENCY)) return false; @@ -369,13 +369,13 @@ class spell_pri_item_greater_heal_refund : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_pri_item_greater_heal_refund_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_item_greater_heal_refund_AuraScript(); } @@ -401,13 +401,13 @@ class spell_pri_lightwell_renew : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_lightwell_renew_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_lightwell_renew_AuraScript(); } @@ -429,13 +429,13 @@ class spell_pri_mana_burn : public SpellScriptLoader unitTarget->RemoveAurasWithMechanic((1 << MECHANIC_FEAR) | (1 << MECHANIC_POLYMORPH)); } - void Register() OVERRIDE + void Register() override { AfterHit += SpellHitFn(spell_pri_mana_burn_SpellScript::HandleAfterHit); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_mana_burn_SpellScript; } @@ -451,14 +451,14 @@ class spell_pri_mana_leech : public SpellScriptLoader { PrepareAuraScript(spell_pri_mana_leech_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_MANA_LEECH_PROC)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -476,7 +476,7 @@ class spell_pri_mana_leech : public SpellScriptLoader GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); @@ -486,7 +486,7 @@ class spell_pri_mana_leech : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_mana_leech_AuraScript(); } @@ -507,13 +507,13 @@ class spell_pri_mind_sear : public SpellScriptLoader unitList.remove_if(Trinity::ObjectGUIDCheck(GetCaster()->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT))); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_mind_sear_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_mind_sear_SpellScript(); } @@ -531,19 +531,26 @@ class spell_pri_pain_and_suffering_proc : public SpellScriptLoader void HandleEffectScriptEffect(SpellEffIndex /*effIndex*/) { + Unit* caster = GetCaster(); // Refresh Shadow Word: Pain on target - if (Unit* unitTarget = GetHitUnit()) - if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, GetCaster()->GetGUID())) + if (Unit* target = GetHitUnit()) + if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0, 0, caster->GetGUID())) + { + uint32 damage = std::max(aur->GetAmount(), 0); + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + aur->SetDamage(caster->SpellDamageBonusDone(target, aur->GetSpellInfo(), damage, DOT) * aur->GetDonePct()); + aur->CalculatePeriodic(caster, false, false); aur->GetBase()->RefreshDuration(); + } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pri_pain_and_suffering_proc_SpellScript::HandleEffectScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_pain_and_suffering_proc_SpellScript; } @@ -559,12 +566,12 @@ class spell_pri_penance : public SpellScriptLoader { PrepareSpellScript(spell_pri_penance_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1); if (!firstRankSpellInfo) @@ -609,14 +616,14 @@ class spell_pri_penance : public SpellScriptLoader return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_penance_SpellScript; } @@ -632,7 +639,7 @@ class spell_pri_power_word_shield : public SpellScriptLoader { PrepareAuraScript(spell_pri_power_word_shield_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED)) return false; @@ -684,14 +691,14 @@ class spell_pri_power_word_shield : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_power_word_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_power_word_shield_AuraScript::ReflectDamage, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_power_word_shield_AuraScript(); } @@ -720,13 +727,13 @@ class spell_pri_prayer_of_mending_heal : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_pri_prayer_of_mending_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_prayer_of_mending_heal_SpellScript(); } @@ -742,7 +749,7 @@ class spell_pri_renew : public SpellScriptLoader { PrepareAuraScript(spell_pri_renew_AuraScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -763,13 +770,13 @@ class spell_pri_renew : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_pri_renew_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_renew_AuraScript(); } @@ -796,13 +803,13 @@ class spell_pri_shadow_word_death : public SpellScriptLoader GetCaster()->CastCustomSpell(GetCaster(), SPELL_PRIEST_SHADOW_WORD_DEATH, &damage, 0, 0, true); } - void Register() OVERRIDE + void Register() override { OnHit += SpellHitFn(spell_pri_shadow_word_death_SpellScript::HandleDamage); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_pri_shadow_word_death_SpellScript(); } @@ -818,7 +825,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader { PrepareAuraScript(spell_pri_vampiric_touch_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL)) return false; @@ -837,13 +844,13 @@ class spell_pri_vampiric_touch : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterDispel += AuraDispelFn(spell_pri_vampiric_touch_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_pri_vampiric_touch_AuraScript(); } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index cdf32bd94d5..f895381574e 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -61,7 +61,7 @@ class spell_generic_quest_update_entry_SpellScript : public SpellScript } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_generic_quest_update_entry_SpellScript::HandleDummy, _effIndex, _spellEffect); } @@ -80,7 +80,7 @@ class spell_q55_sacred_cleansing : public SpellScriptLoader public: spell_q55_sacred_cleansing() : SpellScriptLoader("spell_q55_sacred_cleansing") { } - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_1, NPC_MORBENT, NPC_WEAKENED_MORBENT, true); } @@ -101,7 +101,7 @@ class spell_q2203_thaumaturgy_channel : public SpellScriptLoader { PrepareAuraScript(spell_q2203_thaumaturgy_channel_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_THAUMATURGY_CHANNEL)) return false; @@ -115,13 +115,13 @@ class spell_q2203_thaumaturgy_channel : public SpellScriptLoader caster->CastSpell(caster, SPELL_THAUMATURGY_CHANNEL, false); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_q2203_thaumaturgy_channel_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q2203_thaumaturgy_channel_AuraScript(); } @@ -144,12 +144,12 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader { PrepareSpellScript(spell_q5206_test_fetid_skull_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_RESONATING_SKULL) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_BONE_DUST)) return false; @@ -163,13 +163,13 @@ class spell_q5206_test_fetid_skull : public SpellScriptLoader caster->CastSpell(caster, spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q5206_test_fetid_skull_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q5206_test_fetid_skull_SpellScript(); } @@ -196,7 +196,7 @@ class spell_q6124_6129_apply_salve : public SpellScriptLoader { PrepareSpellScript(spell_q6124_6129_apply_salve_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -227,13 +227,13 @@ class spell_q6124_6129_apply_salve : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q6124_6129_apply_salve_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q6124_6129_apply_salve_SpellScript(); } @@ -252,7 +252,7 @@ class spell_q10255_administer_antidote : public SpellScriptLoader public: spell_q10255_administer_antidote() : SpellScriptLoader("spell_q10255_administer_antidote") { } - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_HELBOAR, NPC_DREADTUSK, true); } @@ -288,7 +288,7 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectRemove += AuraEffectRemoveFn(spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); @@ -296,7 +296,7 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q11396_11399_force_shield_arcane_purple_x3_AuraScript(); } @@ -312,7 +312,7 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader { PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3) || !sSpellMgr->GetSpellInfo(SPELL_SCOURGING_CRYSTAL_CONTROLLER)) return false; @@ -328,13 +328,13 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader GetCaster()->CastSpell(target, SPELL_SCOURGING_CRYSTAL_CONTROLLER, true, GetCastItem()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11396_11399_scourging_crystal_controller_SpellScript(); }; @@ -350,7 +350,7 @@ class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript { PrepareSpellScript(spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3)) return false; @@ -364,13 +364,13 @@ class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript target->RemoveAurasDueToSpell(SPELL_FORCE_SHIELD_ARCANE_PURPLE_X3); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript(); }; @@ -389,7 +389,7 @@ class spell_q11515_fel_siphon_dummy : public SpellScriptLoader public: spell_q11515_fel_siphon_dummy() : SpellScriptLoader("spell_q11515_fel_siphon_dummy") { } - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_generic_quest_update_entry_SpellScript(SPELL_EFFECT_DUMMY, EFFECT_0, NPC_FELBLOOD_INITIATE, NPC_EMACIATED_FELBLOOD, true); } @@ -413,7 +413,7 @@ class spell_q11587_arcane_prisoner_rescue : public SpellScriptLoader { PrepareSpellScript(spell_q11587_arcane_prisoner_rescue_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ARCANE_PRISONER_MALE) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_ARCANE_PRISONER_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_ARCANE_PRISONER_KILL_CREDIT)) return false; @@ -433,13 +433,13 @@ class spell_q11587_arcane_prisoner_rescue : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q11587_arcane_prisoner_rescue_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11587_arcane_prisoner_rescue_SpellScript(); } @@ -471,12 +471,12 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader { PrepareSpellScript(spell_q11730_ultrasonic_screwdriver_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER && GetCastItem(); } - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_SCAVENGEBOT_004A8) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_SENTRYBOT_57K) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_DEFENDOTANK_66D) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_SCAVENGEBOT_005B6) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_55D_COLLECTATRON) || !sSpellMgr->GetSpellInfo(SPELL_ROBOT_KILL_CREDIT)) return false; @@ -506,13 +506,13 @@ class spell_q11730_ultrasonic_screwdriver : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q11730_ultrasonic_screwdriver_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11730_ultrasonic_screwdriver_SpellScript(); } @@ -557,13 +557,13 @@ class spell_q12459_seeds_of_natures_wrath : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12459_seeds_of_natures_wrath_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12459_seeds_of_natures_wrath_SpellScript(); } @@ -588,7 +588,7 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader { PrepareSpellScript(spell_q12634_despawn_fruit_tosser_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BANANAS_FALL_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_ORANGE_FALLS_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_PAPAYA_FALLS_TO_GROUND) || !sSpellMgr->GetSpellInfo(SPELL_SUMMON_ADVENTUROUS_DWARF)) return false; @@ -609,13 +609,13 @@ class spell_q12634_despawn_fruit_tosser : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), spellId, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q12634_despawn_fruit_tosser_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12634_despawn_fruit_tosser_SpellScript(); } @@ -644,13 +644,13 @@ class spell_q12683_take_sputum_sample : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q12683_take_sputum_sample_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12683_take_sputum_sample_SpellScript(); } @@ -705,14 +705,14 @@ class spell_q12851_going_bearback : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_q12851_going_bearback_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q12851_going_bearback_AuraScript(); } @@ -735,12 +735,12 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader { PrepareSpellScript(spell_q12937_relief_for_the_fallen_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGER_AID_OF_THE_EARTHEN)) return false; @@ -758,13 +758,13 @@ class spell_q12937_relief_for_the_fallen : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12937_relief_for_the_fallen_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12937_relief_for_the_fallen_SpellScript(); } @@ -786,7 +786,7 @@ class spell_q10041_q10040_who_are_they : public SpellScriptLoader { PrepareSpellScript(spell_q10041_q10040_who_are_they_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_FEMALE_DISGUISE) || !sSpellMgr->GetSpellInfo(SPELL_GENERIC_DISGUISE)) return false; @@ -803,13 +803,13 @@ class spell_q10041_q10040_who_are_they : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q10041_q10040_who_are_they_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q10041_q10040_who_are_they_SpellScript(); } @@ -845,13 +845,13 @@ class spell_symbol_of_life_dummy : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_symbol_of_life_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_symbol_of_life_dummy_SpellScript(); }; @@ -873,7 +873,7 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader { PrepareSpellScript(spell_q12659_ahunaes_knife_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -888,13 +888,13 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12659_ahunaes_knife_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12659_ahunaes_knife_SpellScript(); }; @@ -903,7 +903,7 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader enum StoppingTheSpread { NPC_VILLAGER_KILL_CREDIT = 18240, - SPELL_FLAMES = 39199, + SPELL_FLAMES = 39199 }; class spell_q9874_liquid_fire : public SpellScriptLoader @@ -917,7 +917,7 @@ class spell_q9874_liquid_fire : public SpellScriptLoader { PrepareSpellScript(spell_q9874_liquid_fire_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -926,7 +926,7 @@ class spell_q9874_liquid_fire : public SpellScriptLoader { Player* caster = GetCaster()->ToPlayer(); if (Creature* target = GetHitCreature()) - if (target && target->HasAura(SPELL_FLAMES)) + if (target && !target->HasAura(SPELL_FLAMES)) { caster->KilledMonsterCredit(NPC_VILLAGER_KILL_CREDIT, 0); target->CastSpell(target, SPELL_FLAMES, true); @@ -934,13 +934,13 @@ class spell_q9874_liquid_fire : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q9874_liquid_fire_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q9874_liquid_fire_SpellScript(); }; @@ -962,7 +962,7 @@ class spell_q12805_lifeblood_dummy : public SpellScriptLoader { PrepareSpellScript(spell_q12805_lifeblood_dummy_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -978,13 +978,13 @@ class spell_q12805_lifeblood_dummy : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12805_lifeblood_dummy_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12805_lifeblood_dummy_SpellScript(); }; @@ -1018,13 +1018,13 @@ class spell_q13280_13283_plant_battle_standard: public SpellScriptLoader player->ToPlayer()->KilledMonsterCredit(NPC_KING_OF_THE_MOUNTAINT_KC, 0); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q13280_13283_plant_battle_standard_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13280_13283_plant_battle_standard_SpellScript(); } @@ -1047,7 +1047,7 @@ class spell_q14112_14145_chum_the_water: public SpellScriptLoader { PrepareSpellScript(spell_q14112_14145_chum_the_water_SpellScript); - bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE + bool Validate(SpellInfo const* /*spellEntry*/) override { if (!sSpellMgr->GetSpellInfo(SUMMON_ANGRY_KVALDIR) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_MAKO) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_THRESHER) || !sSpellMgr->GetSpellInfo(SUMMON_NORTH_SEA_BLUE_SHARK)) return false; @@ -1060,13 +1060,13 @@ class spell_q14112_14145_chum_the_water: public SpellScriptLoader caster->CastSpell(caster, RAND(SUMMON_ANGRY_KVALDIR, SUMMON_NORTH_SEA_MAKO, SUMMON_NORTH_SEA_THRESHER, SUMMON_NORTH_SEA_BLUE_SHARK)); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q14112_14145_chum_the_water_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q14112_14145_chum_the_water_SpellScript(); } @@ -1089,7 +1089,7 @@ class spell_q9452_cast_net: public SpellScriptLoader { PrepareSpellScript(spell_q9452_cast_net_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -1103,13 +1103,13 @@ class spell_q9452_cast_net: public SpellScriptLoader caster->CastSpell(caster, SPELL_NEW_SUMMON_TEST, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q9452_cast_net_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q9452_cast_net_SpellScript(); } @@ -1143,13 +1143,13 @@ public: } } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_q12987_read_pronouncement_AuraScript::OnApply, EFFECT_0, SPELL_AURA_NONE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q12987_read_pronouncement_AuraScript(); } @@ -1200,13 +1200,13 @@ class spell_q12277_wintergarde_mine_explosion : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12277_wintergarde_mine_explosion_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12277_wintergarde_mine_explosion_SpellScript(); } @@ -1232,13 +1232,13 @@ public: target->CastSpell(GetCaster(), SPELL_BUNNY_CREDIT_BEAM, false); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12066_bunny_kill_credit_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12066_bunny_kill_credit_SpellScript(); } @@ -1283,13 +1283,13 @@ class spell_q12735_song_of_cleansing : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12735_song_of_cleansing_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12735_song_of_cleansing_SpellScript(); } @@ -1314,13 +1314,13 @@ class spell_q12372_cast_from_gossip_trigger : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WYRMREST_DEFENDER, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12372_cast_from_gossip_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12372_cast_from_gossip_trigger_SpellScript(); } @@ -1355,13 +1355,13 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript(); } @@ -1383,13 +1383,13 @@ class spell_q12372_azure_on_death_force_whisper : public SpellScriptLoader defender->AI()->Talk(WHISPER_ON_HIT_BY_FORCE_WHISPER, defender->GetCharmerOrOwner()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12372_azure_on_death_force_whisper_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12372_azure_on_death_force_whisper_SpellScript(); } @@ -1423,13 +1423,13 @@ class spell_q11010_q11102_q11023_aggro_check_aura : public SpellScriptLoader target->CastSpell(target, SPELL_AGGRO_CHECK); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_check_aura_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q11010_q11102_q11023_aggro_check_aura_AuraScript(); } @@ -1453,13 +1453,13 @@ class spell_q11010_q11102_q11023_aggro_check : public SpellScriptLoader playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q11010_q11102_q11023_aggro_check_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11010_q11102_q11023_aggro_check_SpellScript(); } @@ -1482,13 +1482,13 @@ class spell_q11010_q11102_q11023_aggro_burst : public SpellScriptLoader target->CastSpell(target, SPELL_CHOOSE_LOC); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_burst_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q11010_q11102_q11023_aggro_burst_AuraScript(); } @@ -1519,13 +1519,13 @@ class spell_q11010_q11102_q11023_choose_loc : public SpellScriptLoader caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ()); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q11010_q11102_q11023_choose_loc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11010_q11102_q11023_choose_loc_SpellScript(); } @@ -1551,13 +1551,13 @@ class spell_q11010_q11102_q11023_q11008_check_fly_mount : public SpellScriptLoad return SPELL_CAST_OK; } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript::CheckRequirement); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript(); } @@ -1577,7 +1577,7 @@ class spell_q12527_zuldrak_rat : public SpellScriptLoader { PrepareSpellScript(spell_q12527_zuldrak_rat_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_GORGED_LURKING_BASILISK)) return false; @@ -1594,13 +1594,13 @@ class spell_q12527_zuldrak_rat : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12527_zuldrak_rat_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12527_zuldrak_rat_SpellScript(); } @@ -1623,13 +1623,13 @@ class spell_q12661_q12669_q12676_q12677_q12713_summon_stefan : public SpellScrip dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12661_q12669_q12676_q12677_q12713_summon_stefan_SpellScript(); } @@ -1649,7 +1649,7 @@ class spell_q12730_quenching_mist : public SpellScriptLoader { PrepareAuraScript(spell_q12730_quenching_mist_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FLICKERING_FLAMES)) return false; @@ -1661,13 +1661,13 @@ class spell_q12730_quenching_mist : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_FLICKERING_FLAMES); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12730_quenching_mist_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q12730_quenching_mist_AuraScript(); } @@ -1692,7 +1692,7 @@ class spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy : public { PrepareSpellScript(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RIDE)) return false; @@ -1709,13 +1709,13 @@ class spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy : public GetHitCreature()->CastSpell(GetCaster(), SPELL_RIDE, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13291_q13292_q13239_q13261_frostbrood_skytalon_grab_decoy_SpellScript(); } @@ -1738,13 +1738,13 @@ class spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon : public S dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER_BACK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13291_q13292_q13239_q13261_armored_decoy_summon_skytalon_SpellScript(); } @@ -1767,7 +1767,7 @@ class spell_q12847_summon_soul_moveto_bunny : public SpellScriptLoader dest.RelocateOffset(offset); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12847_summon_soul_moveto_bunny_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER); } @@ -1795,7 +1795,7 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader { PrepareSpellScript(spell_q13011_bear_flank_master_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BEAR_FLANK_MASTER) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_BEAR_FLANK)) @@ -1803,7 +1803,7 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1824,13 +1824,13 @@ class spell_q13011_bear_flank_master : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q13011_bear_flank_master_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13011_bear_flank_master_SpellScript(); } @@ -1845,7 +1845,7 @@ class spell_q13086_cannons_target : public SpellScriptLoader { PrepareSpellScript(spell_q13086_cannons_target_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].CalcValue())) return false; @@ -1858,13 +1858,13 @@ class spell_q13086_cannons_target : public SpellScriptLoader GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), GetEffectValue(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q13086_cannons_target_SpellScript::HandleEffectDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13086_cannons_target_SpellScript(); } @@ -1896,7 +1896,7 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader { PrepareSpellScript(spell_q12690_burst_at_the_seams_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS) || !sSpellMgr->GetSpellInfo(SPELL_BURST_AT_THE_SEAMS_DMG) @@ -1908,7 +1908,7 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -1944,14 +1944,14 @@ class spell_q12690_burst_at_the_seams : public SpellScriptLoader GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK); OnEffectHitTarget += SpellEffectFn(spell_q12690_burst_at_the_seams_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12690_burst_at_the_seams_SpellScript(); } @@ -1972,7 +1972,7 @@ class spell_q12308_escape_from_silverbrook : public SpellScriptLoader { PrepareSpellScript(spell_q12308_escape_from_silverbrook_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_WORGEN)) return false; @@ -1984,13 +1984,13 @@ class spell_q12308_escape_from_silverbrook : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_WORGEN, true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q12308_escape_from_silverbrook_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12308_escape_from_silverbrook_SpellScript(); } @@ -2011,18 +2011,17 @@ class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScriptLoa float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster()); float angle = frand(0.75f, 1.25f) * M_PI; - Position pos; - GetCaster()->GetNearPosition(pos, dist, angle); + Position pos = GetCaster()->GetNearPosition(dist, angle); dest.Relocate(pos); } - void Register() OVERRIDE + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_q12308_escape_from_silverbrook_summon_worgen_SpellScript::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12308_escape_from_silverbrook_summon_worgen_SpellScript(); } @@ -2052,7 +2051,7 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader { PrepareSpellScript(spell_q12641_death_comes_from_on_high_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_FORGE_CREDIT) || !sSpellMgr->GetSpellInfo(SPELL_TOWN_HALL_CREDIT) || @@ -2087,13 +2086,13 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader GetCaster()->CastSpell((Unit*)NULL, spellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12641_death_comes_from_on_high_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12641_death_comes_from_on_high_SpellScript(); } @@ -2116,13 +2115,13 @@ class spell_q12619_emblazon_runeblade : public SpellScriptLoader caster->CastSpell(caster, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_q12619_emblazon_runeblade_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_q12619_emblazon_runeblade_AuraScript(); } @@ -2143,13 +2142,13 @@ class spell_q12619_emblazon_runeblade_effect : public SpellScriptLoader GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()), false); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_q12619_emblazon_runeblade_effect_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12619_emblazon_runeblade_effect_SpellScript(); } @@ -2170,7 +2169,7 @@ class spell_q12919_gymers_grab : public SpellScriptLoader { PrepareSpellScript(spell_q12919_gymers_grab_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_RIDE_GYMER)) return false; @@ -2186,13 +2185,13 @@ class spell_q12919_gymers_grab : public SpellScriptLoader GetHitCreature()->CastSpell(GetHitCreature(), SPELL_GRABBED, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_grab_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12919_gymers_grab_SpellScript(); } @@ -2223,13 +2222,13 @@ class spell_q12919_gymers_throw : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q12919_gymers_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q12919_gymers_throw_SpellScript(); } @@ -2249,7 +2248,7 @@ class spell_q13400_illidan_kill_master : public SpellScriptLoader { PrepareSpellScript(spell_q13400_illidan_kill_master_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ILLIDAN_KILL_CREDIT)) return false; @@ -2264,18 +2263,58 @@ class spell_q13400_illidan_kill_master : public SpellScriptLoader passenger->CastSpell(passenger, SPELL_ILLIDAN_KILL_CREDIT, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_q13400_illidan_kill_master_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_q13400_illidan_kill_master_SpellScript(); } }; +enum RelicOfTheEarthenRing +{ + SPELL_TOTEM_OF_THE_EARTHEN_RING = 66747 +}; + +// 66744 - Make Player Destroy Totems +class spell_q14100_q14111_make_player_destroy_totems : public SpellScriptLoader +{ + public: + spell_q14100_q14111_make_player_destroy_totems() : SpellScriptLoader("spell_q14100_q14111_make_player_destroy_totems") { } + + class spell_q14100_q14111_make_player_destroy_totems_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q14100_q14111_make_player_destroy_totems_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_TOTEM_OF_THE_EARTHEN_RING)) + return false; + return true; + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetHitPlayer()) + player->CastSpell(player, SPELL_TOTEM_OF_THE_EARTHEN_RING, TRIGGERED_FULL_MASK); // ignore reagent cost, consumed by quest + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_q14100_q14111_make_player_destroy_totems_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_q14100_q14111_make_player_destroy_totems_SpellScript(); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -2331,4 +2370,5 @@ void AddSC_quest_spell_scripts() new spell_q12919_gymers_grab(); new spell_q12919_gymers_throw(); new spell_q13400_illidan_kill_master(); + new spell_q14100_q14111_make_player_destroy_totems(); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index d1d43684f3e..bf413aef6a3 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -52,14 +52,14 @@ class spell_rog_blade_flurry : public SpellScriptLoader { PrepareAuraScript(spell_rog_blade_flurry_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -81,7 +81,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE); @@ -91,7 +91,7 @@ class spell_rog_blade_flurry : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_blade_flurry_AuraScript(); } @@ -109,14 +109,14 @@ class spell_rog_cheat_death : public SpellScriptLoader uint32 absorbChance; - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { absorbChance = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); return GetUnitOwner()->ToPlayer(); @@ -147,14 +147,14 @@ class spell_rog_cheat_death : public SpellScriptLoader absorbAmount = dmgInfo.GetDamage(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_cheat_death_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_rog_cheat_death_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_cheat_death_AuraScript(); } @@ -170,7 +170,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader { PrepareSpellScript(spell_rog_deadly_poison_SpellScript); - bool Load() OVERRIDE + bool Load() override { _stackAmount = 0; // at this point CastItem must already be initialized @@ -239,7 +239,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { BeforeHit += SpellHitFn(spell_rog_deadly_poison_SpellScript::HandleBeforeHit); AfterHit += SpellHitFn(spell_rog_deadly_poison_SpellScript::HandleAfterHit); @@ -248,7 +248,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader uint8 _stackAmount; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rog_deadly_poison_SpellScript(); } @@ -280,14 +280,14 @@ class spell_rog_killing_spree : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rog_killing_spree_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_rog_killing_spree_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rog_killing_spree_SpellScript(); } @@ -296,7 +296,7 @@ class spell_rog_killing_spree : public SpellScriptLoader { PrepareAuraScript(spell_rog_killing_spree_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_KILLING_SPREE_TELEPORT) || !sSpellMgr->GetSpellInfo(SPELL_ROGUE_KILLING_SPREE_WEAPON_DMG) @@ -331,7 +331,7 @@ class spell_rog_killing_spree : public SpellScriptLoader GetTarget()->RemoveAurasDueToSpell(SPELL_ROGUE_KILLING_SPREE_DMG_BUFF); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_rog_killing_spree_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_killing_spree_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); @@ -348,7 +348,7 @@ class spell_rog_killing_spree : public SpellScriptLoader std::list<uint64> _targets; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_killing_spree_AuraScript(); } @@ -366,7 +366,7 @@ class spell_rog_nerves_of_steel : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -385,14 +385,14 @@ class spell_rog_nerves_of_steel : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_nerves_of_steel_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_rog_nerves_of_steel_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_nerves_of_steel_AuraScript(); } @@ -408,12 +408,12 @@ class spell_rog_preparation : public SpellScriptLoader { PrepareSpellScript(spell_rog_preparation_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_GLYPH_OF_PREPARATION)) return false; @@ -428,7 +428,7 @@ class spell_rog_preparation : public SpellScriptLoader const SpellCooldowns& cm = caster->GetSpellCooldownMap(); for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE) { @@ -453,13 +453,13 @@ class spell_rog_preparation : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rog_preparation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rog_preparation_SpellScript(); } @@ -475,7 +475,7 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader { PrepareAuraScript(spell_rog_prey_on_the_weak_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_PREY_ON_THE_WEAK)) return false; @@ -498,13 +498,13 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader target->RemoveAurasDueToSpell(SPELL_ROGUE_PREY_ON_THE_WEAK); } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_rog_prey_on_the_weak_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_prey_on_the_weak_AuraScript(); } @@ -520,7 +520,7 @@ class spell_rog_rupture : public SpellScriptLoader { PrepareAuraScript(spell_rog_rupture_AuraScript); - bool Load() OVERRIDE + bool Load() override { Unit* caster = GetCaster(); return caster && caster->GetTypeId() == TYPEID_PLAYER; @@ -550,13 +550,13 @@ class spell_rog_rupture : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_rupture_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_rupture_AuraScript(); } @@ -572,12 +572,12 @@ class spell_rog_shiv : public SpellScriptLoader { PrepareSpellScript(spell_rog_shiv_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_SHIV_TRIGGERED)) return false; @@ -591,13 +591,13 @@ class spell_rog_shiv : public SpellScriptLoader caster->CastSpell(unitTarget, SPELL_ROGUE_SHIV_TRIGGERED, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_rog_shiv_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_rog_shiv_SpellScript(); } @@ -613,7 +613,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader { PrepareAuraScript(spell_rog_tricks_of_the_trade_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST)) return false; @@ -622,7 +622,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { _redirectTarget = NULL; return true; @@ -650,7 +650,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader Remove(AURA_REMOVE_BY_DEFAULT); // maybe handle by proc charges } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); DoCheckProc += AuraCheckProcFn(spell_rog_tricks_of_the_trade_AuraScript::CheckProc); @@ -661,7 +661,7 @@ class spell_rog_tricks_of_the_trade : public SpellScriptLoader Unit* _redirectTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_tricks_of_the_trade_AuraScript(); } @@ -682,13 +682,13 @@ class spell_rog_tricks_of_the_trade_proc : public SpellScriptLoader GetTarget()->ResetRedirectThreat(); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_proc_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_rog_tricks_of_the_trade_proc_AuraScript(); } diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 707c8a0985f..a1c2d0e1d1c 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -34,6 +34,7 @@ enum ShamanSpells SPELL_SHAMAN_BIND_SIGHT = 6277, SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT = 52025, SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379, + SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166, SPELL_SHAMAN_EXHAUSTION = 57723, SPELL_SHAMAN_FIRE_NOVA_R1 = 1535, SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349, @@ -72,7 +73,7 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader { PrepareSpellScript(spell_sha_ancestral_awakening_proc_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC)) return false; @@ -98,14 +99,14 @@ class spell_sha_ancestral_awakening_proc : public SpellScriptLoader GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, &damage, NULL, NULL, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_ancestral_awakening_proc_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); OnEffectHitTarget += SpellEffectFn(spell_sha_ancestral_awakening_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_ancestral_awakening_proc_SpellScript(); } @@ -123,7 +124,7 @@ class spell_sha_astral_shift : public SpellScriptLoader uint32 absorbPct; - bool Load() OVERRIDE + bool Load() override { absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(GetCaster()); return true; @@ -142,14 +143,14 @@ class spell_sha_astral_shift : public SpellScriptLoader absorbAmount = CalculatePct(dmgInfo.GetDamage(), absorbPct); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_astral_shift_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); OnEffectAbsorb += AuraEffectAbsorbFn(spell_sha_astral_shift_AuraScript::Absorb, EFFECT_0); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_astral_shift_AuraScript(); } @@ -165,7 +166,7 @@ class spell_sha_bloodlust : public SpellScriptLoader { PrepareSpellScript(spell_sha_bloodlust_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED)) return false; @@ -183,7 +184,7 @@ class spell_sha_bloodlust : public SpellScriptLoader target->CastSpell(target, SPELL_SHAMAN_SATED, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID); @@ -192,7 +193,7 @@ class spell_sha_bloodlust : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_bloodlust_SpellScript(); } @@ -208,7 +209,7 @@ class spell_sha_chain_heal : public SpellScriptLoader { PrepareSpellScript(spell_sha_chain_heal_SpellScript); - bool Load() OVERRIDE + bool Load() override { firstHeal = true; riptide = false; @@ -233,7 +234,7 @@ class spell_sha_chain_heal : public SpellScriptLoader SetHitHeal(GetHitHeal() * 1.25f); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_chain_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); } @@ -242,7 +243,7 @@ class spell_sha_chain_heal : public SpellScriptLoader bool riptide; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_chain_heal_SpellScript(); } @@ -258,7 +259,7 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader { PrepareSpellScript(spell_sha_cleansing_totem_pulse_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT)) return false; @@ -272,13 +273,13 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader GetCaster()->CastCustomSpell(GetHitUnit(), SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT, NULL, &bp, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_cleansing_totem_pulse_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_cleansing_totem_pulse_SpellScript(); } @@ -294,7 +295,7 @@ class spell_sha_earth_shield : public SpellScriptLoader { PrepareAuraScript(spell_sha_earth_shield_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) return false; @@ -338,7 +339,7 @@ class spell_sha_earth_shield : public SpellScriptLoader player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3); } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_earth_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_DUMMY); DoCheckProc += AuraCheckProcFn(spell_sha_earth_shield_AuraScript::CheckProc); @@ -346,7 +347,7 @@ class spell_sha_earth_shield : public SpellScriptLoader } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_earth_shield_AuraScript(); } @@ -362,7 +363,7 @@ class spell_sha_earthbind_totem : public SpellScriptLoader { PrepareAuraScript(spell_sha_earthbind_totem_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHEN_POWER)) return false; @@ -394,14 +395,14 @@ class spell_sha_earthbind_totem : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_earthbind_totem_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); OnEffectApply += AuraEffectApplyFn(spell_sha_earthbind_totem_AuraScript::Apply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_earthbind_totem_AuraScript(); } @@ -439,13 +440,13 @@ class spell_sha_earthen_power : public SpellScriptLoader unitList.remove_if(EarthenPowerTargetSelector()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_earthen_power_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_earthen_power_SpellScript(); } @@ -461,7 +462,7 @@ class spell_sha_fire_nova : public SpellScriptLoader { PrepareSpellScript(spell_sha_fire_nova_SpellScript); - bool Validate(SpellInfo const* spellInfo) OVERRIDE + bool Validate(SpellInfo const* spellInfo) override { SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_SHAMAN_FIRE_NOVA_R1); if (!firstRankSpellInfo || !spellInfo->IsRankOf(firstRankSpellInfo)) @@ -496,14 +497,14 @@ class spell_sha_fire_nova : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnCheckCast += SpellCheckCastFn(spell_sha_fire_nova_SpellScript::CheckFireTotem); OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_fire_nova_SpellScript(); } @@ -519,7 +520,7 @@ class spell_sha_flame_shock : public SpellScriptLoader { PrepareAuraScript(spell_sha_flame_shock_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_R1)) return false; @@ -543,13 +544,13 @@ class spell_sha_flame_shock : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterDispel += AuraDispelFn(spell_sha_flame_shock_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_flame_shock_AuraScript(); } @@ -565,7 +566,7 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader { PrepareSpellScript(spell_sha_healing_stream_totem_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL)) return false; @@ -598,13 +599,13 @@ class spell_sha_healing_stream_totem : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_healing_stream_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_healing_stream_totem_SpellScript(); } @@ -620,7 +621,7 @@ class spell_sha_heroism : public SpellScriptLoader { PrepareSpellScript(spell_sha_heroism_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION)) return false; @@ -638,7 +639,7 @@ class spell_sha_heroism : public SpellScriptLoader target->CastSpell(target, SPELL_SHAMAN_EXHAUSTION, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID); @@ -647,7 +648,7 @@ class spell_sha_heroism : public SpellScriptLoader } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_heroism_SpellScript(); } @@ -663,7 +664,7 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader { PrepareAuraScript(spell_sha_item_lightning_shield_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD)) return false; @@ -676,13 +677,13 @@ class spell_sha_item_lightning_shield : public SpellScriptLoader GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_item_lightning_shield_AuraScript(); } @@ -698,7 +699,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader { PrepareAuraScript(spell_sha_item_lightning_shield_trigger_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE)) return false; @@ -711,13 +712,13 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_trigger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_item_lightning_shield_trigger_AuraScript(); } @@ -733,7 +734,7 @@ class spell_sha_item_mana_surge : public SpellScriptLoader { PrepareAuraScript(spell_sha_item_mana_surge_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE)) return false; @@ -754,19 +755,55 @@ class spell_sha_item_mana_surge : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_sha_item_mana_surge_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_sha_item_mana_surge_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_item_mana_surge_AuraScript(); } }; +// 70811 - Item - Shaman T10 Elemental 2P Bonus +class spell_sha_item_t10_elemental_2p_bonus : public SpellScriptLoader +{ + public: + spell_sha_item_t10_elemental_2p_bonus() : SpellScriptLoader("spell_sha_item_t10_elemental_2p_bonus") { } + + class spell_sha_item_t10_elemental_2p_bonus_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_item_t10_elemental_2p_bonus_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_MASTERY)) + return false; + return true; + } + + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + if (Player* target = GetTarget()->ToPlayer()) + target->ModifySpellCooldown(SPELL_SHAMAN_ELEMENTAL_MASTERY, -aurEff->GetAmount()); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_sha_item_t10_elemental_2p_bonus_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_sha_item_t10_elemental_2p_bonus_AuraScript(); + } +}; + // 60103 - Lava Lash class spell_sha_lava_lash : public SpellScriptLoader { @@ -775,9 +812,9 @@ class spell_sha_lava_lash : public SpellScriptLoader class spell_sha_lava_lash_SpellScript : public SpellScript { - PrepareSpellScript(spell_sha_lava_lash_SpellScript) + PrepareSpellScript(spell_sha_lava_lash_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -798,14 +835,14 @@ class spell_sha_lava_lash : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_lava_lash_SpellScript(); } @@ -821,7 +858,7 @@ class spell_sha_mana_spring_totem : public SpellScriptLoader { PrepareSpellScript(spell_sha_mana_spring_totem_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE)) return false; @@ -837,14 +874,14 @@ class spell_sha_mana_spring_totem : public SpellScriptLoader caster->CastCustomSpell(target, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID()); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_mana_spring_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_mana_spring_totem_SpellScript(); } @@ -860,7 +897,7 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader { PrepareSpellScript(spell_sha_mana_tide_totem_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_MANA_TIDE) || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_MANA_TIDE_TOTEM)) return false; @@ -886,13 +923,13 @@ class spell_sha_mana_tide_totem : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_mana_tide_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_mana_tide_totem_SpellScript(); } @@ -908,7 +945,7 @@ class spell_sha_sentry_totem : public SpellScriptLoader { PrepareAuraScript(spell_sha_sentry_totem_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_BIND_SIGHT)) return false; @@ -930,14 +967,14 @@ class spell_sha_sentry_totem : public SpellScriptLoader caster->ToPlayer()->StopCastingBindSight(); } - void Register() OVERRIDE + void Register() override { AfterEffectApply += AuraEffectApplyFn(spell_sha_sentry_totem_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_sha_sentry_totem_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_sha_sentry_totem_AuraScript(); } @@ -960,13 +997,13 @@ class spell_sha_thunderstorm : public SpellScriptLoader PreventHitDefaultEffect(effIndex); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_sha_thunderstorm_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_sha_thunderstorm_SpellScript(); } @@ -989,6 +1026,7 @@ void AddSC_shaman_spell_scripts() new spell_sha_item_lightning_shield(); new spell_sha_item_lightning_shield_trigger(); new spell_sha_item_mana_surge(); + new spell_sha_item_t10_elemental_2p_bonus(); new spell_sha_lava_lash(); new spell_sha_mana_spring_totem(); new spell_sha_mana_tide_totem(); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 36e63b5a94e..4571798506e 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -71,7 +71,7 @@ class spell_warl_banish : public SpellScriptLoader { PrepareSpellScript(spell_warl_banish_SpellScript); - bool Load() OVERRIDE + bool Load() override { _removed = false; return true; @@ -98,7 +98,7 @@ class spell_warl_banish : public SpellScriptLoader PreventHitAura(); } - void Register() OVERRIDE + void Register() override { BeforeHit += SpellHitFn(spell_warl_banish_SpellScript::HandleBanish); AfterHit += SpellHitFn(spell_warl_banish_SpellScript::RemoveAura); @@ -107,7 +107,7 @@ class spell_warl_banish : public SpellScriptLoader bool _removed; }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_banish_SpellScript(); } @@ -125,7 +125,7 @@ class spell_warl_create_healthstone : public SpellScriptLoader static uint32 const iTypes[8][3]; - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2)) return false; @@ -172,14 +172,14 @@ class spell_warl_create_healthstone : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warl_create_healthstone_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); OnCheckCast += SpellCheckCastFn(spell_warl_create_healthstone_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_create_healthstone_SpellScript(); } @@ -206,14 +206,14 @@ class spell_warl_curse_of_doom : public SpellScriptLoader { PrepareAuraScript(spell_warl_curse_of_doom_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; } @@ -231,13 +231,13 @@ class spell_warl_curse_of_doom : public SpellScriptLoader GetCaster()->CastSpell(GetTarget(), SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { AfterEffectRemove += AuraEffectRemoveFn(spell_warl_curse_of_doom_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_curse_of_doom_AuraScript(); } @@ -270,7 +270,7 @@ class spell_warl_demonic_circle_summon : public SpellScriptLoader // WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST; allowing him to cast the WARLOCK_DEMONIC_CIRCLE_TELEPORT. // If not in range remove the WARLOCK_DEMONIC_CIRCLE_ALLOW_CAST. - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(SPELL_WARLOCK_DEMONIC_CIRCLE_TELEPORT); if (GetTarget()->IsWithinDist(circle, spellInfo->GetMaxRange(true))) { @@ -282,14 +282,14 @@ class spell_warl_demonic_circle_summon : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectApplyFn(spell_warl_demonic_circle_summon_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_demonic_circle_summon_AuraScript::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_demonic_circle_summon_AuraScript(); } @@ -317,13 +317,13 @@ class spell_warl_demonic_circle_teleport : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_warl_demonic_circle_teleport_AuraScript::HandleTeleport, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_demonic_circle_teleport_AuraScript(); } @@ -339,7 +339,7 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader { PrepareSpellScript(spell_warl_demonic_empowerment_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP)) return false; @@ -353,6 +353,7 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader if (targetCreature->IsPet()) { CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(targetCreature->GetEntry()); + ASSERT(ci); switch (ci->family) { case CREATURE_FAMILY_SUCCUBUS: @@ -360,7 +361,7 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader break; case CREATURE_FAMILY_VOIDWALKER: { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER); int32 hp = int32(targetCreature->CountPctFromMaxHealth(GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0))); targetCreature->CastCustomSpell(targetCreature, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, NULL, NULL, true); //unitTarget->CastSpell(unitTarget, 54441, true); @@ -380,13 +381,13 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warl_demonic_empowerment_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_demonic_empowerment_SpellScript(); } @@ -404,19 +405,26 @@ class spell_warl_everlasting_affliction : public SpellScriptLoader void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - if (Unit* unitTarget = GetHitUnit()) + Unit* caster = GetCaster(); + if (Unit* target = GetHitUnit()) // Refresh corruption on target - if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, GetCaster()->GetGUID())) - aur->GetBase()->RefreshDuration(); + if (AuraEffect* aur = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, caster->GetGUID())) + { + uint32 damage = std::max(aur->GetAmount(), 0); + sScriptMgr->ModifyPeriodicDamageAurasTick(target, caster, damage); + aur->SetDamage(caster->SpellDamageBonusDone(target, aur->GetSpellInfo(), damage, DOT) * aur->GetDonePct()); + aur->CalculatePeriodic(caster, false, false); + aur->GetBase()->RefreshDuration(true); + } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warl_everlasting_affliction_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_everlasting_affliction_SpellScript(); } @@ -432,7 +440,7 @@ class spell_warl_fel_synergy : public SpellScriptLoader { PrepareAuraScript(spell_warl_fel_synergy_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_FEL_SYNERGY_HEAL)) return false; @@ -452,14 +460,14 @@ class spell_warl_fel_synergy : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff); // TARGET_UNIT_PET } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_warl_fel_synergy_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_warl_fel_synergy_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_fel_synergy_AuraScript(); } @@ -475,7 +483,7 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader { PrepareAuraScript(spell_warl_glyph_of_shadowflame_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME)) return false; @@ -488,13 +496,13 @@ class spell_warl_glyph_of_shadowflame : public SpellScriptLoader GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_warl_glyph_of_shadowflame_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_glyph_of_shadowflame_AuraScript(); } @@ -510,16 +518,16 @@ class spell_warl_haunt : public SpellScriptLoader { PrepareSpellScript(spell_warl_haunt_SpellScript); - void HandleOnHit() + void HandleAfterHit() { if (Aura* aura = GetHitAura()) if (AuraEffect* aurEff = aura->GetEffect(EFFECT_1)) aurEff->SetAmount(CalculatePct(aurEff->GetAmount(), GetHitDamage())); } - void Register() OVERRIDE + void Register() override { - OnHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleOnHit); + AfterHit += SpellHitFn(spell_warl_haunt_SpellScript::HandleAfterHit); } }; @@ -527,7 +535,7 @@ class spell_warl_haunt : public SpellScriptLoader { PrepareAuraScript(spell_warl_haunt_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_HAUNT_HEAL)) return false; @@ -543,18 +551,18 @@ class spell_warl_haunt : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectApplyFn(spell_warl_haunt_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_haunt_SpellScript(); } - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_haunt_AuraScript(); } @@ -590,14 +598,14 @@ class spell_warl_health_funnel : public SpellScriptLoader target->RemoveAurasDueToSpell(SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2); } - void Register() OVERRIDE + void Register() override { OnEffectRemove += AuraEffectRemoveFn(spell_warl_health_funnel_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL); OnEffectApply += AuraEffectApplyFn(spell_warl_health_funnel_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_health_funnel_AuraScript(); } @@ -613,12 +621,12 @@ class spell_warl_life_tap : public SpellScriptLoader { PrepareSpellScript(spell_warl_life_tap_SpellScript); - bool Load() OVERRIDE + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spell*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE) || !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2)) return false; @@ -662,14 +670,14 @@ class spell_warl_life_tap : public SpellScriptLoader return SPELL_FAILED_FIZZLE; } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warl_life_tap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); OnCheckCast += SpellCheckCastFn(spell_warl_life_tap_SpellScript::CheckCast); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_life_tap_SpellScript(); } @@ -691,13 +699,13 @@ class spell_warl_ritual_of_doom_effect : public SpellScriptLoader caster->CastSpell(caster, GetEffectValue(), true); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_warl_ritual_of_doom_effect_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_ritual_of_doom_effect_SpellScript(); } @@ -719,13 +727,13 @@ class spell_warl_seed_of_corruption : public SpellScriptLoader targets.remove(GetExplTargetUnit()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warl_seed_of_corruption_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_seed_of_corruption_SpellScript(); } @@ -756,13 +764,13 @@ class spell_warl_shadow_ward : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_shadow_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_shadow_ward_AuraScript(); } @@ -778,7 +786,7 @@ class spell_warl_siphon_life : public SpellScriptLoader { PrepareAuraScript(spell_warl_siphon_life_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SIPHON_LIFE_HEAL)) return false; @@ -804,14 +812,14 @@ class spell_warl_siphon_life : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_warl_siphon_life_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_warl_siphon_life_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_siphon_life_AuraScript(); } @@ -827,7 +835,7 @@ class spell_warl_soulshatter : public SpellScriptLoader { PrepareSpellScript(spell_warl_soulshatter_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOULSHATTER)) return false; @@ -844,13 +852,13 @@ class spell_warl_soulshatter : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warl_soulshatter_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warl_soulshatter_SpellScript(); } @@ -866,7 +874,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader { PrepareAuraScript(spell_warl_unstable_affliction_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL)) return false; @@ -884,13 +892,13 @@ class spell_warl_unstable_affliction : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { AfterDispel += AuraDispelFn(spell_warl_unstable_affliction_AuraScript::HandleDispel); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warl_unstable_affliction_AuraScript(); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 5a655a92996..40d939c6394 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -28,6 +28,7 @@ enum WarriorSpells { + SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND = 50622, SPELL_WARRIOR_BLOODTHIRST = 23885, SPELL_WARRIOR_BLOODTHIRST_DAMAGE = 23881, SPELL_WARRIOR_CHARGE = 34846, @@ -35,7 +36,7 @@ enum WarriorSpells SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162, SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850, SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868, - SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721, + SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC = 12721, SPELL_WARRIOR_EXECUTE = 20647, SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367, SPELL_WARRIOR_GLYPH_OF_VIGILANCE = 63326, @@ -45,7 +46,8 @@ enum WarriorSpells SPELL_WARRIOR_RETALIATION_DAMAGE = 22858, SPELL_WARRIOR_SLAM = 50783, SPELL_WARRIOR_SUNDER_ARMOR = 58567, - SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK = 26654, + SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1 = 12723, + SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2 = 26654, SPELL_WARRIOR_TAUNT = 355, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860, @@ -97,14 +99,14 @@ class spell_warr_bloodthirst : public SpellScriptLoader GetCaster()->CastCustomSpell(GetCaster(), SPELL_WARRIOR_BLOODTHIRST, &damage, NULL, NULL, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); OnEffectHit += SpellEffectFn(spell_warr_bloodthirst_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_bloodthirst_SpellScript(); } @@ -126,13 +128,13 @@ class spell_warr_bloodthirst_heal : public SpellScriptLoader SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster()))); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_bloodthirst_heal_SpellScript(); } @@ -148,7 +150,7 @@ class spell_warr_charge : public SpellScriptLoader { PrepareSpellScript(spell_warr_charge_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_CHARGE)) return false; @@ -166,13 +168,13 @@ class spell_warr_charge : public SpellScriptLoader caster->CastSpell(caster, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_charge_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_charge_SpellScript(); } @@ -193,13 +195,13 @@ class spell_warr_concussion_blow : public SpellScriptLoader SetHitDamage(CalculatePct(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue())); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_concussion_blow_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_concussion_blow_SpellScript(); } @@ -215,7 +217,7 @@ class spell_warr_damage_shield : public SpellScriptLoader { PrepareAuraScript(spell_warr_damage_shield_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE)) return false; @@ -231,13 +233,13 @@ class spell_warr_damage_shield : public SpellScriptLoader GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_damage_shield_AuraScript(); } @@ -253,7 +255,7 @@ class spell_warr_deep_wounds : public SpellScriptLoader { PrepareSpellScript(spell_warr_deep_wounds_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3)) return false; @@ -266,33 +268,28 @@ class spell_warr_deep_wounds : public SpellScriptLoader Unit* caster = GetCaster(); if (Unit* target = GetHitUnit()) { - // apply percent damage mods - damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE); - ApplyPct(damage, 16 * GetSpellInfo()->GetRank()); - damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, SPELL_DIRECT_DAMAGE); - - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC); uint32 ticks = spellInfo->GetDuration() / spellInfo->Effects[EFFECT_0].Amplitude; // Add remaining ticks to damage done - if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, EFFECT_0, caster->GetGUID())) - damage += aurEff->GetAmount() * (ticks - aurEff->GetTickNumber()); + if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, EFFECT_0, caster->GetGUID())) + damage += aurEff->GetDamage() * (ticks - aurEff->GetTickNumber()); damage /= ticks; - caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC, &damage, NULL, NULL, true); + caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, NULL, NULL, true); } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_deep_wounds_SpellScript(); } @@ -308,7 +305,7 @@ class spell_warr_execute : public SpellScriptLoader { PrepareSpellScript(spell_warr_execute_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_EXECUTE) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_EXECUTION)) return false; @@ -342,13 +339,13 @@ class spell_warr_execute : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_execute_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_execute_SpellScript(); } @@ -378,13 +375,13 @@ class spell_warr_glyph_of_sunder_armor : public SpellScriptLoader spellMod->value = aurEff->GetAmount(); } - void Register() OVERRIDE + void Register() override { DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_warr_glyph_of_sunder_armor_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_glyph_of_sunder_armor_AuraScript(); } @@ -406,13 +403,13 @@ class spell_warr_improved_spell_reflection : public SpellScriptLoader unitList.remove(GetCaster()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_improved_spell_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_improved_spell_reflection_SpellScript(); } @@ -433,14 +430,14 @@ class spell_warr_intimidating_shout : public SpellScriptLoader unitList.remove(GetExplTargetWorldObject()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_intimidating_shout_SpellScript(); } @@ -456,7 +453,7 @@ class spell_warr_last_stand : public SpellScriptLoader { PrepareSpellScript(spell_warr_last_stand_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_LAST_STAND_TRIGGERED)) return false; @@ -470,13 +467,13 @@ class spell_warr_last_stand : public SpellScriptLoader caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL); } - void Register() OVERRIDE + void Register() override { OnEffectHit += SpellEffectFn(spell_warr_last_stand_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_last_stand_SpellScript(); } @@ -508,13 +505,13 @@ class spell_warr_overpower : public SpellScriptLoader target->CastSpell(target, spellId, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_overpower_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_ANY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_overpower_SpellScript(); } @@ -554,13 +551,13 @@ class spell_warr_rend : public SpellScriptLoader } } - void Register() OVERRIDE + void Register() override { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_rend_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_rend_AuraScript(); } @@ -576,7 +573,7 @@ class spell_warr_retaliation : public SpellScriptLoader { PrepareAuraScript(spell_warr_retaliation_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_RETALIATION_DAMAGE)) return false; @@ -595,14 +592,14 @@ class spell_warr_retaliation : public SpellScriptLoader GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARRIOR_RETALIATION_DAMAGE, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_warr_retaliation_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_warr_retaliation_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); } }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_retaliation_AuraScript(); } @@ -627,13 +624,13 @@ class spell_warr_shattering_throw : public SpellScriptLoader target->RemoveAurasWithMechanic(1 << MECHANIC_IMMUNE_SHIELD, AURA_REMOVE_BY_ENEMY_SPELL); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_shattering_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_shattering_throw_SpellScript(); } @@ -649,7 +646,7 @@ class spell_warr_slam : public SpellScriptLoader { PrepareSpellScript(spell_warr_slam_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SLAM)) return false; @@ -662,13 +659,13 @@ class spell_warr_slam : public SpellScriptLoader GetCaster()->CastCustomSpell(SPELL_WARRIOR_SLAM, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_slam_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_slam_SpellScript(); } @@ -684,14 +681,14 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader { PrepareAuraScript(spell_warr_sweeping_strikes_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK)) + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2)) return false; return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -703,13 +700,26 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader return _procTarget; } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); - GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK, true, NULL, aurEff); + if (eventInfo.GetDamageInfo()) + { + SpellInfo const* spellInfo = eventInfo.GetDamageInfo()->GetSpellInfo(); + if (spellInfo && (spellInfo->Id == SPELL_WARRIOR_BLADESTORM_PERIODIC_WHIRLWIND || (spellInfo->Id == SPELL_WARRIOR_EXECUTE && !_procTarget->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)))) + { + // If triggered by Execute (while target is not under 20% hp) or Bladestorm deals normalized weapon damage + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_2, true, NULL, aurEff); + } + else + { + int32 damage = eventInfo.GetDamageInfo()->GetDamage(); + GetTarget()->CastCustomSpell(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK_1, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, NULL, aurEff); + } + } } - void Register() OVERRIDE + void Register() override { DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); @@ -719,7 +729,7 @@ class spell_warr_sweeping_strikes : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_sweeping_strikes_AuraScript(); } @@ -735,7 +745,7 @@ class spell_warr_vigilance : public SpellScriptLoader { PrepareAuraScript(spell_warr_vigilance_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_VIGILANCE)) return false; @@ -748,7 +758,7 @@ class spell_warr_vigilance : public SpellScriptLoader return true; } - bool Load() OVERRIDE + bool Load() override { _procTarget = NULL; return true; @@ -800,7 +810,7 @@ class spell_warr_vigilance : public SpellScriptLoader GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, NULL, aurEff); } - void Register() OVERRIDE + void Register() override { OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); @@ -813,7 +823,7 @@ class spell_warr_vigilance : public SpellScriptLoader Unit* _procTarget; }; - AuraScript* GetAuraScript() const OVERRIDE + AuraScript* GetAuraScript() const override { return new spell_warr_vigilance_AuraScript(); } @@ -838,13 +848,13 @@ class spell_warr_vigilance_trigger : public SpellScriptLoader target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true); } - void Register() OVERRIDE + void Register() override { OnEffectHitTarget += SpellEffectFn(spell_warr_vigilance_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_warr_vigilance_trigger_SpellScript(); } diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt index 7d1b46732cf..56a0a1eb4c7 100644 --- a/src/server/scripts/World/CMakeLists.txt +++ b/src/server/scripts/World/CMakeLists.txt @@ -8,20 +8,11 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +file(GLOB_RECURSE sources_World World/*.cpp World/*.h) + set(scripts_STAT_SRCS ${scripts_STAT_SRCS} - World/achievement_scripts.cpp - World/areatrigger_scripts.cpp - World/boss_emerald_dragons.cpp - World/chat_log.cpp - World/go_scripts.cpp - World/guards.cpp - World/item_scripts.cpp - World/mob_generic_creature.cpp - World/npc_innkeeper.cpp - World/npc_professions.cpp - World/npc_taxi.cpp - World/npcs_special.cpp + ${sources_World} ) message(" -> Prepared: World") diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index 8ddfb0e9335..52d99ba0746 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -27,7 +27,7 @@ class achievement_resilient_victory : public AchievementCriteriaScript public: achievement_resilient_victory() : AchievementCriteriaScript("achievement_resilient_victory") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_RESILIENT_VICTORY, source, target); @@ -41,7 +41,7 @@ class achievement_bg_control_all_nodes : public AchievementCriteriaScript public: achievement_bg_control_all_nodes() : AchievementCriteriaScript("achievement_bg_control_all_nodes") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Battleground* bg = source->GetBattleground()) return bg->IsAllNodesControlledByTeam(source->GetTeam()); @@ -55,7 +55,7 @@ class achievement_save_the_day : public AchievementCriteriaScript public: achievement_save_the_day() : AchievementCriteriaScript("achievement_save_the_day") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_SAVE_THE_DAY, source, target); @@ -69,7 +69,7 @@ class achievement_bg_ic_resource_glut : public AchievementCriteriaScript public: achievement_bg_ic_resource_glut() : AchievementCriteriaScript("achievement_bg_ic_resource_glut") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (source->HasAura(SPELL_OIL_REFINERY) && source->HasAura(SPELL_QUARRY)) return true; @@ -83,7 +83,7 @@ class achievement_bg_ic_glaive_grave : public AchievementCriteriaScript public: achievement_bg_ic_glaive_grave() : AchievementCriteriaScript("achievement_bg_ic_glaive_grave") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -100,7 +100,7 @@ class achievement_bg_ic_mowed_down : public AchievementCriteriaScript public: achievement_bg_ic_mowed_down() : AchievementCriteriaScript("achievement_bg_ic_mowed_down") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -117,7 +117,7 @@ class achievement_bg_sa_artillery : public AchievementCriteriaScript public: achievement_bg_sa_artillery() : AchievementCriteriaScript("achievement_bg_sa_artillery") { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { if (Creature* vehicle = source->GetVehicleCreatureBase()) { @@ -137,7 +137,7 @@ class achievement_arena_kills : public AchievementCriteriaScript { } - bool OnCheck(Player* source, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* source, Unit* /*target*/) override { // this checks GetBattleground() for NULL already if (!source->InArena()) @@ -155,7 +155,7 @@ class achievement_sickly_gazelle : public AchievementCriteriaScript public: achievement_sickly_gazelle() : AchievementCriteriaScript("achievement_sickly_gazelle") { } - bool OnCheck(Player* /*source*/, Unit* target) OVERRIDE + bool OnCheck(Player* /*source*/, Unit* target) override { if (!target) return false; @@ -173,7 +173,7 @@ class achievement_everything_counts : public AchievementCriteriaScript public: achievement_everything_counts() : AchievementCriteriaScript("achievement_everything_counts") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_EVERYTHING_COUNTS, source, target); @@ -187,7 +187,7 @@ class achievement_bg_av_perfection : public AchievementCriteriaScript public: achievement_bg_av_perfection() : AchievementCriteriaScript("achievement_bg_av_perfection") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_AV_PERFECTION, source, target); @@ -201,7 +201,7 @@ class achievement_bg_sa_defense_of_ancients : public AchievementCriteriaScript public: achievement_bg_sa_defense_of_ancients() : AchievementCriteriaScript("achievement_bg_sa_defense_of_ancients") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_DEFENSE_OF_THE_ANCIENTS, source, target); @@ -225,7 +225,7 @@ class achievement_tilted : public AchievementCriteriaScript public: achievement_tilted() : AchievementCriteriaScript("achievement_tilted") { } - bool OnCheck(Player* player, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* player, Unit* /*target*/) override { if (!player) return false; @@ -246,7 +246,7 @@ class achievement_not_even_a_scratch : public AchievementCriteriaScript public: achievement_not_even_a_scratch() : AchievementCriteriaScript("achievement_not_even_a_scratch") { } - bool OnCheck(Player* source, Unit* target) OVERRIDE + bool OnCheck(Player* source, Unit* target) override { if (Battleground* bg = source->GetBattleground()) return bg->CheckAchievementCriteriaMeet(BG_CRITERIA_CHECK_NOT_EVEN_A_SCRATCH, source, target); @@ -267,7 +267,7 @@ class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScr public: achievement_flirt_with_disaster_perf_check() : AchievementCriteriaScript("achievement_flirt_with_disaster_perf_check") { } - bool OnCheck(Player* player, Unit* /*target*/) OVERRIDE + bool OnCheck(Player* player, Unit* /*target*/) override { if (!player) return false; @@ -284,7 +284,7 @@ class achievement_killed_exp_or_honor_target : public AchievementCriteriaScript public: achievement_killed_exp_or_honor_target() : AchievementCriteriaScript("achievement_killed_exp_or_honor_target") { } - bool OnCheck(Player* player, Unit* target) OVERRIDE + bool OnCheck(Player* player, Unit* target) override { return target && player->isHonorOrXPTarget(target); } diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp new file mode 100644 index 00000000000..057f3d6ee36 --- /dev/null +++ b/src/server/scripts/World/action_ip_logger.cpp @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "Channel.h" +#include "Guild.h" +#include "Group.h" + +enum IPLoggingTypes +{ + + // AccountActionIpLogger(); + ACCOUNT_LOGIN = 0, + ACCOUNT_FAIL_LOGIN = 1, + ACCOUNT_CHANGE_PW = 2, + ACCOUNT_CHANGE_PW_FAIL = 3, // Only two types of account changes exist... + ACCOUNT_CHANGE_EMAIL = 4, + ACCOUNT_CHANGE_EMAIL_FAIL = 5, // ...so we log them individually + // OBSOLETE - ACCOUNT_LOGOUT = 6, /* Can not be logged. We still keep the type however */ + // CharacterActionIpLogger(); + CHARACTER_CREATE = 7, + CHARACTER_LOGIN = 8, + CHARACTER_LOGOUT = 9, + // CharacterDeleteActionIpLogger(); + CHARACTER_DELETE = 10, + CHARACTER_FAILED_DELETE = 11, + // AccountActionIpLogger(), CharacterActionIpLogger(), CharacterActionIpLogger(); + UNKNOWN_ACTION = 12 +}; + +class AccountActionIpLogger : public AccountScript +{ + public: + AccountActionIpLogger() : AccountScript("AccountActionIpLogger") { } + + // We log last_ip instead of last_attempt_ip, as login was successful + // ACCOUNT_LOGIN = 0 + void OnAccountLogin(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_LOGIN); + } + + // We log last_attempt_ip instead of last_ip, as failed login doesn't necessarily mean approperiate user + // ACCOUNT_FAIL_LOGIN = 1 + void OnFailedAccountLogin(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_FAIL_LOGIN); + } + + // ACCOUNT_CHANGE_PW = 2 + void OnPasswordChange(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_CHANGE_PW); + } + + // ACCOUNT_CHANGE_PW_FAIL = 3 + void OnFailedPasswordChange(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_CHANGE_PW_FAIL); + } + + // Registration Email can NOT be changed apart from GM level users. Thus, we do not require to log them... + // ACCOUNT_CHANGE_EMAIL = 4 + void OnEmailChange(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_CHANGE_EMAIL); // ... they get logged by gm command logger anyway + } + + // ACCOUNT_CHANGE_EMAIL_FAIL = 5 + void OnFailedEmailChange(uint32 accountId) override + { + AccountIPLogAction(accountId, ACCOUNT_CHANGE_EMAIL_FAIL); + } + + /* It's impossible to log the account logout process out of character selection - shouldn't matter anyway, + * as ip doesn't change through playing (obviously).*/ + // ACCOUNT_LOGOUT = 6 + void AccountIPLogAction(uint32 accountId, IPLoggingTypes aType) + { + // Action IP Logger is only intialized if config is set up + // Else, this script isn't loaded in the first place: We require no config check. + + // We declare all the required variables + uint32 playerGuid = accountId; + uint32 characterGuid = 0; + std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later. + + // With this switch, we change systemNote so that we have a more accurate phrasing of what type it is. + // Avoids Magicnumbers in SQL table + switch (aType) + { + case ACCOUNT_LOGIN: + systemNote = "Logged on Successful AccountLogin"; + break; + case ACCOUNT_FAIL_LOGIN: + systemNote = "Logged on Failed AccountLogin"; + break; + case ACCOUNT_CHANGE_PW: + systemNote = "Logged on Successful Account Password Change"; + break; + case ACCOUNT_CHANGE_PW_FAIL: + systemNote = "Logged on Failed Account Password Change"; + break; + case ACCOUNT_CHANGE_EMAIL: + systemNote = "Logged on Successful Account Email Change"; + break; + case ACCOUNT_CHANGE_EMAIL_FAIL: + systemNote = "Logged on Failed Account Email Change"; + break; + /*case ACCOUNT_LOGOUT: + systemNote = "Logged on AccountLogout"; //Can not be logged + break;*/ + // Neither should happen. Ever. Period. If it does, call Ghostbusters and all your local software defences to investigate. + case UNKNOWN_ACTION: + default: + systemNote = "ERROR! Unknown action!"; + break; + } + + // Once we have done everything, we can insert the new log. + // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now; + // Rather, we let it be added with the SQL query. + if (aType != ACCOUNT_FAIL_LOGIN) + { + // As we can assume most account actions are NOT failed login, so this is the more accurate check. + // For those, we need last_ip... + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_ALDL_IP_LOGGING); + + stmt->setUInt32(0, playerGuid); + stmt->setUInt32(1, characterGuid); + stmt->setUInt8(2, aType); + stmt->setUInt32(3, playerGuid); + stmt->setString(4, systemNote.c_str()); + LoginDatabase.Execute(stmt); + } + else // ... but for failed login, we query last_attempt_ip from account table. Which we do with an unique query + { + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_FACL_IP_LOGGING); + + stmt->setUInt32(0, playerGuid); + stmt->setUInt32(1, characterGuid); + stmt->setUInt8(2, aType); + stmt->setUInt32(3, playerGuid); + stmt->setString(4, systemNote.c_str()); + LoginDatabase.Execute(stmt); + } + return; + } +}; + +class CharacterActionIpLogger : public PlayerScript +{ + public: + CharacterActionIpLogger() : PlayerScript("CharacterActionIpLogger") { } + + // CHARACTER_CREATE = 7 + void OnCreate(Player* player) override + { + CharacterIPLogAction(player, CHARACTER_CREATE); + } + + // CHARACTER_LOGIN = 8 + void OnLogin(Player* player, bool /*firstLogin*/) override + { + CharacterIPLogAction(player, CHARACTER_LOGIN); + } + + // CHARACTER_LOGOUT = 9 + void OnLogout(Player* player) override + { + CharacterIPLogAction(player, CHARACTER_LOGOUT); + } + + // CHARACTER_DELETE = 10 + // CHARACTER_FAILED_DELETE = 11 + // We don't log either here - they require a guid + + // UNKNOWN_ACTION = 12 + // There is no real hook we could use for that. + // Shouldn't happen anyway, should it ? Nothing to see here. + + /// Logs a number of actions done by players with an IP + void CharacterIPLogAction(Player* player, IPLoggingTypes aType) + { + // Action IP Logger is only intialized if config is set up + // Else, this script isn't loaded in the first place: We require no config check. + + // We declare all the required variables + uint32 playerGuid = player->GetSession()->GetAccountId(); + uint32 characterGuid = player->GetGUIDLow(); + const std::string currentIp = player->GetSession()->GetRemoteAddress(); + std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it... + + // ... with this switch, so that we have a more accurate phrasing of what type it is + switch (aType) + { + case CHARACTER_CREATE: + systemNote = "Logged on CharacterCreate"; + break; + case CHARACTER_LOGIN: + systemNote = "Logged on CharacterLogin"; + break; + case CHARACTER_LOGOUT: + systemNote = "Logged on CharacterLogout"; + break; + case CHARACTER_DELETE: + systemNote = "Logged on CharacterDelete"; + break; + case CHARACTER_FAILED_DELETE: + systemNote = "Logged on Failed CharacterDelete"; + break; + // Neither should happen. Ever. Period. If it does, call Mythbusters. + case UNKNOWN_ACTION: + default: + systemNote = "ERROR! Unknown action!"; + break; + } + + // Once we have done everything, we can insert the new log. + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_CHAR_IP_LOGGING); + + stmt->setUInt32(0, playerGuid); + stmt->setUInt32(1, characterGuid); + stmt->setUInt8(2, aType); + stmt->setString(3, currentIp.c_str()); // We query the ip here. + stmt->setString(4, systemNote.c_str()); + // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now; + // Rather, we let it be added with the SQL query. + + LoginDatabase.Execute(stmt); + return; + } +}; + +class CharacterDeleteActionIpLogger : public PlayerScript +{ +public: + CharacterDeleteActionIpLogger() : PlayerScript("CharacterDeleteActionIpLogger") { } + + // CHARACTER_DELETE = 10 + void OnDelete(uint64 guid, uint32 accountId) override + { + DeleteIPLogAction(guid, accountId, CHARACTER_DELETE); + } + + // CHARACTER_FAILED_DELETE = 11 + void OnFailedDelete(uint64 guid, uint32 accountId) override + { + DeleteIPLogAction(guid, accountId, CHARACTER_FAILED_DELETE); + } + + void DeleteIPLogAction(uint64 guid, uint32 playerGuid, IPLoggingTypes aType) + { + // Action IP Logger is only intialized if config is set up + // Else, this script isn't loaded in the first place: We require no config check. + + // We declare all the required variables + uint32 characterGuid = GUID_LOPART(guid); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way. + // Query playerGuid/accountId, as we only have characterGuid + std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later. + + // With this switch, we change systemNote so that we have a more accurate phrasing of what type it is. + // Avoids Magicnumbers in SQL table + switch (aType) + { + case CHARACTER_DELETE: + systemNote = "Logged on CharacterDelete"; + break; + case CHARACTER_FAILED_DELETE: + systemNote = "Logged on Failed CharacterDelete"; + break; + // Neither should happen. Ever. Period. If it does, call to whatever god you have for mercy and guidance. + case UNKNOWN_ACTION: + default: + systemNote = "ERROR! Unknown action!"; + break; + } + + // Once we have done everything, we can insert the new log. + PreparedStatement* stmt2 = LoginDatabase.GetPreparedStatement(LOGIN_INS_ALDL_IP_LOGGING); + + stmt2->setUInt32(0, playerGuid); + stmt2->setUInt32(1, characterGuid); + stmt2->setUInt8(2, aType); + stmt2->setUInt32(3, playerGuid); + stmt2->setString(4, systemNote.c_str()); + // Seeing as the time differences should be minimal, we do not get unixtime and the timestamp right now; + // Rather, we let it be added with the SQL query. + + LoginDatabase.Execute(stmt2); + return; + } +}; + + +void AddSC_action_ip_logger() +{ + new AccountActionIpLogger(); + new CharacterActionIpLogger(); + new CharacterDeleteActionIpLogger(); +} diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index d95c4f878fa..4393f72eb1b 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -51,13 +51,9 @@ enum CoilfangGOs class AreaTrigger_at_coilfang_waterfall : public AreaTriggerScript { public: + AreaTrigger_at_coilfang_waterfall() : AreaTriggerScript("at_coilfang_waterfall") { } - AreaTrigger_at_coilfang_waterfall() - : AreaTriggerScript("at_coilfang_waterfall") - { - } - - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (GameObject* go = GetClosestGameObjectWithEntry(player, GO_COILFANG_WATERFALL, 35.0f)) if (go->getLootState() == GO_READY) @@ -83,13 +79,9 @@ enum LegionTeleporter class AreaTrigger_at_legion_teleporter : public AreaTriggerScript { public: + AreaTrigger_at_legion_teleporter() : AreaTriggerScript("at_legion_teleporter") { } - AreaTrigger_at_legion_teleporter() - : AreaTriggerScript("at_legion_teleporter") - { - } - - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (player->IsAlive() && !player->IsInCombat()) { @@ -125,13 +117,9 @@ enum StormwrightShelf class AreaTrigger_at_stormwright_shelf : public AreaTriggerScript { public: + AreaTrigger_at_stormwright_shelf() : AreaTriggerScript("at_stormwright_shelf") { } - AreaTrigger_at_stormwright_shelf() - : AreaTriggerScript("at_stormwright_shelf") - { - } - - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (!player->isDead() && player->GetQuestStatus(QUEST_STRENGTH_OF_THE_TEMPEST) == QUEST_STATUS_INCOMPLETE) player->CastSpell(player, SPELL_CREATE_TRUE_POWER_OF_THE_TEMPEST, false); @@ -153,13 +141,9 @@ enum ScentLarkorwi class AreaTrigger_at_scent_larkorwi : public AreaTriggerScript { public: + AreaTrigger_at_scent_larkorwi() : AreaTriggerScript("at_scent_larkorwi") { } - AreaTrigger_at_scent_larkorwi() - : AreaTriggerScript("at_scent_larkorwi") - { - } - - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (!player->isDead() && player->GetQuestStatus(QUEST_SCENT_OF_LARKORWI) == QUEST_STATUS_INCOMPLETE) { @@ -184,13 +168,9 @@ enum AtLastRites class AreaTrigger_at_last_rites : public AreaTriggerScript { public: + AreaTrigger_at_last_rites() : AreaTriggerScript("at_last_rites") { } - AreaTrigger_at_last_rites() - : AreaTriggerScript("at_last_rites") - { - } - - bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override { if (!(player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_COMPLETE || @@ -246,10 +226,9 @@ enum Waygate class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript { public: - AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override { if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE || (player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED))) @@ -286,7 +265,7 @@ class AreaTrigger_at_nats_landing : public AreaTriggerScript public: AreaTrigger_at_nats_landing() : AreaTriggerScript("at_nats_landing") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override { if (!player->IsAlive() || !player->HasAura(SPELL_FISH_PASTE)) return false; @@ -331,7 +310,7 @@ class AreaTrigger_at_brewfest : public AreaTriggerScript _triggerTimes[AT_BREWFEST_DUROTAR] = _triggerTimes[AT_BREWFEST_DUN_MOROGH] = 0; } - bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override { uint32 triggerId = trigger->id; // Second trigger happened too early after first, skip for now @@ -384,7 +363,7 @@ class AreaTrigger_at_area_52_entrance : public AreaTriggerScript _triggerTimes[AT_AREA_52_SOUTH] = _triggerTimes[AT_AREA_52_NORTH] = _triggerTimes[AT_AREA_52_WEST] = _triggerTimes[AT_AREA_52_EAST] = 0; } - bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* trigger) override { float x = 0.0f, y = 0.0f, z = 0.0f; @@ -456,16 +435,16 @@ public: stormforgedEradictorGUID = 0; } - bool OnTrigger(Player* player, AreaTriggerEntry const* /* trigger */) OVERRIDE + bool OnTrigger(Player* player, AreaTriggerEntry const* /* trigger */) override { if (player->GetQuestStatus(QUEST_THE_LONESOME_WATCHER) != QUEST_STATUS_INCOMPLETE) return false; - Creature* stormforgedMonitor = Creature::GetCreature(*player, stormforgedMonitorGUID); + Creature* stormforgedMonitor = ObjectAccessor::GetCreature(*player, stormforgedMonitorGUID); if (stormforgedMonitor) return false; - Creature* stormforgedEradictor = Creature::GetCreature(*player, stormforgedEradictorGUID); + Creature* stormforgedEradictor = ObjectAccessor::GetCreature(*player, stormforgedEradictorGUID); if (stormforgedEradictor) return false; diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index c74405628b5..950b4cd10e9 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -94,7 +94,7 @@ struct emerald_dragonAI : public WorldBossAI { } - void Reset() OVERRIDE + void Reset() override { WorldBossAI::Reset(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); @@ -106,14 +106,14 @@ struct emerald_dragonAI : public WorldBossAI } // Target killed during encounter, mark them as suspectible for Aura Of Nature - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) who->CastSpell(who, SPELL_MARK_OF_NATURE, true); } // Execute and reschedule base events shared between all Emerald Dragons - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -137,7 +137,7 @@ struct emerald_dragonAI : public WorldBossAI } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -172,12 +172,12 @@ class npc_dream_fog : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _roamTimer = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -209,7 +209,7 @@ class npc_dream_fog : public CreatureScript uint32 _roamTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dream_fogAI(creature); } @@ -249,21 +249,21 @@ class boss_ysondre : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _stage = 1; emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_YSONDRE_AGGRO); WorldBossAI::EnterCombat(who); } // Summon druid spirits on 75%, 50% and 25% health - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!HealthAbovePct(100 - 25 * _stage)) { @@ -275,7 +275,7 @@ class boss_ysondre : public CreatureScript } } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -293,7 +293,7 @@ class boss_ysondre : public CreatureScript uint8 _stage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_ysondreAI(creature); } @@ -337,20 +337,20 @@ class boss_lethon : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _stage = 1; emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_SHADOW_BOLT_WHIRL, 10000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_LETHON_AGGRO); WorldBossAI::EnterCombat(who); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!HealthAbovePct(100 - 25 * _stage)) { @@ -360,17 +360,16 @@ class boss_lethon : public CreatureScript } } - void SpellHitTarget(Unit* target, SpellInfo const* spell) OVERRIDE + void SpellHitTarget(Unit* target, SpellInfo const* spell) override { if (spell->Id == SPELL_DRAW_SPIRIT && target->GetTypeId() == TYPEID_PLAYER) { - Position targetPos; - target->GetPosition(&targetPos); + Position targetPos = target->GetPosition(); me->SummonCreature(NPC_SPIRIT_SHADE, targetPos, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 50000); } } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -388,7 +387,7 @@ class boss_lethon : public CreatureScript uint8 _stage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_lethonAI(creature); } @@ -405,13 +404,13 @@ class npc_spirit_shade : public CreatureScript { } - void IsSummonedBy(Unit* summoner) OVERRIDE + void IsSummonedBy(Unit* summoner) override { _summonerGuid = summoner->GetGUID(); me->GetMotionMaster()->MoveFollow(summoner, 0.0f, 0.0f); } - void MovementInform(uint32 moveType, uint32 data) OVERRIDE + void MovementInform(uint32 moveType, uint32 data) override { if (moveType == FOLLOW_MOTION_TYPE && data == _summonerGuid) { @@ -424,7 +423,7 @@ class npc_spirit_shade : public CreatureScript uint64 _summonerGuid; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spirit_shadeAI(creature); } @@ -460,27 +459,27 @@ class boss_emeriss : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { _stage = 1; emerald_dragonAI::Reset(); events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000); } - void KilledUnit(Unit* who) OVERRIDE + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) DoCast(who, SPELL_PUTRID_MUSHROOM, true); emerald_dragonAI::KilledUnit(who); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_EMERISS_AGGRO); WorldBossAI::EnterCombat(who); } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { if (!HealthAbovePct(100 - 25 * _stage)) { @@ -490,7 +489,7 @@ class boss_emeriss : public CreatureScript } } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -508,7 +507,7 @@ class boss_emeriss : public CreatureScript uint8 _stage; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_emerissAI(creature); } @@ -552,7 +551,7 @@ class boss_taerar : public CreatureScript { } - void Reset() OVERRIDE + void Reset() override { me->RemoveAurasDueToSpell(SPELL_SHADE); _stage = 1; @@ -566,18 +565,18 @@ class boss_taerar : public CreatureScript events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30000); } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { Talk(SAY_TAERAR_AGGRO); emerald_dragonAI::EnterCombat(who); } - void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) OVERRIDE + void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override { --_shades; } - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) OVERRIDE + void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override { // At 75, 50 or 25 percent health, we need to activate the shades and go "banished" // Note: _stage holds the amount of times they have been summoned @@ -604,7 +603,7 @@ class boss_taerar : public CreatureScript } } - void ExecuteEvent(uint32 eventId) OVERRIDE + void ExecuteEvent(uint32 eventId) override { switch (eventId) { @@ -622,7 +621,7 @@ class boss_taerar : public CreatureScript } } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) return; @@ -658,7 +657,7 @@ class boss_taerar : public CreatureScript uint8 _stage; // check which "shade phase" we're at (75-50-25 percentage counters) }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new boss_taerarAI(creature); } @@ -695,13 +694,13 @@ class spell_dream_fog_sleep : public SpellScriptLoader targets.remove_if(DreamFogTargetSelector()); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dream_fog_sleep_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_dream_fog_sleep_SpellScript(); } @@ -734,7 +733,7 @@ class spell_mark_of_nature : public SpellScriptLoader { PrepareSpellScript(spell_mark_of_nature_SpellScript); - bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_NATURE)) return false; @@ -754,14 +753,14 @@ class spell_mark_of_nature : public SpellScriptLoader GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_NATURE, true); } - void Register() OVERRIDE + void Register() override { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_nature_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_mark_of_nature_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); } }; - SpellScript* GetSpellScript() const OVERRIDE + SpellScript* GetSpellScript() const override { return new spell_mark_of_nature_SpellScript(); } @@ -782,4 +781,4 @@ void AddSC_emerald_dragons() // dragon spellscripts new spell_dream_fog_sleep(); new spell_mark_of_nature(); -}; +} diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp index ef854246d20..ac0f4478571 100644 --- a/src/server/scripts/World/chat_log.cpp +++ b/src/server/scripts/World/chat_log.cpp @@ -22,144 +22,133 @@ class ChatLogScript : public PlayerScript { -public: - ChatLogScript() : PlayerScript("ChatLogScript") { } + public: + ChatLogScript() : PlayerScript("ChatLogScript") { } - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) - { - switch (type) + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) override { - case CHAT_MSG_ADDON: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s sends: %s", - player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_SAY: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[SAY] Player %s says (language %u): %s", + switch (type) + { + case CHAT_MSG_SAY: + TC_LOG_DEBUG("chat.log.say", "Player %s says (language %u): %s", player->GetName().c_str(), lang, msg.c_str()); - break; + break; - case CHAT_MSG_EMOTE: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[TEXTEMOTE] Player %s emotes: %s", + case CHAT_MSG_EMOTE: + TC_LOG_DEBUG("chat.log.emote", "Player %s emotes: %s", player->GetName().c_str(), msg.c_str()); - break; + break; - case CHAT_MSG_YELL: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[YELL] Player %s yells (language %u): %s", + case CHAT_MSG_YELL: + TC_LOG_DEBUG("chat.log.yell", "Player %s yells (language %u): %s", player->GetName().c_str(), lang, msg.c_str()); - break; + break; + } + } + + void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) override + { + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.whisper", "Player %s tells %s: %s", + player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.whisper", "Player %s tells %s: %s", + player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); } - } - - void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) - { - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_WHISPER)) - TC_LOG_DEBUG("chat.log", "[WHISPER] Player %s tells %s: %s", - player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells %s: %s", - player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); - } - - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) - { - //! NOTE: - //! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER" - switch (type) + + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) override { - case CHAT_MSG_PARTY: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_PARTY)) - TC_LOG_DEBUG("chat.log", "[PARTY] Player %s tells group with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells group with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_PARTY_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PARTY)) - TC_LOG_DEBUG("chat.log", "[PARTY] Leader %s tells group: %s", + //! NOTE: + //! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER" + switch (type) + { + case CHAT_MSG_PARTY: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.party", "Player %s tells group with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.party", "Player %s tells group with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_PARTY_LEADER: + TC_LOG_DEBUG("chat.log.party", "Leader %s tells group: %s", player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_RAID: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Player %s tells raid with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells raid with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_RAID_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Leader player %s tells raid: %s", + break; + + case CHAT_MSG_RAID: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.raid", "Player %s tells raid with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.raid", "Player %s tells raid with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_RAID_LEADER: + TC_LOG_DEBUG("chat.log.raid", "Leader player %s tells raid: %s", player->GetName().c_str(), msg.c_str()); - break; + break; - case CHAT_MSG_RAID_WARNING: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Leader player %s warns raid with: %s", + case CHAT_MSG_RAID_WARNING: + TC_LOG_DEBUG("chat.log.raid", "Leader player %s warns raid with: %s", player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_BATTLEGROUND: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_BGROUND)) - TC_LOG_DEBUG("chat.log", "[BATTLEGROUND] Player %s tells battleground with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells battleground with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_BATTLEGROUND_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_BGROUND)) - TC_LOG_DEBUG("chat.log", "[BATTLEGROUND] Leader player %s tells battleground: %s", + break; + + case CHAT_MSG_BATTLEGROUND: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.bg", "Player %s tells battleground with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.bg", "Player %s tells battleground with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_BATTLEGROUND_LEADER: + TC_LOG_DEBUG("chat.log.bg", "Leader player %s tells battleground: %s", player->GetName().c_str(), msg.c_str()); - break; + break; + } } - } - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) - { - switch (type) + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) override { - case CHAT_MSG_GUILD: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_GUILD)) - TC_LOG_DEBUG("chat.log", "[GUILD] Player %s tells guild %s: %s", - player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s sends to guild %s: %s", + switch (type) + { + case CHAT_MSG_GUILD: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.guild", "Player %s tells guild %s: %s", + player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.guild", "Player %s sends to guild %s: %s", + player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_OFFICER: + TC_LOG_DEBUG("chat.log.guild.officer", "Player %s tells guild %s officers: %s", player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - break; + break; + } + } - case CHAT_MSG_OFFICER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_GUILD)) - TC_LOG_DEBUG("chat.log", "[OFFICER] Player %s tells guild %s officers: %s", - player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - break; + void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) override + { + bool isSystem = channel && + (channel->HasFlag(CHANNEL_FLAG_TRADE) || + channel->HasFlag(CHANNEL_FLAG_GENERAL) || + channel->HasFlag(CHANNEL_FLAG_CITY) || + channel->HasFlag(CHANNEL_FLAG_LFG)); + + if (isSystem) + TC_LOG_DEBUG("chat.log.system", "Player %s tells channel %s: %s", + player->GetName().c_str(), channel->GetName().c_str(), msg.c_str()); + else + { + std::string channelName = channel ? channel->GetName() : "<unknown>"; + TC_LOG_DEBUG("chat.log.channel." + channelName, "Player %s tells channel %s: %s", + player->GetName().c_str(), channelName.c_str(), msg.c_str()); + } } - } - - void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) - { - bool isSystem = channel && - (channel->HasFlag(CHANNEL_FLAG_TRADE) || - channel->HasFlag(CHANNEL_FLAG_GENERAL) || - channel->HasFlag(CHANNEL_FLAG_CITY) || - channel->HasFlag(CHANNEL_FLAG_LFG)); - - if (sWorld->getBoolConfig(CONFIG_CHATLOG_SYSCHAN) && isSystem) - TC_LOG_DEBUG("chat.log", "[SYSCHAN] Player %s tells channel %s: %s", - player->GetName().c_str(), channel->GetName().c_str(), msg.c_str()); - else if (sWorld->getBoolConfig(CONFIG_CHATLOG_CHANNEL)) - TC_LOG_DEBUG("chat.log", "[CHANNEL] Player %s tells channel %s: %s", - player->GetName().c_str(), channel ? channel->GetName().c_str() : "<unknown>", msg.c_str()); - } }; void AddSC_chat_log() diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index ddb4cc4c8d1..4bb88a560bb 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -69,7 +69,7 @@ class go_cat_figurine : public GameObjectScript public: go_cat_figurine() : GameObjectScript("go_cat_figurine") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { player->CastSpell(player, SPELL_SUMMON_GHOST_SABER, true); return false; @@ -85,7 +85,7 @@ class go_barov_journal : public GameObjectScript public: go_barov_journal() : GameObjectScript("go_barov_journal") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !player->HasSpell(26086)) player->CastSpell(player, 26095, false); @@ -103,7 +103,7 @@ class go_field_repair_bot_74A : public GameObjectScript public: go_field_repair_bot_74A() : GameObjectScript("go_field_repair_bot_74A") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->HasSkill(SKILL_ENGINEERING) && player->GetBaseSkillValue(SKILL_ENGINEERING) >= 300 && !player->HasSpell(22704)) player->CastSpell(player, 22864, false); @@ -118,7 +118,8 @@ public: enum GildedBrazier { - NPC_STILLBLADE = 17716, + NPC_STILLBLADE = 17716, + QUEST_THE_FIRST_TRIAL = 9678 }; class go_gilded_brazier : public GameObjectScript @@ -126,11 +127,11 @@ class go_gilded_brazier : public GameObjectScript public: go_gilded_brazier() : GameObjectScript("go_gilded_brazier") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER) { - if (player->GetQuestStatus(9678) == QUEST_STATUS_INCOMPLETE) + if (player->GetQuestStatus(QUEST_THE_FIRST_TRIAL) == QUEST_STATUS_INCOMPLETE) { if (Creature* Stillblade = player->SummonCreature(NPC_STILLBLADE, 8106.11f, -7542.06f, 151.775f, 3.02598f, TEMPSUMMON_DEAD_DESPAWN, 60000)) Stillblade->AI()->AttackStart(player); @@ -149,7 +150,7 @@ class go_orb_of_command : public GameObjectScript public: go_orb_of_command() : GameObjectScript("go_orb_of_command") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->GetQuestRewardStatus(7761)) player->CastSpell(player, 23460, true); @@ -167,7 +168,7 @@ class go_tablet_of_madness : public GameObjectScript public: go_tablet_of_madness() : GameObjectScript("go_tablet_of_madness") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->HasSkill(SKILL_ALCHEMY) && player->GetSkillValue(SKILL_ALCHEMY) >= 300 && !player->HasSpell(24266)) player->CastSpell(player, 24267, false); @@ -186,7 +187,7 @@ public: go_tablet_of_the_seven() : GameObjectScript("go_tablet_of_the_seven") { } /// @todo use gossip option ("Transcript the Tablet") instead, if Trinity adds support. - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) return true; @@ -207,7 +208,7 @@ class go_jump_a_tron : public GameObjectScript public: go_jump_a_tron() : GameObjectScript("go_jump_a_tron") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE) player->CastSpell(player, 33382, true); @@ -241,7 +242,7 @@ class go_ethereum_prison : public GameObjectScript public: go_ethereum_prison() : GameObjectScript("go_ethereum_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32)); @@ -291,7 +292,7 @@ class go_ethereum_stasis : public GameObjectScript public: go_ethereum_stasis() : GameObjectScript("go_ethereum_stasis") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32)); @@ -317,7 +318,7 @@ class go_resonite_cask : public GameObjectScript public: go_resonite_cask() : GameObjectScript("go_resonite_cask") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER) go->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); @@ -340,7 +341,7 @@ class go_sacred_fire_of_life : public GameObjectScript public: go_sacred_fire_of_life() : GameObjectScript("go_sacred_fire_of_life") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER) player->SummonCreature(NPC_ARIKARA, -5008.338f, -2118.894f, 83.657f, 0.874f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); @@ -368,7 +369,7 @@ class go_shrine_of_the_birds : public GameObjectScript public: go_shrine_of_the_birds() : GameObjectScript("go_shrine_of_the_birds") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { uint32 BirdEntry = 0; @@ -411,7 +412,7 @@ class go_southfury_moonstone : public GameObjectScript public: go_southfury_moonstone() : GameObjectScript("go_southfury_moonstone") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { //implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose //player->CastSpell(player, SPELL_SUMMON_RIZZLE, false); @@ -440,7 +441,7 @@ class go_tele_to_dalaran_crystal : public GameObjectScript public: go_tele_to_dalaran_crystal() : GameObjectScript("go_tele_to_dalaran_crystal") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG)) return false; @@ -460,7 +461,7 @@ class go_tele_to_violet_stand : public GameObjectScript public: go_tele_to_violet_stand() : GameObjectScript("go_tele_to_violet_stand") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || player->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE) return false; @@ -490,7 +491,7 @@ class go_fel_crystalforge : public GameObjectScript public: go_fel_crystalforge() : GameObjectScript("go_fel_crystalforge") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ player->PrepareQuestMenu(go->GetGUID()); /* return true*/ @@ -503,7 +504,7 @@ public: return true; } - bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -549,7 +550,7 @@ class go_bashir_crystalforge : public GameObjectScript public: go_bashir_crystalforge() : GameObjectScript("go_bashir_crystalforge") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ player->PrepareQuestMenu(go->GetGUID()); /* return true*/ @@ -562,7 +563,7 @@ public: return true; } - bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -613,7 +614,7 @@ class go_matrix_punchograph : public GameObjectScript public: go_matrix_punchograph() : GameObjectScript("go_matrix_punchograph") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { switch (go->GetEntry()) { @@ -666,7 +667,7 @@ class go_scourge_cage : public GameObjectScript public: go_scourge_cage() : GameObjectScript("go_scourge_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (Creature* pNearestPrisoner = go->FindNearestCreature(NPC_SCOURGE_PRISONER, 5.0f, true)) @@ -694,7 +695,7 @@ class go_arcane_prison : public GameObjectScript public: go_arcane_prison() : GameObjectScript("go_arcane_prison") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_PRISON_BREAK) == QUEST_STATUS_INCOMPLETE) { @@ -721,7 +722,7 @@ class go_blood_filled_orb : public GameObjectScript public: go_blood_filled_orb() : GameObjectScript("go_blood_filled_orb") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (go->GetGoType() == GAMEOBJECT_TYPE_GOOBER) player->SummonCreature(NPC_ZELEMAR, -369.746f, 166.759f, -21.50f, 5.235f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); @@ -752,7 +753,7 @@ class go_jotunheim_cage : public GameObjectScript public: go_jotunheim_cage() : GameObjectScript("go_jotunheim_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); Creature* pPrisoner = go->FindNearestCreature(NPC_EBON_BLADE_PRISONER_HUMAN, 5.0f, true); @@ -802,7 +803,7 @@ class go_table_theka : public GameObjectScript public: go_table_theka() : GameObjectScript("go_table_theka") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (player->GetQuestStatus(QUEST_SPIDER_GOLD) == QUEST_STATUS_INCOMPLETE) player->AreaExploredOrEventHappens(QUEST_SPIDER_GOLD); @@ -828,7 +829,7 @@ class go_inconspicuous_landmark : public GameObjectScript public: go_inconspicuous_landmark() : GameObjectScript("go_inconspicuous_landmark") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) OVERRIDE + bool OnGossipHello(Player* player, GameObject* /*go*/) override { if (player->HasItemCount(ITEM_CUERGOS_KEY)) return false; @@ -854,7 +855,7 @@ class go_ethereal_teleport_pad : public GameObjectScript public: go_ethereal_teleport_pad() : GameObjectScript("go_ethereal_teleport_pad") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { if (!player->HasItemCount(ITEM_TELEPORTER_POWER_PACK)) return false; @@ -934,7 +935,7 @@ class go_soulwell : public GameObjectScript /// _and_ CMSG_GAMEOBJECT_REPORT_USE, this GossipHello hook is called /// twice. The script's handling is fine as it won't remove two charges /// on the well. We have to find how to segregate REPORT_USE and USE. - bool GossipHello(Player* player) OVERRIDE + bool GossipHello(Player* player) override { Unit* owner = go->GetOwner(); if (_stoneSpell == 0 || _stoneId == 0) @@ -964,7 +965,7 @@ class go_soulwell : public GameObjectScript uint32 _stoneId; }; - GameObjectAI* GetAI(GameObject* go) const OVERRIDE + GameObjectAI* GetAI(GameObject* go) const override { return new go_soulwellAI(go); } @@ -989,7 +990,7 @@ class go_dragonflayer_cage : public GameObjectScript public: go_dragonflayer_cage() : GameObjectScript("go_dragonflayer_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_PRISONERS_OF_WYRMSKULL) != QUEST_STATUS_INCOMPLETE) @@ -1037,7 +1038,7 @@ class go_tadpole_cage : public GameObjectScript public: go_tadpole_cage() : GameObjectScript("go_tadpole_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_OH_NOES_THE_TADPOLES) == QUEST_STATUS_INCOMPLETE) @@ -1078,7 +1079,7 @@ class go_amberpine_outhouse : public GameObjectScript public: go_amberpine_outhouse() : GameObjectScript("go_amberpine_outhouse") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { QuestStatus status = player->GetQuestStatus(QUEST_DOING_YOUR_DUTY); if (status == QUEST_STATUS_INCOMPLETE || status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED) @@ -1092,7 +1093,7 @@ public: return true; } - bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF +1) @@ -1134,7 +1135,7 @@ class go_hive_pod : public GameObjectScript public: go_hive_pod() : GameObjectScript("go_hive_pod") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { player->SendLoot(go->GetGUID(), LOOT_CORPSE); go->SummonCreature(NPC_HIVE_AMBUSHER, go->GetPositionX()+1, go->GetPositionY(), go->GetPositionZ(), go->GetAngle(player), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); @@ -1148,7 +1149,7 @@ class go_massive_seaforium_charge : public GameObjectScript public: go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE + bool OnGossipHello(Player* /*player*/, GameObject* go) override { go->SetLootState(GO_JUST_DEACTIVATED); return true; @@ -1172,7 +1173,7 @@ class go_gjalerbron_cage : public GameObjectScript public: go_gjalerbron_cage() : GameObjectScript("go_gjalerbron_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) || @@ -1199,7 +1200,7 @@ class go_large_gjalerbron_cage : public GameObjectScript public: go_large_gjalerbron_cage() : GameObjectScript("go_large_gjalerbron_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if ((player->GetTeamId() == TEAM_ALLIANCE && player->GetQuestStatus(QUEST_ALLIANCE_OF_KEYS_AND_CAGES) == QUEST_STATUS_INCOMPLETE) || @@ -1234,7 +1235,7 @@ class go_veil_skith_cage : public GameObjectScript public: go_veil_skith_cage() : GameObjectScript("go_veil_skith_cage") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(); if (player->GetQuestStatus(QUEST_MISSING_FRIENDS) == QUEST_STATUS_INCOMPLETE) @@ -1271,7 +1272,7 @@ class go_frostblade_shrine : public GameObjectScript public: go_frostblade_shrine() : GameObjectScript("go_frostblade_shrine") { } - bool OnGossipHello(Player* player, GameObject* go) OVERRIDE + bool OnGossipHello(Player* player, GameObject* go) override { go->UseDoorOrButton(10); if (!player->HasAura(SPELL_RECENT_MEDITATION)) @@ -1298,7 +1299,7 @@ class go_midsummer_bonfire : public GameObjectScript public: go_midsummer_bonfire() : GameObjectScript("go_midsummer_bonfire") { } - bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) OVERRIDE + bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) override { player->CastSpell(player, STAMP_OUT_BONFIRE_QUEST_COMPLETE, true); player->CLOSE_GOSSIP_MENU(); diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index 676eb7bd64f..a156a41fcef 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -56,13 +56,13 @@ public: { guard_genericAI(Creature* creature) : GuardAI(creature) { } - void Reset() OVERRIDE + void Reset() override { globalCooldown = 0; buffTimer = 0; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (me->GetEntry() == NPC_CENARION_HOLD_INFANTRY) Talk(SAY_GUARD_SIL_AGGRO, who); @@ -70,7 +70,7 @@ public: DoCast(who, spell->Id); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Always decrease our global cooldown first if (globalCooldown > diff) @@ -219,7 +219,7 @@ public: } } - void ReceiveEmote(Player* player, uint32 textEmote) OVERRIDE + void ReceiveEmote(Player* player, uint32 textEmote) override { switch (me->GetEntry()) { @@ -242,7 +242,7 @@ public: uint32 buffTimer; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new guard_genericAI(creature); } @@ -265,7 +265,7 @@ public: { guard_shattrath_scryerAI(Creature* creature) : GuardAI(creature) { } - void Reset() OVERRIDE + void Reset() override { banishTimer = 5000; exileTimer = 8500; @@ -273,7 +273,7 @@ public: canTeleport = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -282,7 +282,7 @@ public: { if (exileTimer <= diff) { - if (Unit* temp = Unit::GetUnit(*me, playerGUID)) + if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID)) { temp->CastSpell(temp, SPELL_EXILE, true); temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true); @@ -315,7 +315,7 @@ public: bool canTeleport; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new guard_shattrath_scryerAI(creature); } @@ -330,7 +330,7 @@ public: { guard_shattrath_aldorAI(Creature* creature) : GuardAI(creature) { } - void Reset() OVERRIDE + void Reset() override { banishTimer = 5000; exileTimer = 8500; @@ -338,7 +338,7 @@ public: canTeleport = false; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; @@ -347,7 +347,7 @@ public: { if (exileTimer <= diff) { - if (Unit* temp = Unit::GetUnit(*me, playerGUID)) + if (Unit* temp = ObjectAccessor::GetUnit(*me, playerGUID)) { temp->CastSpell(temp, SPELL_EXILE, true); temp->CastSpell(temp, SPELL_BANISH_TELEPORT, true); @@ -379,7 +379,7 @@ public: bool canTeleport; }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new guard_shattrath_aldorAI(creature); } @@ -387,7 +387,7 @@ public: void AddSC_guards() { - new guard_generic; - new guard_shattrath_aldor; - new guard_shattrath_scryer; + new guard_generic(); + new guard_shattrath_aldor(); + new guard_shattrath_scryer(); } diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index 545ee9f4b43..4cf2ef971eb 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -49,7 +49,7 @@ class item_only_for_flight : public ItemScript public: item_only_for_flight() : ItemScript("item_only_for_flight") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override { uint32 itemId = item->GetEntry(); bool disabled = false; @@ -90,7 +90,7 @@ class item_nether_wraith_beacon : public ItemScript public: item_nether_wraith_beacon() : ItemScript("item_nether_wraith_beacon") { } - bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& /*targets*/) override { if (player->GetQuestStatus(10832) == QUEST_STATUS_INCOMPLETE) { @@ -113,7 +113,7 @@ class item_gor_dreks_ointment : public ItemScript public: item_gor_dreks_ointment() : ItemScript("item_gor_dreks_ointment") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) OVERRIDE + bool OnUse(Player* player, Item* item, SpellCastTargets const& targets) override { if (targets.GetUnitTarget() && targets.GetUnitTarget()->GetTypeId() == TYPEID_UNIT && targets.GetUnitTarget()->GetEntry() == 20748 && !targets.GetUnitTarget()->HasAura(32578)) @@ -133,7 +133,7 @@ class item_incendiary_explosives : public ItemScript public: item_incendiary_explosives() : ItemScript("item_incendiary_explosives") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const & /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* item, SpellCastTargets const & /*targets*/) override { if (player->FindNearestCreature(26248, 15) || player->FindNearestCreature(26249, 15)) return false; @@ -154,7 +154,7 @@ class item_mysterious_egg : public ItemScript public: item_mysterious_egg() : ItemScript("item_mysterious_egg") { } - bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) OVERRIDE + bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) override { ItemPosCountVec dest; uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 39883, 1); // Cracked Egg @@ -174,7 +174,7 @@ class item_disgusting_jar : public ItemScript public: item_disgusting_jar() : ItemScript("item_disgusting_jar") { } - bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) OVERRIDE + bool OnExpire(Player* player, ItemTemplate const* /*pItemProto*/) override { ItemPosCountVec dest; uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 44718, 1); // Ripe Disgusting Jar @@ -223,7 +223,7 @@ class item_pile_fake_furs : public ItemScript public: item_pile_fake_furs() : ItemScript("item_pile_fake_furs") { } - bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const & /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const & /*targets*/) override { GameObject* go = NULL; for (uint8 i = 0; i < CaribouTrapsNum; ++i) @@ -268,7 +268,7 @@ class item_petrov_cluster_bombs : public ItemScript public: item_petrov_cluster_bombs() : ItemScript("item_petrov_cluster_bombs") { } - bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) override { if (player->GetZoneId() != ZONE_ID_HOWLING) return false; @@ -334,7 +334,7 @@ class item_dehta_trap_smasher : public ItemScript public: item_dehta_trap_smasher() : ItemScript("item_dehta_trap_smasher") { } - bool OnUse(Player* player, Item* /*item*/, const SpellCastTargets & /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* /*item*/, const SpellCastTargets & /*targets*/) override { if (player->GetQuestStatus(QUEST_CANNOT_HELP_THEMSELVES) != QUEST_STATUS_INCOMPLETE) return false; @@ -370,7 +370,7 @@ class item_trident_of_nazjan : public ItemScript public: item_trident_of_nazjan() : ItemScript("item_Trident_of_Nazjan") { } - bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* item, const SpellCastTargets & /*targets*/) override { if (player->GetQuestStatus(QUEST_THE_EMISSARY) == QUEST_STATUS_INCOMPLETE) { @@ -397,7 +397,7 @@ class item_captured_frog : public ItemScript public: item_captured_frog() : ItemScript("item_captured_frog") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) OVERRIDE + bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override { if (player->GetQuestStatus(QUEST_THE_PERFECT_SPIES) == QUEST_STATUS_INCOMPLETE) { diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index 19ea4f9b60b..2eb91b7b8fe 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -42,20 +42,20 @@ public: uint32 BuffTimer; //This variable keeps track of buffs bool IsSelfRooted; - void Reset() OVERRIDE + void Reset() override { GlobalCooldown = 0; BuffTimer = 0; //Rebuff as soon as we can IsSelfRooted = false; } - void EnterCombat(Unit* who) OVERRIDE + void EnterCombat(Unit* who) override { if (!me->IsWithinMeleeRange(who)) IsSelfRooted = true; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { //Always decrease our global cooldown first if (GlobalCooldown > diff) @@ -163,7 +163,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new generic_creatureAI(creature); } @@ -186,7 +186,7 @@ public: uint32 timer, interval; const SpellInfo* spell; - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (timer <= diff) { @@ -199,7 +199,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new trigger_periodicAI(creature); } @@ -213,14 +213,14 @@ public: struct trigger_deathAI : public NullCreatureAI { trigger_deathAI(Creature* creature) : NullCreatureAI(creature) { } - void JustDied(Unit* killer) OVERRIDE + void JustDied(Unit* killer) override { if (me->m_spells[0]) me->CastSpell(killer, me->m_spells[0], true); } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new trigger_deathAI(creature); } @@ -229,6 +229,6 @@ public: void AddSC_generic_creature() { //new generic_creature; - new trigger_periodic; + new trigger_periodic(); //new trigger_death; } diff --git a/src/server/scripts/World/npc_innkeeper.cpp b/src/server/scripts/World/npc_innkeeper.cpp index 7a766fb9eb1..be56e57cc9d 100644 --- a/src/server/scripts/World/npc_innkeeper.cpp +++ b/src/server/scripts/World/npc_innkeeper.cpp @@ -49,7 +49,7 @@ class npc_innkeeper : public CreatureScript public: npc_innkeeper() : CreatureScript("npc_innkeeper") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (IsHolidayActive(HOLIDAY_HALLOWS_END) && !player->HasAura(SPELL_TRICK_OR_TREATED)) { @@ -86,7 +86,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1 && IsHolidayActive(HOLIDAY_HALLOWS_END) && !player->HasAura(SPELL_TRICK_OR_TREATED)) @@ -134,6 +134,6 @@ public: void AddSC_npc_innkeeper() { - new npc_innkeeper; + new npc_innkeeper(); } diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index 5cbc54923e0..21489c714e2 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -382,7 +382,7 @@ public: return (player->HasSpell(S_TRANSMUTE) || player->HasSpell(S_ELIXIR) || player->HasSpell(S_POTION)); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -508,7 +508,7 @@ public: } } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) @@ -547,7 +547,7 @@ public: return (player->HasSpell(S_HAMMER) || player->HasSpell(S_AXE) || player->HasSpell(S_SWORD)); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -738,7 +738,7 @@ public: } } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) @@ -808,7 +808,7 @@ public: return res; } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { uint32 npcTextId = 0; std::string gossipItem; @@ -848,7 +848,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -886,7 +886,7 @@ class npc_prof_leather : public CreatureScript public: npc_prof_leather() : CreatureScript("npc_prof_leather") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -974,7 +974,7 @@ public: } } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) @@ -1009,7 +1009,7 @@ public: return (player->HasSpell(S_MOONCLOTH) || player->HasSpell(S_SHADOWEAVE) || player->HasSpell(S_SPELLFIRE)); } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -1136,7 +1136,7 @@ public: } } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 730523c85f4..5abc021e283 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -63,7 +63,7 @@ class npc_taxi : public CreatureScript public: npc_taxi() : CreatureScript("npc_taxi") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -162,7 +162,6 @@ public: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); break; case 17209: - player->SetTaxiCheater(true); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 29); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 30); @@ -173,7 +172,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index ac30f6f1e80..e67823a2939 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -56,6 +56,7 @@ EndContentData */ #include "CellImpl.h" #include "SpellAuras.h" #include "Pet.h" +#include "CreatureTextMgr.h" /*######## # npc_air_force_bots @@ -156,7 +157,7 @@ public: SpawnAssociation* SpawnAssoc; uint64 SpawnedGUID; - void Reset() OVERRIDE { } + void Reset() override { } Creature* SummonGuard() { @@ -175,7 +176,7 @@ public: Creature* GetSummonedGuard() { - Creature* creature = Unit::GetCreature(*me, SpawnedGUID); + Creature* creature = ObjectAccessor::GetCreature(*me, SpawnedGUID); if (creature && creature->IsAlive()) return creature; @@ -183,8 +184,7 @@ public: return NULL; } - void MoveInLineOfSight(Unit* who) OVERRIDE - + void MoveInLineOfSight(Unit* who) override { if (!SpawnAssoc) return; @@ -260,7 +260,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_air_force_botsAI(creature); } @@ -286,7 +286,7 @@ class npc_lunaclaw_spirit : public CreatureScript public: npc_lunaclaw_spirit() : CreatureScript("npc_lunaclaw_spirit") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_BODY_HEART_A) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_BODY_HEART_H) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_GRANT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); @@ -295,7 +295,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF + 1) @@ -333,16 +333,16 @@ public: uint32 ResetFlagTimer; - void Reset() OVERRIDE + void Reset() override { ResetFlagTimer = 120000; me->setFaction(FACTION_CHICKEN); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { // Reset flags after a certain time has passed so that the next player has to start the 'event' again if (me->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) @@ -360,7 +360,7 @@ public: DoMeleeAttackIfReady(); } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { switch (emote) { @@ -384,12 +384,12 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_chicken_cluckAI(creature); } - bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_CLUCK) CAST_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset(); @@ -397,7 +397,7 @@ public: return true; } - bool OnQuestComplete(Player* /*player*/, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestComplete(Player* /*player*/, Creature* creature, Quest const* quest) override { if (quest->GetQuestId() == QUEST_CLUCK) CAST_AI(npc_chicken_cluck::npc_chicken_cluckAI, creature->AI())->Reset(); @@ -429,7 +429,7 @@ public: bool Active; uint32 CanIteract; - void Reset() OVERRIDE + void Reset() override { Active = true; CanIteract = 3500; @@ -445,7 +445,7 @@ public: me->SendMessageToSet(&data, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (!Active) { @@ -460,9 +460,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { if (me->IsWithinLOS(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()) && me->IsWithinDistInMap(player, 30.0f)) { @@ -495,7 +495,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_dancing_flamesAI(creature); } @@ -589,7 +589,7 @@ public: std::list<uint64> Patients; std::vector<Location*> Coordinates; - void Reset() OVERRIDE + void Reset() override { PlayerGUID = 0; @@ -671,7 +671,7 @@ public: std::list<uint64>::const_iterator itr; for (itr = Patients.begin(); itr != Patients.end(); ++itr) { - if (Creature* patient = Unit::GetCreature((*me), *itr)) + if (Creature* patient = ObjectAccessor::GetCreature((*me), *itr)) patient->setDeathState(JUST_DIED); } } @@ -690,12 +690,12 @@ public: } } - void UpdateAI(uint32 diff) OVERRIDE; + void UpdateAI(uint32 diff) override; - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } }; - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) OVERRIDE + bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { if ((quest->GetQuestId() == 6624) || (quest->GetQuestId() == 6622)) CAST_AI(npc_doctor::npc_doctorAI, creature->AI())->BeginEvent(player); @@ -703,7 +703,7 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_doctorAI(creature); } @@ -725,7 +725,7 @@ public: uint64 DoctorGUID; Location* Coord; - void Reset() OVERRIDE + void Reset() override { DoctorGUID = 0; Coord = NULL; @@ -758,9 +758,9 @@ public: } } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { Player* player = caster->ToPlayer(); if (!player || !me->IsAlive() || spell->Id != 20804) @@ -768,7 +768,7 @@ public: if (player->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) if (DoctorGUID) - if (Creature* doctor = Unit::GetCreature(*me, DoctorGUID)) + if (Creature* doctor = ObjectAccessor::GetCreature(*me, DoctorGUID)) CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord); //make not selectable @@ -800,7 +800,7 @@ public: } } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { //lower HP on every world tick makes it a useful counter, not officlone though if (me->IsAlive() && me->GetHealth() > 6) @@ -814,13 +814,13 @@ public: me->SetFlag(UNIT_DYNAMIC_FLAGS, 32); if (DoctorGUID) - if (Creature* doctor = Unit::GetCreature((*me), DoctorGUID)) + if (Creature* doctor = ObjectAccessor::GetCreature((*me), DoctorGUID)) CAST_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientDied(Coord); } } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_injured_patientAI(creature); } @@ -927,7 +927,7 @@ public: uint32 RunAwayTimer; - void Reset() OVERRIDE + void Reset() override { CasterGUID = 0; @@ -941,9 +941,9 @@ public: me->SetHealth(me->CountPctFromMaxHealth(70)); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void SpellHit(Unit* caster, SpellInfo const* spell) OVERRIDE + void SpellHit(Unit* caster, SpellInfo const* spell) override { if (spell->Id == SPELL_LESSER_HEAL_R2 || spell->Id == SPELL_FORTITUDE_R1) { @@ -1053,18 +1053,18 @@ public: } } - void WaypointReached(uint32 /*waypointId*/) OVERRIDE + void WaypointReached(uint32 /*waypointId*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (CanRun && !me->IsInCombat()) { if (RunAwayTimer <= diff) { - if (Unit* unit = Unit::GetUnit(*me, CasterGUID)) + if (Unit* unit = ObjectAccessor::GetUnit(*me, CasterGUID)) { switch (me->GetEntry()) { @@ -1092,7 +1092,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_garments_of_questsAI(creature); } @@ -1116,16 +1116,16 @@ public: { npc_guardianAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE + void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE + void EnterCombat(Unit* /*who*/) override { } - void UpdateAI(uint32 /*diff*/) OVERRIDE + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -1138,7 +1138,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_guardianAI(creature); } @@ -1153,7 +1153,7 @@ class npc_mount_vendor : public CreatureScript public: npc_mount_vendor() : CreatureScript("npc_mount_vendor") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -1228,7 +1228,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_TRADE) @@ -1280,7 +1280,7 @@ class npc_sayge : public CreatureScript public: npc_sayge() : CreatureScript("npc_sayge") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -1349,7 +1349,7 @@ public: } } - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (sender) @@ -1411,8 +1411,8 @@ public: { npc_steam_tonkAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() OVERRIDE { } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void Reset() override { } + void EnterCombat(Unit* /*who*/) override { } void OnPossess(bool apply) { @@ -1429,7 +1429,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_steam_tonkAI(creature); } @@ -1454,17 +1454,17 @@ public: uint32 ExplosionTimer; - void Reset() OVERRIDE + void Reset() override { ExplosionTimer = 3000; } - void EnterCombat(Unit* /*who*/) OVERRIDE { } - void AttackStart(Unit* /*who*/) OVERRIDE { } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } + void AttackStart(Unit* /*who*/) override { } + void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (ExplosionTimer <= diff) { @@ -1476,7 +1476,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_tonk_mineAI(creature); } @@ -1500,7 +1500,7 @@ class npc_brewfest_reveler : public CreatureScript { npc_brewfest_revelerAI(Creature* creature) : ScriptedAI(creature) { } - void ReceiveEmote(Player* player, uint32 emote) OVERRIDE + void ReceiveEmote(Player* player, uint32 emote) override { if (!IsHolidayActive(HOLIDAY_BREWFEST)) return; @@ -1510,7 +1510,7 @@ class npc_brewfest_reveler : public CreatureScript } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_brewfest_revelerAI(creature); } @@ -1519,7 +1519,10 @@ class npc_brewfest_reveler : public CreatureScript enum TrainingDummy { NPC_ADVANCED_TARGET_DUMMY = 2674, - NPC_TARGET_DUMMY = 2673 + NPC_TARGET_DUMMY = 2673, + + EVENT_TD_CHECK_COMBAT = 1, + EVENT_TD_DESPAWN = 2 }; class npc_training_dummy : public CreatureScript @@ -1532,23 +1535,25 @@ public: npc_training_dummyAI(Creature* creature) : ScriptedAI(creature) { SetCombatMovement(false); - entry = creature->GetEntry(); } - uint32 entry; - uint32 resetTimer; - uint32 despawnTimer; + EventMap _events; + std::unordered_map<uint64, time_t> _damageTimes; - void Reset() OVERRIDE + void Reset() override { me->SetControlled(true, UNIT_STATE_STUNNED);//disable rotate me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave - resetTimer = 5000; - despawnTimer = 15000; + _events.Reset(); + _damageTimes.clear(); + if (me->GetEntry() != NPC_ADVANCED_TARGET_DUMMY && me->GetEntry() != NPC_TARGET_DUMMY) + _events.ScheduleEvent(EVENT_TD_CHECK_COMBAT, 1000); + else + _events.ScheduleEvent(EVENT_TD_DESPAWN, 15000); } - void EnterEvadeMode() OVERRIDE + void EnterEvadeMode() override { if (!_EnterEvadeMode()) return; @@ -1556,44 +1561,59 @@ public: Reset(); } - void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE + void DamageTaken(Unit* doneBy, uint32& damage) override { - resetTimer = 5000; + me->AddThreat(doneBy, float(damage)); // just to create threat reference + _damageTimes[doneBy->GetGUID()] = time(NULL); damage = 0; } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { - if (!UpdateVictim()) + if (!me->IsInCombat()) return; if (!me->HasUnitState(UNIT_STATE_STUNNED)) me->SetControlled(true, UNIT_STATE_STUNNED);//disable rotate - if (entry != NPC_ADVANCED_TARGET_DUMMY && entry != NPC_TARGET_DUMMY) + _events.Update(diff); + + if (uint32 eventId = _events.ExecuteEvent()) { - if (resetTimer <= diff) + switch (eventId) { - EnterEvadeMode(); - resetTimer = 5000; + case EVENT_TD_CHECK_COMBAT: + { + time_t now = time(NULL); + for (std::unordered_map<uint64, time_t>::iterator itr = _damageTimes.begin(); itr != _damageTimes.end();) + { + // If unit has not dealt damage to training dummy for 5 seconds, remove him from combat + if (itr->second < now - 5) + { + if (Unit* unit = ObjectAccessor::GetUnit(*me, itr->first)) + unit->getHostileRefManager().deleteReference(me); + + itr = _damageTimes.erase(itr); + } + else + ++itr; + } + _events.ScheduleEvent(EVENT_TD_CHECK_COMBAT, 1000); + break; + } + case EVENT_TD_DESPAWN: + me->DespawnOrUnsummon(1); + break; + default: + break; } - else - resetTimer -= diff; - return; - } - else - { - if (despawnTimer <= diff) - me->DespawnOrUnsummon(); - else - despawnTimer -= diff; } } - void MoveInLineOfSight(Unit* /*who*/) OVERRIDE { } + void MoveInLineOfSight(Unit* /*who*/) override { } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_training_dummyAI(creature); } @@ -1633,12 +1653,12 @@ class npc_wormhole : public CreatureScript { npc_wormholeAI(Creature* creature) : PassiveAI(creature) { } - void InitializeAI() OVERRIDE + void InitializeAI() override { _showUnderground = urand(0, 100) == 0; // Guessed value, it is really rare though } - uint32 GetData(uint32 type) const OVERRIDE + uint32 GetData(uint32 type) const override { return (type == DATA_SHOW_UNDERGROUND && _showUnderground) ? 1 : 0; } @@ -1647,7 +1667,7 @@ class npc_wormhole : public CreatureScript bool _showUnderground; }; - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsSummon()) { @@ -1669,7 +1689,7 @@ class npc_wormhole : public CreatureScript return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); @@ -1704,7 +1724,7 @@ class npc_wormhole : public CreatureScript return true; } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_wormholeAI(creature); } @@ -1731,7 +1751,7 @@ class npc_pet_trainer : public CreatureScript public: npc_pet_trainer() : CreatureScript("npc_pet_trainer") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); @@ -1749,7 +1769,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -1826,7 +1846,7 @@ class npc_locksmith : public CreatureScript public: npc_locksmith() : CreatureScript("npc_locksmith") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { // Arcatraz Key if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true)) @@ -1871,7 +1891,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); switch (action) @@ -1931,7 +1951,7 @@ class npc_experience : public CreatureScript public: npc_experience() : CreatureScript("npc_experience") { } - bool OnGossipHello(Player* player, Creature* creature) OVERRIDE + bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_XP_OFF, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); @@ -1939,7 +1959,7 @@ public: return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { player->PlayerTalkClass->ClearMenus(); bool noXPGain = player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN); @@ -2208,7 +2228,7 @@ public: return 0; } - void Reset() OVERRIDE + void Reset() override { if (GameObject* launcher = FindNearestLauncher()) { @@ -2253,7 +2273,7 @@ public: } }; - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_fireworkAI(creature); } @@ -2278,7 +2298,7 @@ class npc_spring_rabbit : public CreatureScript public: npc_spring_rabbit() : CreatureScript("npc_spring_rabbit") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const override { return new npc_spring_rabbitAI(creature); } @@ -2293,7 +2313,7 @@ public: uint32 searchTimer; uint64 rabbitGUID; - void Reset() OVERRIDE + void Reset() override { inLove = false; rabbitGUID = 0; @@ -2304,22 +2324,22 @@ public: me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } - void EnterCombat(Unit* /*who*/) OVERRIDE { } + void EnterCombat(Unit* /*who*/) override { } - void DoAction(int32 /*param*/) OVERRIDE + void DoAction(int32 /*param*/) override { inLove = true; if (Unit* owner = me->GetOwner()) owner->CastSpell(owner, SPELL_SPRING_FLING, true); } - void UpdateAI(uint32 diff) OVERRIDE + void UpdateAI(uint32 diff) override { if (inLove) { if (jumpTimer <= diff) { - if (Unit* rabbit = Unit::GetUnit(*me, rabbitGUID)) + if (Unit* rabbit = ObjectAccessor::GetUnit(*me, rabbitGUID)) DoCast(rabbit, SPELL_SPRING_RABBIT_JUMP); jumpTimer = urand(5000, 10000); } else jumpTimer -= diff; @@ -2353,6 +2373,60 @@ public: }; }; +class npc_imp_in_a_ball : public CreatureScript +{ +private: + enum + { + SAY_RANDOM, + + EVENT_TALK = 1, + }; + +public: + npc_imp_in_a_ball() : CreatureScript("npc_imp_in_a_ball") { } + + struct npc_imp_in_a_ballAI : public ScriptedAI + { + npc_imp_in_a_ballAI(Creature* creature) : ScriptedAI(creature) + { + summonerGUID = 0; + } + + void IsSummonedBy(Unit* summoner) override + { + if (summoner->GetTypeId() == TYPEID_PLAYER) + { + summonerGUID = summoner->GetGUID(); + events.ScheduleEvent(EVENT_TALK, 3000); + } + } + + void UpdateAI(uint32 diff) override + { + events.Update(diff); + + if (events.ExecuteEvent() == EVENT_TALK) + { + if (Player* owner = ObjectAccessor::GetPlayer(*me, summonerGUID)) + { + sCreatureTextMgr->SendChat(me, SAY_RANDOM, owner, + owner->GetGroup() ? CHAT_MSG_MONSTER_PARTY : CHAT_MSG_MONSTER_WHISPER, LANG_ADDON, TEXT_RANGE_NORMAL); + } + } + } + + private: + EventMap events; + uint64 summonerGUID; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_imp_in_a_ballAI(creature); + } +}; + void AddSC_npcs_special() { new npc_air_force_bots(); @@ -2375,4 +2449,5 @@ void AddSC_npcs_special() new npc_experience(); new npc_firework(); new npc_spring_rabbit(); + new npc_imp_in_a_ball(); } diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h index 5dea589da25..f49bbf0bada 100644 --- a/src/server/shared/Common.h +++ b/src/server/shared/Common.h @@ -61,7 +61,7 @@ #include "Define.h" -#include "Dynamic/UnorderedMap.h" +#include <unordered_map> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -71,12 +71,6 @@ #include <signal.h> #include <assert.h> -#if PLATFORM == PLATFORM_WINDOWS -#define STRCASECMP stricmp -#else -#define STRCASECMP strcasecmp -#endif - #include <set> #include <list> #include <string> @@ -114,8 +108,6 @@ #include <float.h> -#define I32FMT "%08I32X" -#define I64FMT "%016I64X" #define snprintf _snprintf #define atoll _atoi64 #define vsnprintf _vsnprintf @@ -126,8 +118,6 @@ #define stricmp strcasecmp #define strnicmp strncasecmp -#define I32FMT "%08X" -#define I64FMT "%016llX" #endif diff --git a/src/server/shared/CompilerDefs.h b/src/server/shared/CompilerDefs.h index 71b20a4d175..2c2d7ea861d 100644 --- a/src/server/shared/CompilerDefs.h +++ b/src/server/shared/CompilerDefs.h @@ -55,10 +55,4 @@ # error "FATAL ERROR: Unknown compiler." #endif -#if defined(__cplusplus) && __cplusplus == 201103L -# define COMPILER_HAS_CPP11_SUPPORT 1 -#else -# define COMPILER_HAS_CPP11_SUPPORT 0 -#endif - #endif diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h index d6ba98e4ed4..9121fbe2a97 100644 --- a/src/server/shared/Containers.h +++ b/src/server/shared/Containers.h @@ -64,6 +64,34 @@ namespace Trinity std::advance(it, urand(0, container.size() - 1)); return *it; } + + /** + * @fn bool Trinity::Containers::Intersects(Iterator first1, Iterator last1, Iterator first2, Iterator last2) + * + * @brief Checks if two SORTED containers have a common element + * + * @param first1 Iterator pointing to start of the first container + * @param last1 Iterator pointing to end of the first container + * @param first2 Iterator pointing to start of the second container + * @param last2 Iterator pointing to end of the second container + * + * @return true if containers have a common element, false otherwise. + */ + template<class Iterator1, class Iterator2> + bool Intersects(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2) + { + while (first1 != last1 && first2 != last2) + { + if (*first1 < *first2) + ++first1; + else if (*first2 < *first1) + ++first2; + else + return true; + } + + return false; + } } //! namespace Containers } diff --git a/src/server/shared/DataStores/DBCFileLoader.h b/src/server/shared/DataStores/DBCFileLoader.h index c5194d20530..a665bc49c9c 100644 --- a/src/server/shared/DataStores/DBCFileLoader.h +++ b/src/server/shared/DataStores/DBCFileLoader.h @@ -106,5 +106,8 @@ class DBCFileLoader uint32 *fieldsOffset; unsigned char *data; unsigned char *stringTable; + + DBCFileLoader(DBCFileLoader const& right) = delete; + DBCFileLoader& operator=(DBCFileLoader const& right) = delete; }; #endif diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h index 78f7bb28580..08b8d810b8b 100644 --- a/src/server/shared/DataStores/DBCStore.h +++ b/src/server/shared/DataStores/DBCStore.h @@ -63,6 +63,10 @@ struct SqlDbc } } } + +private: + SqlDbc(SqlDbc const& right) = delete; + SqlDbc& operator=(SqlDbc const& right) = delete; }; template<class T> @@ -291,6 +295,9 @@ class DBCStorage T* dataTable; StringPoolList stringPoolList; + + DBCStorage(DBCStorage const& right) = delete; + DBCStorage& operator=(DBCStorage const& right) = delete; }; #endif diff --git a/src/server/shared/Database/AdhocStatement.cpp b/src/server/shared/Database/AdhocStatement.cpp index 15732f20849..896fefde5b7 100644 --- a/src/server/shared/Database/AdhocStatement.cpp +++ b/src/server/shared/Database/AdhocStatement.cpp @@ -42,13 +42,13 @@ bool BasicStatementTask::Execute() if (m_has_result) { ResultSet* result = m_conn->Query(m_sql); - if (!result || !result->GetRowCount()) + if (!result || !result->GetRowCount() || !result->NextRow()) { delete result; m_result.set(QueryResult(NULL)); return false; } - result->NextRow(); + m_result.set(QueryResult(result)); return true; } diff --git a/src/server/shared/Database/DatabaseWorker.h b/src/server/shared/Database/DatabaseWorker.h index 14e92924ed2..dc883dd3428 100644 --- a/src/server/shared/Database/DatabaseWorker.h +++ b/src/server/shared/Database/DatabaseWorker.h @@ -18,6 +18,7 @@ #ifndef _WORKERTHREAD_H #define _WORKERTHREAD_H +#include "Define.h" #include <ace/Task.h> #include <ace/Activation_Queue.h> @@ -33,9 +34,11 @@ class DatabaseWorker : protected ACE_Task_Base int wait() { return ACE_Task_Base::wait(); } private: - DatabaseWorker() : ACE_Task_Base() { } ACE_Activation_Queue* m_queue; MySQLConnection* m_conn; + + DatabaseWorker(DatabaseWorker const& right) = delete; + DatabaseWorker& operator=(DatabaseWorker const& right) = delete; }; #endif diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index 6c2e961d2ad..9c56c75bf71 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -49,9 +49,10 @@ class DatabaseWorkerPool { public: /* Activity state */ - DatabaseWorkerPool() : - _queue(new ACE_Activation_Queue()) + DatabaseWorkerPool() : _connectionInfo(NULL) { + _messageQueue = new ACE_Message_Queue<ACE_SYNCH>(8 * 1024 * 1024, 8 * 1024 * 1024); + _queue = new ACE_Activation_Queue(_messageQueue); memset(_connectionCount, 0, sizeof(_connectionCount)); _connections.resize(IDX_SIZE); @@ -66,7 +67,7 @@ class DatabaseWorkerPool bool Open(const std::string& infoString, uint8 async_threads, uint8 synch_threads) { bool res = true; - _connectionInfo = MySQLConnectionInfo(infoString); + _connectionInfo = new MySQLConnectionInfo(infoString); TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.", GetDatabaseName(), async_threads, synch_threads); @@ -75,7 +76,7 @@ class DatabaseWorkerPool _connections[IDX_ASYNC].resize(async_threads); for (uint8 i = 0; i < async_threads; ++i) { - T* t = new T(_queue, _connectionInfo); + T* t = new T(_queue, *_connectionInfo); res &= t->Open(); if (res) // only check mysql version if connection is valid WPFatal(mysql_get_server_version(t->GetHandle()) >= MIN_MYSQL_SERVER_VERSION, "TrinityCore does not support MySQL versions below 5.1"); @@ -87,7 +88,7 @@ class DatabaseWorkerPool _connections[IDX_SYNCH].resize(synch_threads); for (uint8 i = 0; i < synch_threads; ++i) { - T* t = new T(_connectionInfo); + T* t = new T(*_connectionInfo); res &= t->Open(); _connections[IDX_SYNCH][i] = t; ++_connectionCount[IDX_SYNCH]; @@ -98,7 +99,7 @@ class DatabaseWorkerPool (_connectionCount[IDX_SYNCH] + _connectionCount[IDX_ASYNC])); else TC_LOG_ERROR("sql.driver", "DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile " - "for specific errors.", GetDatabaseName()); + "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", GetDatabaseName()); return res; } @@ -132,8 +133,12 @@ class DatabaseWorkerPool //! Deletes the ACE_Activation_Queue object and its underlying ACE_Message_Queue delete _queue; + delete _messageQueue; TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName()); + + delete _connectionInfo; + _connectionInfo = NULL; } /** @@ -232,13 +237,12 @@ class DatabaseWorkerPool ResultSet* result = conn->Query(sql); conn->Unlock(); - if (!result || !result->GetRowCount()) + if (!result || !result->GetRowCount() || !result->NextRow()) { delete result; return QueryResult(NULL); } - result->NextRow(); return QueryResult(result); } @@ -508,7 +512,7 @@ class DatabaseWorkerPool char const* GetDatabaseName() const { - return _connectionInfo.database.c_str(); + return _connectionInfo->database.c_str(); } private: @@ -519,10 +523,11 @@ class DatabaseWorkerPool IDX_SIZE }; + ACE_Message_Queue<ACE_SYNCH>* _messageQueue; //! Message Queue used by ACE_Activation_Queue ACE_Activation_Queue* _queue; //! Queue shared by async worker threads. std::vector< std::vector<T*> > _connections; uint32 _connectionCount[2]; //! Counter of MySQL connections; - MySQLConnectionInfo _connectionInfo; + MySQLConnectionInfo* _connectionInfo; }; #endif diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index aa7c2e96fba..24e61e7399a 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -59,18 +59,10 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_NAME_DATA, "SELECT race, class, gender, level FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION, "SELECT position_x, position_y, position_z, orientation, map, taxi_path FROM characters WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_DEL_QUEST_STATUS_DAILY, "DELETE FROM character_queststatus_daily", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_WEEKLY, "DELETE FROM character_queststatus_weekly", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_MONTHLY, "DELETE FROM character_queststatus_monthly", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_SEASONAL, "DELETE FROM character_queststatus_seasonal WHERE event = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_DAILY_CHAR, "DELETE FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR, "DELETE FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_MONTHLY_CHAR, "DELETE FROM character_queststatus_monthly WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR, "DELETE FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC); - // Start LoginQueryHolder content PrepareStatement(CHAR_SEL_CHARACTER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, " "position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " "resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, instance_mode_mask, " @@ -85,14 +77,24 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_SPELL, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, " "itemcount1, itemcount2, itemcount3, itemcount4, playercount FROM character_queststatus WHERE guid = ? AND status <> 0", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_DAILYQUESTSTATUS, "SELECT quest, time FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS, "SELECT quest FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_MONTHLYQUESTSTATUS, "SELECT quest FROM character_queststatus_monthly WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS, "SELECT quest, event FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHARACTER_DAILYQUESTSTATUS, "INSERT INTO character_queststatus_daily (guid, quest, time) VALUES (?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS, "INSERT INTO character_queststatus_weekly (guid, quest) VALUES (?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHARACTER_MONTHLYQUESTSTATUS, "INSERT INTO character_queststatus_monthly (guid, quest) VALUES (?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHARACTER_SEASONALQUESTSTATUS, "INSERT INTO character_queststatus_seasonal (guid, quest, event) VALUES (?, ?, ?)", CONNECTION_ASYNC); + + PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_DAILY, "SELECT quest, time FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_WEEKLY, "SELECT quest FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_MONTHLY, "SELECT quest FROM character_queststatus_monthly WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_SEASONAL, "SELECT quest, event FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY, "DELETE FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY, "DELETE FROM character_queststatus_weekly WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY, "DELETE FROM character_queststatus_monthly WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL, "DELETE FROM character_queststatus_seasonal WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY, "INSERT INTO character_queststatus_daily (guid, quest, time) VALUES (?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHARACTER_QUESTSTATUS_WEEKLY, "INSERT INTO character_queststatus_weekly (guid, quest) VALUES (?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHARACTER_QUESTSTATUS_MONTHLY, "INSERT INTO character_queststatus_monthly (guid, quest) VALUES (?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHARACTER_QUESTSTATUS_SEASONAL, "INSERT INTO character_queststatus_seasonal (guid, quest, event) VALUES (?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_DAILY, "DELETE FROM character_queststatus_daily", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_WEEKLY, "DELETE FROM character_queststatus_weekly", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_MONTHLY, "DELETE FROM character_queststatus_monthly", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_SEASONAL_BY_EVENT, "DELETE FROM character_queststatus_seasonal WHERE event = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_REPUTATION, "SELECT faction, standing, flags FROM character_reputation WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_INVENTORY, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, bag, slot, " "item, itemEntry FROM character_inventory ci JOIN item_instance ii ON ci.item = ii.guid WHERE ci.guid = ? ORDER BY bag, slot", CONNECTION_ASYNC); @@ -120,7 +122,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_BANNED, "SELECT guid FROM character_banned WHERE guid = ? AND active = 1", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUSREW, "SELECT quest FROM character_queststatus_rewarded WHERE guid = ? AND active = 1", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES, "SELECT instanceId, releaseTime FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC); - // End LoginQueryHolder content PrepareStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_MAILITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, item_guid, itemEntry, owner_guid FROM mail_items mi JOIN item_instance ii ON mi.item_guid = ii.guid WHERE mail_id = ?", CONNECTION_SYNCH); @@ -375,7 +376,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_PETITION_NAME, "UPDATE petition SET name = ? WHERE petitionguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_PETITION_SIGNATURE, "INSERT INTO petition_sign (ownerguid, petitionguid, playerguid, player_account) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_GROUP, "INSERT INTO groups (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raiddifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GROUP_INSTANCE_PERM_BINDING, "DELETE FROM group_instance WHERE guid = ? AND instance = ?", CONNECTION_ASYNC); @@ -389,7 +390,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_INVALID_SPELL_TALENTS, "DELETE FROM character_talent WHERE spell = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ZONE, "UPDATE characters SET zone = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_LEVEL, "UPDATE characters SET level = ?, xp = 0 WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA, "DELETE FROM character_achievement_progress WHERE criteria = ?", CONNECTION_ASYNC); @@ -463,7 +464,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS, "INSERT INTO character_achievement_progress (guid, criteria, counter, date) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_REPUTATION_BY_FACTION, "DELETE FROM character_reputation WHERE guid = ? AND faction = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_REPUTATION_BY_FACTION, "INSERT INTO character_reputation (guid, faction, standing, flags) VALUES (?, ?, ? , ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_UPD_CHAR_ARENA_POINTS, "UPDATE characters SET arenaPoints = (arenaPoints + ?) WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_ADD_CHAR_ARENA_POINTS, "UPDATE characters SET arenaPoints = (arenaPoints + ?) WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_REFUND_INSTANCE, "DELETE FROM item_refund_instance WHERE item_guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ITEM_REFUND_INSTANCE, "INSERT INTO item_refund_instance (item_guid, player_guid, paidMoney, paidExtendedCost) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GROUP, "DELETE FROM groups WHERE guid = ?", CONNECTION_ASYNC); @@ -515,12 +516,11 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_GUILD_EVENTLOG_BY_PLAYER, "DELETE FROM guild_eventlog WHERE PlayerGuid1 = ? OR PlayerGuid2 = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GUILD_BANK_EVENTLOG_BY_PLAYER, "DELETE FROM guild_bank_eventlog WHERE PlayerGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_GLYPHS, "DELETE FROM character_glyphs WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_CHAR_QUESTSTATUS_DAILY, "DELETE FROM character_queststatus_daily WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TALENT, "DELETE FROM character_talent WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_SKILLS, "DELETE FROM character_skills WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_HONOR_POINTS, "UPDATE characters SET totalHonorPoints = ? WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_ARENA_POINTS, "UPDATE characters SET arenaPoints = ? WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_MONEY, "UPDATE characters SET money = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_HONOR_POINTS, "UPDATE characters SET totalHonorPoints = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_ARENA_POINTS, "UPDATE characters SET arenaPoints = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_MONEY, "UPDATE characters SET money = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_ACTION, "INSERT INTO character_action (guid, spec, button, action, type) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_ACTION, "UPDATE character_action SET action = ?, type = ? WHERE guid = ? AND button = ? AND spec = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_ACTION_BY_BUTTON_SPEC, "DELETE FROM character_action WHERE guid = ? and button = ? and spec = ?", CONNECTION_ASYNC); @@ -536,7 +536,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST, "UPDATE character_queststatus_rewarded SET active = 0 WHERE quest = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL, "DELETE FROM character_skills WHERE guid = ? AND skill = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_SKILLS, "INSERT INTO character_skills (guid, skill, value, max) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_SKILLS, "UPDATE character_skills SET value = ?, max = ? WHERE guid = ? AND skill = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_SKILLS, "UPDATE character_skills SET value = ?, max = ? WHERE guid = ? AND skill = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_SPELL, "INSERT INTO character_spell (guid, spell, active, disabled) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_STATS, "DELETE FROM character_stats WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, strength, agility, stamina, intellect, spirit, " @@ -576,7 +576,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_PETS, "SELECT id FROM character_pet WHERE owner = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_CHAR_PET_DECLINEDNAME_BY_OWNER, "DELETE FROM character_pet_declinedname WHERE owner = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_PET_DECLINEDNAME, "DELETE FROM character_pet_declinedname WHERE id = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_ADD_CHAR_PET_DECLINEDNAME, "INSERT INTO character_pet_declinedname (id, owner, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHAR_PET_DECLINEDNAME, "INSERT INTO character_pet_declinedname (id, owner, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PET_AURA, "SELECT caster_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges FROM pet_aura WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_SPELL, "SELECT spell, active FROM pet_spell WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time FROM pet_spell_cooldown WHERE guid = ?", CONNECTION_SYNCH); @@ -595,8 +595,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT, "SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType FROM character_pet WHERE owner = ? AND slot = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_CHAR_PET_BY_OWNER, "DELETE FROM character_pet WHERE owner = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_PET_NAME, "UPDATE character_pet SET name = ?, renamed = 1 WHERE owner = ? AND id = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND slot = ? AND id <> ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_UDP_CHAR_PET_SLOT_BY_SLOT, "UPDATE character_pet SET slot = ? WHERE owner = ? AND slot = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND slot = ? AND id <> ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_CHAR_PET_SLOT_BY_SLOT, "UPDATE character_pet SET slot = ? WHERE owner = ? AND slot = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_PET_SLOT_BY_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_PET_BY_ID, "DELETE FROM character_pet WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_PET_BY_SLOT, "DELETE FROM character_pet WHERE owner = ? AND (slot = ? OR slot > ?)", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 6768e4a197f..98d7fe231f1 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -71,14 +71,7 @@ enum CharacterDatabaseStatements CHAR_SEL_CHARACTER_NAME_DATA, CHAR_SEL_CHAR_POSITION_XYZ, CHAR_SEL_CHAR_POSITION, - CHAR_DEL_QUEST_STATUS_DAILY, - CHAR_DEL_QUEST_STATUS_WEEKLY, - CHAR_DEL_QUEST_STATUS_MONTHLY, - CHAR_DEL_QUEST_STATUS_SEASONAL, - CHAR_DEL_QUEST_STATUS_DAILY_CHAR, - CHAR_DEL_QUEST_STATUS_WEEKLY_CHAR, - CHAR_DEL_QUEST_STATUS_MONTHLY_CHAR, - CHAR_DEL_QUEST_STATUS_SEASONAL_CHAR, + CHAR_DEL_BATTLEGROUND_RANDOM, CHAR_INS_BATTLEGROUND_RANDOM, @@ -88,14 +81,24 @@ enum CharacterDatabaseStatements CHAR_SEL_CHARACTER_AURAS, CHAR_SEL_CHARACTER_SPELL, CHAR_SEL_CHARACTER_QUESTSTATUS, - CHAR_SEL_CHARACTER_DAILYQUESTSTATUS, - CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS, - CHAR_SEL_CHARACTER_MONTHLYQUESTSTATUS, - CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS, - CHAR_INS_CHARACTER_DAILYQUESTSTATUS, - CHAR_INS_CHARACTER_WEEKLYQUESTSTATUS, - CHAR_INS_CHARACTER_MONTHLYQUESTSTATUS, - CHAR_INS_CHARACTER_SEASONALQUESTSTATUS, + + CHAR_SEL_CHARACTER_QUESTSTATUS_DAILY, + CHAR_SEL_CHARACTER_QUESTSTATUS_WEEKLY, + CHAR_SEL_CHARACTER_QUESTSTATUS_MONTHLY, + CHAR_SEL_CHARACTER_QUESTSTATUS_SEASONAL, + CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY, + CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY, + CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY, + CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL, + CHAR_INS_CHARACTER_QUESTSTATUS_DAILY, + CHAR_INS_CHARACTER_QUESTSTATUS_WEEKLY, + CHAR_INS_CHARACTER_QUESTSTATUS_MONTHLY, + CHAR_INS_CHARACTER_QUESTSTATUS_SEASONAL, + CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_DAILY, + CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_WEEKLY, + CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_MONTHLY, + CHAR_DEL_RESET_CHARACTER_QUESTSTATUS_SEASONAL_BY_EVENT, + CHAR_SEL_CHARACTER_REPUTATION, CHAR_SEL_CHARACTER_INVENTORY, CHAR_SEL_CHARACTER_ACTIONS, @@ -326,7 +329,7 @@ enum CharacterDatabaseStatements CHAR_DEL_INVALID_SPELL_SPELLS, CHAR_DEL_INVALID_SPELL_TALENTS, CHAR_UPD_DELETE_INFO, - CHAR_UDP_RESTORE_DELETE_INFO, + CHAR_UPD_RESTORE_DELETE_INFO, CHAR_UPD_ZONE, CHAR_UPD_LEVEL, CHAR_DEL_INVALID_ACHIEV_PROGRESS_CRITERIA, @@ -399,7 +402,7 @@ enum CharacterDatabaseStatements CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS, CHAR_DEL_CHAR_REPUTATION_BY_FACTION, CHAR_INS_CHAR_REPUTATION_BY_FACTION, - CHAR_UPD_CHAR_ARENA_POINTS, + CHAR_UPD_ADD_CHAR_ARENA_POINTS, CHAR_DEL_ITEM_REFUND_INSTANCE, CHAR_INS_ITEM_REFUND_INSTANCE, CHAR_DEL_GROUP, @@ -451,12 +454,11 @@ enum CharacterDatabaseStatements CHAR_DEL_GUILD_EVENTLOG_BY_PLAYER, CHAR_DEL_GUILD_BANK_EVENTLOG_BY_PLAYER, CHAR_DEL_CHAR_GLYPHS, - CHAR_DEL_CHAR_QUESTSTATUS_DAILY, CHAR_DEL_CHAR_TALENT, CHAR_DEL_CHAR_SKILLS, - CHAR_UDP_CHAR_HONOR_POINTS, - CHAR_UDP_CHAR_ARENA_POINTS, - CHAR_UDP_CHAR_MONEY, + CHAR_UPD_CHAR_HONOR_POINTS, + CHAR_UPD_CHAR_ARENA_POINTS, + CHAR_UPD_CHAR_MONEY, CHAR_INS_CHAR_ACTION, CHAR_UPD_CHAR_ACTION, CHAR_DEL_CHAR_ACTION_BY_BUTTON_SPEC, @@ -472,7 +474,7 @@ enum CharacterDatabaseStatements CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST, CHAR_DEL_CHAR_SKILL_BY_SKILL, CHAR_INS_CHAR_SKILLS, - CHAR_UDP_CHAR_SKILLS, + CHAR_UPD_CHAR_SKILLS, CHAR_INS_CHAR_SPELL, CHAR_DEL_CHAR_STATS, CHAR_INS_CHAR_STATS, @@ -516,10 +518,10 @@ enum CharacterDatabaseStatements CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT_2, CHAR_SEL_CHAR_PET_BY_SLOT, CHAR_DEL_CHAR_PET_DECLINEDNAME, - CHAR_ADD_CHAR_PET_DECLINEDNAME, + CHAR_INS_CHAR_PET_DECLINEDNAME, CHAR_UPD_CHAR_PET_NAME, - CHAR_UDP_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID, - CHAR_UDP_CHAR_PET_SLOT_BY_SLOT, + CHAR_UPD_CHAR_PET_SLOT_BY_SLOT_EXCLUDE_ID, + CHAR_UPD_CHAR_PET_SLOT_BY_SLOT, CHAR_UPD_CHAR_PET_SLOT_BY_ID, CHAR_DEL_CHAR_PET_BY_ID, CHAR_DEL_CHAR_PET_BY_SLOT, diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index de1e5b992e6..488ff18dca4 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -69,6 +69,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_UPD_MUTE_TIME, "UPDATE account SET mutetime = ? , mutereason = ? , muteby = ? WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_MUTE_TIME_LOGIN, "UPDATE account SET mutetime = ? WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_LAST_IP, "UPDATE account SET last_ip = ? WHERE username = ?", CONNECTION_ASYNC); + PrepareStatement(LOGIN_UPD_LAST_ATTEMPT_IP, "UPDATE account SET last_attempt_ip = ? WHERE username = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_ACCOUNT_ONLINE, "UPDATE account SET online = 1 WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_UPTIME_PLAYERS, "UPDATE uptime SET uptime = ?, maxplayers = ? WHERE realmid = ? AND starttime = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_OLD_LOGS, "DELETE FROM logs WHERE (time + ?) < ?", CONNECTION_ASYNC); @@ -90,12 +91,21 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_ACCOUNT_RECRUITER, "SELECT 1 FROM account WHERE recruiter = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_BANS, "SELECT 1 FROM account_banned WHERE id = ? AND active = 1 UNION SELECT 1 FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_WHOIS, "SELECT username, email, last_ip FROM account WHERE id = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_LAST_ATTEMPT_IP, "SELECT last_attempt_ip FROM account WHERE id = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL, "SELECT allowedSecurityLevel from realmlist WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_ACCOUNT, "DELETE FROM account WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_IP2NATION_COUNTRY, "SELECT c.country FROM ip2nationCountries c, ip2nation i WHERE i.ip < ? AND c.code = i.country ORDER BY i.ip DESC LIMIT 0,1", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_AUTOBROADCAST, "SELECT id, weight, text FROM autobroadcast WHERE realmid = ? OR realmid = -1", CONNECTION_SYNCH); PrepareStatement(LOGIN_GET_EMAIL_BY_ID, "SELECT email FROM account WHERE id = ?", CONNECTION_SYNCH); - + // 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_AccountLoginDeLete_IP_Logging" + PrepareStatement(LOGIN_INS_ALDL_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, (SELECT last_ip FROM account WHERE id = ?), ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC); + // 0: uint32, 1: uint32, 2: uint8, 3: uint32, 4: string // Complete name: "Login_Insert_FailedAccountLogin_IP_Logging" + PrepareStatement(LOGIN_INS_FACL_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, (SELECT last_attempt_ip FROM account WHERE id = ?), ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC); + // 0: uint32, 1: uint32, 2: uint8, 3: string, 4: string // Complete name: "Login_Insert_CharacterDelete_IP_Logging" + PrepareStatement(LOGIN_INS_CHAR_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES (?, ?, ?, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC); + // 0: string, 1: string, 2: string // Complete name: "Login_Insert_Failed_Account_Login_due_password_IP_Logging" + PrepareStatement(LOGIN_INS_FALP_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES ((SELECT id FROM account WHERE username = ?), 0, 1, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h index 01f9fd973b6..604e9d39551 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.h +++ b/src/server/shared/Database/Implementation/LoginDatabase.h @@ -89,6 +89,7 @@ enum LoginDatabaseStatements LOGIN_UPD_MUTE_TIME, LOGIN_UPD_MUTE_TIME_LOGIN, LOGIN_UPD_LAST_IP, + LOGIN_UPD_LAST_ATTEMPT_IP, LOGIN_UPD_ACCOUNT_ONLINE, LOGIN_UPD_UPTIME_PLAYERS, LOGIN_DEL_OLD_LOGS, @@ -114,7 +115,13 @@ enum LoginDatabaseStatements LOGIN_DEL_ACCOUNT, LOGIN_SEL_IP2NATION_COUNTRY, LOGIN_SEL_AUTOBROADCAST, + LOGIN_SEL_LAST_ATTEMPT_IP, + LOGIN_SEL_LAST_IP, LOGIN_GET_EMAIL_BY_ID, + LOGIN_INS_ALDL_IP_LOGGING, + LOGIN_INS_FACL_IP_LOGGING, + LOGIN_INS_CHAR_IP_LOGGING, + LOGIN_INS_FALP_IP_LOGGING, LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp index 644d3b330fb..d0e9c463ad7 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp @@ -25,7 +25,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_SEL_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM linked_respawn WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_REP_CREATURE_LINKED_RESPAWN, "REPLACE INTO linked_respawn (guid, linkedGuid) VALUES (?, ?)", CONNECTION_ASYNC); - PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound FROM creature_text", CONNECTION_SYNCH); + PrepareStatement(WORLD_SEL_CREATURE_TEXT, "SELECT entry, groupid, id, text, type, language, probability, emote, duration, sound, BroadcastTextID FROM creature_text", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_SMART_SCRIPTS, "SELECT entryorguid, source_type, id, link, event_type, event_phase_mask, event_chance, event_flags, event_param1, event_param2, event_param3, event_param4, action_type, action_param1, action_param2, action_param3, action_param4, action_param5, action_param6, target_type, target_param1, target_param2, target_param3, target_x, target_y, target_z, target_o FROM smart_scripts ORDER BY entryorguid, source_type, id, link", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_SMARTAI_WP, "SELECT entry, pointid, position_x, position_y, position_z FROM waypoints ORDER BY entry, pointid", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_GAMEOBJECT, "DELETE FROM gameobject WHERE guid = ?", CONNECTION_ASYNC); @@ -38,7 +38,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_DEL_NPC_VENDOR, "DELETE FROM npc_vendor WHERE entry = ? AND item = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_NPC_VENDOR_REF, "SELECT item, maxcount, incrtime, ExtendedCost FROM npc_vendor WHERE entry = ? ORDER BY slot ASC", CONNECTION_SYNCH); PrepareStatement(WORLD_UPD_CREATURE_MOVEMENT_TYPE, "UPDATE creature SET MovementType = ? WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(WORLD_UPD_CREATURE_FACTION, "UPDATE creature_template SET faction_A = ?, faction_H = ? WHERE entry = ?", CONNECTION_ASYNC); + PrepareStatement(WORLD_UPD_CREATURE_FACTION, "UPDATE creature_template SET faction = ? WHERE entry = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_CREATURE_NPCFLAG, "UPDATE creature_template SET npcflag = ? WHERE entry = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_CREATURE_POSITION, "UPDATE creature SET position_x = ?, position_y = ?, position_z = ?, orientation = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_CREATURE_SPAWN_DISTANCE, "UPDATE creature SET spawndist = ?, MovementType = ? WHERE guid = ?", CONNECTION_ASYNC); @@ -76,7 +76,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH); - PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction_A, faction_H, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH); + PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, questItem1, questItem2, questItem3, questItem4, questItem5, questItem6, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_ITEM_TEMPLATE_BY_NAME, "SELECT entry FROM item_template WHERE name = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h index 161f459a7ad..512df7c16c7 100644 --- a/src/server/shared/Database/MySQLConnection.h +++ b/src/server/shared/Database/MySQLConnection.h @@ -38,8 +38,7 @@ enum ConnectionFlags struct MySQLConnectionInfo { - MySQLConnectionInfo() { } - MySQLConnectionInfo(const std::string& infoString) + explicit MySQLConnectionInfo(std::string const& infoString) { Tokenizer tokens(infoString, ';'); @@ -132,6 +131,9 @@ class MySQLConnection MySQLConnectionInfo& m_connectionInfo; //! Connection info (used for logging) ConnectionFlags m_connectionFlags; //! Connection flags (for preparing relevant statements) ACE_Thread_Mutex m_Mutex; + + MySQLConnection(MySQLConnection const& right) = delete; + MySQLConnection& operator=(MySQLConnection const& right) = delete; }; #endif diff --git a/src/server/shared/Database/PreparedStatement.h b/src/server/shared/Database/PreparedStatement.h index 6a4d03bfb4d..6afb309db2c 100644 --- a/src/server/shared/Database/PreparedStatement.h +++ b/src/server/shared/Database/PreparedStatement.h @@ -101,6 +101,9 @@ class PreparedStatement MySQLPreparedStatement* m_stmt; uint32 m_index; std::vector<PreparedStatementData> statement_data; //- Buffer of parameters, not tied to MySQL in any way yet + + PreparedStatement(PreparedStatement const& right) = delete; + PreparedStatement& operator=(PreparedStatement const& right) = delete; }; //- Class of which the instances are unique per MySQLConnection @@ -145,6 +148,9 @@ class MySQLPreparedStatement uint32 m_paramCount; std::vector<bool> m_paramsSet; MYSQL_BIND* m_bind; + + MySQLPreparedStatement(MySQLPreparedStatement const& right) = delete; + MySQLPreparedStatement& operator=(MySQLPreparedStatement const& right) = delete; }; typedef ACE_Future<PreparedQueryResult> PreparedQueryResultFuture; diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp index 0c80f70acd2..7b4105ee076 100644 --- a/src/server/shared/Database/QueryHolder.cpp +++ b/src/server/shared/Database/QueryHolder.cpp @@ -89,10 +89,9 @@ QueryResult SQLQueryHolder::GetResult(size_t index) if (index < m_queries.size()) { ResultSet* result = m_queries[index].second.qresult; - if (!result || !result->GetRowCount()) + if (!result || !result->GetRowCount() || !result->NextRow()) return QueryResult(NULL); - result->NextRow(); return QueryResult(result); } else diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h index 74320aeba19..4795fef4a4c 100644 --- a/src/server/shared/Database/QueryResult.h +++ b/src/server/shared/Database/QueryResult.h @@ -55,6 +55,9 @@ class ResultSet void CleanUp(); MYSQL_RES* _result; MYSQL_FIELD* _fields; + + ResultSet(ResultSet const& right) = delete; + ResultSet& operator=(ResultSet const& right) = delete; }; typedef Trinity::AutoPtr<ResultSet, ACE_Thread_Mutex> QueryResult; @@ -100,6 +103,8 @@ class PreparedResultSet void CleanUp(); bool _NextRow(); + PreparedResultSet(PreparedResultSet const& right) = delete; + PreparedResultSet& operator=(PreparedResultSet const& right) = delete; }; typedef Trinity::AutoPtr<PreparedResultSet, ACE_Thread_Mutex> PreparedQueryResult; diff --git a/src/server/shared/Database/SQLOperation.h b/src/server/shared/Database/SQLOperation.h index 2c404c131ae..6f933a051e3 100644 --- a/src/server/shared/Database/SQLOperation.h +++ b/src/server/shared/Database/SQLOperation.h @@ -69,6 +69,10 @@ class SQLOperation : public ACE_Method_Request virtual void SetConnection(MySQLConnection* con) { m_conn = con; } MySQLConnection* m_conn; + + private: + SQLOperation(SQLOperation const& right) = delete; + SQLOperation& operator=(SQLOperation const& right) = delete; }; #endif diff --git a/src/server/shared/Debugging/WheatyExceptionReport.cpp b/src/server/shared/Debugging/WheatyExceptionReport.cpp index fcbfa221d6a..350a258f455 100644 --- a/src/server/shared/Debugging/WheatyExceptionReport.cpp +++ b/src/server/shared/Debugging/WheatyExceptionReport.cpp @@ -29,15 +29,23 @@ inline LPTSTR ErrorMessage(DWORD dw) { LPVOID lpMsgBuf; - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, NULL); - return (LPTSTR)lpMsgBuf; + DWORD formatResult = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL); + if (formatResult != 0) + return (LPTSTR)lpMsgBuf; + else + { + LPTSTR msgBuf = (LPTSTR)LocalAlloc(LPTR, 30); + sprintf(msgBuf, "Unknown error: %u", dw); + return msgBuf; + } + } //============================== Global Variables ============================= @@ -51,6 +59,8 @@ LPTOP_LEVEL_EXCEPTION_FILTER WheatyExceptionReport::m_previousFilter; HANDLE WheatyExceptionReport::m_hReportFile; HANDLE WheatyExceptionReport::m_hDumpFile; HANDLE WheatyExceptionReport::m_hProcess; +SymbolPairs WheatyExceptionReport::symbols; +std::stack<SymbolDetail> WheatyExceptionReport::symbolDetails; // Declare global instance of class WheatyExceptionReport g_WheatyExceptionReport; @@ -78,6 +88,7 @@ WheatyExceptionReport::~WheatyExceptionReport() { if (m_previousFilter) SetUnhandledExceptionFilter(m_previousFilter); + ClearSymbols(); } //=========================================================== @@ -498,12 +509,12 @@ PEXCEPTION_POINTERS pExceptionInfo) WriteStackDetails(&trashableContext, true, NULL); printTracesForAllThreads(true); - _tprintf(_T("========================\r\n")); + /*_tprintf(_T("========================\r\n")); _tprintf(_T("Global Variables\r\n")); SymEnumSymbols(GetCurrentProcess(), (UINT_PTR)GetModuleHandle(szFaultingModule), - 0, EnumerateSymbolsCallback, 0); + 0, EnumerateSymbolsCallback, 0);*/ // #endif // X86 Only! SymCleanup(GetCurrentProcess()); @@ -757,17 +768,21 @@ ULONG /*SymbolSize*/, PVOID UserContext) { - char szBuffer[8192]; + char szBuffer[WER_LARGE_BUFFER_SIZE]; + memset(szBuffer, 0, sizeof(szBuffer)); __try { + ClearSymbols(); if (FormatSymbolValue(pSymInfo, (STACKFRAME64*)UserContext, szBuffer, sizeof(szBuffer))) - _tprintf(_T("\t%s\r\n"), szBuffer); + _tprintf(_T("%s"), szBuffer); } __except (EXCEPTION_EXECUTE_HANDLER) { - _tprintf(_T("punting on symbol %s\r\n"), pSymInfo->Name); + _tprintf(_T("punting on symbol %s, partial output:\r\n"), pSymInfo->Name); + if (szBuffer[0] != '\0') + _tprintf(_T("%s"), szBuffer); } return TRUE; @@ -786,12 +801,6 @@ unsigned /*cbBuffer*/) { char * pszCurrBuffer = pszBuffer; - // Indicate if the variable is a local or parameter - if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER) - pszCurrBuffer += sprintf(pszCurrBuffer, "Parameter "); - else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_LOCAL) - pszCurrBuffer += sprintf(pszCurrBuffer, "Local "); - // If it's a function, don't do anything. if (pSym->Tag == SymTagFunction) // SymTagFunction from CVCONST.H from the DIA SDK return false; @@ -813,19 +822,25 @@ unsigned /*cbBuffer*/) // return false; } else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_REGISTER) - { return false; // Don't try to report register variable - } else { pVariable = (DWORD_PTR)pSym->Address; // It must be a global variable } + pszCurrBuffer = PushSymbolDetail(pszCurrBuffer); + + // Indicate if the variable is a local or parameter + if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER) + symbolDetails.top().Prefix = "Parameter "; + else if (pSym->Flags & IMAGEHLP_SYMBOL_INFO_LOCAL) + symbolDetails.top().Prefix = "Local "; + // Determine if the variable is a user defined type (UDT). IF so, bHandled // will return true. bool bHandled; pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, pSym->ModBase, pSym->TypeIndex, - 0, pVariable, bHandled, pSym->Name, ""); + 0, pVariable, bHandled, pSym->Name, "", false, true); if (!bHandled) { @@ -833,15 +848,19 @@ unsigned /*cbBuffer*/) // variable. Based on the size, we're assuming it's a char, WORD, or // DWORD. BasicType basicType = GetBasicType(pSym->TypeIndex, pSym->ModBase); - pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]); + if (symbolDetails.top().Type.empty()) + symbolDetails.top().Type = rgBaseType[basicType]; // Emit the variable name - pszCurrBuffer += sprintf(pszCurrBuffer, "\'%s\'", pSym->Name); + if (pSym->Name[0] != '\0') + symbolDetails.top().Name = pSym->Name; - pszCurrBuffer = FormatOutputValue(pszCurrBuffer, basicType, pSym->Size, - (PVOID)pVariable); + char buffer[50]; + FormatOutputValue(buffer, basicType, pSym->Size, (PVOID)pVariable, sizeof(buffer)); + symbolDetails.top().Value = buffer; } + pszCurrBuffer = PopSymbolDetail(pszCurrBuffer); return true; } @@ -857,11 +876,16 @@ DWORD dwTypeIndex, unsigned nestingLevel, DWORD_PTR offset, bool & bHandled, -char* Name, -char* suffix) +const char* Name, +char* /*suffix*/, +bool newSymbol, +bool logChildren) { bHandled = false; + if (newSymbol) + pszCurrBuffer = PushSymbolDetail(pszCurrBuffer); + DWORD typeTag; if (!SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_SYMTAG, &typeTag)) return pszCurrBuffer; @@ -872,20 +896,53 @@ char* suffix) if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_SYMNAME, &pwszTypeName)) { - pszCurrBuffer += sprintf(pszCurrBuffer, " %ls", pwszTypeName); + // handle special cases + if (wcscmp(pwszTypeName, L"std::basic_string<char,std::char_traits<char>,std::allocator<char> >") == 0) + { + LocalFree(pwszTypeName); + symbolDetails.top().Type = "std::string"; + char buffer[50]; + FormatOutputValue(buffer, btStdString, 0, (PVOID)offset, sizeof(buffer)); + symbolDetails.top().Value = buffer; + if (Name != NULL && Name[0] != '\0') + symbolDetails.top().Name = Name; + bHandled = true; + return pszCurrBuffer; + } + + char buffer[200]; + wcstombs(buffer, pwszTypeName, sizeof(buffer)); + buffer[199] = '\0'; + if (Name != NULL && Name[0] != '\0') + { + symbolDetails.top().Type = buffer; + symbolDetails.top().Name = Name; + } + else if (buffer[0] != '\0') + symbolDetails.top().Name = buffer; + LocalFree(pwszTypeName); } + else if (Name != NULL && Name[0] != '\0') + symbolDetails.top().Name = Name; - if (strlen(suffix) > 0) - pszCurrBuffer += sprintf(pszCurrBuffer, "%s", suffix); + if (!StoreSymbol(dwTypeIndex, offset)) + { + // Skip printing address and base class if it has been printed already + if (typeTag == SymTagBaseClass) + bHandled = true; + return pszCurrBuffer; + } + DWORD innerTypeID; switch (typeTag) { case SymTagPointerType: - DWORD innerTypeID; if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_TYPEID, &innerTypeID)) { - pszCurrBuffer += sprintf(pszCurrBuffer, " %s", Name); + if (Name != NULL && Name[0] != '\0') + symbolDetails.top().Name = Name; + BOOL isReference; SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_IS_REFERENCE, &isReference); @@ -893,34 +950,146 @@ char* suffix) memset(addressStr, 0, sizeof(addressStr)); if (isReference) - addressStr[0] = '&'; + symbolDetails.top().Suffix += "&"; else - addressStr[0] = '*'; + symbolDetails.top().Suffix += "*"; + + // Try to dereference the pointer in a try/except block since it might be invalid + DWORD_PTR address = DereferenceUnsafePointer(offset); + + char buffer[50]; + FormatOutputValue(buffer, btVoid, sizeof(PVOID), (PVOID)offset, sizeof(buffer)); + symbolDetails.top().Value = buffer; + + if (nestingLevel >= WER_MAX_NESTING_LEVEL) + logChildren = false; + + // no need to log any children since the address is invalid anyway + if (address == NULL || address == DWORD_PTR(-1)) + logChildren = false; - DWORD_PTR address = *(PDWORD_PTR)offset; - if (address == NULL) + pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, + address, bHandled, Name, addressStr, false, logChildren); + + if (!bHandled) { - pwszTypeName; - if (SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_SYMNAME, - &pwszTypeName)) + BasicType basicType = GetBasicType(dwTypeIndex, modBase); + if (symbolDetails.top().Type.empty()) + symbolDetails.top().Type = rgBaseType[basicType]; + + if (address == NULL) + symbolDetails.top().Value = "NULL"; + else if (address == DWORD_PTR(-1)) + symbolDetails.top().Value = "<Unable to read memory>"; + else { - pszCurrBuffer += sprintf(pszCurrBuffer, " %ls", pwszTypeName); - LocalFree(pwszTypeName); + // Get the size of the child member + ULONG64 length; + SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_LENGTH, &length); + char buffer[50]; + FormatOutputValue(buffer, basicType, length, (PVOID)address, sizeof(buffer)); + symbolDetails.top().Value = buffer; } - - pszCurrBuffer += sprintf(pszCurrBuffer, "%s = NULL", addressStr); - bHandled = true; return pszCurrBuffer; } + else if (address == NULL) + symbolDetails.top().Value = "NULL"; + else if (address == DWORD_PTR(-1)) + { + symbolDetails.top().Value = "<Unable to read memory>"; + bHandled = true; + return pszCurrBuffer; + } + } + break; + case SymTagData: + if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_TYPEID, &innerTypeID)) + { + DWORD innerTypeTag; + if (!SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_SYMTAG, &innerTypeTag)) + break; + + switch (innerTypeTag) + { + case SymTagUDT: + if (nestingLevel >= WER_MAX_NESTING_LEVEL) + logChildren = false; + pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, + offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren); + break; + case SymTagPointerType: + if (Name != NULL && Name[0] != '\0') + symbolDetails.top().Name = Name; + pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, + offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren); + break; + case SymTagArrayType: + pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, + offset, bHandled, symbolDetails.top().Name.c_str(), "", false, logChildren); + break; + default: + break; + } + } + break; + case SymTagArrayType: + if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_TYPEID, &innerTypeID)) + { + symbolDetails.top().HasChildren = true; + + BasicType basicType = btNoType; + pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, + offset, bHandled, Name, "", false, false); + + // Set Value back to an empty string since the Array object itself has no value, only its elements have + symbolDetails.top().Value = ""; + + DWORD elementsCount; + if (SymGetTypeInfo(m_hProcess, modBase, dwTypeIndex, TI_GET_COUNT, &elementsCount)) + symbolDetails.top().Suffix += "[" + std::to_string(elementsCount) + "]"; else + symbolDetails.top().Suffix += "[<unknown count>]"; + + if (!bHandled) { - FormatOutputValue(&addressStr[1], btVoid, sizeof(PVOID), (PVOID)offset); - pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, innerTypeID, nestingLevel + 1, - address, bHandled, "", addressStr); + basicType = GetBasicType(dwTypeIndex, modBase); + if (symbolDetails.top().Type.empty()) + symbolDetails.top().Type = rgBaseType[basicType]; + bHandled = true; } + + // Get the size of the child member + ULONG64 length; + SymGetTypeInfo(m_hProcess, modBase, innerTypeID, TI_GET_LENGTH, &length); + + char buffer[50]; + switch (basicType) + { + case btChar: + case btStdString: + FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer)); + symbolDetails.top().Value = buffer; + break; + default: + for (DWORD index = 0; index < elementsCount && index < WER_MAX_ARRAY_ELEMENTS_COUNT; index++) + { + pszCurrBuffer = PushSymbolDetail(pszCurrBuffer); + symbolDetails.top().Suffix += "[" + std::to_string(index) + "]"; + FormatOutputValue(buffer, basicType, length, (PVOID)(offset + length * index), sizeof(buffer)); + symbolDetails.top().Value = buffer; + pszCurrBuffer = PopSymbolDetail(pszCurrBuffer); + } + break; + } + + return pszCurrBuffer; } break; + case SymTagBaseType: + break; + case SymTagEnum: + return pszCurrBuffer; default: break; } @@ -937,7 +1106,7 @@ char* suffix) // TI_FINDCHILDREN_PARAMS struct has. Use derivation to accomplish this. struct FINDCHILDREN : TI_FINDCHILDREN_PARAMS { - ULONG MoreChildIds[1024]; + ULONG MoreChildIds[1024*2]; FINDCHILDREN(){Count = sizeof(MoreChildIds) / sizeof(MoreChildIds[0]);} } children; @@ -951,26 +1120,37 @@ char* suffix) return pszCurrBuffer; } - // Append a line feed - pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n"); - // Iterate through each of the children for (unsigned i = 0; i < dwChildrenCount; i++) { DWORD symTag; SymGetTypeInfo(m_hProcess, modBase, children.ChildId[i], TI_GET_SYMTAG, &symTag); - if (symTag == SymTagFunction || symTag == SymTagTypedef) + if (symTag == SymTagFunction || + symTag == SymTagEnum || + symTag == SymTagTypedef || + symTag == SymTagVTable) continue; - // Add appropriate indentation level (since this routine is recursive) - for (unsigned j = 0; j <= nestingLevel+1; j++) - pszCurrBuffer += sprintf(pszCurrBuffer, "\t"); + // Ignore static fields + DWORD dataKind; + SymGetTypeInfo(m_hProcess, modBase, children.ChildId[i], TI_GET_DATAKIND, &dataKind); + if (dataKind == DataIsStaticLocal || + dataKind == DataIsGlobal || + dataKind == DataIsStaticMember) + continue; + + + symbolDetails.top().HasChildren = true; + if (!logChildren) + { + bHandled = false; + return pszCurrBuffer; + } // Recurse for each of the child types bool bHandled2; BasicType basicType = GetBasicType(children.ChildId[i], modBase); - pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]); // Get the offset of the child member, relative to its parent DWORD dwMemberOffset; @@ -982,11 +1162,14 @@ char* suffix) pszCurrBuffer = DumpTypeIndex(pszCurrBuffer, modBase, children.ChildId[i], nestingLevel+1, - dwFinalOffset, bHandled2, ""/*Name */, ""); + dwFinalOffset, bHandled2, ""/*Name */, "", true, true); // If the child wasn't a UDT, format it appropriately if (!bHandled2) { + if (symbolDetails.top().Type.empty()) + symbolDetails.top().Type = rgBaseType[basicType]; + // Get the real "TypeId" of the child. We need this for the // SymGetTypeInfo(TI_GET_TYPEID) call below. DWORD typeId; @@ -997,78 +1180,88 @@ char* suffix) ULONG64 length; SymGetTypeInfo(m_hProcess, modBase, typeId, TI_GET_LENGTH, &length); - // BasicType basicType = GetBasicType(children.ChildId[i], modBase); - // - // pszCurrBuffer += sprintf(pszCurrBuffer, rgBaseType[basicType]); - // - // Emit the variable name - // pszCurrBuffer += sprintf(pszCurrBuffer, "\'%s\'", Name); - - pszCurrBuffer = FormatOutputValue(pszCurrBuffer, basicType, - length, (PVOID)dwFinalOffset); - - pszCurrBuffer += sprintf(pszCurrBuffer, "\r\n"); + char buffer[50]; + FormatOutputValue(buffer, basicType, length, (PVOID)dwFinalOffset, sizeof(buffer)); + symbolDetails.top().Value = buffer; } + + pszCurrBuffer = PopSymbolDetail(pszCurrBuffer); } bHandled = true; return pszCurrBuffer; } -char * WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer, +void WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, -PVOID pAddress) +PVOID pAddress, +size_t bufferSize) { __try { - // Format appropriately (assuming it's a 1, 2, or 4 bytes (!!!) - if (length == 1) - pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PBYTE)pAddress); - else if (length == 2) - pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PWORD)pAddress); - else if (length == 4) + switch (basicType) { - if (basicType == btFloat) + case btChar: { - pszCurrBuffer += sprintf(pszCurrBuffer, " = %f", *(PFLOAT)pAddress); + if (strlen((char*)pAddress) > bufferSize - 6) + pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, (char*)pAddress); + else + pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", (char*)pAddress); + break; } - else if (basicType == btChar) + case btStdString: { - if (!IsBadStringPtr(*(PSTR*)pAddress, 32)) + std::string* value = static_cast<std::string*>(pAddress); + if (value->length() > bufferSize - 6) + pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, value->c_str()); + else + pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", value->c_str()); + break; + } + default: + // Format appropriately (assuming it's a 1, 2, or 4 bytes (!!!) + if (length == 1) + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PBYTE)pAddress); + else if (length == 2) + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PWORD)pAddress); + else if (length == 4) { - pszCurrBuffer += sprintf(pszCurrBuffer, " = \"%.31s\"", - *(PSTR*)pAddress); + if (basicType == btFloat) + pszCurrBuffer += sprintf(pszCurrBuffer, "%f", *(PFLOAT)pAddress); + else + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", *(PDWORD)pAddress); + } + else if (length == 8) + { + if (basicType == btFloat) + { + pszCurrBuffer += sprintf(pszCurrBuffer, "%lf", + *(double *)pAddress); + } + else + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X", + *(DWORD64*)pAddress); } else - pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", - *(PDWORD)pAddress); - } - else - pszCurrBuffer += sprintf(pszCurrBuffer, " = %X", *(PDWORD)pAddress); - } - else if (length == 8) - { - if (basicType == btFloat) - { - pszCurrBuffer += sprintf(pszCurrBuffer, " = %lf", - *(double *)pAddress); - } - else - pszCurrBuffer += sprintf(pszCurrBuffer, " = %I64X", - *(DWORD64*)pAddress); + { + #if _WIN64 + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X", (DWORD64*)pAddress); + #else + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X", (PDWORD)pAddress); + #endif + } + break; } } __except (EXCEPTION_EXECUTE_HANDLER) { #if _WIN64 - pszCurrBuffer += sprintf(pszCurrBuffer, " <Unable to read memory> = %I64X", (DWORD64*)pAddress); + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%I64X <Unable to read memory>", (DWORD64*)pAddress); #else - pszCurrBuffer += sprintf(pszCurrBuffer, " <Unable to read memory> = %X", (PDWORD)pAddress); + pszCurrBuffer += sprintf(pszCurrBuffer, "0x%X <Unable to read memory>", (PDWORD)pAddress); #endif } - - return pszCurrBuffer; } BasicType @@ -1096,13 +1289,25 @@ WheatyExceptionReport::GetBasicType(DWORD typeIndex, DWORD64 modBase) return btNoType; } +DWORD_PTR WheatyExceptionReport::DereferenceUnsafePointer(DWORD_PTR address) +{ + __try + { + return *(PDWORD_PTR)address; + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + return DWORD_PTR(-1); + } +} + //============================================================================ // Helper function that writes to the report file, and allows the user to use // printf style formating //============================================================================ int __cdecl WheatyExceptionReport::_tprintf(const TCHAR * format, ...) { - TCHAR szBuff[8192]; + TCHAR szBuff[WER_LARGE_BUFFER_SIZE]; int retValue; DWORD cbWritten; va_list argptr; @@ -1116,4 +1321,49 @@ int __cdecl WheatyExceptionReport::_tprintf(const TCHAR * format, ...) return retValue; } +bool WheatyExceptionReport::StoreSymbol(DWORD type, DWORD_PTR offset) +{ + return symbols.insert(SymbolPair(type, offset)).second; +} + +void WheatyExceptionReport::ClearSymbols() +{ + symbols.clear(); + while (!symbolDetails.empty()) + symbolDetails.pop(); +} + +char* WheatyExceptionReport::PushSymbolDetail(char* pszCurrBuffer) +{ + // Log current symbol and then add another to the stack to keep the hierarchy format + pszCurrBuffer = PrintSymbolDetail(pszCurrBuffer); + symbolDetails.emplace(); + return pszCurrBuffer; +} + +char* WheatyExceptionReport::PopSymbolDetail(char* pszCurrBuffer) +{ + pszCurrBuffer = PrintSymbolDetail(pszCurrBuffer); + symbolDetails.pop(); + return pszCurrBuffer; +} + +char* WheatyExceptionReport::PrintSymbolDetail(char* pszCurrBuffer) +{ + if (symbolDetails.empty()) + return pszCurrBuffer; + + // Don't log anything if has been logged already or if it's empty + if (symbolDetails.top().Logged || symbolDetails.top().empty()) + return pszCurrBuffer; + + // Add appropriate indentation level (since this routine is recursive) + for (size_t i = 0; i < symbolDetails.size(); i++) + pszCurrBuffer += sprintf(pszCurrBuffer, "\t"); + + pszCurrBuffer += sprintf(pszCurrBuffer, "%s\r\n", symbolDetails.top().ToString().c_str()); + + return pszCurrBuffer; +} + #endif // _WIN32 diff --git a/src/server/shared/Debugging/WheatyExceptionReport.h b/src/server/shared/Debugging/WheatyExceptionReport.h index 48894a5db91..9137b91aac9 100644 --- a/src/server/shared/Debugging/WheatyExceptionReport.h +++ b/src/server/shared/Debugging/WheatyExceptionReport.h @@ -4,13 +4,14 @@ #if PLATFORM == PLATFORM_WINDOWS && !defined(__MINGW32__) #include <dbghelp.h> +#include <set> +#include <stdlib.h> +#include <stack> +#define countof _countof -#if _MSC_VER < 1400 -# define countof(array) (sizeof(array) / sizeof(array[0])) -#else -# include <stdlib.h> -# define countof _countof -#endif // _MSC_VER < 1400 +#define WER_MAX_ARRAY_ELEMENTS_COUNT 10 +#define WER_MAX_NESTING_LEVEL 5 +#define WER_LARGE_BUFFER_SIZE 1024 * 128 enum BasicType // Stolen from CVCONST.H in the DIA 2.0 SDK { @@ -31,43 +32,112 @@ enum BasicType // Stolen from CVCON btComplex = 28, btBit = 29, btBSTR = 30, - btHresult = 31 + btHresult = 31, + + // Custom types + btStdString = 101 +}; + +enum DataKind // Stolen from CVCONST.H in the DIA 2.0 SDK +{ + DataIsUnknown, + DataIsLocal, + DataIsStaticLocal, + DataIsParam, + DataIsObjectPtr, + DataIsFileStatic, + DataIsGlobal, + DataIsMember, + DataIsStaticMember, + DataIsConstant }; const char* const rgBaseType[] = { - " <user defined> ", // btNoType = 0, - " void ", // btVoid = 1, - " char* ", // btChar = 2, - " wchar_t* ", // btWChar = 3, - " signed char ", - " unsigned char ", - " int ", // btInt = 6, - " unsigned int ", // btUInt = 7, - " float ", // btFloat = 8, - " <BCD> ", // btBCD = 9, - " bool ", // btBool = 10, - " short ", - " unsigned short ", - " long ", // btLong = 13, - " unsigned long ", // btULong = 14, - " __int8 ", - " __int16 ", - " __int32 ", - " __int64 ", - " __int128 ", - " unsigned __int8 ", - " unsigned __int16 ", - " unsigned __int32 ", - " unsigned __int64 ", - " unsigned __int128 ", - " <currency> ", // btCurrency = 25, - " <date> ", // btDate = 26, - " VARIANT ", // btVariant = 27, - " <complex> ", // btComplex = 28, - " <bit> ", // btBit = 29, - " BSTR ", // btBSTR = 30, - " HRESULT " // btHresult = 31 + "<user defined>", // btNoType = 0, + "void", // btVoid = 1, + "char",//char* // btChar = 2, + "wchar_t*", // btWChar = 3, + "signed char", + "unsigned char", + "int", // btInt = 6, + "unsigned int", // btUInt = 7, + "float", // btFloat = 8, + "<BCD>", // btBCD = 9, + "bool", // btBool = 10, + "short", + "unsigned short", + "long", // btLong = 13, + "unsigned long", // btULong = 14, + "int8", + "int16", + "int32", + "int64", + "int128", + "uint8", + "uint16", + "uint32", + "uint64", + "uint128", + "<currency>", // btCurrency = 25, + "<date>", // btDate = 26, + "VARIANT", // btVariant = 27, + "<complex>", // btComplex = 28, + "<bit>", // btBit = 29, + "BSTR", // btBSTR = 30, + "HRESULT" // btHresult = 31 +}; + +struct SymbolPair +{ + SymbolPair(DWORD type, DWORD_PTR offset) + { + _type = type; + _offset = offset; + } + + bool operator<(const SymbolPair& other) const + { + return _offset < other._offset || + (_offset == other._offset && _type < other._type); + } + + DWORD _type; + DWORD_PTR _offset; +}; +typedef std::set<SymbolPair> SymbolPairs; + +struct SymbolDetail +{ + SymbolDetail() : Prefix(), Type(), Suffix(), Name(), Value(), Logged(false), HasChildren(false) {} + + std::string ToString() + { + Logged = true; + std::string formatted = Prefix + Type + Suffix; + if (!Name.empty()) + { + if (!formatted.empty()) + formatted += " "; + formatted += Name; + } + if (!Value.empty()) + formatted += " = " + Value; + return formatted; + } + + bool empty() const + { + return Value.empty() && !HasChildren; + } + + std::string Prefix; + std::string Type; + std::string Suffix; + std::string Name; + std::string Value; + bool Logged; + bool HasChildren; }; class WheatyExceptionReport @@ -100,14 +170,18 @@ class WheatyExceptionReport static bool FormatSymbolValue(PSYMBOL_INFO, STACKFRAME64 *, char * pszBuffer, unsigned cbBuffer); - static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, char*, char*); + static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, const char*, char*, bool, bool); - static char * FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress); + static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize); static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase); + static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address); static int __cdecl _tprintf(const TCHAR * format, ...); + static bool StoreSymbol(DWORD type , DWORD_PTR offset); + static void ClearSymbols(); + // Variables used by the class static TCHAR m_szLogFileName[MAX_PATH]; static TCHAR m_szDumpFileName[MAX_PATH]; @@ -115,6 +189,13 @@ class WheatyExceptionReport static HANDLE m_hReportFile; static HANDLE m_hDumpFile; static HANDLE m_hProcess; + static SymbolPairs symbols; + static std::stack<SymbolDetail> symbolDetails; + + static char* PushSymbolDetail(char* pszCurrBuffer); + static char* PopSymbolDetail(char* pszCurrBuffer); + static char* PrintSymbolDetail(char* pszCurrBuffer); + }; extern WheatyExceptionReport g_WheatyExceptionReport; // global instance of class diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h index 27973694818..e43853e5bb0 100644 --- a/src/server/shared/Define.h +++ b/src/server/shared/Define.h @@ -70,14 +70,6 @@ # define ATTR_DEPRECATED #endif //COMPILER == COMPILER_GNU -#if COMPILER_HAS_CPP11_SUPPORT -# define OVERRIDE override -# define FINAL final -#else -# define OVERRIDE -# define FINAL -#endif //COMPILER_HAS_CPP11_SUPPORT - #define UI64FMTD ACE_UINT64_FORMAT_SPECIFIER #define UI64LIT(N) ACE_UINT64_LITERAL(N) diff --git a/src/server/shared/Dynamic/HashNamespace.h b/src/server/shared/Dynamic/HashNamespace.h deleted file mode 100644 index 0e95332c05f..00000000000 --- a/src/server/shared/Dynamic/HashNamespace.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_HASH_NAMESPACE_H -#define TRINITY_HASH_NAMESPACE_H - -#include "Define.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif defined(_STLPORT_VERSION) -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define HASH_NAMESPACE_START namespace stdext { -# define HASH_NAMESPACE_END } - -#if !_HAS_TRADITIONAL_STL -#ifndef HASH_NAMESPACE -#define HASH_NAMESPACE -#else - -// can be not used by some platforms, so provide fake forward -HASH_NAMESPACE_START - -template<class K> -class hash -{ -public: - size_t operator() (K const&); -}; - -HASH_NAMESPACE_END - -#endif -#endif - -#elif COMPILER == COMPILER_INTEL -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define HASH_NAMESPACE_START namespace __gnu_cxx { -# define HASH_NAMESPACE_END } - -#include <ext/hash_fun.h> -#include <string> - -HASH_NAMESPACE_START - -template<> -class hash<unsigned long long> -{ -public: - size_t operator()(const unsigned long long &__x) const { return (size_t)__x; } -}; - -template<typename T> -class hash<T *> -{ -public: - size_t operator()(T * const &__x) const { return (size_t)__x; } -}; - -template<> struct hash<std::string> -{ - size_t operator()(const std::string &__x) const - { - return hash<char const*>()(__x.c_str()); - } -}; - -HASH_NAMESPACE_END - -#else -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#endif - -#if COMPILER != COMPILER_MICROSOFT - -// Visual Studio use non standard hash calculation function, so provide fake forward for other -HASH_NAMESPACE_START - -template<class K> -size_t hash_value(K const&); - -HASH_NAMESPACE_END - -#endif - -#endif diff --git a/src/server/shared/Dynamic/LinkedList.h b/src/server/shared/Dynamic/LinkedList.h index 72d035c2cb6..402aaf3d40c 100644 --- a/src/server/shared/Dynamic/LinkedList.h +++ b/src/server/shared/Dynamic/LinkedList.h @@ -33,8 +33,8 @@ class LinkedListElement LinkedListElement* iNext; LinkedListElement* iPrev; public: - LinkedListElement(): iNext(NULL), iPrev(NULL) { } - ~LinkedListElement() { delink(); } + LinkedListElement() : iNext(NULL), iPrev(NULL) { } + virtual ~LinkedListElement() { delink(); } bool hasNext() const { return(iNext && iNext->iNext != NULL); } bool hasPrev() const { return(iPrev && iPrev->iPrev != NULL); } @@ -73,6 +73,10 @@ class LinkedListElement iNext->iPrev = pElem; iNext = pElem; } + + private: + LinkedListElement(LinkedListElement const&); + LinkedListElement& operator=(LinkedListElement const&); }; //============================================ @@ -83,6 +87,7 @@ class LinkedListHead LinkedListElement iFirst; LinkedListElement iLast; uint32 iSize; + public: LinkedListHead(): iSize(0) { @@ -92,6 +97,8 @@ class LinkedListHead iLast.iPrev = &iFirst; } + virtual ~LinkedListHead() { } + bool isEmpty() const { return(!iFirst.iNext->isInList()); } LinkedListElement * getFirst() { return(isEmpty() ? NULL : iFirst.iNext); } @@ -239,6 +246,10 @@ class LinkedListHead }; typedef Iterator<LinkedListElement> iterator; + + private: + LinkedListHead(LinkedListHead const&); + LinkedListHead& operator=(LinkedListHead const&); }; //============================================ diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h index 1ba41f1f454..83a1dd155b1 100644 --- a/src/server/shared/Dynamic/LinkedReference/Reference.h +++ b/src/server/shared/Dynamic/LinkedReference/Reference.h @@ -94,6 +94,10 @@ template <class TO, class FROM> class Reference : public LinkedListElement TO* getTarget() const { return iRefTo; } FROM* GetSource() const { return iRefFrom; } + + private: + Reference(Reference const&); + Reference& operator=(Reference const&); }; //===================================================== diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h index 4b17b2fc558..be7ce00ac05 100644 --- a/src/server/shared/Dynamic/ObjectRegistry.h +++ b/src/server/shared/Dynamic/ObjectRegistry.h @@ -20,12 +20,12 @@ #define TRINITY_OBJECTREGISTRY_H #include "Define.h" -#include "Dynamic/UnorderedMap.h" #include <ace/Singleton.h> #include <string> #include <vector> #include <map> +#include <unordered_map> /** ObjectRegistry holds all registry item of the same type */ diff --git a/src/server/shared/Dynamic/UnorderedMap.h b/src/server/shared/Dynamic/UnorderedMap.h deleted file mode 100644 index f97c4830c75..00000000000 --- a/src/server/shared/Dynamic/UnorderedMap.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_UNORDERED_MAP_H -#define TRINITY_UNORDERED_MAP_H - -#include "HashNamespace.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# include <unordered_map> -#elif COMPILER == COMPILER_INTEL -# include <ext/hash_map> -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# include <unordered_map> -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# include <tr1/unordered_map> -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# include <ext/hash_map> -#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later -# include <unordered_map> -#else -# include <hash_map> -#endif - -#ifdef _STLPORT_VERSION -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#elif COMPILER_HAS_CPP11_SUPPORT -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_MULTIMAP std::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define UNORDERED_MAP stdext::hash_map -# define UNORDERED_MULTIMAP stdext::hash_multimap -#elif COMPILER == COMPILER_INTEL -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_MULTIMAP std::unordered_multimap -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define UNORDERED_MAP __gnu_cxx::hash_map -# define UNORDERED_MULTIMAP __gnu_cxx::hash_multimap -#else -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#endif - -#endif diff --git a/src/server/shared/Dynamic/UnorderedSet.h b/src/server/shared/Dynamic/UnorderedSet.h deleted file mode 100644 index 0e084698c47..00000000000 --- a/src/server/shared/Dynamic/UnorderedSet.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * 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, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_UNORDERED_SET_H -#define TRINITY_UNORDERED_SET_H - -#include "HashNamespace.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# include <unordered_set> -#elif COMPILER == COMPILER_INTEL -# include <ext/hash_set> -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# include <unordered_set> -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# include <tr1/unordered_set> -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# include <ext/hash_set> -#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later -# include <unordered_set> -#else -# include <hash_set> -#endif - -#ifdef _STLPORT_VERSION -# define UNORDERED_SET std::hash_set -using std::hash_set; -#elif COMPILER_HAS_CPP11_SUPPORT -# define UNORDERED_SET std::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define UNORDERED_SET stdext::hash_set -using stdext::hash_set; -#elif COMPILER == COMPILER_INTEL -# define UNORDERED_SET std::hash_set -using std::hash_set; -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define UNORDERED_SET std::unordered_set -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define UNORDERED_SET __gnu_cxx::hash_set -#else -# define UNORDERED_SET std::hash_set -using std::hash_set; -#endif - -#endif diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h index b373f0459c9..84d0dc14eca 100644 --- a/src/server/shared/Logging/Appender.h +++ b/src/server/shared/Logging/Appender.h @@ -20,8 +20,7 @@ #include "Define.h" #include <time.h> -#include "Dynamic/UnorderedMap.h" - +#include <unordered_map> #include <string> // Values assigned have their equivalent in enum ACE_Log_Priority @@ -105,6 +104,6 @@ class Appender AppenderFlags flags; }; -typedef UNORDERED_MAP<uint8, Appender*> AppenderMap; +typedef std::unordered_map<uint8, Appender*> AppenderMap; #endif diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index b9c2fd7339d..f2532ad8bb8 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -16,6 +16,7 @@ */ #include "AppenderFile.h" +#include "Common.h" #if PLATFORM == PLATFORM_WINDOWS # include <Windows.h> @@ -33,7 +34,8 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, co dynamicName = std::string::npos != filename.find("%s"); backup = (_flags & APPENDER_FLAGS_MAKE_FILE_BACKUP) != 0; - logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL; + if (!dynamicName) + logfile = OpenFile(_filename, _mode, mode == "w" && backup); } AppenderFile::~AppenderFile() @@ -49,7 +51,15 @@ void AppenderFile::_write(LogMessage const& message) { char namebuf[TRINITY_PATH_MAX]; snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); - logfile = OpenFile(namebuf, mode, backup || exceedMaxSize); + // always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call + FILE* file = OpenFile(namebuf, "a", backup || exceedMaxSize); + if (!file) + return; + fprintf(file, "%s%s", message.prefix.c_str(), message.text.c_str()); + fflush(file); + fileSize += uint64(message.Size()); + fclose(file); + return; } else if (exceedMaxSize) logfile = OpenFile(filename, "w", true); @@ -60,9 +70,6 @@ void AppenderFile::_write(LogMessage const& message) fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); fflush(logfile); fileSize += uint64(message.Size()); - - if (dynamicName) - CloseFile(); } FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) @@ -74,6 +81,7 @@ FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mod std::string newName(fullName); newName.push_back('.'); newName.append(LogMessage::getTimeStr(time(NULL))); + std::replace(newName.begin(), newName.end(), ':', '-'); rename(fullName.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore } diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index d7d70e7d4ea..dc9bda62bfb 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -267,7 +267,7 @@ void Log::vlog(std::string const& filter, LogLevel level, char const* str, va_li write(new LogMessage(level, filter, text)); } -void Log::write(LogMessage* msg) +void Log::write(LogMessage* msg) const { Logger const* logger = GetLoggerByType(msg->type); msg->text.append("\n"); @@ -376,7 +376,6 @@ void Log::Close() delete worker; worker = NULL; loggers.clear(); - cachedLoggers.clear(); for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it) { delete it->second; diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index dcac93e5a60..a118e6e8773 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -23,8 +23,8 @@ #include "Appender.h" #include "Logger.h" #include "LogWorker.h" -#include "Dynamic/UnorderedMap.h" +#include <unordered_map> #include <string> #include <ace/Singleton.h> @@ -34,8 +34,7 @@ class Log { friend class ACE_Singleton<Log, ACE_Thread_Mutex>; - typedef UNORDERED_MAP<std::string, Logger> LoggerMap; - typedef UNORDERED_MAP<std::string, Logger const*> CachedLoggerContainer; + typedef std::unordered_map<std::string, Logger> LoggerMap; private: Log(); @@ -44,7 +43,7 @@ class Log public: void LoadFromConfig(); void Close(); - bool ShouldLog(std::string const& type, LogLevel level); + bool ShouldLog(std::string const& type, LogLevel level) const; bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true); void outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5); @@ -57,9 +56,9 @@ class Log private: static std::string GetTimestampStr(); void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr); - void write(LogMessage* msg); + void write(LogMessage* msg) const; - Logger const* GetLoggerByType(std::string const& type); + Logger const* GetLoggerByType(std::string const& type) const; Appender* GetAppenderByName(std::string const& name); uint8 NextAppenderId(); void CreateAppenderFromConfig(std::string const& name); @@ -69,7 +68,6 @@ class Log AppenderMap appenders; LoggerMap loggers; - CachedLoggerContainer cachedLoggers; uint8 AppenderId; std::string m_logsDir; @@ -78,36 +76,24 @@ class Log LogWorker* worker; }; -inline Logger const* Log::GetLoggerByType(std::string const& originalType) +inline Logger const* Log::GetLoggerByType(std::string const& type) const { - // Check if already cached - CachedLoggerContainer::const_iterator itCached = cachedLoggers.find(originalType); - if (itCached != cachedLoggers.end()) - return itCached->second; - - Logger const* logger = NULL; - std::string type(originalType); - - do - { - // Search for the logger "type.subtype" - LoggerMap::const_iterator it = loggers.find(type); - if (it == loggers.end()) - { - // Search for the logger "type", if our logger contains '.', otherwise search for LOGGER_ROOT - size_t found = type.find_last_of("."); - type = found != std::string::npos ? type.substr(0, found) : LOGGER_ROOT; - } - else - logger = &(it->second); - } - while (!logger); - - cachedLoggers[type] = logger; - return logger; + LoggerMap::const_iterator it = loggers.find(type); + if (it != loggers.end()) + return &(it->second); + + if (type == LOGGER_ROOT) + return NULL; + + std::string parentLogger = LOGGER_ROOT; + size_t found = type.find_last_of("."); + if (found != std::string::npos) + parentLogger = type.substr(0,found); + + return GetLoggerByType(parentLogger); } -inline bool Log::ShouldLog(std::string const& type, LogLevel level) +inline bool Log::ShouldLog(std::string const& type, LogLevel level) const { // TODO: Use cache to store "Type.sub1.sub2": "Type" equivalence, should // Speed up in cases where requesting "Type.sub1.sub2" but only configured diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp index b8cb5215665..f446592e922 100644 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ b/src/server/shared/Packets/ByteBuffer.cpp @@ -27,11 +27,10 @@ ByteBufferPositionException::ByteBufferPositionException(bool add, size_t pos, size_t size, size_t valueSize) { std::ostringstream ss; - ACE_Stack_Trace trace; ss << "Attempted to " << (add ? "put" : "get") << " value with size: " << valueSize << " in ByteBuffer (pos: " << pos << " size: " << size - << ")\n\n" << trace.c_str(); + << ")"; message().assign(ss.str()); } @@ -40,12 +39,10 @@ ByteBufferSourceException::ByteBufferSourceException(size_t pos, size_t size, size_t valueSize) { std::ostringstream ss; - ACE_Stack_Trace trace; ss << "Attempted to put a " << (valueSize > 0 ? "NULL-pointer" : "zero-sized value") - << " in ByteBuffer (pos: " << pos << " size: " << size << ")\n\n" - << trace.c_str(); + << " in ByteBuffer (pos: " << pos << " size: " << size << ")"; message().assign(ss.str()); } diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 33d33519c8f..11e835566e9 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -31,6 +31,7 @@ #include <vector> #include <cstring> #include <time.h> +#include <math.h> // Root of ByteBuffer exception hierarchy class ByteBufferException : public std::exception @@ -85,6 +86,8 @@ class ByteBuffer { } + virtual ~ByteBuffer() { } + void clear() { _storage.clear(); @@ -239,12 +242,16 @@ class ByteBuffer ByteBuffer &operator>>(float &value) { value = read<float>(); + if (!std::isfinite(value)) + throw ByteBufferException(); return *this; } ByteBuffer &operator>>(double &value) { value = read<double>(); + if (!std::isfinite(value)) + throw ByteBufferException(); return *this; } @@ -375,9 +382,19 @@ class ByteBuffer return *this; } - uint8 * contents() { return &_storage[0]; } + uint8 * contents() + { + if (_storage.empty()) + throw ByteBufferException(); + return &_storage[0]; + } - const uint8 *contents() const { return &_storage[0]; } + const uint8 *contents() const + { + if (_storage.empty()) + throw ByteBufferException(); + return &_storage[0]; + } size_t size() const { return _storage.size(); } bool empty() const { return _storage.empty(); } diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h index b074ff49c3c..c48546bbf5c 100644 --- a/src/server/shared/Threading/Callback.h +++ b/src/server/shared/Threading/Callback.h @@ -109,6 +109,9 @@ class QueryCallback ACE_Future<Result> _result; ParamType _param; uint8 _stage; + + QueryCallback(QueryCallback const& right) = delete; + QueryCallback& operator=(QueryCallback const& right) = delete; }; template <typename Result, typename ParamType1, typename ParamType2, bool chain = false> @@ -201,6 +204,9 @@ class QueryCallback_2 ParamType1 _param_1; ParamType2 _param_2; uint8 _stage; + + QueryCallback_2(QueryCallback_2 const& right) = delete; + QueryCallback_2& operator=(QueryCallback_2 const& right) = delete; }; #endif
\ No newline at end of file diff --git a/src/server/shared/Utilities/ByteConverter.h b/src/server/shared/Utilities/ByteConverter.h index bf1342a10e4..8eebb05bb13 100644 --- a/src/server/shared/Utilities/ByteConverter.h +++ b/src/server/shared/Utilities/ByteConverter.h @@ -47,9 +47,13 @@ namespace ByteConverter #if TRINITY_ENDIAN == TRINITY_BIGENDIAN template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); } template<typename T> inline void EndianConvertReverse(T&) { } +template<typename T> inline void EndianConvertPtr(void* val) { ByteConverter::apply<T>(val); } +template<typename T> inline void EndianConvertPtrReverse(void*) { } #else template<typename T> inline void EndianConvert(T&) { } template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); } +template<typename T> inline void EndianConvertPtr(void*) { } +template<typename T> inline void EndianConvertPtrReverse(void* val) { ByteConverter::apply<T>(val); } #endif template<typename T> void EndianConvert(T*); // will generate link error diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp index 499ad0502b7..28bbe831a69 100644 --- a/src/server/shared/Utilities/Util.cpp +++ b/src/server/shared/Utilities/Util.cpp @@ -510,6 +510,9 @@ void vutf8printf(FILE* out, const char *str, va_list* ap) wchar_t wtemp_buf[32*1024]; size_t temp_len = vsnprintf(temp_buf, 32*1024, str, *ap); + //vsnprintf returns -1 if the buffer is too small + if (temp_len == size_t(-1)) + temp_len = 32*1024-1; size_t wtemp_len = 32*1024-1; Utf8toWStr(temp_buf, temp_len, wtemp_buf, wtemp_len); @@ -544,3 +547,12 @@ std::string ByteArrayToHexStr(uint8 const* bytes, uint32 arrayLen, bool reverse return ss.str(); } + +uint32 EventMap::GetTimeUntilEvent(uint32 eventId) const +{ + for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr) + if (eventId == (itr->second & 0x0000FFFF)) + return itr->first - _time; + + return std::numeric_limits<uint32>::max(); +} diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index b086a28134c..648edf39abe 100644 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -26,6 +26,7 @@ #include <string> #include <vector> #include <list> +#include <map> #include <ace/INET_Addr.h> // Searcher for map of structs @@ -565,4 +566,346 @@ bool CompareValues(ComparisionType type, T val1, T val2) } } +class EventMap +{ + /** + * Internal storage type. + * Key: Time as uint32 when the event should occur. + * Value: The event data as uint32. + * + * Structure of event data: + * - Bit 0 - 15: Event Id. + * - Bit 16 - 23: Group + * - Bit 24 - 31: Phase + * - Pattern: 0xPPGGEEEE + */ + typedef std::multimap<uint32, uint32> EventStore; + + public: + EventMap() : _time(0), _phase(0), _lastEvent(0) { } + + /** + * @name Reset + * @brief Removes all scheduled events and resets time and phase. + */ + void Reset() + { + _eventMap.clear(); + _time = 0; + _phase = 0; + } + + /** + * @name Update + * @brief Updates the timer of the event map. + * @param time Value to be added to time. + */ + void Update(uint32 time) + { + _time += time; + } + + /** + * @name GetTimer + * @return Current timer value. + */ + uint32 GetTimer() const + { + return _time; + } + + /** + * @name GetPhaseMask + * @return Active phases as mask. + */ + uint8 GetPhaseMask() const + { + return _phase; + } + + /** + * @name Empty + * @return True, if there are no events scheduled. + */ + bool Empty() const + { + return _eventMap.empty(); + } + + /** + * @name SetPhase + * @brief Sets the phase of the map (absolute). + * @param phase Phase which should be set. Values: 1 - 8. 0 resets phase. + */ + void SetPhase(uint8 phase) + { + if (!phase) + _phase = 0; + else if (phase <= 8) + _phase = (1 << (phase - 1)); + } + + /** + * @name AddPhase + * @brief Activates the given phase (bitwise). + * @param phase Phase which should be activated. Values: 1 - 8 + */ + void AddPhase(uint8 phase) + { + if (phase && phase <= 8) + _phase |= (1 << (phase - 1)); + } + + /** + * @name RemovePhase + * @brief Deactivates the given phase (bitwise). + * @param phase Phase which should be deactivated. Values: 1 - 8. + */ + void RemovePhase(uint8 phase) + { + if (phase && phase <= 8) + _phase &= ~(1 << (phase - 1)); + } + + /** + * @name ScheduleEvent + * @brief Creates new event entry in map. + * @param eventId The id of the new event. + * @param time The time in milliseconds until the event occurs. + * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. + * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. + */ + void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0) + { + if (group && group <= 8) + eventId |= (1 << (group + 15)); + + if (phase && phase <= 8) + eventId |= (1 << (phase + 23)); + + _eventMap.insert(EventStore::value_type(_time + time, eventId)); + } + + /** + * @name RescheduleEvent + * @brief Cancels the given event and reschedules it. + * @param eventId The id of the event. + * @param time The time in milliseconds until the event occurs. + * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. + * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. + */ + void RescheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint8 phase = 0) + { + CancelEvent(eventId); + ScheduleEvent(eventId, time, group, phase); + } + + /** + * @name RepeatEvent + * @brief Repeats the mostly recently executed event. + * @param time Time until the event occurs. + */ + void Repeat(uint32 time) + { + _eventMap.insert(EventStore::value_type(_time + time, _lastEvent)); + } + + /** + * @name RepeatEvent + * @brief Repeats the mostly recently executed event. + * @param time Time until the event occurs. Equivalent to Repeat(urand(minTime, maxTime). + */ + void Repeat(uint32 minTime, uint32 maxTime) + { + Repeat(urand(minTime, maxTime)); + } + + /** + * @name ExecuteEvent + * @brief Returns the next event to execute and removes it from map. + * @return Id of the event to execute. + */ + uint32 ExecuteEvent() + { + while (!Empty()) + { + EventStore::iterator itr = _eventMap.begin(); + + if (itr->first > _time) + return 0; + else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase)) + _eventMap.erase(itr); + else + { + uint32 eventId = (itr->second & 0x0000FFFF); + _lastEvent = itr->second; // include phase/group + _eventMap.erase(itr); + return eventId; + } + } + + return 0; + } + + /** + * @name DelayEvents + * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0. + * @param delay Amount of delay. + */ + void DelayEvents(uint32 delay) + { + _time = delay < _time ? _time - delay : 0; + } + + /** + * @name DelayEvents + * @brief Delay all events of the same group. + * @param delay Amount of delay. + * @param group Group of the events. + */ + void DelayEvents(uint32 delay, uint32 group) + { + if (!group || group > 8 || Empty()) + return; + + EventStore delayed; + + for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) + { + if (itr->second & (1 << (group + 15))) + { + delayed.insert(EventStore::value_type(itr->first + delay, itr->second)); + _eventMap.erase(itr++); + } + else + ++itr; + } + + _eventMap.insert(delayed.begin(), delayed.end()); + } + + /** + * @name CancelEvent + * @brief Cancels all events of the specified id. + * @param eventId Event id to cancel. + */ + void CancelEvent(uint32 eventId) + { + if (Empty()) + return; + + for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) + { + if (eventId == (itr->second & 0x0000FFFF)) + _eventMap.erase(itr++); + else + ++itr; + } + } + + /** + * @name CancelEventGroup + * @brief Cancel events belonging to specified group. + * @param group Group to cancel. + */ + void CancelEventGroup(uint32 group) + { + if (!group || group > 8 || Empty()) + return; + + for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) + { + if (itr->second & (1 << (group + 15))) + _eventMap.erase(itr++); + else + ++itr; + } + } + + /** + * @name GetNextEventTime + * @brief Returns closest occurence of specified event. + * @param eventId Wanted event id. + * @return Time of found event. + */ + uint32 GetNextEventTime(uint32 eventId) const + { + if (Empty()) + return 0; + + for (EventStore::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr) + if (eventId == (itr->second & 0x0000FFFF)) + return itr->first; + + return 0; + } + + /** + * @name GetNextEventTime + * @return Time of next event. + */ + uint32 GetNextEventTime() const + { + return Empty() ? 0 : _eventMap.begin()->first; + } + + /** + * @name IsInPhase + * @brief Returns wether event map is in specified phase or not. + * @param phase Wanted phase. + * @return True, if phase of event map contains specified phase. + */ + bool IsInPhase(uint8 phase) + { + return phase <= 8 && (!phase || _phase & (1 << (phase - 1))); + } + + /** + * @name GetTimeUntilEvent + * @brief Returns time in milliseconds until next event. + * @param Id of the event. + * @return Time of next event. + */ + uint32 GetTimeUntilEvent(uint32 eventId) const; + + private: + /** + * @name _time + * @brief Internal timer. + * + * This does not represent the real date/time value. + * It's more like a stopwatch: It can run, it can be stopped, + * it can be resetted and so on. Events occur when this timer + * has reached their time value. Its value is changed in the + * Update method. + */ + uint32 _time; + + /** + * @name _phase + * @brief Phase mask of the event map. + * + * Contains the phases the event map is in. Multiple + * phases from 1 to 8 can be set with SetPhase or + * AddPhase. RemovePhase deactives a phase. + */ + uint8 _phase; + + /** + * @name _eventMap + * @brief Internal event storage map. Contains the scheduled events. + * + * See typedef at the beginning of the class for more + * details. + */ + EventStore _eventMap; + + + /** + * @name _lastEvent + * @brief Stores information on the most recently executed event + */ + uint32 _lastEvent; +}; + #endif diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index d1d2ef11848..78a29dbedf6 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -45,6 +45,7 @@ include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include ${CMAKE_SOURCE_DIR}/dep/gsoap ${CMAKE_SOURCE_DIR}/dep/sockets/include ${CMAKE_SOURCE_DIR}/dep/SFMT diff --git a/src/server/worldserver/CommandLine/CliRunnable.h b/src/server/worldserver/CommandLine/CliRunnable.h index 0306109ab54..5510173973e 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.h +++ b/src/server/worldserver/CommandLine/CliRunnable.h @@ -27,7 +27,7 @@ class CliRunnable : public ACE_Based::Runnable { public: - void run() OVERRIDE; + void run() override; }; #endif diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index f4b2b542de6..6e4214603cb 100644 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -95,7 +95,7 @@ public: void SetDelayTime(uint32 t) { _delaytime = t; } - void run() OVERRIDE + void run() override { if (!_delaytime) return; @@ -200,41 +200,43 @@ int Master::Run() ACE_Based::Thread rarThread(new RARunnable); +#if defined(_WIN32) || defined(__linux__) + ///- Handle affinity for multiple processors and process priority uint32 affinity = sConfigMgr->GetIntDefault("UseProcessors", 0); bool highPriority = sConfigMgr->GetBoolDefault("ProcessPriority", false); #ifdef _WIN32 // Windows - { - HANDLE hProcess = GetCurrentProcess(); - if (affinity > 0) - { - ULONG_PTR appAff; - ULONG_PTR sysAff; + HANDLE hProcess = GetCurrentProcess(); - if (GetProcessAffinityMask(hProcess, &appAff, &sysAff)) - { - ULONG_PTR currentAffinity = affinity & appAff; // remove non accessible processors - - if (!currentAffinity) - TC_LOG_ERROR("server.worldserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the worldserver. Accessible processors bitmask (hex): %x", affinity, appAff); - else if (SetProcessAffinityMask(hProcess, currentAffinity)) - TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %x", currentAffinity); - else - TC_LOG_ERROR("server.worldserver", "Can't set used processors (hex): %x", currentAffinity); - } - } + if (affinity > 0) + { + ULONG_PTR appAff; + ULONG_PTR sysAff; - if (highPriority) + if (GetProcessAffinityMask(hProcess, &appAff, &sysAff)) { - if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)) - TC_LOG_INFO("server.worldserver", "worldserver process priority class set to HIGH"); + ULONG_PTR currentAffinity = affinity & appAff; // remove non accessible processors + + if (!currentAffinity) + TC_LOG_ERROR("server.worldserver", "Processors marked in UseProcessors bitmask (hex) %x are not accessible for the worldserver. Accessible processors bitmask (hex): %x", affinity, appAff); + else if (SetProcessAffinityMask(hProcess, currentAffinity)) + TC_LOG_INFO("server.worldserver", "Using processors (bitmask, hex): %x", currentAffinity); else - TC_LOG_ERROR("server.worldserver", "Can't set worldserver process priority class."); + TC_LOG_ERROR("server.worldserver", "Can't set used processors (hex): %x", currentAffinity); } } -#elif __linux__ // Linux + + if (highPriority) + { + if (SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)) + TC_LOG_INFO("server.worldserver", "worldserver process priority class set to HIGH"); + else + TC_LOG_ERROR("server.worldserver", "Can't set worldserver process priority class."); + } + +#else // Linux if (affinity > 0) { @@ -264,6 +266,7 @@ int Master::Run() } #endif +#endif //Start soap serving thread ACE_Based::Thread* soapThread = NULL; diff --git a/src/server/worldserver/RemoteAccess/RARunnable.h b/src/server/worldserver/RemoteAccess/RARunnable.h index 052b532572e..540ac762f30 100644 --- a/src/server/worldserver/RemoteAccess/RARunnable.h +++ b/src/server/worldserver/RemoteAccess/RARunnable.h @@ -31,7 +31,7 @@ class RARunnable : public ACE_Based::Runnable public: RARunnable(); virtual ~RARunnable(); - void run() OVERRIDE; + void run() override; private: ACE_Reactor* m_Reactor; diff --git a/src/server/worldserver/RemoteAccess/RASocket.h b/src/server/worldserver/RemoteAccess/RASocket.h index ae201747010..2cbb14b3578 100644 --- a/src/server/worldserver/RemoteAccess/RASocket.h +++ b/src/server/worldserver/RemoteAccess/RASocket.h @@ -37,9 +37,9 @@ class RASocket : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_MT_SYNCH> RASocket(); virtual ~RASocket() { } - virtual int svc() OVERRIDE; - virtual int open(void* = 0) OVERRIDE; - virtual int handle_close(ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK) OVERRIDE; + virtual int svc() override; + virtual int open(void* = 0) override; + virtual int handle_close(ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK) override; private: int recv_line(std::string& outLine); diff --git a/src/server/worldserver/TCSoap/TCSoap.h b/src/server/worldserver/TCSoap/TCSoap.h index 34a3b336464..427d37ef0cc 100644 --- a/src/server/worldserver/TCSoap/TCSoap.h +++ b/src/server/worldserver/TCSoap/TCSoap.h @@ -29,7 +29,7 @@ class TCSoapRunnable : public ACE_Based::Runnable public: TCSoapRunnable() : _port(0) { } - void run() OVERRIDE; + void run() override; void SetListenArguments(const std::string& host, uint16 port) { diff --git a/src/server/worldserver/WorldThread/WorldRunnable.h b/src/server/worldserver/WorldThread/WorldRunnable.h index 563a6b03827..dfc74dd1e3a 100644 --- a/src/server/worldserver/WorldThread/WorldRunnable.h +++ b/src/server/worldserver/WorldThread/WorldRunnable.h @@ -27,7 +27,7 @@ class WorldRunnable : public ACE_Based::Runnable { public: - void run() OVERRIDE; + void run() override; }; #endif diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 2a47c8f989e..90f330bac42 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -410,78 +410,6 @@ PidFile = "" PacketLogFile = "" -# -# ChatLogs.Channel -# Description: Log custom channel chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Channel = 0 - -# -# ChatLogs.Whisper -# Description: Log whispers between players. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Whisper = 0 - -# -# ChatLogs.SysChan -# Description: Log system channel messages. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.SysChan = 0 - -# -# ChatLogs.Party -# Description: Log party chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Party = 0 - -# -# ChatLogs.Raid -# Description: Log raid chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Raid = 0 - -# -# ChatLogs.Guild -# Description: Log guild chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Guild = 0 - -# -# ChatLogs.Public -# Description: Log public chat (say/yell/emote). -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Public = 0 - -# -# ChatLogs.Addon -# Description: Log addon messages. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Addon = 0 - -# -# ChatLogs.BattleGround -# Description: Log battleground chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.BattleGround = 0 - # Extended Logging system configuration moved to end of file (on purpose) # ################################################################################################### @@ -1140,6 +1068,15 @@ AccountInstancesPerHour = 5 Account.PasswordChangeSecurity = 0 # +# BirthdayTime +# Description: Set to date of project's birth in UNIX time. By default the date when TrinityCore was started (Thu Oct 2, 2008) +# Default: 1222964635 +# +# + +BirthdayTime = 1222964635 + +# ################################################################################################### ################################################################################################### @@ -1416,6 +1353,14 @@ Rate.Creature.Elite.RAREELITE.HP = 1 Rate.Creature.Elite.WORLDBOSS.HP = 1 # +# Creature.PickPocketRefillDelay +# Description: Time in seconds that the server will wait before refilling the pickpocket loot +# for a creature +# Default: 600 + +Creature.PickPocketRefillDelay = 600 + +# # ListenRange.Say # Description: Distance in which players can read say messages from creatures or # gameobjects. @@ -2798,6 +2743,13 @@ Logger.sql.sql=5,Console DBErrors Log.Async.Enable = 0 # +# Allow.IP.Based.Action.Logging +# Description: Logs actions, e.g. account login and logout to name a few, based on IP of current session. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Allow.IP.Based.Action.Logging = 0 +# ################################################################################################### ################################################################################################### diff --git a/src/tools/map_extractor/adt.h b/src/tools/map_extractor/adt.h index 5cb45d488d5..10894c7a697 100644 --- a/src/tools/map_extractor/adt.h +++ b/src/tools/map_extractor/adt.h @@ -40,6 +40,8 @@ enum LiquidType #define ADT_CELL_SIZE 8 #define ADT_GRID_SIZE (ADT_CELLS_PER_GRID*ADT_CELL_SIZE) +#pragma pack(push, 1) + // // Adt file height map chunk // @@ -304,4 +306,6 @@ public: adt_MHDR *a_grid; }; +#pragma pack(pop) + #endif diff --git a/src/tools/map_extractor/dbcfile.h b/src/tools/map_extractor/dbcfile.h index 526c553e0f0..9e2e6670f89 100644 --- a/src/tools/map_extractor/dbcfile.h +++ b/src/tools/map_extractor/dbcfile.h @@ -82,6 +82,8 @@ public: friend class DBCFile; friend class DBCFile::Iterator; + + Record& operator=(Record const& right); }; /** Iterator that iterates over records */ @@ -111,6 +113,8 @@ public: } private: Record record; + + Iterator& operator=(Iterator const& right); }; // Get record by id diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index 724c41ef3c9..39f800d9b4c 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -47,6 +47,8 @@ typedef uint8_t uint8; #define FILE_FORMAT_VERSION 18 +#pragma pack(push, 1) + union u_map_fcc { char fcc_txt[4]; @@ -80,4 +82,7 @@ public: bool loadFile(char *filename, bool log = true); virtual void free(); }; + +#pragma pack(pop) + #endif diff --git a/src/tools/map_extractor/wdt.h b/src/tools/map_extractor/wdt.h index a55598105b3..9b7fc53cb34 100644 --- a/src/tools/map_extractor/wdt.h +++ b/src/tools/map_extractor/wdt.h @@ -25,6 +25,8 @@ //************************************************************************************** #define WDT_MAP_SIZE 64 +#pragma pack(push, 1) + class wdt_MWMO{ union{ uint32 fcc; @@ -83,4 +85,6 @@ public: wdt_MWMO *wmo; }; +#pragma pack(pop) + #endif
\ No newline at end of file diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 591e0cc8e98..c0268680657 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -18,7 +18,9 @@ set(mmap_gen_Includes ${CMAKE_SOURCE_DIR}/dep/bzip2 ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/game/Conditions ${CMAKE_SOURCE_DIR}/src/server/collision diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index aa02d76fe47..131041e0cd2 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -36,7 +36,7 @@ namespace DisableMgr } #define MMAP_MAGIC 0x4d4d4150 // 'MMAP' -#define MMAP_VERSION 4 +#define MMAP_VERSION 5 struct MmapTileHeader { @@ -77,8 +77,8 @@ namespace MMAP { for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { - (*it).second->clear(); - delete (*it).second; + (*it).m_tiles->clear(); + delete (*it).m_tiles; } delete m_terrainBuilder; @@ -97,9 +97,9 @@ namespace MMAP for (uint32 i = 0; i < files.size(); ++i) { mapID = uint32(atoi(files[i].substr(0,3).c_str())); - if (m_tiles.find(mapID) == m_tiles.end()) + if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end()) { - m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, new std::set<uint32>)); + m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>)); count++; } } @@ -109,8 +109,11 @@ namespace MMAP for (uint32 i = 0; i < files.size(); ++i) { mapID = uint32(atoi(files[i].substr(0,3).c_str())); - m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, new std::set<uint32>)); - count++; + if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end()) + { + m_tiles.emplace_back(MapTiles(mapID, new std::set<uint32>)); + count++; + } } printf("found %u.\n", count); @@ -118,8 +121,8 @@ namespace MMAP printf("Discovering tiles... "); for (TileList::iterator itr = m_tiles.begin(); itr != m_tiles.end(); ++itr) { - std::set<uint32>* tiles = (*itr).second; - mapID = (*itr).first; + std::set<uint32>* tiles = (*itr).m_tiles; + mapID = (*itr).m_mapId; sprintf(filter, "%03u*.vmtile", mapID); files.clear(); @@ -153,12 +156,12 @@ namespace MMAP /**************************************************************************/ std::set<uint32>* MapBuilder::getTileList(uint32 mapID) { - TileList::iterator itr = m_tiles.find(mapID); + TileList::iterator itr = std::find(m_tiles.begin(), m_tiles.end(), mapID); if (itr != m_tiles.end()) - return (*itr).second; + return (*itr).m_tiles; std::set<uint32>* tiles = new std::set<uint32>(); - m_tiles.insert(std::pair<uint32, std::set<uint32>*>(mapID, tiles)); + m_tiles.emplace_back(MapTiles(mapID, tiles)); return tiles; } @@ -169,9 +172,14 @@ namespace MMAP BuilderThreadPool* pool = threads > 0 ? new BuilderThreadPool() : NULL; + m_tiles.sort([](MapTiles a, MapTiles b) + { + return a.m_tiles->size() > b.m_tiles->size(); + }); + for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { - uint32 mapID = it->first; + uint32 mapID = it->m_mapId; if (!shouldSkipMap(mapID)) { if (threads > 0) @@ -553,7 +561,9 @@ namespace MMAP config.borderSize = config.walkableRadius + 3; config.maxEdgeLen = VERTEX_PER_TILE + 1; // anything bigger than tileSize config.walkableHeight = m_bigBaseUnit ? 3 : 6; - config.walkableClimb = m_bigBaseUnit ? 2 : 4; // keep less than walkableHeight + // a value >= 3|6 allows npcs to walk over some fences + // a value >= 4|8 allows npcs to walk over all fences + config.walkableClimb = m_bigBaseUnit ? 4 : 8; config.minRegionArea = rcSqr(60); config.mergeRegionArea = rcSqr(50); config.maxSimplificationError = 1.8f; // eliminates most jagged edges (tiny polygons) diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index 33f45a86549..08b87324d01 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -22,6 +22,7 @@ #include <vector> #include <set> #include <map> +#include <list> #include "TerrainBuilder.h" #include "IntermediateValues.h" @@ -39,7 +40,24 @@ using namespace VMAP; namespace MMAP { - typedef std::map<uint32, std::set<uint32>*> TileList; + struct MapTiles + { + MapTiles() : m_mapId(uint32(-1)), m_tiles(NULL) {} + + MapTiles(uint32 id, std::set<uint32>* tiles) : m_mapId(id), m_tiles(tiles) {} + ~MapTiles() {} + + uint32 m_mapId; + std::set<uint32>* m_tiles; + + bool operator==(uint32 id) + { + return m_mapId == id; + } + }; + + typedef std::list<MapTiles> TileList; + struct Tile { Tile() : chf(NULL), solid(NULL), cset(NULL), pmesh(NULL), dmesh(NULL) {} @@ -61,7 +79,7 @@ namespace MMAP class MapBuilder { public: - MapBuilder(float maxWalkableAngle = 55.f, + MapBuilder(float maxWalkableAngle = 70.f, bool skipLiquid = false, bool skipContinents = false, bool skipJunkMaps = true, diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 1df24cfa332..d88ab8ca16d 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -242,7 +242,7 @@ int finish(const char* message, int returnValue) int main(int argc, char** argv) { int threads = 3, mapnum = -1; - float maxAngle = 55.0f; + float maxAngle = 70.0f; int tileX = -1, tileY = -1; bool skipLiquid = false, skipContinents = false, diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 19112d84266..7832cef18de 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -906,7 +906,7 @@ namespace MMAP float p0[3], p1[3]; uint32 mid, tx, ty; float size; - if (sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty, + if (sscanf(buf, "%u %u,%u (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty, &p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size) != 10) continue; diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index 246b448380a..c792524eec1 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -159,7 +159,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY) ADT.read(buf, size); char* p=buf; int q = 0; - WmoInstansName = new string[size]; + WmoInstansName = new std::string[size]; while (p<buf+size) { char* s = GetPlainName(p); diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h index aafcb46ce84..ac04074375f 100644 --- a/src/tools/vmap4_extractor/adtfile.h +++ b/src/tools/vmap4_extractor/adtfile.h @@ -113,14 +113,14 @@ private: //size_t mcnk_offsets[256], mcnk_sizes[256]; MPQFile ADT; //mcell Mcell; - string Adtfilename; + std::string Adtfilename; public: ADTFile(char* filename); ~ADTFile(); int nWMO; int nMDX; - string* WmoInstansName; - string* ModelInstansName; + std::string* WmoInstansName; + std::string* ModelInstansName; bool init(uint32 map_num, uint32 tileX, uint32 tileY); //void LoadMapChunks(); diff --git a/src/tools/vmap4_extractor/loadlib/loadlib.h b/src/tools/vmap4_extractor/loadlib/loadlib.h index 1b44d13a9d3..b26d39fbbf8 100644 --- a/src/tools/vmap4_extractor/loadlib/loadlib.h +++ b/src/tools/vmap4_extractor/loadlib/loadlib.h @@ -47,6 +47,8 @@ typedef uint8_t uint8; #define FILE_FORMAT_VERSION 18 +#pragma pack(push, 1) + // // File version chunk // @@ -74,4 +76,7 @@ public: bool loadFile(char *filename, bool log = true); virtual void free(); }; + +#pragma pack(pop) + #endif diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 825a2697c16..c527ec32ddb 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -96,8 +96,19 @@ bool Model::ConvertToVMAPModel(const char * outfilename) wsize = sizeof(uint32) + sizeof(unsigned short) * nIndexes; fwrite(&wsize, sizeof(int), 1, output); fwrite(&nIndexes, sizeof(uint32), 1, output); - if (nIndexes >0) + if (nIndexes > 0) + { + for (uint32 i = 0; i < nIndexes; ++i) + { + if ((i % 3) - 1 == 0 && i + 1 < nIndexes) + { + uint16 tmp = indices[i]; + indices[i] = indices[i + 1]; + indices[i + 1] = tmp; + } + } fwrite(indices, sizeof(unsigned short), nIndexes, output); + } fwrite("VERT", 4, 1, output); wsize = sizeof(int) + sizeof(float) * 3 * nVertices; @@ -105,8 +116,12 @@ bool Model::ConvertToVMAPModel(const char * outfilename) fwrite(&nVertices, sizeof(int), 1, output); if (nVertices >0) { - for(uint32 vpos=0; vpos <nVertices; ++vpos) - std::swap(vertices[vpos].y, vertices[vpos].z); + for (uint32 vpos = 0; vpos < nVertices; ++vpos) + { + float tmp = vertices[vpos].y; + vertices[vpos].y = -vertices[vpos].z; + vertices[vpos].z = tmp; + } fwrite(vertices, sizeof(float)*3, nVertices, output); } diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h index d045abe307a..46cb50fb003 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq04.h +++ b/src/tools/vmap4_extractor/mpq_libmpq04.h @@ -36,7 +36,7 @@ public: mpq_archive_s *mpq_a; MPQArchive(const char* filename); - void close(); + ~MPQArchive() { close(); } void GetFileListTo(vector<string>& filelist) { uint32_t filenum; @@ -65,6 +65,9 @@ public: delete[] buffer; } + +private: + void close(); }; typedef std::deque<MPQArchive*> ArchiveSet; diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index 0f1f0772bd3..a5bb7d518e8 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -67,6 +67,8 @@ struct WMOLiquidHeader short type; }; +#pragma pack(push, 1) + struct WMOLiquidVert { uint16 unk1; @@ -74,6 +76,8 @@ struct WMOLiquidVert float height; }; +#pragma pack(pop) + class WMOGroup { private: |
