From da49e77d2435d3df38801eed0a29ebff04d7c45a Mon Sep 17 00:00:00 2001 From: zhenya Date: Sun, 15 Feb 2009 14:02:00 +0300 Subject: [PATCH] [7282] Store guilds in map for fast search by id, some other guild/arenateam related cleanups. Signed-off-by: VladimirMangos --- src/game/ArenaTeam.cpp | 8 ++++---- src/game/Guild.cpp | 12 ++++++------ src/game/ObjectMgr.cpp | 49 +++++++++++++++++++++++++++++------------------- src/game/ObjectMgr.h | 19 ++++++++++--------- src/shared/revision_nr.h | 2 +- 5 files changed, 51 insertions(+), 39 deletions(-) diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 3765d5e73..46dd80f86 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -297,7 +297,7 @@ void ArenaTeam::Disband(WorldSession *session) CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u'", Id); //< this should be alredy done by calling DelMember(memberGuids[j]); for each member CharacterDatabase.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", Id); CharacterDatabase.CommitTransaction(); - objmgr.RemoveArenaTeam(this); + objmgr.RemoveArenaTeam(Id); } void ArenaTeam::Roster(WorldSession *session) @@ -312,7 +312,7 @@ void ArenaTeam::Roster(WorldSession *session) data << uint32(GetMembersSize()); // members count data << uint32(GetType()); // arena team type? - for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { pl = objmgr.GetPlayer(itr->guid); @@ -370,7 +370,7 @@ void ArenaTeam::NotifyStatsChanged() { // this is called after a rated match ended // updates arena team stats for every member of the team (not only the ones who participated!) - for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player * plr = objmgr.GetPlayer(itr->guid); if(plr) @@ -443,7 +443,7 @@ void ArenaTeam::SetStats(uint32 stat_type, uint32 value) void ArenaTeam::BroadcastPacket(WorldPacket *packet) { - for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player *player = objmgr.GetPlayer(itr->guid); if(player) diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index efbebcbcc..4ff5471e0 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -691,7 +691,7 @@ void Guild::Disband() CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid = '%u'",Id); CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE guildid = '%u'",Id); CharacterDatabase.CommitTransaction(); - objmgr.RemoveGuild(this); + objmgr.RemoveGuild(Id); } void Guild::Roster(WorldSession *session) @@ -703,7 +703,7 @@ void Guild::Roster(WorldSession *session) data << GINFO; data << (uint32)m_ranks.size(); - for (RankList::iterator ritr = m_ranks.begin(); ritr != m_ranks.end();++ritr) + for (RankList::const_iterator ritr = m_ranks.begin(); ritr != m_ranks.end(); ++ritr) { data << (uint32)ritr->rights; data << (uint32)ritr->BankMoneyPerDay; // count of: withdraw gold(gold/day) Note: in game set gold, in packet set bronze. @@ -713,7 +713,7 @@ void Guild::Roster(WorldSession *session) data << (uint32)ritr->TabSlotPerDay[i]; // for TAB_i count of: withdraw items(stack/day) } } - for (MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { if (Player *pl = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) { @@ -753,7 +753,7 @@ void Guild::Query(WorldSession *session) data << Id; data << name; - RankList::iterator itr; + for (size_t i = 0 ; i < 10; ++i) // show always 10 ranks { if(i < m_ranks.size()) @@ -1005,7 +1005,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2) AppendDisplayGuildBankSlot(data, tab, slot2); } - for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); if(!player) @@ -1043,7 +1043,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec cons for(GuildItemPosCountVec::const_iterator itr = slots.begin(); itr != slots.end(); ++itr) AppendDisplayGuildBankSlot(data, tab, itr->slot); - for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) + for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); if(!player) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 0411d18a4..ef01b772f 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -170,8 +170,9 @@ ObjectMgr::~ObjectMgr() // free group and guild objects for (GroupSet::iterator itr = mGroupSet.begin(); itr != mGroupSet.end(); ++itr) delete (*itr); - for (GuildSet::iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) - delete (*itr); + + for (GuildMap::iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr) + delete itr->second; for (CacheVendorItemMap::iterator itr = m_mCacheVendorItemMap.begin(); itr != m_mCacheVendorItemMap.end(); ++itr) itr->second.Clear(); @@ -189,43 +190,53 @@ Group * ObjectMgr::GetGroupByLeader(const uint64 &guid) const return NULL; } -Guild * ObjectMgr::GetGuildById(const uint32 GuildId) const +Guild * ObjectMgr::GetGuildById(uint32 GuildId) const { - for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) - if ((*itr)->GetId() == GuildId) - return *itr; + GuildMap::const_iterator itr = mGuildMap.find(GuildId); + if (itr != mGuildMap.end()) + return itr->second; return NULL; } Guild * ObjectMgr::GetGuildByName(const std::string& guildname) const { - for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) - if ((*itr)->GetName() == guildname) - return *itr; + for(GuildMap::const_iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr) + if (itr->second->GetName() == guildname) + return itr->second; return NULL; } -std::string ObjectMgr::GetGuildNameById(const uint32 GuildId) const +std::string ObjectMgr::GetGuildNameById(uint32 GuildId) const { - for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) - if ((*itr)->GetId() == GuildId) - return (*itr)->GetName(); + GuildMap::const_iterator itr = mGuildMap.find(GuildId); + if (itr != mGuildMap.end()) + return itr->second->GetName(); return ""; } Guild* ObjectMgr::GetGuildByLeader(const uint64 &guid) const { - for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) - if( (*itr)->GetLeader() == guid) - return *itr; + for(GuildMap::const_iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr) + if (itr->second->GetLeader() == guid) + return itr->second; return NULL; } -ArenaTeam* ObjectMgr::GetArenaTeamById(const uint32 arenateamid) const +void ObjectMgr::AddGuild(Guild* guild) +{ + mGuildMap[guild->GetId()] = guild; +} + +void ObjectMgr::RemoveGuild(uint32 Id) +{ + mGuildMap.erase(Id); +} + +ArenaTeam* ObjectMgr::GetArenaTeamById(uint32 arenateamid) const { ArenaTeamMap::const_iterator itr = mArenaTeamMap.find(arenateamid); if (itr != mArenaTeamMap.end()) @@ -257,9 +268,9 @@ void ObjectMgr::AddArenaTeam(ArenaTeam* arenaTeam) mArenaTeamMap[arenaTeam->GetId()] = arenaTeam; } -void ObjectMgr::RemoveArenaTeam(ArenaTeam* arenaTeam) +void ObjectMgr::RemoveArenaTeam(uint32 Id) { - mArenaTeamMap.erase( arenaTeam->GetId() ); + mArenaTeamMap.erase(Id); } CreatureInfo const* ObjectMgr::GetCreatureTemplate(uint32 id) diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 463caa2ff..3dd3adc7c 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -280,9 +280,10 @@ class ObjectMgr typedef UNORDERED_MAP ItemMap; typedef std::set< Group * > GroupSet; - typedef std::set< Guild * > GuildSet; - typedef UNORDERED_MAP ArenaTeamMap; + typedef UNORDERED_MAP GuildMap; + + typedef UNORDERED_MAP ArenaTeamMap; typedef UNORDERED_MAP QuestMap; @@ -311,17 +312,17 @@ class ObjectMgr void RemoveGroup(Group* group) { mGroupSet.erase( group ); } Guild* GetGuildByLeader(uint64 const&guid) const; - Guild* GetGuildById(const uint32 GuildId) const; + Guild* GetGuildById(uint32 GuildId) const; Guild* GetGuildByName(const std::string& guildname) const; - std::string GetGuildNameById(const uint32 GuildId) const; - void AddGuild(Guild* guild) { mGuildSet.insert( guild ); } - void RemoveGuild(Guild* guild) { mGuildSet.erase( guild ); } + std::string GetGuildNameById(uint32 GuildId) const; + void AddGuild(Guild* guild); + void RemoveGuild(uint32 Id); - ArenaTeam* GetArenaTeamById(const uint32 arenateamid) const; + ArenaTeam* GetArenaTeamById(uint32 arenateamid) const; ArenaTeam* GetArenaTeamByName(const std::string& arenateamname) const; ArenaTeam* GetArenaTeamByCaptain(uint64 const& guid) const; void AddArenaTeam(ArenaTeam* arenaTeam); - void RemoveArenaTeam(ArenaTeam* arenaTeam); + void RemoveArenaTeam(uint32 Id); ArenaTeamMap::iterator GetArenaTeamMapBegin() { return mArenaTeamMap.begin(); } ArenaTeamMap::iterator GetArenaTeamMapEnd() { return mArenaTeamMap.end(); } @@ -754,7 +755,7 @@ class ObjectMgr typedef std::set GameObjectForQuestSet; GroupSet mGroupSet; - GuildSet mGuildSet; + GuildMap mGuildMap; ArenaTeamMap mArenaTeamMap; ItemMap mItems; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8970454ca..ffc05b9d6 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7281" + #define REVISION_NR "7282" #endif // __REVISION_NR_H__ -- 2.11.4.GIT