fix(CORE/Commands): .Pinfo - Show guild informations (#1775)

* fix(CORE/Commands): .Pinfo
*Now you can see Guild Name, Guild Rank, Note, Officer  Note And Xp - Total Xp

* Renamed inappropriate variable names
* Add Guild related informations
This commit is contained in:
IntelligentQuantum
2019-05-01 05:36:32 +04:30
committed by Poszer
parent 3e071ea740
commit e56c8e07ce
5 changed files with 83 additions and 36 deletions

View File

@@ -147,6 +147,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_INS_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_GUILD_MEMBER, "INSERT INTO guild_member (guildid, guid, rank, pnote, offnote) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?", CONNECTION_ASYNC); // 0: uint32 PrepareStatement(CHAR_DEL_GUILD_MEMBER, "DELETE FROM guild_member WHERE guid = ?", CONNECTION_ASYNC); // 0: uint32
PrepareStatement(CHAR_DEL_GUILD_MEMBERS, "DELETE FROM guild_member WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint32 PrepareStatement(CHAR_DEL_GUILD_MEMBERS, "DELETE FROM guild_member WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint32
PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gm.pnote, gm.offnote "
"FROM guild g JOIN guild_member gm ON g.guildid = gm.guildid "
"JOIN guild_rank gr ON g.guildid = gr.guildid AND gm.`rank` = gr.rid WHERE gm.guid = ?", CONNECTION_BOTH);
// 0: uint32, 1: uint8, 3: string, 4: uint32, 5: uint32 // 0: uint32, 1: uint8, 3: string, 4: uint32, 5: uint32
PrepareStatement(CHAR_INS_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights, BankMoneyPerDay) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_GUILD_RANK, "INSERT INTO guild_rank (guildid, rid, rname, rights, BankMoneyPerDay) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint32 PrepareStatement(CHAR_DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?", CONNECTION_ASYNC); // 0: uint32

View File

@@ -143,6 +143,7 @@ enum CharacterDatabaseStatements
CHAR_INS_GUILD_MEMBER, CHAR_INS_GUILD_MEMBER,
CHAR_DEL_GUILD_MEMBER, CHAR_DEL_GUILD_MEMBER,
CHAR_DEL_GUILD_MEMBERS, CHAR_DEL_GUILD_MEMBERS,
CHAR_SEL_GUILD_MEMBER_EXTENDED,
CHAR_INS_GUILD_RANK, CHAR_INS_GUILD_RANK,
CHAR_DEL_GUILD_RANKS, CHAR_DEL_GUILD_RANKS,
CHAR_DEL_GUILD_LOWEST_RANK, CHAR_DEL_GUILD_LOWEST_RANK,

View File

@@ -80,4 +80,6 @@ void WorldDatabaseConnection::DoPrepareStatements()
PrepareStatement(WORLD_DEL_DISABLES, "DELETE FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_DEL_DISABLES, "DELETE FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_UPD_CREATURE_ZONE_AREA_DATA, "UPDATE creature SET zoneId = ?, areaId = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_CREATURE_ZONE_AREA_DATA, "UPDATE creature SET zoneId = ?, areaId = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(WORLD_UPD_GAMEOBJECT_ZONE_AREA_DATA, "UPDATE gameobject SET zoneId = ?, areaId = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_GAMEOBJECT_ZONE_AREA_DATA, "UPDATE gameobject SET zoneId = ?, areaId = ? WHERE guid = ?", CONNECTION_ASYNC);
// 0: uint8
PrepareStatement(WORLD_SEL_REQ_XP, "SELECT Experience FROM player_xp_for_level WHERE Level = ?", CONNECTION_SYNCH);
} }

View File

@@ -101,6 +101,7 @@ enum WorldDatabaseStatements
WORLD_DEL_DISABLES, WORLD_DEL_DISABLES,
WORLD_UPD_CREATURE_ZONE_AREA_DATA, WORLD_UPD_CREATURE_ZONE_AREA_DATA,
WORLD_UPD_GAMEOBJECT_ZONE_AREA_DATA, WORLD_UPD_GAMEOBJECT_ZONE_AREA_DATA,
WORLD_SEL_REQ_XP,
MAX_WORLDDATABASE_STATEMENTS MAX_WORLDDATABASE_STATEMENTS
}; };

View File

