aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds
diff options
context:
space:
mode:
authorBrian <runningnak3d@gmail.com>2010-07-28 17:19:39 -0600
committerBrian <runningnak3d@gmail.com>2010-07-28 17:19:39 -0600
commit22d75dabdaeb19e849d05c8e5277d92589a77978 (patch)
treecdfa811d6b9ab27f6f18d5b426c8439b3279949c /src/server/game/Guilds
parent1b382e5858fdaad7954e0486b23297d84ff57b39 (diff)
* Send the proper number of accounts in a guild in the SMSG_GUILD_INFO packet
* Patch by Toinan67 --HG-- branch : trunk
Diffstat (limited to 'src/server/game/Guilds')
-rw-r--r--src/server/game/Guilds/Guild.cpp38
-rw-r--r--src/server/game/Guilds/Guild.h4
2 files changed, 36 insertions, 6 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index f1f3187bc32..6937db14e88 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -43,6 +43,7 @@ Guild::Guild()
m_BorderStyle = 0;
m_BorderColor = 0;
m_BackgroundColor = 0;
+ m_accountsNumber = 0;
m_CreatedDate = time(0);
@@ -136,6 +137,7 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
if (pl)
{
+ newmember.accountId = pl->GetSession()->GetAccountId();
newmember.Name = pl->GetName();
newmember.ZoneId = pl->GetZoneId();
newmember.Level = pl->getLevel();
@@ -143,15 +145,16 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
}
else
{
- QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT name,zone,level,class FROM characters WHERE guid = '%u'", GUID_LOPART(plGuid));
+ QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT name,zone,level,class,account FROM characters WHERE guid = '%u'", GUID_LOPART(plGuid));
if (!result)
return false; // player doesn't exist
- Field *fields = result->Fetch();
- newmember.Name = fields[0].GetCppString();
- newmember.ZoneId = fields[1].GetUInt32();
- newmember.Level = fields[2].GetUInt8();
- newmember.Class = fields[3].GetUInt8();
+ Field *fields = result->Fetch();
+ newmember.Name = fields[0].GetCppString();
+ newmember.ZoneId = fields[1].GetUInt32();
+ newmember.Level = fields[2].GetUInt8();
+ newmember.Class = fields[3].GetUInt8();
+ newmember.accountId = fields[4].GetInt32();
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL ||
newmember.Class < CLASS_WARRIOR || newmember.Class >= MAX_CLASSES)
@@ -185,6 +188,9 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
pl->SetRank(newmember.RankId);
pl->SetGuildIdInvited(0);
}
+
+ UpdateAccountsNumber();
+
return true;
}
@@ -340,6 +346,8 @@ bool Guild::LoadMembersFromDB(QueryResult_AutoPtr guildMembersResult)
if (!guildMembersResult)
return false;
+ UpdateAccountsNumber();
+
do
{
Field *fields = guildMembersResult->Fetch();
@@ -382,6 +390,7 @@ bool Guild::LoadMembersFromDB(QueryResult_AutoPtr guildMembersResult)
newmember.Class = fields[21].GetUInt8();
newmember.ZoneId = fields[22].GetUInt32();
newmember.LogoutTime = fields[23].GetUInt64();
+ newmember.accountId = fields[24].GetInt32();
//this code will remove unexisting character guids from guild
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL) // can be at broken `data` field
@@ -492,6 +501,9 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
}
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guid = '%u'", GUID_LOPART(guid));
+
+ if (!isDisbanding)
+ UpdateAccountsNumber();
}
void Guild::ChangeRank(uint64 guid, uint32 newRank)
@@ -801,6 +813,20 @@ void Guild::UpdateLogoutTime(uint64 guid)
itr->second.LogoutTime = time(NULL);
}
+/**
+ * Updates the number of accounts that are in the guild
+ * A player may have many characters in the guild, but with the same account
+ */
+void Guild::UpdateAccountsNumber()
+{
+ // We use a set to be sure each element will be unique
+ std::set<uint32> accountsIdSet;
+ for (MembersList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
+ accountsIdSet.insert(itr->second.accountId);
+
+ m_accountsNumber = accountsIdSet.size();
+}
+
// *************************************************
// Guild Eventlog part
// *************************************************
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 4a9121dedff..e4d02f20758 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -250,6 +250,7 @@ typedef std::vector<GuildItemPosCount> GuildItemPosCountVec;
struct MemberSlot
{
uint64 LogoutTime;
+ uint32 accountId;
std::string Name;
std::string Pnote;
std::string OFFnote;
@@ -322,6 +323,7 @@ class Guild
void SetEmblem(uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
uint32 GetMemberSize() const { return members.size(); }
+ uint32 GetAccountsNumber() const { return m_accountsNumber; }
bool LoadGuildFromDB(QueryResult_AutoPtr guildDataResult);
bool CheckGuildStructure();
@@ -441,6 +443,7 @@ class Guild
uint32 m_BorderStyle;
uint32 m_BorderColor;
uint32 m_BackgroundColor;
+ uint32 m_accountsNumber;
RankList m_Ranks;
@@ -464,6 +467,7 @@ class Guild
uint8 m_PurchasedTabs;
private:
+ void UpdateAccountsNumber();
// used only from high level Swap/Move functions
Item* GetItem(uint8 TabId, uint8 SlotId);
uint8 CanStoreItem(uint8 tab, uint8 slot, GuildItemPosCountVec& dest, uint32 count, Item *pItem, bool swap = false) const;