diff options
Diffstat (limited to 'src')
59 files changed, 592 insertions, 624 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 91de52db9f8..b6517e3396b 100755 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -42,22 +42,26 @@ void UnitAI::DoMeleeAttackIfReady() if (me->HasUnitState(UNIT_STAT_CASTING)) return; + Unit *victim = me->getVictim(); + if (!victim || !victim->IsInWorld()) + return; + //Make sure our attack is ready and we aren't currently casting before checking distance if (me->isAttackReady()) { //If we are within range melee the target - if (me->IsWithinMeleeRange(me->getVictim())) + if (me->IsWithinMeleeRange(victim)) { - me->AttackerStateUpdate(me->getVictim()); + me->AttackerStateUpdate(victim); me->resetAttackTimer(); } } if (me->haveOffhandWeapon() && me->isAttackReady(OFF_ATTACK)) { //If we are within range melee the target - if (me->IsWithinMeleeRange(me->getVictim())) + if (me->IsWithinMeleeRange(victim)) { - me->AttackerStateUpdate(me->getVictim(), OFF_ATTACK); + me->AttackerStateUpdate(victim, OFF_ATTACK); me->resetAttackTimer(OFF_ATTACK); } } diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index ec00b53b5ca..3a6240ae2f2 100755 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -120,7 +120,7 @@ class UnitAI virtual void DoAction(int32 const /*param*/) {} virtual uint32 GetData(uint32 /*id = 0*/) { return 0; } virtual void SetData(uint32 /*id*/, uint32 /*value*/) {} - virtual void SetGUID(uint64 const /*guid*/, int32 /*id*/ = 0) {} + virtual void SetGUID(uint64 /*guid*/, int32 /*id*/ = 0) {} virtual uint64 GetGUID(int32 /*id*/ = 0) { return 0; } Unit* SelectTarget(SelectAggroTarget targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, int32 aura = 0); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 97bfbd6fb10..470eb54b584 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -687,7 +687,7 @@ void SmartAI::SetData(uint32 id, uint32 value) GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, NULL, id, value); } -void SmartAI::SetGUID(const uint64 /*guid*/, int32 /*id*/) +void SmartAI::SetGUID(uint64 /*guid*/, int32 /*id*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index a4926226a91..ffa52db8f06 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -157,7 +157,7 @@ class SmartAI : public CreatureAI void SetData(uint32 id, uint32 value); // Used in scripts to share variables - void SetGUID(const uint64 guid, int32 id = 0); + void SetGUID(uint64 guid, int32 id = 0); // Used in scripts to share variables uint64 GetGUID(int32 id = 0); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index cbcbc1e2290..0de13280376 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2846,7 +2846,7 @@ void SmartScript::SetData(uint32 id, uint32 value) { } -void SmartScript::SetGUID(const uint64 guid, int32 id) +void SmartScript::SetGUID(uint64 guid, int32 id) { } diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 78153885fa4..693f8ddae27 100755 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -93,7 +93,7 @@ bool ArenaTeam::Create(uint32 captainGuid, uint8 type, std::string teamName, uin return true; } -bool ArenaTeam::AddMember(const uint64 playerGuid) +bool ArenaTeam::AddMember(uint64 playerGuid) { std::string playerName; uint8 playerClass; @@ -276,7 +276,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) return true; } -void ArenaTeam::SetCaptain(const uint64 guid) +void ArenaTeam::SetCaptain(uint64 guid) { // Disable remove/promote buttons Player* oldCaptain = ObjectAccessor::FindPlayer(GetCaptain()); @@ -537,7 +537,7 @@ uint8 ArenaTeam::GetSlotByType(uint32 type) return 0xFF; } -bool ArenaTeam::IsMember(const uint64 guid) const +bool ArenaTeam::IsMember(uint64 guid) const { for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr) if (itr->Guid == guid) @@ -901,7 +901,7 @@ ArenaTeamMember* ArenaTeam::GetMember(const std::string& name) return NULL; } -ArenaTeamMember* ArenaTeam::GetMember(const uint64 guid) +ArenaTeamMember* ArenaTeam::GetMember(uint64 guid) { for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr) if (itr->Guid == guid) diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index 2874df84078..c65226a53aa 100755 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -131,10 +131,10 @@ class ArenaTeam uint32 GetRating() const { return Stats.Rating; } uint32 GetAverageMMR(Group* group) const; - void SetCaptain(const uint64 guid); - bool AddMember(const uint64 PlayerGuid); + void SetCaptain(uint64 guid); + bool AddMember(uint64 PlayerGuid); - // Shouldn't be const uint64 ed, because than can reference guid from members on Disband + // Shouldn't be uint64 ed, because than can reference guid from members on Disband // and this method removes given record from list. So invalid reference can happen. void DelMember(uint64 guid, bool cleanDb); @@ -142,9 +142,9 @@ class ArenaTeam bool Empty() const { return Members.empty(); } MemberList::iterator m_membersBegin() { return Members.begin(); } MemberList::iterator m_membersEnd() { return Members.end(); } - bool IsMember(const uint64 guid) const; + bool IsMember(uint64 guid) const; - ArenaTeamMember* GetMember(const uint64 guid); + ArenaTeamMember* GetMember(uint64 guid); ArenaTeamMember* GetMember(const std::string& name); bool IsFighting() const; diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index f164f56dffd..70be3b52238 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -53,7 +53,7 @@ ArenaTeam* ArenaTeamMgr::GetArenaTeamByName(const std::string& arenaTeamName) co return NULL; } -ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 const guid) const +ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 guid) const { for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr) if (itr->second->GetCaptain() == guid) diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h index 1e45158b353..31f0a1773da 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.h +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h @@ -30,8 +30,8 @@ public: typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer; ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const; - ArenaTeam* GetArenaTeamByName(const std::string& arenaTeamName) const; - ArenaTeam* GetArenaTeamByCaptain(uint64 const guid) const; + ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const; + ArenaTeam* GetArenaTeamByCaptain(uint64 guid) const; void LoadArenaTeams(); void AddArenaTeam(ArenaTeam* arenaTeam); diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index a0f590eca91..c03433e93b2 100755 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -408,21 +408,31 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // Add map, zone, subzone and phase to output int locale = GetSessionDbcLocale(); + std::string areaName = "<unknown>"; + std::string zoneName = ""; MapEntry const* map = sMapStore.LookupEntry(mapId); AreaTableEntry const* area = GetAreaEntryByAreaID(areaId); - AreaTableEntry const* zone = NULL; + if (area) + { + areaName = area->area_name[locale]; + + AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone); + + if (zone) + zoneName = zone->area_name[locale]; + } if (target) { - if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone)) - PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zone->area_name[locale], area->area_name[locale], phase); + if (!zoneName.empty()) + PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zoneName.c_str(), areaName.c_str(), phase); else - PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], area->area_name[locale], "--", phase); + PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], areaName.c_str(), "<unknown>", phase); } else - PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], area->area_name[locale]); + PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], areaName.c_str()); return true; } diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 88477be6115..fc709599da5 100755 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -18,7 +18,7 @@ #include "DBCStores.h" -#include "Logging/Log.h" +#include "Log.h" #include "SharedDefines.h" #include "SpellMgr.h" diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index c08255048b8..a45bafe8a2e 100755 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1172,12 +1172,12 @@ struct LFGDungeonEntry uint32 reclevel; // 20 uint32 recminlevel; // 21 uint32 recmaxlevel; // 22 - int32 map; // 23 + int32 map; // 23 uint32 difficulty; // 24 - //uint32 unk; // 25 + //uint32 flags; // 25 uint32 type; // 26 - //uint32 unk2; // 27 - //char* unk3; // 28 + //uint32 unk; // 27 + //char* iconname; // 28 uint32 expansion; // 29 //uint32 unk4; // 30 uint32 grouptype; // 31 @@ -1538,7 +1538,7 @@ struct SpellEntry uint32 Effect[MAX_SPELL_EFFECTS]; // 71-73 m_effect int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 74-76 m_effectDieSides float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 77-79 m_effectRealPointsPerLevel - int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) + int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (must not be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 83-85 m_effectMechanic uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 86-88 m_implicitTargetA uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 89-91 m_implicitTargetB diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 87466436980..4154b297d9e 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -308,7 +308,7 @@ void LFGMgr::Update(uint32 diff) @param[in] guid Player or group guid to add to queue @param[in] queueId Queue Id to add player/group to */ -void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId) +void LFGMgr::AddToQueue(uint64 guid, uint8 queueId) { if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP)) queueId = 0; @@ -329,7 +329,7 @@ void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId) @param[in] guid Player or group guid to add to queue @return true if guid was found in main queue. */ -bool LFGMgr::RemoveFromQueue(const uint64 guid) +bool LFGMgr::RemoveFromQueue(uint64 guid) { for (LfgGuidListMap::iterator it = m_currentQueue.begin(); it != m_currentQueue.end(); ++it) it->second.remove(guid); @@ -1250,7 +1250,7 @@ bool LFGMgr::CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag /*= true @param[in] guid Player guid to update answer @param[in] accept Player answer */ -void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept) +void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept) { // Check if the proposal exists LfgProposalMap::iterator itProposal = m_Proposals.find(proposalId); @@ -1364,17 +1364,29 @@ void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept) switch(role) { case ROLE_DAMAGE: - m_WaitTimeDps = int32((m_WaitTimeDps * m_NumWaitTimeDps + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeDps); + { + uint32 old_number = m_NumWaitTimeDps++; + m_WaitTimeDps = int32((m_WaitTimeDps * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeDps); break; + } case ROLE_HEALER: - m_WaitTimeHealer = int32((m_WaitTimeHealer * m_NumWaitTimeHealer + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeHealer); + { + uint32 old_number = m_NumWaitTimeHealer++; + m_WaitTimeHealer = int32((m_WaitTimeHealer * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeHealer); break; + } case ROLE_TANK: - m_WaitTimeTank = int32((m_WaitTimeTank * m_NumWaitTimeTank + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeTank); + { + uint32 old_number = m_NumWaitTimeTank++; + m_WaitTimeTank = int32((m_WaitTimeTank * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeTank); break; + } default: - m_WaitTimeAvg = int32((m_WaitTimeAvg * m_NumWaitTimeAvg + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeAvg); + { + uint32 old_number = m_NumWaitTimeAvg++; + m_WaitTimeAvg = int32((m_WaitTimeAvg * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeAvg); break; + } } grp->SetLfgRoles(pguid, pProposal->players[pguid]->role); SetState(pguid, LFG_STATE_DUNGEON); @@ -1519,7 +1531,7 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t @param[in] victim Victim guid @param[in] reason Kick reason */ -void LFGMgr::InitBoot(Group* grp, const uint64 kicker, const uint64 victim, std::string reason) +void LFGMgr::InitBoot(Group* grp, uint64 kicker, uint64 victim, std::string reason) { if (!grp) return; @@ -1889,7 +1901,7 @@ std::string LFGMgr::ConcatenateGuids(LfgGuidList check) return o.str(); } -LfgState LFGMgr::GetState(const uint64 guid) +LfgState LFGMgr::GetState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetState: [" UI64FMTD "]", guid); if (IS_GROUP(guid)) @@ -1898,61 +1910,61 @@ LfgState LFGMgr::GetState(const uint64 guid) return m_Players[guid].GetState(); } -uint32 LFGMgr::GetDungeon(const uint64 guid, bool asId /*= true*/) +uint32 LFGMgr::GetDungeon(uint64 guid, bool asId /*= true*/) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetDungeon: [" UI64FMTD "] asId: %u", guid, asId); return m_Groups[guid].GetDungeon(asId); } -uint8 LFGMgr::GetRoles(const uint64 guid) +uint8 LFGMgr::GetRoles(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetRoles: [" UI64FMTD "]", guid); return m_Players[guid].GetRoles(); } -const std::string& LFGMgr::GetComment(const uint64 guid) +const std::string& LFGMgr::GetComment(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetComment: [" UI64FMTD "]", guid); return m_Players[guid].GetComment(); } -const LfgDungeonSet& LFGMgr::GetSelectedDungeons(const uint64 guid) +const LfgDungeonSet& LFGMgr::GetSelectedDungeons(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetSelectedDungeons: [" UI64FMTD "]", guid); return m_Players[guid].GetSelectedDungeons(); } -const LfgLockMap& LFGMgr::GetLockedDungeons(const uint64 guid) +const LfgLockMap& LFGMgr::GetLockedDungeons(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetLockedDungeons: [" UI64FMTD "]", guid); return m_Players[guid].GetLockedDungeons(); } -uint8 LFGMgr::GetKicksLeft(const uint64 guid) +uint8 LFGMgr::GetKicksLeft(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetKicksLeft: [" UI64FMTD "]", guid); return m_Groups[guid].GetKicksLeft(); } -uint8 LFGMgr::GetVotesNeeded(const uint64 guid) +uint8 LFGMgr::GetVotesNeeded(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetVotesNeeded: [" UI64FMTD "]", guid); return m_Groups[guid].GetVotesNeeded(); } -void LFGMgr::RestoreState(const uint64 guid) +void LFGMgr::RestoreState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RestoreState: [" UI64FMTD "]", guid); m_Groups[guid].RestoreState(); } -void LFGMgr::ClearState(const uint64 guid) +void LFGMgr::ClearState(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::ClearState: [" UI64FMTD "]", guid); m_Players[guid].ClearState(); } -void LFGMgr::SetState(const uint64 guid, LfgState state) +void LFGMgr::SetState(uint64 guid, LfgState state) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetState: [" UI64FMTD "] state %u", guid, state); if (IS_GROUP(guid)) @@ -1961,43 +1973,43 @@ void LFGMgr::SetState(const uint64 guid, LfgState state) m_Players[guid].SetState(state); } -void LFGMgr::SetDungeon(const uint64 guid, uint32 dungeon) +void LFGMgr::SetDungeon(uint64 guid, uint32 dungeon) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetDungeon: [" UI64FMTD "] dungeon %u", guid, dungeon); m_Groups[guid].SetDungeon(dungeon); } -void LFGMgr::SetRoles(const uint64 guid, uint8 roles) +void LFGMgr::SetRoles(uint64 guid, uint8 roles) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetRoles: [" UI64FMTD "] roles: %u", guid, roles); m_Players[guid].SetRoles(roles); } -void LFGMgr::SetComment(const uint64 guid, const std::string& comment) +void LFGMgr::SetComment(uint64 guid, const std::string& comment) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetComment: [" UI64FMTD "] comment: %s", guid, comment.c_str()); m_Players[guid].SetComment(comment); } -void LFGMgr::SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons) +void LFGMgr::SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetSelectedDungeons: [" UI64FMTD "]", guid); m_Players[guid].SetSelectedDungeons(dungeons); } -void LFGMgr::SetLockedDungeons(const uint64 guid, const LfgLockMap& lock) +void LFGMgr::SetLockedDungeons(uint64 guid, const LfgLockMap& lock) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetLockedDungeons: [" UI64FMTD "]", guid); m_Players[guid].SetLockedDungeons(lock); } -void LFGMgr::DecreaseKicksLeft(const uint64 guid) +void LFGMgr::DecreaseKicksLeft(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::DecreaseKicksLeft: [" UI64FMTD "]", guid); m_Groups[guid].DecreaseKicksLeft(); } -void LFGMgr::RemovePlayerData(const uint64 guid) +void LFGMgr::RemovePlayerData(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemovePlayerData: [" UI64FMTD "]", guid); LfgPlayerDataMap::iterator it = m_Players.find(guid); @@ -2005,7 +2017,7 @@ void LFGMgr::RemovePlayerData(const uint64 guid) m_Players.erase(it); } -void LFGMgr::RemoveGroupData(const uint64 guid) +void LFGMgr::RemoveGroupData(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemoveGroupData: [" UI64FMTD "]", guid); LfgGroupDataMap::iterator it = m_Groups.find(guid); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 1ca256f5a92..6c42b1728c1 100755 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -272,45 +272,45 @@ class LFGMgr void UpdateRoleCheck(uint64 gguid, uint64 guid = 0, uint8 roles = ROLE_NONE); // Proposals - void UpdateProposal(uint32 proposalId, const uint64 guid, bool accept); + void UpdateProposal(uint32 proposalId, uint64 guid, bool accept); // Teleportation void TeleportPlayer(Player* plr, bool out, bool fromOpcode = false); // Vote kick - void InitBoot(Group* grp, const uint64 kguid, const uint64 vguid, std::string reason); + void InitBoot(Group* grp, uint64 kguid, uint64 vguid, std::string reason); void UpdateBoot(Player* plr, bool accept); void OfferContinue(Group* grp); void InitializeLockedDungeons(Player* plr); - void SetComment(const uint64 guid, const std::string& comment); - const LfgLockMap& GetLockedDungeons(const uint64 guid); - LfgState GetState(const uint64 guid); - const LfgDungeonSet& GetSelectedDungeons(const uint64 guid); - uint32 GetDungeon(const uint64 guid, bool asId = true); - void ClearState(const uint64 guid); - void RemovePlayerData(const uint64 guid); - void RemoveGroupData(const uint64 guid); - uint8 GetKicksLeft(const uint64 gguid); - uint8 GetVotesNeeded(const uint64 gguid); - void SetRoles(const uint64 guid, uint8 roles); + void SetComment(uint64 guid, const std::string& comment); + const LfgLockMap& GetLockedDungeons(uint64 guid); + LfgState GetState(uint64 guid); + const LfgDungeonSet& GetSelectedDungeons(uint64 guid); + uint32 GetDungeon(uint64 guid, bool asId = true); + void ClearState(uint64 guid); + void RemovePlayerData(uint64 guid); + void RemoveGroupData(uint64 guid); + uint8 GetKicksLeft(uint64 gguid); + uint8 GetVotesNeeded(uint64 gguid); + void SetRoles(uint64 guid, uint8 roles); private: - uint8 GetRoles(const uint64 guid); - const std::string& GetComment(const uint64 gguid); - void RestoreState(const uint64 guid); - void SetState(const uint64 guid, LfgState state); - void SetDungeon(const uint64 guid, uint32 dungeon); - void SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons); - void SetLockedDungeons(const uint64 guid, const LfgLockMap& lock); - void DecreaseKicksLeft(const uint64 guid); + uint8 GetRoles(uint64 guid); + const std::string& GetComment(uint64 gguid); + void RestoreState(uint64 guid); + void SetState(uint64 guid, LfgState state); + void SetDungeon(uint64 guid, uint32 dungeon); + void SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons); + void SetLockedDungeons(uint64 guid, const LfgLockMap& lock); + void DecreaseKicksLeft(uint64 guid); void NoExiste(uint8 lala); // Queue - void AddToQueue(const uint64 guid, uint8 queueId); - bool RemoveFromQueue(const uint64 guid); + void AddToQueue(uint64 guid, uint8 queueId); + bool RemoveFromQueue(uint64 guid); // Proposals void RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType type); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index bf61e98bb41..7ad0386dcae 100755 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -740,10 +740,10 @@ class Creature : public Unit, public GridObject<Creature> class AssistDelayEvent : public BasicEvent { public: - AssistDelayEvent(const uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { } + AssistDelayEvent(uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { } bool Execute(uint64 e_time, uint32 p_time); - void AddAssistant(const uint64 guid) { m_assistants.push_back(guid); } + void AddAssistant(uint64 guid) { m_assistants.push_back(guid); } private: AssistDelayEvent(); diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 92c57009832..d1ad656ba3d 100755 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -203,7 +203,7 @@ void TempSummon::InitStats(uint32 duration) if (m_Properties->Faction) setFaction(m_Properties->Faction); - else if (IsVehicle()) // properties should be vehicle + else if (IsVehicle() && owner) // properties should be vehicle setFaction(owner->getFaction()); } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 5308c30a196..83ece2eda31 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1631,6 +1631,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) if (Unit* owner = GetOwner()) { trigger->setFaction(owner->getFaction()); + // needed for GO casts for proper target validation checks + trigger->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, owner->GetGUID()); trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID()); } else diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 64c5db02b76..aa056e793f0 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -122,7 +122,7 @@ void Object::_InitValues() memset(m_uint32Values, 0, m_valuesCount*sizeof(uint32)); _changedFields = new bool[m_valuesCount]; - memset(_changedFields, 0, sizeof(_changedFields)); + memset(_changedFields, 0, m_valuesCount*sizeof(bool)); m_objectUpdated = false; } @@ -159,6 +159,30 @@ std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const return ss.str(); } +void Object::AddToWorld() +{ + if (m_inWorld) + return; + + ASSERT(m_uint32Values); + + m_inWorld = true; + + // synchronize values mirror with values array (changes will send in updatecreate opcode any way + ClearUpdateMask(true); +} + +void Object::RemoveFromWorld() +{ + if (!m_inWorld) + return; + + m_inWorld = false; + + // if we remove from world then sending changes not required + ClearUpdateMask(true); +} + void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags) const { ByteBuffer buf(500); @@ -296,17 +320,11 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const *data << ((Unit*)this)->GetSpeed(MOVE_TURN_RATE); *data << ((Unit*)this)->GetSpeed(MOVE_PITCH_RATE); + const Player* player = ToPlayer(); + // 0x08000000 - if (GetTypeId() == TYPEID_PLAYER && this->ToPlayer()->isInFlight()) + if (player && player->isInFlight()) { - //WPAssert(this->ToPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE); - - Player* player = const_cast<Object*>(this)->ToPlayer(); - if (!player) - return; - - FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(player->GetMotionMaster()->top()); - uint32 flags3 = SPLINEFLAG_GLIDE; *data << uint32(flags3); // splines flag? @@ -330,7 +348,9 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const } } - TaxiPathNodeList& path = const_cast<TaxiPathNodeList&>(fmg->GetPath()); + FlightPathMovementGenerator *fmg = + (FlightPathMovementGenerator*)(player->GetMotionMaster()->top()); + TaxiPathNodeList const& path = fmg->GetPath(); float x, y, z; player->GetPosition(x, y, z); @@ -750,7 +770,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask void Object::ClearUpdateMask(bool remove) { - memset(_changedFields, 0, sizeof(_changedFields)); + memset(_changedFields, 0, m_valuesCount*sizeof(bool)); if (m_objectUpdated) { @@ -822,13 +842,10 @@ void Object::SetInt32Value(uint16 index, int32 value) m_int32Values[index] = value; _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -842,13 +859,10 @@ void Object::SetUInt32Value(uint16 index, uint32 value) m_uint32Values[index] = value; _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -861,51 +875,47 @@ void Object::UpdateUInt32Value(uint16 index, uint32 value) _changedFields[index] = true; } -void Object::SetUInt64Value(uint16 index, uint64 const value) +void Object::SetUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true)); if (*((uint64*)&(m_uint32Values[index])) != value) { - m_uint32Values[index] = *((uint32*)&value); - m_uint32Values[index + 1] = *(((uint32*)&value) + 1); + m_uint32Values[index] = PAIR64_LOPART(value); + m_uint32Values[index + 1] = PAIR64_HIPART(value); _changedFields[index] = true; _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } -bool Object::AddUInt64Value(uint16 index, uint64 const value) +bool Object::AddUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true)); if (value && !*((uint64*)&(m_uint32Values[index]))) { - m_uint32Values[index] = *((uint32*)&value); - m_uint32Values[index + 1] = *(((uint32*)&value) + 1); + m_uint32Values[index] = PAIR64_LOPART(value); + m_uint32Values[index + 1] = PAIR64_HIPART(value); _changedFields[index] = true; _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } + return true; } + return false; } -bool Object::RemoveUInt64Value(uint16 index, const uint64 value) +bool Object::RemoveUInt64Value(uint16 index, uint64 value) { ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true)); if (value && *((uint64*)&(m_uint32Values[index])) == value) @@ -915,13 +925,10 @@ bool Object::RemoveUInt64Value(uint16 index, const uint64 value) _changedFields[index] = true; _changedFields[index + 1] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } return true; @@ -939,13 +946,10 @@ void Object::SetFloatValue(uint16 index, float value) m_floatValues[index] = value; _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -966,13 +970,10 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) m_uint32Values[index] |= uint32(uint32(value) << (offset * 8)); _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -993,13 +994,10 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) m_uint32Values[index] |= uint32(uint32(value) << (offset * 16)); _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1063,13 +1061,10 @@ void Object::SetFlag(uint16 index, uint32 newFlag) m_uint32Values[index] = newval; _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1087,13 +1082,10 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag) m_uint32Values[index] = newval; _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1113,13 +1105,10 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8)); _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1139,13 +1128,10 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8)); _changedFields[index] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } } @@ -1356,7 +1342,9 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool bool WorldObject::IsWithinLOSInMap(const WorldObject* obj) const { - if (!IsInMap(obj)) return false; + if (!IsInMap(obj)) + return false; + float ox, oy, oz; obj->GetPosition(ox, oy, oz); return(IsWithinLOS(ox, oy, oz)); @@ -1840,13 +1828,10 @@ void WorldObject::SendPlaySound(uint32 Sound, bool OnlySelf) void Object::ForceValuesUpdateAtIndex(uint32 i) { _changedFields[i] = true; - if (m_inWorld) + if (m_inWorld && !m_objectUpdated) { - if (!m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + sObjectAccessor->AddUpdateObject(this); + m_objectUpdated = true; } } @@ -2043,6 +2028,12 @@ void Unit::BuildHeartBeatMsg(WorldPacket *data) const BuildMovementPacket(data); } +void WorldObject::SendMessageToSet(WorldPacket *data, bool self) +{ + SendMessageToSetInRange(data, GetVisibilityRange(), self); +} + + void WorldObject::SendMessageToSetInRange(WorldPacket *data, float dist, bool /*self*/) { Trinity::MessageDistDeliverer notifier(this, data, dist); @@ -2396,7 +2387,7 @@ Creature* WorldObject::SummonTrigger(float x, float y, float z, float ang, uint3 return summon; } -Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) +Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) const { Creature *creature = NULL; Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range); @@ -2405,7 +2396,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive return creature; } -GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) +GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const { GameObject *go = NULL; Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range); @@ -2414,7 +2405,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) return go; } -void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) +void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const { CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY())); Cell cell(pair); @@ -2428,7 +2419,7 @@ void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList cell.Visit(pair, visitor, *(this->GetMap())); } -void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) +void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const { CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY())); Cell cell(pair); @@ -2777,19 +2768,23 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/) struct WorldObjectChangeAccumulator { - UpdateDataMapType &i_updateDatas; - WorldObject &i_object; + UpdateDataMapType& i_updateDatas; + WorldObject& i_object; std::set<uint64> plr_list; WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d) : i_updateDatas(d), i_object(obj) {} void Visit(PlayerMapType &m) { + Player* source = NULL; for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - BuildPacket(iter->getSource()); - if (!iter->getSource()->GetSharedVisionList().empty()) + source = iter->getSource(); + + BuildPacket(source); + + if (!source->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for (; it != iter->getSource()->GetSharedVisionList().end(); ++it) + SharedVisionList::const_iterator it = source->GetSharedVisionList().begin(); + for (; it != source->GetSharedVisionList().end(); ++it) BuildPacket(*it); } } @@ -2797,30 +2792,37 @@ struct WorldObjectChangeAccumulator void Visit(CreatureMapType &m) { + Creature* source = NULL; for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - if (!iter->getSource()->GetSharedVisionList().empty()) + source = iter->getSource(); + if (!source->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for (; it != iter->getSource()->GetSharedVisionList().end(); ++it) + SharedVisionList::const_iterator it = source->GetSharedVisionList().begin(); + for (; it != source->GetSharedVisionList().end(); ++it) BuildPacket(*it); } } } + void Visit(DynamicObjectMapType &m) { + DynamicObject* source = NULL; for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - uint64 guid = iter->getSource()->GetCasterGUID(); + source = iter->getSource(); + uint64 guid = source->GetCasterGUID(); + if (IS_PLAYER_GUID(guid)) { //Caster may be NULL if DynObj is in removelist if (Player *caster = ObjectAccessor::FindPlayer(guid)) - if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID()) + if (caster->GetUInt64Value(PLAYER_FARSIGHT) == source->GetGUID()) BuildPacket(caster); } } } + void BuildPacket(Player* plr) { // Only send update once to a player diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 2b08758efc1..9de040714e5 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -125,29 +125,9 @@ class Object virtual ~Object (); bool IsInWorld() const { return m_inWorld; } - virtual void AddToWorld() - { - if (m_inWorld) - return; - ASSERT(m_uint32Values); - - m_inWorld = true; - - // synchronize values mirror with values array (changes will send in updatecreate opcode any way - ClearUpdateMask(true); - } - - virtual void RemoveFromWorld() - { - if (!m_inWorld) - return; - - m_inWorld = false; - - // if we remove from world then sending changes not required - ClearUpdateMask(true); - } + virtual void AddToWorld(); + virtual void RemoveFromWorld(); uint64 GetGUID() const { return GetUInt64Value(0); } uint32 GetGUIDLow() const { return GUID_LOPART(GetUInt64Value(0)); } @@ -210,7 +190,7 @@ class Object void SetInt32Value(uint16 index, int32 value); void SetUInt32Value(uint16 index, uint32 value); void UpdateUInt32Value(uint16 index, uint32 value); - void SetUInt64Value(uint16 index, uint64 const value); + void SetUInt64Value(uint16 index, uint64 value); void SetFloatValue(uint16 index, float value); void SetByteValue(uint16 index, uint8 offset, uint8 value); void SetUInt16Value(uint16 index, uint8 offset, uint16 value); @@ -218,8 +198,8 @@ class Object void SetStatFloatValue(uint16 index, float value); void SetStatInt32Value(uint16 index, int32 value); - bool AddUInt64Value(uint16 index, uint64 const value); - bool RemoveUInt64Value(uint16 index, uint64 const value); + bool AddUInt64Value(uint16 index, uint64 value); + bool RemoveUInt64Value(uint16 index, uint64 value); void ApplyModUInt32Value(uint16 index, int32 val, bool apply); void ApplyModInt32Value(uint16 index, int32 val, bool apply); @@ -725,7 +705,7 @@ class WorldObject : public Object, public WorldLocation virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units - virtual void SendMessageToSet(WorldPacket *data, bool self) { SendMessageToSetInRange(data, GetVisibilityRange(), self); } + virtual void SendMessageToSet(WorldPacket *data, bool self); virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self); virtual void SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr); @@ -806,11 +786,11 @@ class WorldObject : public Object, public WorldLocation GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime); Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); - Creature* FindNearestCreature(uint32 entry, float range, bool alive = true); - GameObject* FindNearestGameObject(uint32 entry, float range); + Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const; + GameObject* FindNearestGameObject(uint32 entry, float range) const; - void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange); - void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange); + void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const; + void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const; void DestroyForNearbyPlayers(); virtual void UpdateObjectVisibility(bool forced = true); @@ -884,11 +864,14 @@ namespace Trinity template<class T> void RandomResizeList(std::list<T> &_list, uint32 _size) { - while (_list.size() > _size) + size_t list_size = _list.size(); + + while (list_size > _size) { typename std::list<T>::iterator itr = _list.begin(); - advance(itr, urand(0, _list.size() - 1)); + std::advance(itr, urand(0, list_size - 1)); _list.erase(itr); + --list_size; } } diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index b231cb38e1a..6dd04e1dee4 100755 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -78,7 +78,7 @@ enum HighGuid #define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) #define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF)) -inline bool IsGuidHaveEnPart(uint64 const guid) +inline bool IsGuidHaveEnPart(uint64 guid) { switch(GUID_HIPART(guid)) { diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp index 3884ce9f26f..547c415bc73 100755 --- a/src/server/game/Entities/Object/Updates/UpdateData.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp @@ -34,7 +34,7 @@ void UpdateData::AddOutOfRangeGUID(std::set<uint64>& guids) m_outOfRangeGUIDs.insert(guids.begin(), guids.end()); } -void UpdateData::AddOutOfRangeGUID(const uint64 guid) +void UpdateData::AddOutOfRangeGUID(uint64 guid) { m_outOfRangeGUIDs.insert(guid); } diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h index f81a0464043..87e98ead61c 100755 --- a/src/server/game/Entities/Object/Updates/UpdateData.h +++ b/src/server/game/Entities/Object/Updates/UpdateData.h @@ -53,7 +53,7 @@ class UpdateData UpdateData(); void AddOutOfRangeGUID(std::set<uint64>& guids); - void AddOutOfRangeGUID(const uint64 guid); + void AddOutOfRangeGUID(uint64 guid); void AddUpdateBlock(const ByteBuffer &block); bool BuildPacket(WorldPacket* packet); bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4c676241f85..58a297a8b2c 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -19610,8 +19610,8 @@ void Player::SendRemoveControlBar() bool Player::IsAffectedBySpellmod(SpellInfo const *spellInfo, SpellModifier *mod, Spell* spell) { - if (!mod || !spellInfo) - return false; + if (!mod || !spellInfo) + return false; // Mod out of charges if (spell && mod->charges == -1 && spell->m_appliedMods.find(mod->ownerAura) == spell->m_appliedMods.end()) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index fbfa5333eb1..9a0f35313f6 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1567,7 +1567,7 @@ class Player : public Unit, public GridObject<Player> uint64 GetSelection() const { return m_curSelection; } Unit *GetSelectedUnit() const; Player *GetSelectedPlayer() const; - void SetSelection(const uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); } + void SetSelection(uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); } uint8 GetComboPoints() { return m_comboPoints; } uint64 GetComboTarget() const { return m_comboTarget; } @@ -1902,7 +1902,7 @@ class Player : public Unit, public GridObject<Player> void UpdateRuneRegen(RuneType rune); uint64 GetLootGUID() const { return m_lootGuid; } - void SetLootGUID(const uint64 guid) { m_lootGuid = guid; } + void SetLootGUID(uint64 guid) { m_lootGuid = guid; } void RemovedInsignia(Player* looterPlr); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6086d5f9e2d..4cea8f56005 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2402,14 +2402,22 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spell) } // Check for attack from behind - if (!victim->HasInArc(M_PI, this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION)) + if (!victim->HasInArc(M_PI, this)) { - // Can`t dodge from behind in PvP (but its possible in PvE) - if (victim->GetTypeId() == TYPEID_PLAYER) - canDodge = false; - // Can`t parry or block - canParry = false; - canBlock = false; + if (!victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION)) + { + // Can`t dodge from behind in PvP (but its possible in PvE) + if (victim->GetTypeId() == TYPEID_PLAYER) + canDodge = false; + // Can`t parry or block + canParry = false; + canBlock = false; + } + else // Only deterrence as of 3.3.5 + { + if (spell->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) + canParry = false; + } } // Check creatures flags_extra for disable parry if (victim->GetTypeId() == TYPEID_UNIT) @@ -5596,16 +5604,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 71203; break; } - // Gaseous Bloat (Professor Putricide add) - case 70215: - case 72858: - case 72859: - case 72860: - { - target = getVictim(); - triggered_spell_id = 70701; - break; - } // Essence of the Blood Queen case 70871: { @@ -6467,16 +6465,14 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } case SPELLFAMILY_ROGUE: { - switch(dummySpell->Id) + switch (dummySpell->Id) { - // Glyph of Backstab - case 56800: + case 56800: // Glyph of Backstab { triggered_spell_id = 63975; break; } - // Deadly Throw Interrupt - case 32748: + case 32748: // Deadly Throw Interrupt { // Prevent cast Deadly Throw Interrupt on self from last effect (apply dummy) of Deadly Throw if (this == victim) @@ -6486,124 +6482,126 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere break; } } - // Cut to the Chase - if (dummySpell->SpellIconID == 2909) + + switch (dummySpell->SpellIconID) { - // "refresh your Slice and Dice duration to its 5 combo point maximum" - // lookup Slice and Dice - if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0)) + case 2116: // Quick Recovery { - aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true); - return true; - } - return false; - } - // Deadly Brew - else if (dummySpell->SpellIconID == 2963) - { - triggered_spell_id = 3409; - break; - } - // Quick Recovery - else if (dummySpell->SpellIconID == 2116) - { - if (!procSpell) - return false; + if (!procSpell) + return false; - // energy cost save - basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount); - if (basepoints0 <= 0) - return false; + // energy cost save + basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount); + if (basepoints0 <= 0) + return false; - target = this; - triggered_spell_id = 31663; - break; + target = this; + triggered_spell_id = 31663; + break; + } + case 2909: // Cut to the Chase + { + // "refresh your Slice and Dice duration to its 5 combo point maximum" + // lookup Slice and Dice + if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0)) + { + aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true); + return true; + } + return false; + } + case 2963: // Deadly Brew + { + triggered_spell_id = 3409; + break; + } } break; } case SPELLFAMILY_HUNTER: { - // Thrill of the Hunt - if (dummySpell->SpellIconID == 2236) + switch (dummySpell->SpellIconID) { - if (!procSpell) - return false; + case 267: // Improved Mend Pet + { + int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue(); + if (!roll_chance_i(chance)) + return false; - Spell* spell = ToPlayer()->m_spellModTakingSpell; + triggered_spell_id = 24406; + break; + } + case 2236: // Thrill of the Hunt + { + if (!procSpell) + return false; - // Disable charge drop because of Lock and Load - ToPlayer()->SetSpellModTakingSpell(spell, false); + Spell* spell = ToPlayer()->m_spellModTakingSpell; - // Explosive Shot - if (procSpell->SpellFamilyFlags[2] & 0x200) - { - if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID())) - basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3; - } - else - basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10; + // Disable charge drop because of Lock and Load + ToPlayer()->SetSpellModTakingSpell(spell, false); - ToPlayer()->SetSpellModTakingSpell(spell, true); + // Explosive Shot + if (procSpell->SpellFamilyFlags[2] & 0x200) + { + if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID())) + basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3; + } + else + basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10; - if (basepoints0 <= 0) - return false; + ToPlayer()->SetSpellModTakingSpell(spell, true); - target = this; - triggered_spell_id = 34720; - break; - } - // Hunting Party - if (dummySpell->SpellIconID == 3406) - { - triggered_spell_id = 57669; - target = this; - break; - } - // Improved Mend Pet - if (dummySpell->SpellIconID == 267) - { - int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue(); - if (!roll_chance_i(chance)) - return false; + if (basepoints0 <= 0) + return false; - triggered_spell_id = 24406; - break; - } - // Lock and Load - if (dummySpell->SpellIconID == 3579) - { - // Proc only from periodic (from trap activation proc another aura of this spell) - if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount)) - return false; - triggered_spell_id = 56453; - target = this; - break; - } - // Rapid Recuperation - if (dummySpell->SpellIconID == 3560) - { - // This effect only from Rapid Killing (mana regen) - if (!(procSpell->SpellFamilyFlags[1] & 0x01000000)) - return false; + target = this; + triggered_spell_id = 34720; + break; + } + case 3406: // Hunting Party + { + triggered_spell_id = 57669; + target = this; + break; + } + case 3560: // Rapid Recuperation + { + // This effect only from Rapid Killing (mana regen) + if (!(procSpell->SpellFamilyFlags[1] & 0x01000000)) + return false; - target = this; + target = this; - switch(dummySpell->Id) + switch (dummySpell->Id) + { + case 53228: // Rank 1 + triggered_spell_id = 56654; + break; + case 53232: // Rank 2 + triggered_spell_id = 58882; + break; + } + break; + } + case 3579: // Lock and Load { - case 53228: // Rank 1 - triggered_spell_id = 56654; - break; - case 53232: // Rank 2 - triggered_spell_id = 58882; - break; + // Proc only from periodic (from trap activation proc another aura of this spell) + if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount)) + return false; + triggered_spell_id = 56453; + target = this; + break; } - break; } - // Glyph of Mend Pet - if (dummySpell->Id == 57870) + + switch (dummySpell->Id) { - victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID()); - return true; + case 57870: // Glyph of Mend Pet + { + victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID()); + return true; + } } break; } @@ -7906,6 +7904,27 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp RemoveAuraFromStack(71564); *handled = true; break; + // Gaseous Bloat + case 70672: + case 72455: + case 72832: + case 72833: + { + *handled = true; + uint32 stack = triggeredByAura->GetStackAmount(); + int32 const mod = (GetMap()->GetSpawnMode() & 1) ? 1500 : 1250; + int32 dmg = 0; + for (uint8 i = 1; i < stack; ++i) + dmg += mod * stack; + if (Unit* caster = triggeredByAura->GetCaster()) + { + caster->CastCustomSpell(70701, SPELLVALUE_BASE_POINT0, dmg); + if (Creature* creature = caster->ToCreature()) + creature->DespawnOrUnsummon(1); + } + break; + } + // Ball of Flames Proc case 71756: case 72782: case 72783: @@ -8400,76 +8419,42 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg target = this; break; } - // Lightning Capacitor - case 37657: + case 37657: // Lightning Capacitor + case 54841: // Thunder Capacitor + case 67712: // Item - Coliseum 25 Normal Caster Trinket + case 67758: // Item - Coliseum 25 Heroic Caster Trinket { - if (!victim || !victim->isAlive()) + if (!victim || !victim->isAlive() || GetTypeId() != TYPEID_PLAYER) return false; - // stacking - CastSpell(this, 37658, true, NULL, triggeredByAura); - Aura* dummy = GetAura(37658); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) - return false; - - RemoveAurasDueToSpell(37658); - trigger_spell_id = 37661; - target = victim; - break; - } - // Thunder Capacitor - case 54841: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 54842, true, NULL, triggeredByAura); - - // counting - Aura* dummy = GetAura(54842); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) - return false; - - RemoveAurasDueToSpell(54842); - trigger_spell_id = 54843; - target = victim; - break; - } - //Item - Coliseum 25 Normal Caster Trinket - case 67712: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 67713, true, NULL, triggeredByAura); - - Aura* dummy = GetAura(67713); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if (!dummy || dummy->GetStackAmount() < triggerAmount) - return false; + uint32 stack_spell_id = 0; + switch (auraSpellInfo->Id) + { + case 37657: + stack_spell_id = 37658; + trigger_spell_id = 37661; + break; + case 54841: + stack_spell_id = 54842; + trigger_spell_id = 54843; + break; + case 67712: + stack_spell_id = 67713; + trigger_spell_id = 67714; + break; + case 67758: + stack_spell_id = 67759; + trigger_spell_id = 67760; + break; + } - RemoveAurasDueToSpell(67713); - trigger_spell_id = 67714; - target = victim; - break; - } - //Item - Coliseum 25 Heroic Caster Trinket - case 67758: - { - if (!victim || !victim->isAlive()) - return false; - // stacking - CastSpell(this, 67759, true, NULL, triggeredByAura); + CastSpell(this, stack_spell_id, true, NULL, triggeredByAura); - Aura* dummy = GetAura(67759); - // release at 3 aura in stack (cont contain in basepoint of trigger aura) + Aura* dummy = GetAura(stack_spell_id); if (!dummy || dummy->GetStackAmount() < triggerAmount) return false; - RemoveAurasDueToSpell(67759); - trigger_spell_id = 67760; + RemoveAurasDueToSpell(stack_spell_id); target = victim; break; } @@ -11732,8 +11717,6 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT else TakenFlatBenefit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN); - Player* player = ToPlayer(); - // Done/Taken total percent damage auras float DoneTotalMod = 1.0f; float TakenTotalMod = 1.0f; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 383bf125239..e777f16b99a 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -174,7 +174,7 @@ enum UnitStandFlags { UNIT_STAND_FLAGS_UNK1 = 0x01, UNIT_STAND_FLAGS_CREEP = 0x02, - UNIT_STAND_FLAGS_UNK3 = 0x04, + UNIT_STAND_FLAGS_UNTRACKABLE = 0x04, UNIT_STAND_FLAGS_UNK4 = 0x08, UNIT_STAND_FLAGS_UNK5 = 0x10, UNIT_STAND_FLAGS_ALL = 0xFF @@ -185,7 +185,7 @@ enum UnitBytes1_Flags { UNIT_BYTE1_FLAG_ALWAYS_STAND = 0x01, UNIT_BYTE1_FLAG_UNK_2 = 0x02, - UNIT_BYTE1_FLAG_UNTRACKABLE = 0x04, + UNIT_BYTE1_FLAG_UNK_3 = 0x04, UNIT_BYTE1_FLAG_ALL = 0xFF }; @@ -2050,7 +2050,8 @@ class Unit : public WorldObject static Player* GetPlayer(WorldObject& object, uint64 guid); static Creature* GetCreature(WorldObject& object, uint64 guid); - MotionMaster* GetMotionMaster(){ return &i_motionMaster; } + MotionMaster* GetMotionMaster() { return &i_motionMaster; } + const MotionMaster* GetMotionMaster() const { return &i_motionMaster; } bool IsStopped() const { return !(HasUnitState(UNIT_STAT_MOVING)); } void StopMoving(); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 52f94f10b40..b9e00bc7231 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -270,7 +270,7 @@ void Group::RemoveAllInvites() m_invitees.clear(); } -Player* Group::GetInvited(const uint64 guid) const +Player* Group::GetInvited(uint64 guid) const { for (InvitesList::const_iterator itr = m_invitees.begin(); itr != m_invitees.end(); ++itr) { @@ -387,7 +387,7 @@ bool Group::AddMember(Player* player) return true; } -bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/) +bool Group::RemoveMember(uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/) { BroadcastGroupUpdate(); @@ -498,7 +498,7 @@ bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP } } -void Group::ChangeLeader(const uint64 guid) +void Group::ChangeLeader(uint64 guid) { member_witerator slot = _getMemberWSlot(guid); @@ -652,7 +652,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r) } } -void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1+1)); data << uint64(SourceGuid); // guid of the item rolled @@ -676,7 +676,7 @@ void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 } } -void Group::SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) +void Group::SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) { WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1)); data << uint64(SourceGuid); // guid of the item rolled @@ -949,7 +949,7 @@ void Group::MasterLoot(Loot* /*loot*/, WorldObject* pLootedObject) } } -void Group::CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choice) +void Group::CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choice) { Rolls::iterator rollI = GetRoll(Guid); if (rollI == RollId.end()) @@ -1295,7 +1295,7 @@ void Group::OfflineReadyCheck() } } -bool Group::_setMembersGroup(const uint64 guid, uint8 group) +bool Group::_setMembersGroup(uint64 guid, uint8 group) { member_witerator slot = _getMemberWSlot(guid); if (slot == m_memberSlots.end()) @@ -1322,7 +1322,7 @@ bool Group::SameSubGroup(Player const* member1, Player const* member2) const } // Allows setting sub groups both for online or offline members -void Group::ChangeMembersGroup(const uint64 guid, uint8 group) +void Group::ChangeMembersGroup(uint64 guid, uint8 group) { // Only raid groups have sub groups if (!isRaidGroup()) @@ -1767,7 +1767,7 @@ void Group::SetLootMethod(LootMethod method) m_lootMethod = method; } -void Group::SetLooterGuid(const uint64 guid) +void Group::SetLooterGuid(uint64 guid) { m_looterGuid = guid; } @@ -1847,12 +1847,12 @@ ItemQualities Group::GetLootThreshold() const return m_lootThreshold; } -bool Group::IsMember(const uint64 guid) const +bool Group::IsMember(uint64 guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); } -bool Group::IsLeader(const uint64 guid) const +bool Group::IsLeader(uint64 guid) const { return (GetLeaderGUID() == guid); } @@ -1873,7 +1873,7 @@ bool Group::IsAssistant(uint64 guid) const return mslot->flags & MEMBER_FLAG_ASSISTANT; } -bool Group::SameSubGroup(uint64 guid1, const uint64 guid2) const +bool Group::SameSubGroup(uint64 guid1, uint64 guid2) const { member_citerator mslot2 = _getMemberCSlot(guid2); if (mslot2 == m_memberSlots.end()) diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index ff9114b8c71..083e6e15225 100755 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -191,10 +191,10 @@ class Group void RemoveAllInvites(); bool AddLeaderInvite(Player* player); bool AddMember(Player* player); - bool RemoveMember(const uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL); - void ChangeLeader(const uint64 guid); + bool RemoveMember(uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL); + void ChangeLeader(uint64 guid); void SetLootMethod(LootMethod method); - void SetLooterGuid(const uint64 guid); + void SetLooterGuid(uint64 guid); void UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed = false); void SetLootThreshold(ItemQualities threshold); void Disband(bool hideDestroy=false); @@ -217,15 +217,15 @@ class Group uint32 GetDbStoreId() { return m_dbStoreId; }; // member manipulation methods - bool IsMember(const uint64 guid) const; - bool IsLeader(const uint64 guid) const; + bool IsMember(uint64 guid) const; + bool IsLeader(uint64 guid) const; uint64 GetMemberGUID(const std::string& name); bool IsAssistant(uint64 guid) const; - Player* GetInvited(const uint64 guid) const; + Player* GetInvited(uint64 guid) const; Player* GetInvited(const std::string& name) const; - bool SameSubGroup(uint64 guid1, const uint64 guid2) const; + bool SameSubGroup(uint64 guid1, uint64 guid2) const; bool SameSubGroup(uint64 guid1, MemberSlot const* slot2) const; bool SameSubGroup(Player const* member1, Player const* member2) const; bool HasFreeSlotSubGroup(uint8 subgroup) const; @@ -241,7 +241,7 @@ class Group void SetBattlegroundGroup(Battleground *bg); GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot); - void ChangeMembersGroup(const uint64 guid, uint8 group); + void ChangeMembersGroup(uint64 guid, uint8 group); void ChangeMembersGroup(Player* player, uint8 group); void SetTargetIcon(uint8 id, uint64 whoGuid, uint64 targetGuid); void SetGroupMemberFlag(uint64 guid, bool apply, GroupMemberFlags flag); @@ -272,8 +272,8 @@ class Group bool isRollLootActive() const; void SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r); - void SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); - void SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); + void SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r); void SendLooter(Creature *pCreature, Player *pLooter); void GroupLoot(Loot *loot, WorldObject* pLootedObject); @@ -281,7 +281,7 @@ class Group void MasterLoot(Loot *loot, WorldObject* pLootedObject); Rolls::iterator GetRoll(uint64 Guid); void CountTheRoll(Rolls::iterator roll, uint32 NumberOfPlayers); - void CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choise); + void CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise); void EndRoll(Loot *loot); // related to disenchant rolls @@ -301,7 +301,7 @@ class Group void BroadcastGroupUpdate(void); protected: - bool _setMembersGroup(const uint64 guid, uint8 group); + bool _setMembersGroup(uint64 guid, uint8 group); void _homebindIfInstance(Player* player); void _initRaidSubGroupsCounter(); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index accfba7812a..63aa0f88b14 100755 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1508,7 +1508,7 @@ void Guild::HandleRemoveMember(WorldSession* session, const std::string& name) SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_RANK_TOO_HIGH_S, name); else { - const uint64 guid = pMember->GetGUID(); + uint64 guid = pMember->GetGUID(); // After call to DeleteMember pointer to member becomes invalid DeleteMember(guid, false, true); _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), GUID_LOPART(guid)); @@ -1790,7 +1790,7 @@ void Guild::SendBankTabText(WorldSession *session, uint8 tabId) const void Guild::SendPermissions(WorldSession *session) const { - const uint64 guid = session->GetPlayer()->GetGUID(); + uint64 guid = session->GetPlayer()->GetGUID(); uint8 rankId = session->GetPlayer()->GetRank(); WorldPacket data(MSG_GUILD_PERMISSIONS, 4 * 15 + 1); @@ -2063,7 +2063,7 @@ void Guild::BroadcastPacket(WorldPacket* packet) const /////////////////////////////////////////////////////////////////////////////// // Members handling -bool Guild::AddMember(const uint64 guid, uint8 rankId) +bool Guild::AddMember(uint64 guid, uint8 rankId) { Player* player = ObjectAccessor::FindPlayer(guid); // Player cannot be in guild @@ -2132,7 +2132,7 @@ bool Guild::AddMember(const uint64 guid, uint8 rankId) return true; } -void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked) +void Guild::DeleteMember(uint64 guid, bool isDisbanding, bool isKicked) { uint32 lowguid = GUID_LOPART(guid); Player* player = ObjectAccessor::FindPlayer(guid); @@ -2188,7 +2188,7 @@ void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked) _UpdateAccountsNumber(); } -bool Guild::ChangeMemberRank(const uint64 guid, uint8 newRank) +bool Guild::ChangeMemberRank(uint64 guid, uint8 newRank) { if (newRank <= _GetLowestRankId()) // Validate rank (allow only existing ranks) if (Member* pMember = GetMember(guid)) @@ -2352,7 +2352,7 @@ void Guild::_DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB) m_bankTabs.clear(); } -bool Guild::_ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add) +bool Guild::_ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add) { if (add) m_bankMoney += amount; @@ -2448,21 +2448,21 @@ inline uint8 Guild::_GetRankBankTabRights(uint8 rankId, uint8 tabId) const return 0; } -inline uint32 Guild::_GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const +inline uint32 Guild::_GetMemberRemainingSlots(uint64 guid, uint8 tabId) const { if (const Member* pMember = GetMember(guid)) return pMember->GetBankRemainingValue(tabId, this); return 0; } -inline uint32 Guild::_GetMemberRemainingMoney(const uint64 guid) const +inline uint32 Guild::_GetMemberRemainingMoney(uint64 guid) const { if (const Member* pMember = GetMember(guid)) return pMember->GetBankRemainingValue(GUILD_BANK_MAX_TABS, this); return 0; } -inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId) +inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId) { // Remaining slots must be more then 0 if (uint32 remainingSlots = _GetMemberRemainingSlots(guid, tabId)) @@ -2472,7 +2472,7 @@ inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const ui pMember->DecreaseBankRemainingValue(trans, tabId, 1); } -inline bool Guild::_MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const +inline bool Guild::_MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const { if (const Member* pMember = GetMember(guid)) { @@ -2632,7 +2632,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError void Guild::_SendBankContent(WorldSession *session, uint8 tabId) const { - const uint64 guid = session->GetPlayer()->GetGUID(); + uint64 guid = session->GetPlayer()->GetGUID(); if (_MemberHasTabRights(guid, tabId, GUILD_BANK_RIGHT_VIEW_TAB)) if (const BankTab* pTab = GetBankTab(tabId)) { @@ -2726,7 +2726,7 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const } } -void Guild::_BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1, const char* param2, const char* param3) const +void Guild::_BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1, const char* param2, const char* param3) const { uint8 count = !param3 ? (!param2 ? (!param1 ? 0 : 1) : 2) : 3; diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index f38d444bbb4..40a281bf122 100755 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -257,7 +257,7 @@ private: }; public: - Member(uint32 guildId, const uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { } + Member(uint32 guildId, uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { } void SetStats(Player* player); void SetStats(const std::string& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId); @@ -280,7 +280,7 @@ private: inline void UpdateLogoutTime() { m_logoutTime = ::time(NULL); } inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; } inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; } - inline bool IsSamePlayer(const uint64 guid) const { return m_guid == guid; } + inline bool IsSamePlayer(uint64 guid) const { return m_guid == guid; } void DecreaseBankRemainingValue(SQLTransaction& trans, uint8 tabId, uint32 amount); uint32 GetBankRemainingValue(uint8 tabId, const Guild* guild) const; @@ -656,9 +656,9 @@ public: // Members // Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned. - bool AddMember(const uint64 guid, uint8 rankId = GUILD_RANK_NONE); - void DeleteMember(const uint64 guid, bool isDisbanding = false, bool isKicked = false); - bool ChangeMemberRank(const uint64 guid, uint8 newRank); + bool AddMember(uint64 guid, uint8 rankId = GUILD_RANK_NONE); + void DeleteMember(uint64 guid, bool isDisbanding = false, bool isKicked = false); + bool ChangeMemberRank(uint64 guid, uint8 newRank); // Bank void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount); @@ -698,12 +698,12 @@ private: inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; } - inline const Member* GetMember(const uint64 guid) const + inline const Member* GetMember(uint64 guid) const { Members::const_iterator itr = m_members.find(GUID_LOPART(guid)); return itr != m_members.end() ? itr->second : NULL; } - inline Member* GetMember(const uint64 guid) + inline Member* GetMember(uint64 guid) { Members::iterator itr = m_members.find(GUID_LOPART(guid)); return itr != m_members.end() ? itr->second : NULL; @@ -736,7 +736,7 @@ private: void _UpdateAccountsNumber(); bool _IsLeader(Player* player) const; void _DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB = false); - bool _ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add); + bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add); void _SetLeaderGUID(Member* pLeader); void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay); @@ -747,10 +747,10 @@ private: uint32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const; std::string _GetRankName(uint8 rankId) const; - uint32 _GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const; - uint32 _GetMemberRemainingMoney(const uint64 guid) const; - void _DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId); - bool _MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const; + uint32 _GetMemberRemainingSlots(uint64 guid, uint8 tabId) const; + uint32 _GetMemberRemainingMoney(uint64 guid) const; + void _DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId); + bool _MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const; void _LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2 = 0, uint8 newRank = 0); void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); @@ -765,6 +765,6 @@ private: void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const; void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const; - void _BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const; + void _BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const; }; #endif diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 68ea5bfbbcb..8eac07918de 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -81,7 +81,7 @@ std::string GuildMgr::GetGuildNameById(uint32 guildId) const return ""; } -Guild* GuildMgr::GetGuildByLeader(const uint64 guid) const +Guild* GuildMgr::GetGuildByLeader(uint64 guid) const { for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) if (itr->second->GetLeaderGUID() == guid) diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index ce756fceb69..e53c46cb6be 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -23,13 +23,14 @@ class GuildMgr { friend class ACE_Singleton<GuildMgr, ACE_Null_Mutex>; +private: GuildMgr(); ~GuildMgr(); public: typedef UNORDERED_MAP<uint32, Guild*> GuildContainer; - Guild* GetGuildByLeader(uint64 const guid) const; + Guild* GetGuildByLeader(uint64 guid) const; Guild* GetGuildById(uint32 guildId) const; Guild* GetGuildByName(const std::string& guildName) const; std::string GetGuildNameById(uint32 guildId) const; diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp index fe7e6a0f104..cf58f16c445 100755 --- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp @@ -770,7 +770,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke if (mask & GROUP_UPDATE_FLAG_AURAS) { - const uint64 auramask = player->GetAuraUpdateMaskForRaid(); + uint64 auramask = player->GetAuraUpdateMaskForRaid(); *data << uint64(auramask); for (uint32 i = 0; i < MAX_AURAS; ++i) { @@ -860,7 +860,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke { if (pet) { - const uint64 auramask = pet->GetAuraUpdateMaskForRaid(); + uint64 auramask = pet->GetAuraUpdateMaskForRaid(); *data << uint64(auramask); for (uint32 i = 0; i < MAX_AURAS; ++i) { diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp index 67272f4d5ec..f763d5bc966 100755 --- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp @@ -576,7 +576,6 @@ void WorldSession::HandlePetSetAction(WorldPacket & recv_data) for (Unit::ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr) if ((*itr)->GetEntry() == pet->GetEntry()) (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spellInfo, false); - } } diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp index 716aaa9e74f..45d4414d9ed 100755 --- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp @@ -295,12 +295,8 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data) if (_player->m_mover != _player) return; - GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid); - - if (!obj) - return; - - obj->Use(_player); + if (GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid)) + obj->Use(_player); } void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket) diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 96d6505a764..727e48b2041 100755 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -22,15 +22,15 @@ enum AURA_FLAGS { - AFLAG_NONE = 0x00, - AFLAG_EFF_INDEX_0 = 0x01, - AFLAG_EFF_INDEX_1 = 0x02, - AFLAG_EFF_INDEX_2 = 0x04, - AFLAG_CASTER = 0x08, - AFLAG_POSITIVE = 0x10, - AFLAG_DURATION = 0x20, - AFLAG_UNK2 = 0x40, - AFLAG_NEGATIVE = 0x80 + AFLAG_NONE = 0x00, + AFLAG_EFF_INDEX_0 = 0x01, + AFLAG_EFF_INDEX_1 = 0x02, + AFLAG_EFF_INDEX_2 = 0x04, + AFLAG_CASTER = 0x08, + AFLAG_POSITIVE = 0x10, + AFLAG_DURATION = 0x20, + AFLAG_ANY_EFFECT_AMOUNT_SENT = 0x40, // used with AFLAG_EFF_INDEX_0/1/2 + AFLAG_NEGATIVE = 0x80 }; // these are modes, in which aura effect handler may be called @@ -221,7 +221,7 @@ enum AuraType SPELL_AURA_NO_PVP_CREDIT = 159, SPELL_AURA_MOD_AOE_AVOIDANCE = 160, SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, - SPELL_AURA_POWER_BURN_MANA = 162, + SPELL_AURA_POWER_BURN = 162, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163, SPELL_AURA_164 = 164, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165, @@ -276,7 +276,7 @@ enum AuraType SPELL_AURA_214 = 214, SPELL_AURA_ARENA_PREPARATION = 215, SPELL_AURA_HASTE_SPELLS = 216, - SPELL_AURA_217 = 217, + SPELL_AURA_MOD_MELEE_HASTE_2 = 217, // NYI SPELL_AURA_HASTE_RANGED = 218, SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219, SPELL_AURA_MOD_RATING_FROM_STAT = 220, @@ -292,7 +292,7 @@ enum AuraType SPELL_AURA_230 = 230, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231, SPELL_AURA_MECHANIC_DURATION_MOD = 232, - SPELL_AURA_233 = 233, + SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS = 233, // client-side only SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK = 234, SPELL_AURA_MOD_DISPEL_RESIST = 235, SPELL_AURA_CONTROL_VEHICLE = 236, @@ -335,7 +335,7 @@ enum AuraType SPELL_AURA_X_RAY = 273, SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, - SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done + SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // NYI SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, SPELL_AURA_MOD_DISARM_RANGED = 278, SPELL_AURA_INITIALIZE_IMAGES = 279, @@ -367,7 +367,7 @@ enum AuraType SPELL_AURA_MOD_MINIMUM_SPEED = 305, SPELL_AURA_306 = 306, SPELL_AURA_HEAL_ABSORB_TEST = 307, - SPELL_AURA_308 = 308, + SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, // NYI SPELL_AURA_309 = 309, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 9c363dccfdf..8b68bff0a56 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -215,7 +215,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //159 SPELL_AURA_NO_PVP_CREDIT only for Honorless Target spell &AuraEffect::HandleNoImmediateEffect, //160 SPELL_AURA_MOD_AOE_AVOIDANCE implemented in Unit::MagicSpellHitResult &AuraEffect::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT - &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN_MANA implemented in AuraEffect::PeriodicTick + &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN implemented in AuraEffect::PeriodicTick &AuraEffect::HandleNoImmediateEffect, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS &AuraEffect::HandleUnused, //164 unused (3.2.0), only one test spell &AuraEffect::HandleNoImmediateEffect, //165 SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS implemented in Unit::MeleeDamageBonus @@ -372,7 +372,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //316 SPELL_AURA_PERIODIC_HASTE implemented in AuraEffect::CalculatePeriodic }; -AuraEffect::AuraEffect(Aura * base, uint8 effIndex, int32 *baseAmount, Unit* caster): +AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32 *baseAmount, Unit* caster): m_base(base), m_spellInfo(base->GetSpellInfo()), m_effIndex(effIndex), m_baseAmount(baseAmount ? *baseAmount : m_spellInfo->Effects[m_effIndex].BasePoints), m_canBeRecalculated(true), m_spellmod(NULL), m_isPeriodic(false), @@ -785,7 +785,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) case SPELL_AURA_PERIODIC_HEALTH_FUNNEL: case SPELL_AURA_PERIODIC_MANA_LEECH: case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - case SPELL_AURA_POWER_BURN_MANA: + case SPELL_AURA_POWER_BURN: m_isPeriodic = true; break; case SPELL_AURA_PERIODIC_TRIGGER_SPELL: @@ -1326,8 +1326,8 @@ void AuraEffect::PeriodicTick(AuraApplication * aurApp, Unit* caster) const case SPELL_AURA_PERIODIC_ENERGIZE: HandlePeriodicEnergizeAuraTick(target, caster); break; - case SPELL_AURA_POWER_BURN_MANA: - HandlePeriodicPowerBurnManaAuraTick(target, caster); + case SPELL_AURA_POWER_BURN: + HandlePeriodicPowerBurnAuraTick(target, caster); break; case SPELL_AURA_DUMMY: // Haunting Spirits @@ -2751,13 +2751,13 @@ void AuraEffect::HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode Unit* target = aurApp->GetTarget(); if (apply) - target->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE); + target->SetByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(GetAuraType())) return; - target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE); + target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE); } } @@ -6661,7 +6661,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, GetSpellInfo()); } -void AuraEffect::HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const +void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const { Powers powerType = Powers(GetMiscValue()); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 86bb325aa3c..bdaeefa71c2 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -290,7 +290,7 @@ class AuraEffect void HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) const; void HandleObsModPowerAuraTick(Unit* target, Unit* caster) const; void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const; - void HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const; + void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const; // aura effect proc handlers void HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index bff4f222895..e3dd1e83105 100755 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1831,7 +1831,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const case SPELL_AURA_PERIODIC_ENERGIZE: case SPELL_AURA_PERIODIC_MANA_LEECH: case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_POWER_BURN_MANA: + case SPELL_AURA_POWER_BURN: case SPELL_AURA_OBS_MOD_POWER: case SPELL_AURA_OBS_MOD_HEALTH: case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: @@ -2319,7 +2319,7 @@ void UnitAura::FillTargetMap(std::map<Unit *, uint8> & targets, Unit* caster) if (!GetUnitOwner()->HasUnitState(UNIT_STAT_ISOLATED)) { - switch(GetSpellInfo()->Effects[effIndex].Effect) + switch (GetSpellInfo()->Effects[effIndex].Effect) { case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: targetList.push_back(GetUnitOwner()); diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 8192325af90..1c22a31e791 100755 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -175,9 +175,9 @@ class Aura // Helpers for targets ApplicationMap const & GetApplicationMap() {return m_applications;} void GetApplicationList(std::list<AuraApplication*> & applicationList) const; - const AuraApplication * GetApplicationOfTarget (uint64 const guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - AuraApplication * GetApplicationOfTarget (uint64 const guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - bool IsAppliedOnTarget(uint64 const guid) const { return m_applications.find(guid) != m_applications.end(); } + const AuraApplication * GetApplicationOfTarget (uint64 guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } + AuraApplication * GetApplicationOfTarget (uint64 guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } + bool IsAppliedOnTarget(uint64 guid) const { return m_applications.find(guid) != m_applications.end(); } void SetNeedClientUpdateForTargets() const; void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 4eee788e84e..f58bd72914d 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -551,8 +551,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_autoRepeat = m_spellInfo->IsAutoRepeatRangedSpell(); m_runesState = 0; - m_powerCost = 0; // setup to correct value in Spell::prepare, don't must be used before. - m_casttime = 0; // setup to correct value in Spell::prepare, don't must be used before. + m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before. + m_casttime = 0; // setup to correct value in Spell::prepare, must not be used before. m_timer = 0; // will set to castime in prepare m_channelTargetEffectMask = 0; @@ -1237,18 +1237,16 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) } // Do not take combo points on dodge and miss - if (m_needComboPoints && m_targets.GetUnitTargetGUID() == target->targetGUID) - if (missInfo != SPELL_MISS_NONE) - { - m_needComboPoints = false; - // Restore spell mods for a miss/dodge/parry Cold Blood - // TODO: check how broad this rule should be - if (m_caster->GetTypeId() == TYPEID_PLAYER) - if ((missInfo == SPELL_MISS_MISS) || - (missInfo == SPELL_MISS_DODGE) || - (missInfo == SPELL_MISS_PARRY)) - m_caster->ToPlayer()->RestoreSpellMods(this, 14177); - } + if (missInfo != SPELL_MISS_NONE && m_needComboPoints && + m_targets.GetUnitTargetGUID() == target->targetGUID) + { + m_needComboPoints = false; + // Restore spell mods for a miss/dodge/parry Cold Blood + // TODO: check how broad this rule should be + if (m_caster->GetTypeId() == TYPEID_PLAYER && (missInfo == SPELL_MISS_MISS || + missInfo == SPELL_MISS_DODGE || missInfo == SPELL_MISS_PARRY)) + m_caster->ToPlayer()->RestoreSpellMods(this, 14177); + } // Trigger info was not filled in spell::preparedatafortriggersystem - we do it now if (canEffectTrigger && !procAttacker && !procVictim) @@ -1546,8 +1544,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool ((UnitAura*)m_spellAura)->SetDiminishGroup(m_diminishGroup); bool positive = m_spellAura->GetSpellInfo()->IsPositive(); - AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID()); - if (aurApp) + if (AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID())) positive = aurApp->IsPositive(); duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive); @@ -4577,7 +4574,7 @@ void Spell::HandleEffects(Unit *pUnitTarget, Item *pItemTarget, GameObject *pGOT SpellCastResult Spell::CheckCast(bool strict) { // check death state - if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !((m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell))) return SPELL_FAILED_CASTER_DEAD; // check cooldowns to prevent cheating @@ -6376,7 +6373,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const break; } - if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) + if (IsTriggered() || m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) return true; // todo: shit below shouldn't be here, but it's temporary diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index dbeb7407031..04e90d2083b 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1648,7 +1648,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b } // check UNIT_FLAG_NON_ATTACKABLE flag - a player can cast spells on his pet (or other controlled unit) though in any state - if (target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID()) + if (!IsPositive() && target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID()) { // any unattackable target skipped if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index da96f5df537..85ee259fcc9 100755 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -84,10 +84,10 @@ public: bool IsClosed() const { return _closedBy; } bool IsCompleted() const { return _completed; } - bool IsFromPlayer(const uint64 guid) const { return guid == _playerGuid; } + bool IsFromPlayer(uint64 guid) const { return guid == _playerGuid; } bool IsAssigned() const { return _assignedTo != 0; } - bool IsAssignedTo(const uint64 guid) const { return guid == _assignedTo; } - bool IsAssignedNotTo(const uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); } + bool IsAssignedTo(uint64 guid) const { return guid == _assignedTo; } + bool IsAssignedNotTo(uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); } uint32 GetId() const { return _id; } Player* GetPlayer() const { return ObjectAccessor::FindPlayer(_playerGuid); } @@ -108,7 +108,7 @@ public: GMTicketEscalationStatus GetEscalatedStatus() const { return _escalatedStatus; } void SetEscalatedStatus(GMTicketEscalationStatus escalatedStatus) { _escalatedStatus = escalatedStatus; } - void SetAssignedTo(const uint64 guid, bool isAdmin) + void SetAssignedTo(uint64 guid, bool isAdmin) { _assignedTo = guid; if (isAdmin && _escalatedStatus == TICKET_IN_ESCALATION_QUEUE) @@ -178,7 +178,7 @@ public: return NULL; } - GmTicket* GetTicketByPlayer(const uint64 playerGuid) + GmTicket* GetTicketByPlayer(uint64 playerGuid) { for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr) if (itr->second && itr->second->IsFromPlayer(playerGuid) && !itr->second->IsClosed()) diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 493e4b8f28e..7faa8df44bf 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -297,7 +297,7 @@ public: uint64 prisonerGUID; - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { if (!prisonerGUID) prisonerGUID = guid; @@ -883,7 +883,7 @@ public: uint64 minerGUID; - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { minerGUID = guid; } 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 fcee11c8774..7a6aefe90fb 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -318,7 +318,7 @@ class boss_rimefang : public CreatureScript _EnterEvadeMode(); } - void SetGUID(const uint64 guid, int32 type) + void SetGUID(uint64 guid, int32 type) { if (type == GUID_HOARFROST) { @@ -384,7 +384,7 @@ class player_overlord_brandAI : public PlayerAI tyrannus = NULL; } - void SetGUID(const uint64 guid, int32 /*type*/) + void SetGUID(uint64 guid, int32 /*type*/) { tyrannus = ObjectAccessor::GetCreature(*me, guid); if (!tyrannus) 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 411f9cc7d04..40f465c9ccd 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1176,7 +1176,7 @@ class npc_ball_of_flame : public CreatureScript } } - void SetGUID(uint64 const guid, int32 /*type*/) + void SetGUID(uint64 guid, int32 /*type*/) { _chaseGUID = guid; } 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 48c0edc2854..7bbf57dbcd0 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 @@ -257,7 +257,7 @@ class boss_blood_queen_lana_thel : public CreatureScript Talk(SAY_KILL); } - void SetGUID(uint64 const guid, int32 type = 0) + void SetGUID(uint64 guid, int32 type = 0) { switch (type) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 89869040e6d..56613d59e99 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -549,7 +549,7 @@ class boss_lady_deathwhisper : public CreatureScript summon->AI()->DoCast(summon, SPELL_TELEPORT_VISUAL); } - void SetGUID(uint64 const guid, int32 id/* = 0*/) + void SetGUID(uint64 guid, int32 id/* = 0*/) { if (id != GUID_CULTIST) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index e22e4ecb28b..f418726aedf 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -252,7 +252,7 @@ class boss_lord_marrowgar : public CreatureScript return 0LL; } - void SetGUID(uint64 const guid, int32 type/* = 0 */) + void SetGUID(uint64 guid, int32 type/* = 0 */) { if (type != DATA_COLDFLAME_GUID) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index ef2639ed6b8..b5bcd93d257 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -740,20 +740,6 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader } }; -class BeamProtectionCheck -{ - public: - explicit BeamProtectionCheck(uint32 excludeAura) : _excludeAura(excludeAura) { } - - bool operator()(Unit* unit) - { - return unit->HasAura(_excludeAura); - } - - private: - uint32 _excludeAura; -}; - class spell_putricide_ooze_channel : public SpellScriptLoader { public: @@ -782,7 +768,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader void SelectTarget(std::list<Unit*>& targetList) { - targetList.remove_if(BeamProtectionCheck(GetSpellInfo()->ExcludeTargetAuraSpell)); if (targetList.empty()) { FinishCast(SPELL_FAILED_NO_VALID_TARGETS); @@ -828,67 +813,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader } }; -class spell_putricide_expunged_gas : public SpellScriptLoader -{ - public: - spell_putricide_expunged_gas() : SpellScriptLoader("spell_putricide_expunged_gas") { } - - class spell_putricide_expunged_gas_SpellScript : public SpellScript - { - PrepareSpellScript(spell_putricide_expunged_gas_SpellScript); - - bool Load() - { - return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->GetInstanceScript(); - } - - SpellCastResult CheckCast() - { - if (!GetCaster()->getVictim()) - return SPELL_FAILED_NO_VALID_TARGETS; - return SPELL_CAST_OK; - } - - void CalcDamage(SpellEffIndex /*effIndex*/) - { - // checked in script loading, cant be NULL here - InstanceScript* instance = GetCaster()->GetInstanceScript(); - Creature* professor = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_PROFESSOR_PUTRICIDE)); - if (!professor) - return; - - int32 dmg = 0; - uint32 bloatId = sSpellMgr->GetSpellIdForDifficulty(SPELL_GASEOUS_BLOAT, GetCaster()); - if (Aura* gasBloat = GetCaster()->getVictim()->GetAura(bloatId)) - { - uint32 stack = gasBloat->GetStackAmount(); - int32 const mod = (GetCaster()->GetMap()->GetSpawnMode() & 1) ? 1500 : 1250; - for (uint8 i = 1; i < stack; ++i) - dmg += mod * stack; - } - - SetHitDamage(dmg); - } - - void DespawnAfterCast() - { - GetCaster()->ToCreature()->DespawnOrUnsummon(100); - } - - void Register() - { - OnCheckCast += SpellCheckCastFn(spell_putricide_expunged_gas_SpellScript::CheckCast); - OnEffect += SpellEffectFn(spell_putricide_expunged_gas_SpellScript::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - AfterHit += SpellHitFn(spell_putricide_expunged_gas_SpellScript::DespawnAfterCast); - } - }; - - SpellScript* GetSpellScript() const - { - return new spell_putricide_expunged_gas_SpellScript(); - } -}; - class spell_putricide_slime_puddle : public SpellScriptLoader { public: @@ -1532,7 +1456,6 @@ void AddSC_boss_professor_putricide() new npc_volatile_ooze(); new spell_putricide_gaseous_bloat(); new spell_putricide_ooze_channel(); - new spell_putricide_expunged_gas(); new spell_putricide_slime_puddle(); new spell_putricide_slime_puddle_aura(); new spell_putricide_unstable_experiment(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 0c2d1e8fe00..e0b8afdbfd5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -523,7 +523,7 @@ class npc_ice_tomb : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void SetGUID(uint64 const guid, int32 type/* = 0 */) + void SetGUID(uint64 guid, int32 type/* = 0 */) { if (type == DATA_TRAPPED_PLAYER) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 10c0cbd1331..b5d3eb947c0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -310,6 +310,8 @@ class boss_valithria_dreamwalker : public CreatureScript // immune to percent heals me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_OBS_MOD_HEALTH, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_HEAL_PCT, true); + // Glyph of Dispel Magic - not a percent heal by effect, its cast with custom basepoints + me->ApplySpellImmune(0, IMMUNITY_ID, 56131, true); _instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me); _missedPortals = 0; _under25PercentTalkDone = false; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 56c42f4f285..1e061c38c08 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -971,7 +971,7 @@ class npc_crok_scourgebane : public CreatureScript } } - void SetGUID(uint64 const guid, int32 type/* = 0*/) + void SetGUID(uint64 guid, int32 type/* = 0*/) { if (type == ACTION_VRYKUL_DEATH) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 2122e4d9179..9384eb04bc8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -163,7 +163,7 @@ public: uint64 victimGUID; - void SetGUID(const uint64 guid, int32 /*param*/) + void SetGUID(uint64 guid, int32 /*param*/) { victimGUID = guid; if (me->m_spells[0] && victimGUID) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index cd742b11d58..cf653284e6a 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -157,7 +157,7 @@ public: } } - void SetGUID(uint64 const guid, int32 id/* = 0 */) + void SetGUID(uint64 guid, int32 id/* = 0 */) { if (id == DATA_INTENSE_COLD) intenseColdList.push_back(guid); diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index aa08e4230ab..205dcdb5347 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -2431,7 +2431,7 @@ public: uiEventPhase = 1; } - void SetGUID(const uint64 uiGuid, int32 /*iId*/) + void SetGUID(uint64 uiGuid, int32 /*iId*/) { uiPlayerGUID = uiGuid; } diff --git a/src/server/scripts/Northrend/zuldrak.cpp b/src/server/scripts/Northrend/zuldrak.cpp index b8e0d31d49b..16567be9636 100644 --- a/src/server/scripts/Northrend/zuldrak.cpp +++ b/src/server/scripts/Northrend/zuldrak.cpp @@ -361,7 +361,7 @@ public: bRemoveFlag = false; } - void SetGUID(const uint64 guid, int32 /*id*/) + void SetGUID(uint64 guid, int32 /*id*/) { uiPlayerGUID = guid; } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 19dd7f6c2e3..16d147a4000 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -39,6 +39,58 @@ enum HunterSpells HUNTER_SPELL_CHIMERA_SHOT_SERPENT = 53353, HUNTER_SPELL_CHIMERA_SHOT_VIPER = 53358, HUNTER_SPELL_CHIMERA_SHOT_SCORPID = 53359, + HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET = 61669, +}; + +// 13161 Aspect of the Beast +class spell_hun_aspect_of_the_beast : public SpellScriptLoader +{ +public: + spell_hun_aspect_of_the_beast() : SpellScriptLoader("spell_hun_aspect_of_the_beast") { } + + class spell_hun_aspect_of_the_beast_AuraScript : public AuraScript + { + PrepareAuraScript(spell_hun_aspect_of_the_beast_AuraScript) + bool Validate(SpellInfo const* /*entry*/) + { + if (!sSpellMgr->GetSpellInfo(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET)) + return false; + return true; + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster()) + return; + + Unit* caster = GetCaster(); + if (caster->ToPlayer()) + if (Pet* pet = caster->ToPlayer()->GetPet()) + pet->RemoveAurasDueToSpell(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET); + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster()) + return; + + Unit* caster = GetCaster(); + if (caster->ToPlayer()) + if (Pet* pet = caster->ToPlayer()->GetPet()) + caster->CastSpell(caster, HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET, true); + } + + void Register() + { + 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 + { + return new spell_hun_aspect_of_the_beast_AuraScript(); + } }; // 53209 Chimera Shot @@ -512,6 +564,7 @@ public: void AddSC_hunter_spell_scripts() { + new spell_hun_aspect_of_the_beast(); new spell_hun_chimera_shot(); new spell_hun_invigoration(); new spell_hun_last_stand_pet(); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index e2f37912931..5300849d0ec 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1088,7 +1088,7 @@ class spell_magic_eater_food : public SpellScriptLoader { PrepareAuraScript(spell_magic_eater_food_AuraScript); - void HandleTriggerSpell(AuraEffect const* aurEff) + void HandleTriggerSpell(AuraEffect const* /*aurEff*/) { PreventDefaultAction(); Unit* target = GetTarget(); |