mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[10281] Send proper account amount in guild in SMSG_GUILD_INFO packet.
Data seen for example in client command /guildinfo output. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
8b3fffb0ba
commit
6302659d58
5 changed files with 36 additions and 6 deletions
|
|
@ -40,6 +40,7 @@ Guild::Guild()
|
||||||
m_BorderStyle = 0;
|
m_BorderStyle = 0;
|
||||||
m_BorderColor = 0;
|
m_BorderColor = 0;
|
||||||
m_BackgroundColor = 0;
|
m_BackgroundColor = 0;
|
||||||
|
m_accountsNumber = 0;
|
||||||
|
|
||||||
m_CreatedDate = time(0);
|
m_CreatedDate = time(0);
|
||||||
|
|
||||||
|
|
@ -134,6 +135,7 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||||
|
|
||||||
if (pl)
|
if (pl)
|
||||||
{
|
{
|
||||||
|
newmember.accountId = pl->GetSession()->GetAccountId();
|
||||||
newmember.Name = pl->GetName();
|
newmember.Name = pl->GetName();
|
||||||
newmember.Level = pl->getLevel();
|
newmember.Level = pl->getLevel();
|
||||||
newmember.Class = pl->getClass();
|
newmember.Class = pl->getClass();
|
||||||
|
|
@ -141,8 +143,8 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 0 1 2 3
|
// 0 1 2 3 4
|
||||||
QueryResult *result = CharacterDatabase.PQuery("SELECT name,level,class,zone FROM characters WHERE guid = '%u'", GUID_LOPART(plGuid));
|
QueryResult *result = CharacterDatabase.PQuery("SELECT name,level,class,zone,account FROM characters WHERE guid = '%u'", GUID_LOPART(plGuid));
|
||||||
if (!result)
|
if (!result)
|
||||||
return false; // player doesn't exist
|
return false; // player doesn't exist
|
||||||
|
|
||||||
|
|
@ -151,6 +153,7 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||||
newmember.Level = fields[1].GetUInt8();
|
newmember.Level = fields[1].GetUInt8();
|
||||||
newmember.Class = fields[2].GetUInt8();
|
newmember.Class = fields[2].GetUInt8();
|
||||||
newmember.ZoneId = fields[3].GetUInt32();
|
newmember.ZoneId = fields[3].GetUInt32();
|
||||||
|
newmember.accountId = fields[4].GetInt32();
|
||||||
delete result;
|
delete result;
|
||||||
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL ||
|
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL ||
|
||||||
newmember.Class < CLASS_WARRIOR || newmember.Class >= MAX_CLASSES)
|
newmember.Class < CLASS_WARRIOR || newmember.Class >= MAX_CLASSES)
|
||||||
|
|
@ -184,6 +187,9 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||||
pl->SetRank(newmember.RankId);
|
pl->SetRank(newmember.RankId);
|
||||||
pl->SetGuildIdInvited(0);
|
pl->SetGuildIdInvited(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateAccountsNumber();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -382,6 +388,7 @@ bool Guild::LoadMembersFromDB(QueryResult *guildMembersResult)
|
||||||
newmember.Class = fields[21].GetUInt8();
|
newmember.Class = fields[21].GetUInt8();
|
||||||
newmember.ZoneId = fields[22].GetUInt32();
|
newmember.ZoneId = fields[22].GetUInt32();
|
||||||
newmember.LogoutTime = fields[23].GetUInt64();
|
newmember.LogoutTime = fields[23].GetUInt64();
|
||||||
|
newmember.accountId = fields[24].GetInt32();
|
||||||
|
|
||||||
// this code will remove not existing character guids from guild
|
// this code will remove not existing character guids from guild
|
||||||
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL) // can be at broken `data` field
|
if (newmember.Level < 1 || newmember.Level > STRONG_MAX_LEVEL) // can be at broken `data` field
|
||||||
|
|
@ -411,6 +418,8 @@ bool Guild::LoadMembersFromDB(QueryResult *guildMembersResult)
|
||||||
if (members.empty())
|
if (members.empty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
UpdateAccountsNumber();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -492,6 +501,9 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||||
}
|
}
|
||||||
|
|
||||||
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guid = '%u'", GUID_LOPART(guid));
|
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guid = '%u'", GUID_LOPART(guid));
|
||||||
|
|
||||||
|
if (!isDisbanding)
|
||||||
|
UpdateAccountsNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Guild::ChangeRank(uint64 guid, uint32 newRank)
|
void Guild::ChangeRank(uint64 guid, uint32 newRank)
|
||||||
|
|
@ -802,6 +814,20 @@ void Guild::UpdateLogoutTime(uint64 guid)
|
||||||
itr->second.LogoutTime = time(NULL);
|
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 (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
|
||||||
|
accountsIdSet.insert(itr->second.accountId);
|
||||||
|
|
||||||
|
m_accountsNumber = accountsIdSet.size();
|
||||||
|
}
|
||||||
|
|
||||||
// *************************************************
|
// *************************************************
|
||||||
// Guild Eventlog part
|
// Guild Eventlog part
|
||||||
// *************************************************
|
// *************************************************
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,7 @@ typedef std::vector<GuildItemPosCount> GuildItemPosCountVec;
|
||||||
|
|
||||||
struct MemberSlot
|
struct MemberSlot
|
||||||
{
|
{
|
||||||
|
uint32 accountId;
|
||||||
std::string Name;
|
std::string Name;
|
||||||
uint32 RankId;
|
uint32 RankId;
|
||||||
uint8 Level;
|
uint8 Level;
|
||||||
|
|
@ -323,6 +324,7 @@ class Guild
|
||||||
void SetEmblem(uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
|
void SetEmblem(uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
|
||||||
|
|
||||||
uint32 GetMemberSize() const { return members.size(); }
|
uint32 GetMemberSize() const { return members.size(); }
|
||||||
|
uint32 GetAccountsNumber() const { return m_accountsNumber; }
|
||||||
|
|
||||||
bool LoadGuildFromDB(QueryResult *guildDataResult);
|
bool LoadGuildFromDB(QueryResult *guildDataResult);
|
||||||
bool CheckGuildStructure();
|
bool CheckGuildStructure();
|
||||||
|
|
@ -442,6 +444,7 @@ class Guild
|
||||||
uint32 m_BorderStyle;
|
uint32 m_BorderStyle;
|
||||||
uint32 m_BorderColor;
|
uint32 m_BorderColor;
|
||||||
uint32 m_BackgroundColor;
|
uint32 m_BackgroundColor;
|
||||||
|
uint32 m_accountsNumber;
|
||||||
|
|
||||||
RankList m_Ranks;
|
RankList m_Ranks;
|
||||||
|
|
||||||
|
|
@ -465,6 +468,7 @@ class Guild
|
||||||
uint8 m_PurchasedTabs;
|
uint8 m_PurchasedTabs;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void UpdateAccountsNumber();
|
||||||
// used only from high level Swap/Move functions
|
// used only from high level Swap/Move functions
|
||||||
Item* GetItem(uint8 TabId, uint8 SlotId);
|
Item* GetItem(uint8 TabId, uint8 SlotId);
|
||||||
uint8 CanStoreItem( uint8 tab, uint8 slot, GuildItemPosCountVec& dest, uint32 count, Item *pItem, bool swap = false) const;
|
uint8 CanStoreItem( uint8 tab, uint8 slot, GuildItemPosCountVec& dest, uint32 count, Item *pItem, bool swap = false) const;
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
|
||||||
data << guild->GetName();
|
data << guild->GetName();
|
||||||
data << uint32(secsToTimeBitFields(guild->GetCreatedDate())); // 3.x (prev. day + month + year)
|
data << uint32(secsToTimeBitFields(guild->GetCreatedDate())); // 3.x (prev. day + month + year)
|
||||||
data << uint32(guild->GetMemberSize()); // amount of chars
|
data << uint32(guild->GetMemberSize()); // amount of chars
|
||||||
data << uint32(guild->GetMemberSize()); // amount of accounts (TODO: implement)
|
data << uint32(guild->GetAccountsNumber()); // amount of accounts
|
||||||
|
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3187,8 +3187,8 @@ void ObjectMgr::LoadGuilds()
|
||||||
"BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2,"
|
"BankResetTimeTab0,BankRemSlotsTab0,BankResetTimeTab1,BankRemSlotsTab1,BankResetTimeTab2,BankRemSlotsTab2,"
|
||||||
// 13 14 15 16 17 18
|
// 13 14 15 16 17 18
|
||||||
"BankResetTimeTab3,BankRemSlotsTab3,BankResetTimeTab4,BankRemSlotsTab4,BankResetTimeTab5,BankRemSlotsTab5,"
|
"BankResetTimeTab3,BankRemSlotsTab3,BankResetTimeTab4,BankRemSlotsTab4,BankResetTimeTab5,BankRemSlotsTab5,"
|
||||||
// 19 20 21 22 23
|
// 19 20 21 22 23 24
|
||||||
"characters.name, characters.level, characters.class, characters.zone, characters.logout_time "
|
"characters.name, characters.level, characters.class, characters.zone, characters.logout_time, characters.account "
|
||||||
"FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC");
|
"FROM guild_member LEFT JOIN characters ON characters.guid = guild_member.guid ORDER BY guildid ASC");
|
||||||
|
|
||||||
// load guild bank tab rights
|
// load guild bank tab rights
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10280"
|
#define REVISION_NR "10281"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue