mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Guilds: Implemented reordering guild ranks
This commit is contained in:
@@ -1994,6 +1994,46 @@ void Guild::HandleRemoveRank(WorldSession* session, GuildRankOrder rankOrder)
|
||||
BroadcastPacket(eventPacket.Write());
|
||||
}
|
||||
|
||||
void Guild::HandleShiftRank(WorldSession* session, GuildRankOrder rankOrder, bool shiftUp)
|
||||
{
|
||||
// Only leader can modify ranks
|
||||
if (!_IsLeader(session->GetPlayer()))
|
||||
return;
|
||||
|
||||
GuildRankOrder otherRankOrder = GuildRankOrder(AsUnderlyingType(rankOrder) + (shiftUp ? -1 : 1));
|
||||
|
||||
RankInfo* rankInfo = GetRankInfo(rankOrder);
|
||||
RankInfo* otherRankInfo = GetRankInfo(otherRankOrder);
|
||||
if (!rankInfo || !otherRankInfo)
|
||||
return;
|
||||
|
||||
// can't shift guild master rank (rank id = 0) - there's already a client-side limitation for it so that's just a safe-guard
|
||||
if (rankInfo->GetId() == GuildRankId::GuildMaster || otherRankInfo->GetId() == GuildRankId::GuildMaster)
|
||||
return;
|
||||
|
||||
rankInfo->SetOrder(otherRankOrder);
|
||||
otherRankInfo->SetOrder(rankOrder);
|
||||
|
||||
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_ORDER);
|
||||
stmt->setUInt8(0, AsUnderlyingType(rankInfo->GetOrder()));
|
||||
stmt->setUInt8(1, AsUnderlyingType(rankInfo->GetId()));
|
||||
stmt->setUInt64(2, m_id);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_RANK_ORDER);
|
||||
stmt->setUInt8(0, AsUnderlyingType(otherRankInfo->GetOrder()));
|
||||
stmt->setUInt8(1, AsUnderlyingType(otherRankInfo->GetId()));
|
||||
stmt->setUInt64(2, m_id);
|
||||
trans->Append(stmt);
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
// force client to re-request SMSG_GUILD_RANKS
|
||||
BroadcastPacket(WorldPackets::Guild::GuildEventRanksUpdated().Write());
|
||||
}
|
||||
|
||||
void Guild::HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow /*=false*/)
|
||||
{
|
||||
// guild bank cannot have more than MAX_MONEY_AMOUNT
|
||||
|
||||
@@ -755,6 +755,7 @@ class TC_GAME_API Guild
|
||||
void HandleSetMemberRank(WorldSession* session, ObjectGuid guid, ObjectGuid setterGuid, GuildRankOrder rank);
|
||||
void HandleAddNewRank(WorldSession* session, std::string const& name);
|
||||
void HandleRemoveRank(WorldSession* session, GuildRankOrder rankOrder);
|
||||
void HandleShiftRank(WorldSession* session, GuildRankOrder rankOrder, bool shiftUp);
|
||||
void HandleMemberDepositMoney(WorldSession* session, uint64 amount, bool cashFlow = false);
|
||||
bool HandleMemberWithdrawMoney(WorldSession* session, uint64 amount, bool repair = false);
|
||||
void HandleMemberLogout(WorldSession* session);
|
||||
|
||||
@@ -166,6 +166,14 @@ void WorldSession::HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& p
|
||||
guild->HandleRemoveRank(this, GuildRankOrder(packet.RankOrder));
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildShiftRank(WorldPackets::Guild::GuildShiftRank& shiftRank)
|
||||
{
|
||||
TC_LOG_DEBUG("guild", "CMSG_GUILD_SHIFT_RANK [%s]: RankOrder: %u, ShiftUp: %s", GetPlayerInfo().c_str(), shiftRank.RankOrder, shiftRank.ShiftUp ? "true" : "false");
|
||||
|
||||
if (Guild* guild = GetPlayer()->GetGuild())
|
||||
guild->HandleShiftRank(this, GuildRankOrder(shiftRank.RankOrder), shiftRank.ShiftUp);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet)
|
||||
{
|
||||
TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), packet.InfoText.c_str());
|
||||
|
||||
@@ -486,7 +486,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_GUILD_SET_GUILD_MASTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetGuildMaster);
|
||||
DEFINE_HANDLER(CMSG_GUILD_SET_MEMBER_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetMemberNote);
|
||||
DEFINE_HANDLER(CMSG_GUILD_SET_RANK_PERMISSIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetRankPermissions);
|
||||
DEFINE_HANDLER(CMSG_GUILD_SHIFT_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_GUILD_SHIFT_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildShiftRank);
|
||||
DEFINE_HANDLER(CMSG_GUILD_UPDATE_INFO_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildUpdateInfoText);
|
||||
DEFINE_HANDLER(CMSG_GUILD_UPDATE_MOTD_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildUpdateMotdText);
|
||||
DEFINE_HANDLER(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthAndResurrect);
|
||||
|
||||
@@ -362,6 +362,7 @@ namespace WorldPackets
|
||||
class GuildGetRanks;
|
||||
class GuildAddRank;
|
||||
class GuildDeleteRank;
|
||||
class GuildShiftRank;
|
||||
class GuildUpdateInfoText;
|
||||
class GuildSetMemberNote;
|
||||
class GuildEventLogQuery;
|
||||
@@ -1374,6 +1375,7 @@ class TC_GAME_API WorldSession
|
||||
void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet);
|
||||
void HandleGuildAddRank(WorldPackets::Guild::GuildAddRank& packet);
|
||||
void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet);
|
||||
void HandleGuildShiftRank(WorldPackets::Guild::GuildShiftRank& shiftRank);
|
||||
void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet);
|
||||
void HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& packet);
|
||||
void HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState& packet);
|
||||
|
||||
Reference in New Issue
Block a user