[7282] Store guilds in map for fast search by id, some other guild/arenateam related cleanups.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
zhenya 2009-02-15 14:02:00 +03:00 committed by VladimirMangos
parent 1fb8a52032
commit cdfee0fdfc
5 changed files with 51 additions and 39 deletions

View file

@ -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_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.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", Id);
CharacterDatabase.CommitTransaction(); CharacterDatabase.CommitTransaction();
objmgr.RemoveArenaTeam(this); objmgr.RemoveArenaTeam(Id);
} }
void ArenaTeam::Roster(WorldSession *session) void ArenaTeam::Roster(WorldSession *session)
@ -312,7 +312,7 @@ void ArenaTeam::Roster(WorldSession *session)
data << uint32(GetMembersSize()); // members count data << uint32(GetMembersSize()); // members count
data << uint32(GetType()); // arena team type? 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); pl = objmgr.GetPlayer(itr->guid);
@ -370,7 +370,7 @@ void ArenaTeam::NotifyStatsChanged()
{ {
// this is called after a rated match ended // this is called after a rated match ended
// updates arena team stats for every member of the team (not only the ones who participated!) // 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); Player * plr = objmgr.GetPlayer(itr->guid);
if(plr) if(plr)
@ -443,7 +443,7 @@ void ArenaTeam::SetStats(uint32 stat_type, uint32 value)
void ArenaTeam::BroadcastPacket(WorldPacket *packet) 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); Player *player = objmgr.GetPlayer(itr->guid);
if(player) if(player)

View file

@ -691,7 +691,7 @@ void Guild::Disband()
CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid = '%u'",Id); CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid = '%u'",Id);
CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE guildid = '%u'",Id); CharacterDatabase.PExecute("DELETE FROM guild_eventlog WHERE guildid = '%u'",Id);
CharacterDatabase.CommitTransaction(); CharacterDatabase.CommitTransaction();
objmgr.RemoveGuild(this); objmgr.RemoveGuild(Id);
} }
void Guild::Roster(WorldSession *session) void Guild::Roster(WorldSession *session)
@ -703,7 +703,7 @@ void Guild::Roster(WorldSession *session)
data << GINFO; data << GINFO;
data << (uint32)m_ranks.size(); 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->rights;
data << (uint32)ritr->BankMoneyPerDay; // count of: withdraw gold(gold/day) Note: in game set gold, in packet set bronze. 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) 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))) 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 << Id;
data << name; data << name;
RankList::iterator itr;
for (size_t i = 0 ; i < 10; ++i) // show always 10 ranks for (size_t i = 0 ; i < 10; ++i) // show always 10 ranks
{ {
if(i < m_ranks.size()) if(i < m_ranks.size())
@ -1005,7 +1005,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
AppendDisplayGuildBankSlot(data, tab, 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)); Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER));
if(!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) for(GuildItemPosCountVec::const_iterator itr = slots.begin(); itr != slots.end(); ++itr)
AppendDisplayGuildBankSlot(data, tab, itr->slot); 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)); Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER));
if(!player) if(!player)

View file

@ -170,8 +170,9 @@ ObjectMgr::~ObjectMgr()
// free group and guild objects // free group and guild objects
for (GroupSet::iterator itr = mGroupSet.begin(); itr != mGroupSet.end(); ++itr) for (GroupSet::iterator itr = mGroupSet.begin(); itr != mGroupSet.end(); ++itr)
delete (*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) for (CacheVendorItemMap::iterator itr = m_mCacheVendorItemMap.begin(); itr != m_mCacheVendorItemMap.end(); ++itr)
itr->second.Clear(); itr->second.Clear();
@ -189,43 +190,53 @@ Group * ObjectMgr::GetGroupByLeader(const uint64 &guid) const
return NULL; 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) GuildMap::const_iterator itr = mGuildMap.find(GuildId);
if ((*itr)->GetId() == GuildId) if (itr != mGuildMap.end())
return *itr; return itr->second;
return NULL; return NULL;
} }
Guild * ObjectMgr::GetGuildByName(const std::string& guildname) const Guild * ObjectMgr::GetGuildByName(const std::string& guildname) const
{ {
for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) for(GuildMap::const_iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr)
if ((*itr)->GetName() == guildname) if (itr->second->GetName() == guildname)
return *itr; return itr->second;
return NULL; 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) GuildMap::const_iterator itr = mGuildMap.find(GuildId);
if ((*itr)->GetId() == GuildId) if (itr != mGuildMap.end())
return (*itr)->GetName(); return itr->second->GetName();
return ""; return "";
} }
Guild* ObjectMgr::GetGuildByLeader(const uint64 &guid) const Guild* ObjectMgr::GetGuildByLeader(const uint64 &guid) const
{ {
for(GuildSet::const_iterator itr = mGuildSet.begin(); itr != mGuildSet.end(); ++itr) for(GuildMap::const_iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr)
if( (*itr)->GetLeader() == guid) if (itr->second->GetLeader() == guid)
return *itr; return itr->second;
return NULL; 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); ArenaTeamMap::const_iterator itr = mArenaTeamMap.find(arenateamid);
if (itr != mArenaTeamMap.end()) if (itr != mArenaTeamMap.end())
@ -257,9 +268,9 @@ void ObjectMgr::AddArenaTeam(ArenaTeam* arenaTeam)
mArenaTeamMap[arenaTeam->GetId()] = 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) CreatureInfo const* ObjectMgr::GetCreatureTemplate(uint32 id)