@@ -1755,6 +1755,7 @@ public:
// Account data print variables // Account data print variables
std::string userName = handler->GetTrinityString(LANG_ERROR); std::string userName = handler->GetTrinityString(LANG_ERROR);
uint32 lowguid = GUID_LOPART(targetGuid);
uint32 accId = 0; uint32 accId = 0;
std::string eMail = handler->GetTrinityString(LANG_ERROR); std::string eMail = handler->GetTrinityString(LANG_ERROR);
std::string regMail = handler->GetTrinityString(LANG_ERROR); std::string regMail = handler->GetTrinityString(LANG_ERROR);
@@ -1835,12 +1836,12 @@ public:
// Query informations from the DB // Query informations from the DB
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO); stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PINFO);
stmt->setUInt32(0, GUID_LOPART(targetGuid)); stmt->setUInt32(0, GUID_LOPART(targetGuid));
PreparedQueryResult result = CharacterDatabase.Query(stmt); PreparedQueryResult charInfoResult = CharacterDatabase.Query(stmt);
if (!result) if (!charInfoResult)
return false; return false;
Field* fields = result->Fetch(); Field* fields = charInfoResult->Fetch();
totalPlayerTime = fields[0].GetUInt32(); totalPlayerTime = fields[0].GetUInt32();
level = fields[1].GetUInt8(); level = fields[1].GetUInt8();
money = fields[2].GetUInt32(); money = fields[2].GetUInt32();
@@ -1863,11 +1864,11 @@ public:
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO); stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO);
stmt->setInt32(0, int32(realmID)); stmt->setInt32(0, int32(realmID));
stmt->setUInt32(1, accId); stmt->setUInt32(1, accId);
PreparedQueryResult result = LoginDatabase.Query(stmt); PreparedQueryResult accInfoResult = LoginDatabase.Query(stmt);
if (result) if (accInfoResult)
{ {
Field* fields = result->Fetch(); Field* fields = accInfoResult->Fetch();
userName = fields[0].GetString(); userName = fields[0].GetString();
security = fields[1].GetUInt8(); security = fields[1].GetUInt8();
@@ -1923,25 +1924,64 @@ public:
std::string nameLink = handler->playerLink(targetName); std::string nameLink = handler->playerLink(targetName);
// Returns banType, banTime, bannedBy, banreason // Returns banType, banTime, bannedBy, banreason
PreparedStatement* stmt2 = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO_BANS); PreparedStatement* banQuery = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO_BANS);
stmt2->setUInt32(0, accId); banQuery->setUInt32(0, accId);
PreparedQueryResult result2 = LoginDatabase.Query(stmt2); PreparedQueryResult accBannedResult = LoginDatabase.Query(banQuery);
if (!result2) if (!accBannedResult)
{ {
banType = handler->GetTrinityString(LANG_CHARACTER); banType = handler->GetTrinityString(LANG_CHARACTER);
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_BANS); stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_BANS);
stmt->setUInt32(0, GUID_LOPART(targetGuid)); stmt->setUInt32(0, GUID_LOPART(targetGuid));
result2 = CharacterDatabase.Query(stmt); accBannedResult = CharacterDatabase.Query(stmt);
} }
if (result2) if (accBannedResult)
{ {
Field* fields = result2->Fetch(); Field* fields = accBannedResult->Fetch();
banTime = int64(fields[1].GetUInt64() ? 0 : fields[0].GetUInt32()); banTime = int64(fields[1].GetUInt64() ? 0 : fields[0].GetUInt32());
bannedBy = fields[2].GetString(); bannedBy = fields[2].GetString();
banReason = fields[3].GetString(); banReason = fields[3].GetString();
} }
// Can be used to query data from World database
PreparedStatement* xpQuery = WorldDatabase.GetPreparedStatement(WORLD_SEL_REQ_XP);
xpQuery->setUInt8(0, level);
PreparedQueryResult xpResult = WorldDatabase.Query(xpQuery);
if (xpResult)
{
Field* fields = xpResult->Fetch();
xptotal = fields[0].GetUInt32();
}
// Can be used to query data from Characters database
PreparedStatement* charXpQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_XP);
charXpQuery->setUInt32(0, lowguid);
PreparedQueryResult charXpResult = CharacterDatabase.Query(charXpQuery);
if (charXpResult)
{
Field* fields = charXpResult->Fetch();
xp = fields[0].GetUInt32();
uint32 gguid = fields[1].GetUInt32();
if (gguid != 0)
{
PreparedStatement* guildQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED);
guildQuery->setUInt32(0, lowguid);
PreparedQueryResult guildInfoResult = CharacterDatabase.Query(guildQuery);
if (guildInfoResult)
{
Field* fields = guildInfoResult->Fetch();
guildId = fields[0].GetUInt32();
guildName = fields[1].GetString();
guildRank = fields[2].GetString();
note = fields[3].GetString();
officeNote = fields[4].GetString();
}
}
}
// Initiate output // Initiate output
// Output I. LANG_PINFO_PLAYER // Output I. LANG_PINFO_PLAYER
handler->PSendSysMessage(LANG_PINFO_PLAYER, target ? "" : handler->GetTrinityString(LANG_OFFLINE), nameLink.c_str(), GUID_LOPART(targetGuid)); handler->PSendSysMessage(LANG_PINFO_PLAYER, target ? "" : handler->GetTrinityString(LANG_OFFLINE), nameLink.c_str(), GUID_LOPART(targetGuid));
@@ -2103,12 +2143,12 @@ public:
// Mail Data - an own query, because it may or may not be useful. // Mail Data - an own query, because it may or may not be useful.
// SQL: "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?" // SQL: "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?"
PreparedStatement* stmt4 = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_MAILS); PreparedStatement* mailQuery = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PINFO_MAILS);
stmt4->setUInt32(0, GUID_LOPART(targetGuid)); mailQuery->setUInt32(0, GUID_LOPART(targetGuid));
PreparedQueryResult result6 = CharacterDatabase.Query(stmt4); PreparedQueryResult mailInfoResult = CharacterDatabase.Query(mailQuery);
if (result6) if (mailInfoResult)
{ {
Field* fields = result6->Fetch(); Field* fields = mailInfoResult->Fetch();
uint32 readmail = uint32(fields[0].GetDouble()); uint32 readmail = uint32(fields[0].GetDouble());
uint32 totalmail = uint32(fields[1].GetUInt64()); uint32 totalmail = uint32(fields[1].GetUInt64());