View file

@ -280,9 +280,10 @@ class ObjectMgr
typedef UNORDERED_MAP<uint32, Item*> ItemMap; typedef UNORDERED_MAP<uint32, Item*> ItemMap;
typedef std::set< Group * > GroupSet; typedef std::set< Group * > GroupSet;
typedef std::set< Guild * > GuildSet;
typedef UNORDERED_MAP<uint32, ArenaTeam* > ArenaTeamMap; typedef UNORDERED_MAP<uint32, Guild *> GuildMap;
typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamMap;
typedef UNORDERED_MAP<uint32, Quest*> QuestMap; typedef UNORDERED_MAP<uint32, Quest*> QuestMap;
@ -311,17 +312,17 @@ class ObjectMgr
void RemoveGroup(Group* group) { mGroupSet.erase( group ); } void RemoveGroup(Group* group) { mGroupSet.erase( group ); }
Guild* GetGuildByLeader(uint64 const&guid) const; Guild* GetGuildByLeader(uint64 const&guid) const;
Guild* GetGuildById(const uint32 GuildId) const; Guild* GetGuildById(uint32 GuildId) const;
Guild* GetGuildByName(const std::string& guildname) const; Guild* GetGuildByName(const std::string& guildname) const;
std::string GetGuildNameById(const uint32 GuildId) const; std::string GetGuildNameById(uint32 GuildId) const;
void AddGuild(Guild* guild) { mGuildSet.insert( guild ); } void AddGuild(Guild* guild);
void RemoveGuild(Guild* guild) { mGuildSet.erase( guild ); } void RemoveGuild(uint32 Id);
ArenaTeam* GetArenaTeamById(const uint32 arenateamid) const; ArenaTeam* GetArenaTeamById(uint32 arenateamid) const;
ArenaTeam* GetArenaTeamByName(const std::string& arenateamname) const; ArenaTeam* GetArenaTeamByName(const std::string& arenateamname) const;
ArenaTeam* GetArenaTeamByCaptain(uint64 const& guid) const; ArenaTeam* GetArenaTeamByCaptain(uint64 const& guid) const;
void AddArenaTeam(ArenaTeam* arenaTeam); void AddArenaTeam(ArenaTeam* arenaTeam);
void RemoveArenaTeam(ArenaTeam* arenaTeam); void RemoveArenaTeam(uint32 Id);
ArenaTeamMap::iterator GetArenaTeamMapBegin() { return mArenaTeamMap.begin(); } ArenaTeamMap::iterator GetArenaTeamMapBegin() { return mArenaTeamMap.begin(); }
ArenaTeamMap::iterator GetArenaTeamMapEnd() { return mArenaTeamMap.end(); } ArenaTeamMap::iterator GetArenaTeamMapEnd() { return mArenaTeamMap.end(); }
@ -754,7 +755,7 @@ class ObjectMgr
typedef std::set<uint32> GameObjectForQuestSet; typedef std::set<uint32> GameObjectForQuestSet;
GroupSet mGroupSet; GroupSet mGroupSet;
GuildSet mGuildSet; GuildMap mGuildMap;
ArenaTeamMap mArenaTeamMap; ArenaTeamMap mArenaTeamMap;
ItemMap mItems; ItemMap mItems;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7281" #define REVISION_NR "7282"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__