mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[9353] Some fixes to guild/arenateam events.
This commit is contained in:
parent
1aa6c8eac9
commit
0bd88dd55a
12 changed files with 317 additions and 347 deletions
|
|
@ -294,9 +294,8 @@ void ArenaTeam::Disband(WorldSession *session)
|
||||||
// event
|
// event
|
||||||
if (session)
|
if (session)
|
||||||
{
|
{
|
||||||
WorldPacket data;
|
// probably only 1 string required...
|
||||||
session->BuildArenaTeamEventPacket(&data, ERR_ARENA_TEAM_DISBANDED_S, 2, session->GetPlayerName(), GetName(), "");
|
BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName(), GetName(), "");
|
||||||
BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!m_members.empty())
|
while (!m_members.empty())
|
||||||
|
|
@ -307,7 +306,7 @@ void ArenaTeam::Disband(WorldSession *session)
|
||||||
|
|
||||||
CharacterDatabase.BeginTransaction();
|
CharacterDatabase.BeginTransaction();
|
||||||
CharacterDatabase.PExecute("DELETE FROM arena_team WHERE arenateamid = '%u'", m_TeamId);
|
CharacterDatabase.PExecute("DELETE FROM arena_team WHERE arenateamid = '%u'", m_TeamId);
|
||||||
CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u'", m_TeamId); //< this should be alredy done by calling DelMember(memberGuids[j]); for each member
|
CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u'", m_TeamId); //< this should be already done by calling DelMember(memberGuids[j]); for each member
|
||||||
CharacterDatabase.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", m_TeamId);
|
CharacterDatabase.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", m_TeamId);
|
||||||
CharacterDatabase.CommitTransaction();
|
CharacterDatabase.CommitTransaction();
|
||||||
sObjectMgr.RemoveArenaTeam(m_TeamId);
|
sObjectMgr.RemoveArenaTeam(m_TeamId);
|
||||||
|
|
@ -464,6 +463,37 @@ void ArenaTeam::BroadcastPacket(WorldPacket *packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ArenaTeam::BroadcastEvent(ArenaTeamEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3)
|
||||||
|
{
|
||||||
|
WorldPacket data(SMSG_ARENA_TEAM_EVENT, 1+1+1);
|
||||||
|
data << uint8(event);
|
||||||
|
data << uint8(strCount);
|
||||||
|
switch(strCount)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
data << str1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
data << str1 << str2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
data << str1 << str2 << str3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sLog.outError("Unhandled strCount %u in ArenaTeam::BroadcastEvent", strCount);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(guid)
|
||||||
|
data << uint64(guid);
|
||||||
|
|
||||||
|
BroadcastPacket(&data);
|
||||||
|
|
||||||
|
sLog.outDebug("WORLD: Sent SMSG_ARENA_TEAM_EVENT");
|
||||||
|
}
|
||||||
|
|
||||||
uint8 ArenaTeam::GetSlotByType( uint32 type )
|
uint8 ArenaTeam::GetSlotByType( uint32 type )
|
||||||
{
|
{
|
||||||
switch(type)
|
switch(type)
|
||||||
|
|
@ -494,7 +524,7 @@ uint32 ArenaTeam::GetPoints(uint32 MemberRating)
|
||||||
|
|
||||||
uint32 rating = MemberRating + 150 < m_stats.rating ? MemberRating : m_stats.rating;
|
uint32 rating = MemberRating + 150 < m_stats.rating ? MemberRating : m_stats.rating;
|
||||||
|
|
||||||
if(rating<=1500)
|
if(rating <= 1500)
|
||||||
points = (float)rating * 0.22f + 14.0f;
|
points = (float)rating * 0.22f + 14.0f;
|
||||||
else
|
else
|
||||||
points = 1511.26f / (1.0f + 1639.28f * exp(-0.00412f * (float)rating));
|
points = 1511.26f / (1.0f + 1639.28f * exp(-0.00412f * (float)rating));
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,12 @@ enum ArenaTeamCommandTypes
|
||||||
{
|
{
|
||||||
ERR_ARENA_TEAM_CREATE_S = 0x00,
|
ERR_ARENA_TEAM_CREATE_S = 0x00,
|
||||||
ERR_ARENA_TEAM_INVITE_SS = 0x01,
|
ERR_ARENA_TEAM_INVITE_SS = 0x01,
|
||||||
//ERR_ARENA_TEAM_QUIT_S = 0x02,
|
|
||||||
ERR_ARENA_TEAM_QUIT_S = 0x03,
|
ERR_ARENA_TEAM_QUIT_S = 0x03,
|
||||||
ERR_ARENA_TEAM_FOUNDER_S = 0x0C // need check, probably wrong...
|
ERR_ARENA_TEAM_FOUNDER_S = 0x0E
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ArenaTeamCommandErrors
|
enum ArenaTeamCommandErrors
|
||||||
{
|
{
|
||||||
//ARENA_TEAM_PLAYER_NO_MORE_IN_ARENA_TEAM = 0x00,
|
|
||||||
ERR_ARENA_TEAM_INTERNAL = 0x01,
|
ERR_ARENA_TEAM_INTERNAL = 0x01,
|
||||||
ERR_ALREADY_IN_ARENA_TEAM = 0x02,
|
ERR_ALREADY_IN_ARENA_TEAM = 0x02,
|
||||||
ERR_ALREADY_IN_ARENA_TEAM_S = 0x03,
|
ERR_ALREADY_IN_ARENA_TEAM_S = 0x03,
|
||||||
|
|
@ -44,8 +42,12 @@ enum ArenaTeamCommandErrors
|
||||||
ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS = 0x0A,
|
ERR_ARENA_TEAM_PLAYER_NOT_IN_TEAM_SS = 0x0A,
|
||||||
ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S = 0x0B,
|
ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S = 0x0B,
|
||||||
ERR_ARENA_TEAM_NOT_ALLIED = 0x0C,
|
ERR_ARENA_TEAM_NOT_ALLIED = 0x0C,
|
||||||
ERR_ARENA_TEAM_PLAYER_TO_LOW = 0x15,
|
ERR_ARENA_TEAM_IGNORING_YOU_S = 0x13,
|
||||||
ERR_ARENA_TEAM_FULL = 0x16
|
ERR_ARENA_TEAM_TARGET_TOO_LOW_S = 0x15,
|
||||||
|
ERR_ARENA_TEAM_TARGET_TOO_HIGH_S = 0x16,
|
||||||
|
ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S = 0x17,
|
||||||
|
ERR_ARENA_TEAM_NOT_FOUND = 0x1B,
|
||||||
|
ERR_ARENA_TEAMS_LOCKED = 0x1E
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ArenaTeamEvents
|
enum ArenaTeamEvents
|
||||||
|
|
@ -186,6 +188,7 @@ class ArenaTeam
|
||||||
void SaveToDB();
|
void SaveToDB();
|
||||||
|
|
||||||
void BroadcastPacket(WorldPacket *packet);
|
void BroadcastPacket(WorldPacket *packet);
|
||||||
|
void BroadcastEvent(ArenaTeamEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3);
|
||||||
|
|
||||||
void Roster(WorldSession *session);
|
void Roster(WorldSession *session);
|
||||||
void Query(WorldSession *session);
|
void Query(WorldSession *session);
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||||
|
|
||||||
if(player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
if(player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", player->GetName(), ERR_ARENA_TEAM_PLAYER_TO_LOW);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", player->GetName(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -134,7 +134,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket & recv_data)
|
||||||
|
|
||||||
if(arenateam->GetMembersSize() >= arenateam->GetType() * 2)
|
if(arenateam->GetMembersSize() >= arenateam->GetType() * 2)
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,arenateam->GetName(),"",ERR_ARENA_TEAM_FULL);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, arenateam->GetName(), "", ERR_ARENA_TEAM_TOO_MANY_MEMBERS_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,26 +160,27 @@ void WorldSession::HandleArenaTeamAcceptOpcode(WorldPacket & /*recv_data*/)
|
||||||
|
|
||||||
if(_player->GetArenaTeamId(at->GetSlot()))
|
if(_player->GetArenaTeamId(at->GetSlot()))
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ALREADY_IN_ARENA_TEAM); // already in arena team that size
|
// already in arena team that size
|
||||||
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ALREADY_IN_ARENA_TEAM);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(at->GetCaptain()))
|
if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(at->GetCaptain()))
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ARENA_TEAM_NOT_ALLIED);// not let enemies sign petition
|
// not let enemies sign petition
|
||||||
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!at->AddMember(_player->GetGUID()))
|
if(!at->AddMember(_player->GetGUID()))
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ARENA_TEAM_INTERNAL);// arena team not found
|
// arena team not found
|
||||||
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ARENA_TEAM_INTERNAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// event
|
// event
|
||||||
WorldPacket data;
|
at->BroadcastEvent(ERR_ARENA_TEAM_JOIN_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), "");
|
||||||
BuildArenaTeamEventPacket(&data, ERR_ARENA_TEAM_JOIN_SS, 2, _player->GetName(), at->GetName(), "");
|
|
||||||
at->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleArenaTeamDeclineOpcode(WorldPacket & /*recv_data*/)
|
void WorldSession::HandleArenaTeamDeclineOpcode(WorldPacket & /*recv_data*/)
|
||||||
|
|
@ -218,11 +219,9 @@ void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data)
|
||||||
at->DelMember(_player->GetGUID());
|
at->DelMember(_player->GetGUID());
|
||||||
|
|
||||||
// event
|
// event
|
||||||
WorldPacket data;
|
at->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), "");
|
||||||
BuildArenaTeamEventPacket(&data, ERR_ARENA_TEAM_LEAVE_SS, 2, _player->GetName(), at->GetName(), "");
|
|
||||||
at->BroadcastPacket(&data);
|
|
||||||
|
|
||||||
//send you are no longer member of team
|
// send you are no longer member of team
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, at->GetName(), "", 0);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, at->GetName(), "", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -285,9 +284,7 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data)
|
||||||
at->DelMember(member->guid);
|
at->DelMember(member->guid);
|
||||||
|
|
||||||
// event
|
// event
|
||||||
WorldPacket data;
|
at->BroadcastEvent(ERR_ARENA_TEAM_REMOVE_SSS, 0, 3, name, at->GetName(), _player->GetName());
|
||||||
BuildArenaTeamEventPacket(&data, ERR_ARENA_TEAM_REMOVE_SSS, 3, name, at->GetName(), _player->GetName());
|
|
||||||
at->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data)
|
void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data)
|
||||||
|
|
@ -326,9 +323,7 @@ void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data)
|
||||||
at->SetCaptain(member->guid);
|
at->SetCaptain(member->guid);
|
||||||
|
|
||||||
// event
|
// event
|
||||||
WorldPacket data;
|
at->BroadcastEvent(ERR_ARENA_TEAM_LEADER_CHANGED_SSS, 0, 3, _player->GetName(), name, at->GetName());
|
||||||
BuildArenaTeamEventPacket(&data, ERR_ARENA_TEAM_LEADER_CHANGED_SSS, 3, _player->GetName(), name, at->GetName());
|
|
||||||
at->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id)
|
void WorldSession::SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id)
|
||||||
|
|
@ -341,31 +336,6 @@ void WorldSession::SendArenaTeamCommandResult(uint32 team_action, const std::str
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::BuildArenaTeamEventPacket(WorldPacket *data, uint8 eventid, uint8 str_count, const std::string& str1, const std::string& str2, const std::string& str3)
|
|
||||||
{
|
|
||||||
data->Initialize(SMSG_ARENA_TEAM_EVENT, 1+1+1);
|
|
||||||
*data << eventid;
|
|
||||||
*data << str_count;
|
|
||||||
switch(str_count)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
*data << str1;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
*data << str1;
|
|
||||||
*data << str2;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
*data << str1;
|
|
||||||
*data << str2;
|
|
||||||
*data << str3;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sLog.outError("Unhandled str_count %u in SendArenaTeamEvent()", str_count);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorldSession::SendNotInArenaTeamPacket(uint8 type)
|
void WorldSession::SendNotInArenaTeamPacket(uint8 type)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_ARENA_ERROR, 4+1); // 886 - You are not in a %uv%u arena team
|
WorldPacket data(SMSG_ARENA_ERROR, 4+1); // 886 - You are not in a %uv%u arena team
|
||||||
|
|
|
||||||
|
|
@ -658,7 +658,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder *holder)
|
||||||
Guild* guild = sObjectMgr.GetGuildById(pCurrChar->GetGuildId());
|
Guild* guild = sObjectMgr.GetGuildById(pCurrChar->GetGuildId());
|
||||||
if(guild)
|
if(guild)
|
||||||
{
|
{
|
||||||
data.Initialize(SMSG_GUILD_EVENT, (2+guild->GetMOTD().size()+1));
|
data.Initialize(SMSG_GUILD_EVENT, (1+1+guild->GetMOTD().size()+1));
|
||||||
data << uint8(GE_MOTD);
|
data << uint8(GE_MOTD);
|
||||||
data << uint8(1);
|
data << uint8(1);
|
||||||
data << guild->GetMOTD();
|
data << guild->GetMOTD();
|
||||||
|
|
@ -667,13 +667,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder *holder)
|
||||||
|
|
||||||
guild->DisplayGuildBankTabsInfo(this);
|
guild->DisplayGuildBankTabsInfo(this);
|
||||||
|
|
||||||
data.Initialize(SMSG_GUILD_EVENT, (5+10)); // we guess size
|
guild->BroadcastEvent(GE_SIGNED_ON, pCurrChar->GetGUID(), 1, pCurrChar->GetName(), "", "");
|
||||||
data << uint8(GE_SIGNED_ON);
|
|
||||||
data << uint8(1);
|
|
||||||
data << pCurrChar->GetName();
|
|
||||||
data << pCurrChar->GetGUID();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
DEBUG_LOG( "WORLD: Sent guild-signed-on (SMSG_GUILD_EVENT)" );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -773,7 +767,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder *holder)
|
||||||
{
|
{
|
||||||
pCurrChar->resetTalents(true);
|
pCurrChar->resetTalents(true);
|
||||||
pCurrChar->SendTalentsInfoData(false); // original talents send already in to SendInitialPacketsBeforeAddToMap, resend reset state
|
pCurrChar->SendTalentsInfoData(false); // original talents send already in to SendInitialPacketsBeforeAddToMap, resend reset state
|
||||||
SendNotification(LANG_RESET_TALENTS);
|
SendNotification(LANG_RESET_TALENTS); // we can use SMSG_TALENTS_INVOLUNTARILY_RESET here
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
|
if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST))
|
||||||
|
|
|
||||||
|
|
@ -281,10 +281,10 @@ bool Guild::LoadRanksFromDB(QueryResult *guildRanksResult)
|
||||||
Field *fields;
|
Field *fields;
|
||||||
bool broken_ranks = false;
|
bool broken_ranks = false;
|
||||||
|
|
||||||
//GUILD RANKS are sequence starting from 0 = GUILD_MASTER (ALL PRIVILEGES) to max 9 (lowest privileges)
|
// GUILD RANKS are sequence starting from 0 = GUILD_MASTER (ALL PRIVILEGES) to max 9 (lowest privileges)
|
||||||
//the lower rank id is considered higher rank - so promotion does rank-- and demotion does rank++
|
// the lower rank id is considered higher rank - so promotion does rank-- and demotion does rank++
|
||||||
//between ranks in sequence cannot be gaps - so 0,1,2,4 cannot be
|
// between ranks in sequence cannot be gaps - so 0,1,2,4 cannot be
|
||||||
//min ranks count is 5 and max is 10.
|
// min ranks count is 5 and max is 10.
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
@ -354,26 +354,26 @@ bool Guild::LoadMembersFromDB(QueryResult *guildMembersResult)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Field *fields = guildMembersResult->Fetch();
|
Field *fields = guildMembersResult->Fetch();
|
||||||
//this condition will be true when all rows in QueryResult are processed and new guild without members is going to be loaded - prevent crash
|
// this condition will be true when all rows in QueryResult are processed and new guild without members is going to be loaded - prevent crash
|
||||||
if (!fields)
|
if (!fields)
|
||||||
break;
|
break;
|
||||||
uint32 guildId = fields[0].GetUInt32();
|
uint32 guildId = fields[0].GetUInt32();
|
||||||
if (guildId < m_Id)
|
if (guildId < m_Id)
|
||||||
{
|
{
|
||||||
//there is in table guild_member record which doesn't have guildid in guild table, report error
|
// there is in table guild_member record which doesn't have guildid in guild table, report error
|
||||||
sLog.outErrorDb("Guild %u does not exist but it has a record in guild_member table, deleting it!", guildId);
|
sLog.outErrorDb("Guild %u does not exist but it has a record in guild_member table, deleting it!", guildId);
|
||||||
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guildid = '%u'", guildId);
|
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guildid = '%u'", guildId);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (guildId > m_Id)
|
if (guildId > m_Id)
|
||||||
//we loaded all members for this guild already, break cycle
|
// we loaded all members for this guild already, break cycle
|
||||||
break;
|
break;
|
||||||
|
|
||||||
MemberSlot newmember;
|
MemberSlot newmember;
|
||||||
uint64 guid = MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER);
|
uint64 guid = MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER);
|
||||||
newmember.RankId = fields[2].GetUInt32();
|
newmember.RankId = fields[2].GetUInt32();
|
||||||
//don't allow member to have not existing rank!
|
// don't allow member to have not existing rank!
|
||||||
if (newmember.RankId >= m_Ranks.size())
|
if (newmember.RankId >= m_Ranks.size())
|
||||||
newmember.RankId = GetLowestRank();
|
newmember.RankId = GetLowestRank();
|
||||||
|
|
||||||
|
|
@ -393,7 +393,7 @@ bool Guild::LoadMembersFromDB(QueryResult *guildMembersResult)
|
||||||
newmember.ZoneId = fields[22].GetUInt32();
|
newmember.ZoneId = fields[22].GetUInt32();
|
||||||
newmember.LogoutTime = fields[23].GetUInt64();
|
newmember.LogoutTime = fields[23].GetUInt64();
|
||||||
|
|
||||||
//this code will remove unexisting 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
|
||||||
{
|
{
|
||||||
sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`data`, deleting him from guild!",GUID_LOPART(guid));
|
sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`data`, deleting him from guild!",GUID_LOPART(guid));
|
||||||
|
|
@ -449,8 +449,8 @@ void Guild::SetLeader(uint64 guid)
|
||||||
|
|
||||||
void Guild::DelMember(uint64 guid, bool isDisbanding)
|
void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||||
{
|
{
|
||||||
//guild master can be deleted when loading guild and guid doesn't exist in characters table
|
// guild master can be deleted when loading guild and guid doesn't exist in characters table
|
||||||
//or when he is removed from guild by gm command
|
// or when he is removed from guild by gm command
|
||||||
if (m_LeaderGuid == guid && !isDisbanding)
|
if (m_LeaderGuid == guid && !isDisbanding)
|
||||||
{
|
{
|
||||||
MemberSlot* oldLeader = NULL;
|
MemberSlot* oldLeader = NULL;
|
||||||
|
|
@ -485,21 +485,10 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||||
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
|
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
|
||||||
if (oldLeader)
|
if (oldLeader)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (1+1+(oldLeader->Name).size()+1+(best->Name).size()+1));
|
BroadcastEvent(GE_LEADER_CHANGED, 0, 2, oldLeader->Name, best->Name, "");
|
||||||
data << (uint8)GE_LEADER_CHANGED;
|
|
||||||
data << (uint8)2;
|
|
||||||
data << oldLeader->Name;
|
|
||||||
data << best->Name;
|
|
||||||
BroadcastPacket(&data);
|
|
||||||
|
|
||||||
data.Initialize(SMSG_GUILD_EVENT, (1+1+(oldLeader->Name).size()+1));
|
BroadcastEvent(GE_LEFT, guid, 1, oldLeader->Name, "", "");
|
||||||
data << (uint8)GE_LEFT;
|
|
||||||
data << (uint8)1;
|
|
||||||
data << oldLeader->Name;
|
|
||||||
BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sLog.outDebug( "WORLD: Sent (SMSG_GUILD_EVENT)" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
members.erase(GUID_LOPART(guid));
|
members.erase(GUID_LOPART(guid));
|
||||||
|
|
@ -620,11 +609,11 @@ void Guild::CreateRank(std::string name_,uint32 rights)
|
||||||
|
|
||||||
AddRank(name_, rights, 0);
|
AddRank(name_, rights, 0);
|
||||||
|
|
||||||
//existing records in db should be deleted before calling this procedure and m_PurchasedTabs must be loaded already
|
// existing records in db should be deleted before calling this procedure and m_PurchasedTabs must be loaded already
|
||||||
|
|
||||||
for (uint32 i = 0; i < m_PurchasedTabs; ++i)
|
for (uint32 i = 0; i < m_PurchasedTabs; ++i)
|
||||||
{
|
{
|
||||||
//create bank rights with 0
|
// create bank rights with 0
|
||||||
CharacterDatabase.PExecute("INSERT INTO guild_bank_right (guildid,TabId,rid) VALUES ('%u','%u','%u')", m_Id, i, new_rank_id);
|
CharacterDatabase.PExecute("INSERT INTO guild_bank_right (guildid,TabId,rid) VALUES ('%u','%u','%u')", m_Id, i, new_rank_id);
|
||||||
}
|
}
|
||||||
// name now can be used for encoding to DB
|
// name now can be used for encoding to DB
|
||||||
|
|
@ -700,9 +689,7 @@ int32 Guild::GetRank(uint32 LowGuid)
|
||||||
|
|
||||||
void Guild::Disband()
|
void Guild::Disband()
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, 1);
|
BroadcastEvent(GE_DISBANDED, 0, 0, "", "", "");
|
||||||
data << (uint8)GE_DISBANDED;
|
|
||||||
BroadcastPacket(&data);
|
|
||||||
|
|
||||||
while (!members.empty())
|
while (!members.empty())
|
||||||
{
|
{
|
||||||
|
|
@ -727,11 +714,11 @@ void Guild::Roster(WorldSession *session /*= NULL*/)
|
||||||
{
|
{
|
||||||
// we can only guess size
|
// we can only guess size
|
||||||
WorldPacket data(SMSG_GUILD_ROSTER, (4+MOTD.length()+1+GINFO.length()+1+4+m_Ranks.size()*(4+4+GUILD_BANK_MAX_TABS*(4+4))+members.size()*50));
|
WorldPacket data(SMSG_GUILD_ROSTER, (4+MOTD.length()+1+GINFO.length()+1+4+m_Ranks.size()*(4+4+GUILD_BANK_MAX_TABS*(4+4))+members.size()*50));
|
||||||
data << (uint32)members.size();
|
data << uint32(members.size());
|
||||||
data << MOTD;
|
data << MOTD;
|
||||||
data << GINFO;
|
data << GINFO;
|
||||||
|
|
||||||
data << (uint32)m_Ranks.size();
|
data << uint32(m_Ranks.size());
|
||||||
for (RankList::const_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);
|
||||||
|
|
@ -783,7 +770,7 @@ void Guild::Query(WorldSession *session)
|
||||||
{
|
{
|
||||||
WorldPacket data(SMSG_GUILD_QUERY_RESPONSE, (8*32+200));// we can only guess size
|
WorldPacket data(SMSG_GUILD_QUERY_RESPONSE, (8*32+200));// we can only guess size
|
||||||
|
|
||||||
data << m_Id;
|
data << uint32(m_Id);
|
||||||
data << m_Name;
|
data << m_Name;
|
||||||
|
|
||||||
for (size_t i = 0 ; i < GUILD_RANKS_MAX_COUNT; ++i) // show always 10 ranks
|
for (size_t i = 0 ; i < GUILD_RANKS_MAX_COUNT; ++i) // show always 10 ranks
|
||||||
|
|
@ -791,7 +778,7 @@ void Guild::Query(WorldSession *session)
|
||||||
if (i < m_Ranks.size())
|
if (i < m_Ranks.size())
|
||||||
data << m_Ranks[i].Name;
|
data << m_Ranks[i].Name;
|
||||||
else
|
else
|
||||||
data << (uint8)0; // null string
|
data << uint8(0); // null string
|
||||||
}
|
}
|
||||||
|
|
||||||
data << uint32(m_EmblemStyle);
|
data << uint32(m_EmblemStyle);
|
||||||
|
|
@ -799,7 +786,7 @@ void Guild::Query(WorldSession *session)
|
||||||
data << uint32(m_BorderStyle);
|
data << uint32(m_BorderStyle);
|
||||||
data << uint32(m_BorderColor);
|
data << uint32(m_BorderColor);
|
||||||
data << uint32(m_BackgroundColor);
|
data << uint32(m_BackgroundColor);
|
||||||
data << uint32(0); // something new in WotLK
|
data << uint32(0); // probably real ranks count
|
||||||
|
|
||||||
session->SendPacket( &data );
|
session->SendPacket( &data );
|
||||||
sLog.outDebug( "WORLD: Sent (SMSG_GUILD_QUERY_RESPONSE)" );
|
sLog.outDebug( "WORLD: Sent (SMSG_GUILD_QUERY_RESPONSE)" );
|
||||||
|
|
@ -981,7 +968,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
|
||||||
data << uint8(2); // item count
|
data << uint8(2); // item count
|
||||||
|
|
||||||
if (slot1 > slot2)
|
if (slot1 > slot2)
|
||||||
std::swap(slot1,slot2);
|
std::swap(slot1, slot2);
|
||||||
|
|
||||||
AppendDisplayGuildBankSlot(data, tab, slot1);
|
AppendDisplayGuildBankSlot(data, tab, slot1);
|
||||||
AppendDisplayGuildBankSlot(data, tab, slot2);
|
AppendDisplayGuildBankSlot(data, tab, slot2);
|
||||||
|
|
@ -996,7 +983,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
|
||||||
if (!IsMemberHaveRights(itr->first,TabId,GUILD_BANK_RIGHT_VIEW_TAB))
|
if (!IsMemberHaveRights(itr->first,TabId,GUILD_BANK_RIGHT_VIEW_TAB))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
data.put<uint32>(rempos,uint32(GetMemberSlotWithdrawRem(player->GetGUIDLow(), TabId)));
|
data.put<uint32>(rempos, uint32(GetMemberSlotWithdrawRem(player->GetGUIDLow(), TabId)));
|
||||||
|
|
||||||
player->GetSession()->SendPacket(&data);
|
player->GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
@ -1264,7 +1251,7 @@ bool Guild::IsMemberHaveRights(uint32 LowGuid, uint8 TabId, uint32 rights) const
|
||||||
if (itr->second.RankId == GR_GUILDMASTER)
|
if (itr->second.RankId == GR_GUILDMASTER)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return (GetBankRights(itr->second.RankId,TabId) & rights) == rights;
|
return (GetBankRights(itr->second.RankId, TabId) & rights) == rights;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 Guild::GetMemberSlotWithdrawRem(uint32 LowGuid, uint8 TabId)
|
uint32 Guild::GetMemberSlotWithdrawRem(uint32 LowGuid, uint8 TabId)
|
||||||
|
|
@ -1335,7 +1322,7 @@ void Guild::SetBankRightsAndSlots(uint32 rankId, uint8 TabId, uint32 right, uint
|
||||||
TabId >= GUILD_BANK_MAX_TABS ||
|
TabId >= GUILD_BANK_MAX_TABS ||
|
||||||
TabId >= m_PurchasedTabs)
|
TabId >= m_PurchasedTabs)
|
||||||
{
|
{
|
||||||
//TODO remove next line, It is there just to repair existing bug in deleting guild rank
|
// TODO remove next line, It is there just to repair existing bug in deleting guild rank
|
||||||
CharacterDatabase.PExecute("DELETE FROM guild_bank_right WHERE guildid='%u' AND rid='%u' AND TabId='%u'", m_Id, rankId, TabId);
|
CharacterDatabase.PExecute("DELETE FROM guild_bank_right WHERE guildid='%u' AND rid='%u' AND TabId='%u'", m_Id, rankId, TabId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1394,20 +1381,20 @@ bool Guild::LoadBankRightsFromDB(QueryResult *guildBankTabRightsResult)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Field *fields = guildBankTabRightsResult->Fetch();
|
Field *fields = guildBankTabRightsResult->Fetch();
|
||||||
//prevent crash when all rights in result are already processed
|
// prevent crash when all rights in result are already processed
|
||||||
if (!fields)
|
if (!fields)
|
||||||
break;
|
break;
|
||||||
uint32 guildId = fields[0].GetUInt32();
|
uint32 guildId = fields[0].GetUInt32();
|
||||||
if (guildId < m_Id)
|
if (guildId < m_Id)
|
||||||
{
|
{
|
||||||
//there is in table guild_bank_right record which doesn't have guildid in guild table, report error
|
// there is in table guild_bank_right record which doesn't have guildid in guild table, report error
|
||||||
sLog.outErrorDb("Guild %u does not exist but it has a record in guild_bank_right table, deleting it!", guildId);
|
sLog.outErrorDb("Guild %u does not exist but it has a record in guild_bank_right table, deleting it!", guildId);
|
||||||
CharacterDatabase.PExecute("DELETE FROM guild_bank_right WHERE guildid = '%u'", guildId);
|
CharacterDatabase.PExecute("DELETE FROM guild_bank_right WHERE guildid = '%u'", guildId);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (guildId > m_Id)
|
if (guildId > m_Id)
|
||||||
//we loaded all ranks for this guild bank already, break cycle
|
// we loaded all ranks for this guild bank already, break cycle
|
||||||
break;
|
break;
|
||||||
uint8 TabId = fields[1].GetUInt8();
|
uint8 TabId = fields[1].GetUInt8();
|
||||||
uint32 rankId = fields[2].GetUInt32();
|
uint32 rankId = fields[2].GetUInt32();
|
||||||
|
|
@ -1428,8 +1415,8 @@ void Guild::LoadGuildBankEventLogFromDB()
|
||||||
{
|
{
|
||||||
// Money log is in TabId = GUILD_BANK_MONEY_LOGS_TAB
|
// Money log is in TabId = GUILD_BANK_MONEY_LOGS_TAB
|
||||||
|
|
||||||
//uint32 configCount = sWorld.getConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT);
|
// uint32 configCount = sWorld.getConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT);
|
||||||
//cycle through all purchased guild bank item tabs
|
// cycle through all purchased guild bank item tabs
|
||||||
for (uint32 tabId = 0; tabId < m_PurchasedTabs; ++tabId)
|
for (uint32 tabId = 0; tabId < m_PurchasedTabs; ++tabId)
|
||||||
{
|
{
|
||||||
// 0 1 2 3 4 5 6
|
// 0 1 2 3 4 5 6
|
||||||
|
|
@ -1450,7 +1437,7 @@ void Guild::LoadGuildBankEventLogFromDB()
|
||||||
NewEvent.DestTabId = fields[5].GetUInt8();
|
NewEvent.DestTabId = fields[5].GetUInt8();
|
||||||
NewEvent.TimeStamp = fields[6].GetUInt64();
|
NewEvent.TimeStamp = fields[6].GetUInt64();
|
||||||
|
|
||||||
//if newEvent is moneyEvent, move it to moneyEventTab in DB and report error
|
// if newEvent is moneyEvent, move it to moneyEventTab in DB and report error
|
||||||
if (NewEvent.isMoneyEvent())
|
if (NewEvent.isMoneyEvent())
|
||||||
{
|
{
|
||||||
uint32 logGuid = fields[0].GetUInt32();
|
uint32 logGuid = fields[0].GetUInt32();
|
||||||
|
|
@ -1459,21 +1446,21 @@ void Guild::LoadGuildBankEventLogFromDB()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
//add event to list
|
// add event to list
|
||||||
//events are ordered from oldest (in beginning) to latest (in the end)
|
// events are ordered from oldest (in beginning) to latest (in the end)
|
||||||
m_GuildBankEventLog_Item[tabId].push_front(NewEvent);
|
m_GuildBankEventLog_Item[tabId].push_front(NewEvent);
|
||||||
|
|
||||||
if (!isNextLogGuidSet)
|
if (!isNextLogGuidSet)
|
||||||
{
|
{
|
||||||
m_GuildBankEventLogNextGuid_Item[tabId] = fields[0].GetUInt32();
|
m_GuildBankEventLogNextGuid_Item[tabId] = fields[0].GetUInt32();
|
||||||
//we don't have to do m_GuildBankEventLogNextGuid_Item[tabId] %= configCount; - it will be done when creating new record
|
// we don't have to do m_GuildBankEventLogNextGuid_Item[tabId] %= configCount; - it will be done when creating new record
|
||||||
isNextLogGuidSet = true;
|
isNextLogGuidSet = true;
|
||||||
}
|
}
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
delete result;
|
delete result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//special handle for guild bank money log
|
// special handle for guild bank money log
|
||||||
// 0 1 2 3 4 5 6
|
// 0 1 2 3 4 5 6
|
||||||
QueryResult *result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog WHERE guildid='%u' AND TabId='%u' ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, GUILD_BANK_MONEY_LOGS_TAB, GUILD_BANK_MAX_LOGS);
|
QueryResult *result = CharacterDatabase.PQuery("SELECT LogGuid, EventType, PlayerGuid, ItemOrMoney, ItemStackCount, DestTabId, TimeStamp FROM guild_bank_eventlog WHERE guildid='%u' AND TabId='%u' ORDER BY TimeStamp DESC,LogGuid DESC LIMIT %u", m_Id, GUILD_BANK_MONEY_LOGS_TAB, GUILD_BANK_MAX_LOGS);
|
||||||
if (!result)
|
if (!result)
|
||||||
|
|
@ -1486,7 +1473,7 @@ void Guild::LoadGuildBankEventLogFromDB()
|
||||||
if (!isNextMoneyLogGuidSet)
|
if (!isNextMoneyLogGuidSet)
|
||||||
{
|
{
|
||||||
m_GuildBankEventLogNextGuid_Money = fields[0].GetUInt32();
|
m_GuildBankEventLogNextGuid_Money = fields[0].GetUInt32();
|
||||||
//we don't have to do m_GuildBankEventLogNextGuid_Money %= configCount; - it will be done when creating new record
|
// we don't have to do m_GuildBankEventLogNextGuid_Money %= configCount; - it will be done when creating new record
|
||||||
isNextMoneyLogGuidSet = true;
|
isNextMoneyLogGuidSet = true;
|
||||||
}
|
}
|
||||||
GuildBankEventLogEntry NewEvent;
|
GuildBankEventLogEntry NewEvent;
|
||||||
|
|
@ -1498,12 +1485,12 @@ void Guild::LoadGuildBankEventLogFromDB()
|
||||||
NewEvent.DestTabId = fields[5].GetUInt8();
|
NewEvent.DestTabId = fields[5].GetUInt8();
|
||||||
NewEvent.TimeStamp = fields[6].GetUInt64();
|
NewEvent.TimeStamp = fields[6].GetUInt64();
|
||||||
|
|
||||||
//if newEvent is not moneyEvent, then report error
|
// if newEvent is not moneyEvent, then report error
|
||||||
if (!NewEvent.isMoneyEvent())
|
if (!NewEvent.isMoneyEvent())
|
||||||
sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u is not MoneyEvent - ignoring...", fields[0].GetUInt32(), m_Id);
|
sLog.outError("GuildBankEventLog ERROR: MoneyEvent LogGuid %u for Guild %u is not MoneyEvent - ignoring...", fields[0].GetUInt32(), m_Id);
|
||||||
else
|
else
|
||||||
//add event to list
|
// add event to list
|
||||||
//events are ordered from oldest (in beginning) to latest (in the end)
|
// events are ordered from oldest (in beginning) to latest (in the end)
|
||||||
m_GuildBankEventLog_Money.push_front(NewEvent);
|
m_GuildBankEventLog_Money.push_front(NewEvent);
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (result->NextRow());
|
||||||
|
|
@ -1579,7 +1566,7 @@ void Guild::DisplayGuildBankLogs(WorldSession *session, uint8 TabId)
|
||||||
|
|
||||||
void Guild::LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint8 ItemStackCount, uint8 DestTabId)
|
void Guild::LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uint32 ItemOrMoney, uint8 ItemStackCount, uint8 DestTabId)
|
||||||
{
|
{
|
||||||
//create Event
|
// create Event
|
||||||
GuildBankEventLogEntry NewEvent;
|
GuildBankEventLogEntry NewEvent;
|
||||||
NewEvent.EventType = EventType;
|
NewEvent.EventType = EventType;
|
||||||
NewEvent.PlayerGuid = PlayerGuidLow;
|
NewEvent.PlayerGuid = PlayerGuidLow;
|
||||||
|
|
@ -1588,7 +1575,7 @@ void Guild::LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uin
|
||||||
NewEvent.DestTabId = DestTabId;
|
NewEvent.DestTabId = DestTabId;
|
||||||
NewEvent.TimeStamp = uint32(time(NULL));
|
NewEvent.TimeStamp = uint32(time(NULL));
|
||||||
|
|
||||||
//add new event to the end of event list
|
// add new event to the end of event list
|
||||||
uint32 currentTabId = TabId;
|
uint32 currentTabId = TabId;
|
||||||
uint32 currentLogGuid = 0;
|
uint32 currentLogGuid = 0;
|
||||||
if (NewEvent.isMoneyEvent())
|
if (NewEvent.isMoneyEvent())
|
||||||
|
|
@ -1611,7 +1598,7 @@ void Guild::LogBankEvent(uint8 EventType, uint8 TabId, uint32 PlayerGuidLow, uin
|
||||||
m_GuildBankEventLog_Item[TabId].push_back(NewEvent);
|
m_GuildBankEventLog_Item[TabId].push_back(NewEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
//save event to database
|
// save event to database
|
||||||
CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid='%u' AND LogGuid='%u' AND TabId='%u'", m_Id, currentLogGuid, currentTabId);
|
CharacterDatabase.PExecute("DELETE FROM guild_bank_eventlog WHERE guildid='%u' AND LogGuid='%u' AND TabId='%u'", m_Id, currentLogGuid, currentTabId);
|
||||||
|
|
||||||
CharacterDatabase.PExecute("INSERT INTO guild_bank_eventlog (guildid,LogGuid,TabId,EventType,PlayerGuid,ItemOrMoney,ItemStackCount,DestTabId,TimeStamp) VALUES ('%u','%u','%u','%u','%u','%u','%u','%u','" UI64FMTD "')",
|
CharacterDatabase.PExecute("INSERT INTO guild_bank_eventlog (guildid,LogGuid,TabId,EventType,PlayerGuid,ItemOrMoney,ItemStackCount,DestTabId,TimeStamp) VALUES ('%u','%u','%u','%u','%u','%u','%u','%u','" UI64FMTD "')",
|
||||||
|
|
@ -2307,8 +2294,8 @@ void Guild::MoveFromCharToBank( Player * pl, uint8 PlayerBag, uint8 PlayerSlot,
|
||||||
// logging item move to bank
|
// logging item move to bank
|
||||||
if (pl->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE))
|
if (pl->GetSession()->GetSecurity() > SEC_PLAYER && sWorld.getConfig(CONFIG_GM_LOG_TRADE))
|
||||||
{
|
{
|
||||||
sLog.outCommand(pl->GetSession()->GetAccountId(),"GM %s (Account: %u) deposit item: %s (Entry: %d Count: %u) to guild bank (Guild ID: %u )",
|
sLog.outCommand(pl->GetSession()->GetAccountId(), "GM %s (Account: %u) deposit item: %s (Entry: %d Count: %u) to guild bank (Guild ID: %u )",
|
||||||
pl->GetName(),pl->GetSession()->GetAccountId(),
|
pl->GetName(), pl->GetSession()->GetAccountId(),
|
||||||
pItemChar->GetProto()->Name1, pItemChar->GetEntry(), pItemChar->GetCount(),
|
pItemChar->GetProto()->Name1, pItemChar->GetEntry(), pItemChar->GetCount(),
|
||||||
m_Id);
|
m_Id);
|
||||||
}
|
}
|
||||||
|
|
@ -2336,6 +2323,38 @@ void Guild::MoveFromCharToBank( Player * pl, uint8 PlayerBag, uint8 PlayerSlot,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Guild::BroadcastEvent(GuildEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3)
|
||||||
|
{
|
||||||
|
WorldPacket data(SMSG_GUILD_EVENT, 1+1+(guid ? 8 : 0));
|
||||||
|
data << uint8(event);
|
||||||
|
data << uint8(strCount);
|
||||||
|
|
||||||
|
switch(strCount)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
data << str1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
data << str1 << str2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
data << str1 << str2 << str3;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sLog.outError("Guild::BroadcastEvent: incorrect strings count %u!", strCount);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(guid)
|
||||||
|
data << uint64(guid);
|
||||||
|
|
||||||
|
BroadcastPacket(&data);
|
||||||
|
|
||||||
|
sLog.outDebug("WORLD: Sent SMSG_GUILD_EVENT");
|
||||||
|
}
|
||||||
|
|
||||||
bool GuildItemPosCount::isContainedIn(GuildItemPosCountVec const &vec) const
|
bool GuildItemPosCount::isContainedIn(GuildItemPosCountVec const &vec) const
|
||||||
{
|
{
|
||||||
for(GuildItemPosCountVec::const_iterator itr = vec.begin(); itr != vec.end(); ++itr)
|
for(GuildItemPosCountVec::const_iterator itr = vec.begin(); itr != vec.end(); ++itr)
|
||||||
|
|
|
||||||
|
|
@ -71,62 +71,62 @@ enum Typecommand
|
||||||
GUILD_CREATE_S = 0x00,
|
GUILD_CREATE_S = 0x00,
|
||||||
GUILD_INVITE_S = 0x01,
|
GUILD_INVITE_S = 0x01,
|
||||||
GUILD_QUIT_S = 0x03,
|
GUILD_QUIT_S = 0x03,
|
||||||
|
// 0x05?
|
||||||
GUILD_FOUNDER_S = 0x0E,
|
GUILD_FOUNDER_S = 0x0E,
|
||||||
GUILD_UNK1 = 0x10,
|
GUILD_UNK1 = 0x13,
|
||||||
GUILD_BANK_S = 0x15,
|
GUILD_UNK2 = 0x14
|
||||||
GUILD_UNK3 = 0x16
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CommandErrors
|
enum CommandErrors
|
||||||
{
|
{
|
||||||
GUILD_PLAYER_NO_MORE_IN_GUILD = 0x00,
|
ERR_PLAYER_NO_MORE_IN_GUILD = 0x00,
|
||||||
GUILD_INTERNAL = 0x01,
|
ERR_GUILD_INTERNAL = 0x01,
|
||||||
GUILD_ALREADY_IN_GUILD = 0x02,
|
ERR_ALREADY_IN_GUILD = 0x02,
|
||||||
ALREADY_IN_GUILD = 0x03,
|
ERR_ALREADY_IN_GUILD_S = 0x03,
|
||||||
INVITED_TO_GUILD = 0x04,
|
ERR_INVITED_TO_GUILD = 0x04,
|
||||||
ALREADY_INVITED_TO_GUILD = 0x05,
|
ERR_ALREADY_INVITED_TO_GUILD_S = 0x05,
|
||||||
GUILD_NAME_INVALID = 0x06,
|
ERR_GUILD_NAME_INVALID = 0x06,
|
||||||
GUILD_NAME_EXISTS = 0x07,
|
ERR_GUILD_NAME_EXISTS_S = 0x07,
|
||||||
GUILD_LEADER_LEAVE = 0x08,
|
ERR_GUILD_LEADER_LEAVE = 0x08,
|
||||||
GUILD_PERMISSIONS = 0x08,
|
ERR_GUILD_PERMISSIONS = 0x08,
|
||||||
GUILD_PLAYER_NOT_IN_GUILD = 0x09,
|
ERR_GUILD_PLAYER_NOT_IN_GUILD = 0x09,
|
||||||
GUILD_PLAYER_NOT_IN_GUILD_S = 0x0A,
|
ERR_GUILD_PLAYER_NOT_IN_GUILD_S = 0x0A,
|
||||||
GUILD_PLAYER_NOT_FOUND = 0x0B,
|
ERR_GUILD_PLAYER_NOT_FOUND_S = 0x0B,
|
||||||
GUILD_NOT_ALLIED = 0x0C,
|
ERR_GUILD_NOT_ALLIED = 0x0C,
|
||||||
GUILD_RANK_TOO_HIGH_S = 0x0D,
|
ERR_GUILD_RANK_TOO_HIGH_S = 0x0D,
|
||||||
GUILD_ALREADY_LOWEST_RANK_S = 0x0E,
|
ERR_GUILD_RANK_TOO_LOW_S = 0x0E,
|
||||||
GUILD_TEMP_ERROR = 0x11,
|
ERR_GUILD_RANKS_LOCKED = 0x11,
|
||||||
GUILD_RANK_IN_USE = 0x12,
|
ERR_GUILD_RANK_IN_USE = 0x12,
|
||||||
GUILD_IGNORE = 0x13,
|
ERR_GUILD_IGNORING_YOU_S = 0x13,
|
||||||
GUILD_ERR_UNK1 = 0x17,
|
ERR_GUILD_UNK1 = 0x14,
|
||||||
GUILD_WITHDRAW_TOO_MUCH = 0x18,
|
ERR_GUILD_WITHDRAW_LIMIT = 0x19,
|
||||||
GUILD_BANK_NO_MONEY = 0x19,
|
ERR_GUILD_NOT_ENOUGH_MONEY = 0x1A,
|
||||||
GUILD_BANK_TAB_IS_FULL = 0x1B,
|
ERR_GUILD_BANK_FULL = 0x1C,
|
||||||
GUILD_BANK_ITEM_NOT_FOUND = 0x1C
|
ERR_GUILD_ITEM_NOT_FOUND = 0x1D
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GuildEvents
|
enum GuildEvents
|
||||||
{
|
{
|
||||||
GE_PROMOTION = 0x00,
|
GE_PROMOTION = 0x00,
|
||||||
GE_DEMOTION = 0x01,
|
GE_DEMOTION = 0x01,
|
||||||
GE_MOTD = 0x02,
|
GE_MOTD = 0x02,
|
||||||
GE_JOINED = 0x03,
|
GE_JOINED = 0x03,
|
||||||
GE_LEFT = 0x04,
|
GE_LEFT = 0x04,
|
||||||
GE_REMOVED = 0x05,
|
GE_REMOVED = 0x05,
|
||||||
GE_LEADER_IS = 0x06,
|
GE_LEADER_IS = 0x06,
|
||||||
GE_LEADER_CHANGED = 0x07,
|
GE_LEADER_CHANGED = 0x07,
|
||||||
GE_DISBANDED = 0x08,
|
GE_DISBANDED = 0x08,
|
||||||
GE_TABARDCHANGE = 0x09,
|
GE_TABARDCHANGE = 0x09,
|
||||||
GE_UNK1 = 0x0A, // string, string EVENT_GUILD_ROSTER_UPDATE
|
GE_UNK1 = 0x0A, // string, string EVENT_GUILD_ROSTER_UPDATE tab content change?
|
||||||
GE_UNK2 = 0x0B, // EVENT_GUILD_ROSTER_UPDATE
|
GE_UNK2 = 0x0B, // EVENT_GUILD_ROSTER_UPDATE
|
||||||
GE_SIGNED_ON = 0x0C, // ERR_FRIEND_ONLINE_SS
|
GE_SIGNED_ON = 0x0C, // ERR_FRIEND_ONLINE_SS
|
||||||
GE_SIGNED_OFF = 0x0D, // ERR_FRIEND_OFFLINE_S
|
GE_SIGNED_OFF = 0x0D, // ERR_FRIEND_OFFLINE_S
|
||||||
GE_UNK3 = 0x0E, // EVENT_GUILDBANKBAGSLOTS_CHANGED
|
GE_GUILDBANKBAGSLOTS_CHANGED = 0x0E, // EVENT_GUILDBANKBAGSLOTS_CHANGED
|
||||||
GE_BANKTAB_PURCHASED= 0x0F, // EVENT_GUILDBANK_UPDATE_TABS
|
GE_BANKTAB_PURCHASED = 0x0F, // EVENT_GUILDBANK_UPDATE_TABS
|
||||||
GE_UNK5 = 0x10, // EVENT_GUILDBANK_UPDATE_TABS
|
GE_UNK5 = 0x10, // EVENT_GUILDBANK_UPDATE_TABS
|
||||||
GE_UNK6 = 0x11, // EVENT_GUILDBANK_UPDATE_MONEY, string 0000000000002710 is 1 gold
|
GE_GUILDBANK_UPDATE_MONEY = 0x11, // EVENT_GUILDBANK_UPDATE_MONEY, string 0000000000002710 is 1 gold
|
||||||
GE_UNK7 = 0x12, // MSG_GUILD_BANK_MONEY_WITHDRAWN
|
GE_GUILD_BANK_MONEY_WITHDRAWN = 0x12, // MSG_GUILD_BANK_MONEY_WITHDRAWN
|
||||||
GE_UNK8 = 0x13 // EVENT_GUILDBANK_TEXT_CHANGED
|
GE_GUILDBANK_TEXT_CHANGED = 0x13 // EVENT_GUILDBANK_TEXT_CHANGED
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PetitionTurns
|
enum PetitionTurns
|
||||||
|
|
@ -338,6 +338,7 @@ class Guild
|
||||||
void BroadcastToOfficers(WorldSession *session, const std::string& msg, uint32 language = LANG_UNIVERSAL);
|
void BroadcastToOfficers(WorldSession *session, const std::string& msg, uint32 language = LANG_UNIVERSAL);
|
||||||
void BroadcastPacketToRank(WorldPacket *packet, uint32 rankId);
|
void BroadcastPacketToRank(WorldPacket *packet, uint32 rankId);
|
||||||
void BroadcastPacket(WorldPacket *packet);
|
void BroadcastPacket(WorldPacket *packet);
|
||||||
|
void BroadcastEvent(GuildEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3);
|
||||||
|
|
||||||
template<class Do>
|
template<class Do>
|
||||||
void BroadcastWorker(Do& _do, Player* except = NULL)
|
void BroadcastWorker(Do& _do, Player* except = NULL)
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
|
||||||
|
|
@ -77,14 +77,14 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if(!player)
|
if(!player)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, Invitedname, GUILD_PLAYER_NOT_FOUND);
|
SendGuildCommandResult(GUILD_INVITE_S, Invitedname, ERR_GUILD_PLAYER_NOT_FOUND_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -95,27 +95,27 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
|
||||||
// not let enemies sign guild charter
|
// not let enemies sign guild charter
|
||||||
if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != GetPlayer()->GetTeam())
|
if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != GetPlayer()->GetTeam())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, Invitedname, GUILD_NOT_ALLIED);
|
SendGuildCommandResult(GUILD_INVITE_S, Invitedname, ERR_GUILD_NOT_ALLIED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player->GetGuildId())
|
if(player->GetGuildId())
|
||||||
{
|
{
|
||||||
plname = player->GetName();
|
plname = player->GetName();
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plname, ALREADY_IN_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, plname, ERR_ALREADY_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player->GetGuildIdInvited())
|
if(player->GetGuildIdInvited())
|
||||||
{
|
{
|
||||||
plname = player->GetName();
|
plname = player->GetName();
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plname, ALREADY_INVITED_TO_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, plname, ERR_ALREADY_INVITED_TO_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_INVITE))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_INVITE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -146,13 +146,13 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
|
||||||
Guild* guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild* guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_REMOVE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,33 +160,28 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
|
||||||
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
|
MemberSlot* slot = guild->GetMemberSlot(plName, plGuid);
|
||||||
if(!slot)
|
if(!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(slot->RankId == GR_GUILDMASTER)
|
if(slot->RankId == GR_GUILDMASTER)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE);
|
SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//do not allow to kick player with same or higher rights
|
// do not allow to kick player with same or higher rights
|
||||||
if(GetPlayer()->GetRank() >= slot->RankId)
|
if(GetPlayer()->GetRank() >= slot->RankId)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_QUIT_S, plName, GUILD_RANK_TOO_HIGH_S);
|
SendGuildCommandResult(GUILD_QUIT_S, plName, ERR_GUILD_RANK_TOO_HIGH_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
guild->DelMember(plGuid);
|
guild->DelMember(plGuid);
|
||||||
// Put record into guildlog
|
// Put record into guild log
|
||||||
guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0);
|
guild->LogGuildEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), 0);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+20)); // guess size
|
guild->BroadcastEvent(GE_REMOVED, 0, 2, plName, _player->GetName(), "");
|
||||||
data << (uint8)GE_REMOVED;
|
|
||||||
data << (uint8)2; // strings count
|
|
||||||
data << plName;
|
|
||||||
data << GetPlayer()->GetName();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
|
||||||
|
|
@ -206,16 +201,10 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
|
||||||
|
|
||||||
if(!guild->AddMember(GetPlayer()->GetGUID(),guild->GetLowestRank()))
|
if(!guild->AddMember(GetPlayer()->GetGUID(),guild->GetLowestRank()))
|
||||||
return;
|
return;
|
||||||
// Put record into guildlog
|
// Put record into guild log
|
||||||
guild->LogGuildEvent(GUILD_EVENT_LOG_JOIN_GUILD, GetPlayer()->GetGUIDLow(), 0, 0);
|
guild->LogGuildEvent(GUILD_EVENT_LOG_JOIN_GUILD, GetPlayer()->GetGUIDLow(), 0, 0);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+10)); // guess size
|
guild->BroadcastEvent(GE_JOINED, player->GetGUID(), 1, player->GetName(), "", "");
|
||||||
data << (uint8)GE_JOINED;
|
|
||||||
data << (uint8)1; // strings count
|
|
||||||
data << player->GetName();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
|
|
||||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
|
||||||
|
|
@ -233,7 +222,7 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -269,12 +258,12 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
|
||||||
Guild* guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild* guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -283,38 +272,32 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if(!slot)
|
if(!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plGuid == GetPlayer()->GetGUID())
|
if(plGuid == GetPlayer()->GetGUID())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_NAME_INVALID);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//allow to promote only to lower rank than member's rank
|
// allow to promote only to lower rank than member's rank
|
||||||
//guildmaster's rank = 0
|
// guildmaster's rank = 0
|
||||||
//GetPlayer()->GetRank() + 1 is highest rank that current player can promote to
|
// GetPlayer()->GetRank() + 1 is highest rank that current player can promote to
|
||||||
if(GetPlayer()->GetRank() + 1 >= slot->RankId)
|
if(GetPlayer()->GetRank() + 1 >= slot->RankId)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_RANK_TOO_HIGH_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 newRankId = slot->RankId - 1; //when promoting player, rank is decreased
|
uint32 newRankId = slot->RankId - 1; //when promoting player, rank is decreased
|
||||||
|
|
||||||
guild->ChangeRank(plGuid, newRankId);
|
guild->ChangeRank(plGuid, newRankId);
|
||||||
// Put record into guildlog
|
// Put record into guild log
|
||||||
guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
|
guild->LogGuildEvent(GUILD_EVENT_LOG_PROMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+30)); // guess size
|
guild->BroadcastEvent(GE_PROMOTION, 0, 3, _player->GetName(), plName, guild->GetRankName(newRankId));
|
||||||
data << (uint8)GE_PROMOTION;
|
|
||||||
data << (uint8)3; // strings count
|
|
||||||
data << GetPlayer()->GetName();
|
|
||||||
data << plName;
|
|
||||||
data << guild->GetRankName(newRankId);
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
@ -331,13 +314,13 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_DEMOTE))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_DEMOTE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -346,43 +329,37 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!slot)
|
if (!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plGuid == GetPlayer()->GetGUID())
|
if(plGuid == GetPlayer()->GetGUID())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_NAME_INVALID);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_NAME_INVALID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//do not allow to demote same or higher rank
|
// do not allow to demote same or higher rank
|
||||||
if(GetPlayer()->GetRank() >= slot->RankId)
|
if(GetPlayer()->GetRank() >= slot->RankId)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_RANK_TOO_HIGH_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_HIGH_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//do not allow to demote lowest rank
|
// do not allow to demote lowest rank
|
||||||
if(slot->RankId >= guild->GetLowestRank())
|
if(slot->RankId >= guild->GetLowestRank())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_ALREADY_LOWEST_RANK_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_RANK_TOO_LOW_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 newRankId = slot->RankId + 1; //when demoting player, rank is increased
|
uint32 newRankId = slot->RankId + 1; //when demoting player, rank is increased
|
||||||
|
|
||||||
guild->ChangeRank(plGuid, newRankId);
|
guild->ChangeRank(plGuid, newRankId);
|
||||||
// Put record into guildlog
|
// Put record into guild log
|
||||||
guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
|
guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), newRankId);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+30)); // guess size
|
guild->BroadcastEvent(GE_DEMOTION, 0, 3, _player->GetName(), plName, guild->GetRankName(slot->RankId));
|
||||||
data << (uint8)GE_DEMOTION;
|
|
||||||
data << (uint8)3; // strings count
|
|
||||||
data << GetPlayer()->GetName();
|
|
||||||
data << plName;
|
|
||||||
data << guild->GetRankName(slot->RankId);
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
||||||
|
|
@ -392,13 +369,13 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(_player->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(_player->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1)
|
if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE);
|
SendGuildCommandResult(GUILD_QUIT_S, "", ERR_GUILD_LEADER_LEAVE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -409,18 +386,12 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
|
||||||
}
|
}
|
||||||
|
|
||||||
guild->DelMember(_player->GetGUID());
|
guild->DelMember(_player->GetGUID());
|
||||||
// Put record into guildlog
|
// Put record into guild log
|
||||||
guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0);
|
guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+10)); // guess size
|
guild->BroadcastEvent(GE_LEFT, _player->GetGUID(), 1, _player->GetName(), "", "");
|
||||||
data << (uint8)GE_LEFT;
|
|
||||||
data << (uint8)1; // strings count
|
|
||||||
data << _player->GetName();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
|
|
||||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
|
SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), ERR_PLAYER_NO_MORE_IN_GUILD);
|
||||||
|
|
||||||
SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), GUILD_PLAYER_NO_MORE_IN_GUILD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
|
||||||
|
|
@ -430,13 +401,13 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetPlayer()->GetGUID() != guild->GetLeader())
|
if(GetPlayer()->GetGUID() != guild->GetLeader())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -461,13 +432,13 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!guild)
|
if (!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldLeader->GetGUID() != guild->GetLeader())
|
if (oldLeader->GetGUID() != guild->GetLeader())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -476,21 +447,14 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!slot)
|
if (!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
guild->SetLeader(newLeaderGUID);
|
guild->SetLeader(newLeaderGUID);
|
||||||
guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER);
|
guild->ChangeRank(oldLeader->GetGUID(), GR_OFFICER);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+20)); // guess size
|
guild->BroadcastEvent(GE_LEADER_CHANGED, 0, 2, oldLeader->GetName(), name, "");
|
||||||
data << (uint8)GE_LEADER_CHANGED;
|
|
||||||
data << (uint8)2; // strings count
|
|
||||||
data << oldLeader->GetName();
|
|
||||||
data << name.c_str();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
|
|
||||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
|
||||||
|
|
@ -507,24 +471,18 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_SETMOTD))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_SETMOTD))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
guild->SetMOTD(MOTD);
|
guild->SetMOTD(MOTD);
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (2+MOTD.size()+1));
|
guild->BroadcastEvent(GE_MOTD, 0, 1, MOTD, "", "");
|
||||||
data << (uint8)GE_MOTD;
|
|
||||||
data << (uint8)1; // strings count
|
|
||||||
data << MOTD;
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
|
|
||||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
@ -541,13 +499,13 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!guild)
|
if (!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE))
|
if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EPNOTE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -556,7 +514,7 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!slot)
|
if (!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, name, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, name, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -580,12 +538,12 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!guild)
|
if (!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE))
|
if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -594,7 +552,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
if (!slot)
|
if (!slot)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, plName, GUILD_PLAYER_NOT_IN_GUILD_S);
|
SendGuildCommandResult(GUILD_INVITE_S, plName, ERR_GUILD_PLAYER_NOT_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -616,13 +574,13 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
|
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(GetPlayer()->GetGUID() != guild->GetLeader())
|
else if(GetPlayer()->GetGUID() != guild->GetLeader())
|
||||||
{
|
{
|
||||||
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
|
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -665,13 +623,13 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetPlayer()->GetGUID() != guild->GetLeader())
|
if(GetPlayer()->GetGUID() != guild->GetLeader())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -691,12 +649,12 @@ void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(GetPlayer()->GetGUID() != guild->GetLeader())
|
else if(GetPlayer()->GetGUID() != guild->GetLeader())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_INVITE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -727,13 +685,13 @@ void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
|
||||||
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId());
|
||||||
if(!guild)
|
if(!guild)
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_MODIFY_GUILD_INFO))
|
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_MODIFY_GUILD_INFO))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PERMISSIONS);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_PERMISSIONS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -864,7 +822,7 @@ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SendGuildCommandResult(GUILD_BANK_S, "", GUILD_PLAYER_NOT_IN_GUILD);
|
SendGuildCommandResult(GUILD_UNK1, "", ERR_GUILD_PLAYER_NOT_IN_GUILD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called when opening guild bank tab only (first one) */
|
/* Called when opening guild bank tab only (first one) */
|
||||||
|
|
|
||||||
|
|
@ -4444,7 +4444,7 @@ bool ChatHandler::HandleResetSpellsCommand(const char * args)
|
||||||
Player* target;
|
Player* target;
|
||||||
uint64 target_guid;
|
uint64 target_guid;
|
||||||
std::string target_name;
|
std::string target_name;
|
||||||
if(!extractPlayerTarget((char*)args,&target,&target_guid,&target_name))
|
if(!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(target)
|
if(target)
|
||||||
|
|
@ -4469,7 +4469,7 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args)
|
||||||
Player* target;
|
Player* target;
|
||||||
uint64 target_guid;
|
uint64 target_guid;
|
||||||
std::string target_name;
|
std::string target_name;
|
||||||
if (!extractPlayerTarget((char*)args,&target,&target_guid,&target_name))
|
if (!extractPlayerTarget((char*)args, &target, &target_guid, &target_name))
|
||||||
{
|
{
|
||||||
// Try reset talents as Hunter Pet
|
// Try reset talents as Hunter Pet
|
||||||
Creature* creature = getSelectedCreature();
|
Creature* creature = getSelectedCreature();
|
||||||
|
|
@ -4482,7 +4482,7 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args)
|
||||||
((Player*)owner)->SendTalentsInfoData(true);
|
((Player*)owner)->SendTalentsInfoData(true);
|
||||||
|
|
||||||
ChatHandler((Player*)owner).SendSysMessage(LANG_RESET_PET_TALENTS);
|
ChatHandler((Player*)owner).SendSysMessage(LANG_RESET_PET_TALENTS);
|
||||||
if(!m_session || m_session->GetPlayer()!=((Player*)owner))
|
if(!m_session || m_session->GetPlayer() != ((Player*)owner))
|
||||||
PSendSysMessage(LANG_RESET_PET_TALENTS_ONLINE,GetNameLink((Player*)owner).c_str());
|
PSendSysMessage(LANG_RESET_PET_TALENTS_ONLINE,GetNameLink((Player*)owner).c_str());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -4498,21 +4498,21 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args)
|
||||||
target->resetTalents(true);
|
target->resetTalents(true);
|
||||||
target->SendTalentsInfoData(false);
|
target->SendTalentsInfoData(false);
|
||||||
ChatHandler(target).SendSysMessage(LANG_RESET_TALENTS);
|
ChatHandler(target).SendSysMessage(LANG_RESET_TALENTS);
|
||||||
if (!m_session || m_session->GetPlayer()!=target)
|
if (!m_session || m_session->GetPlayer() != target)
|
||||||
PSendSysMessage(LANG_RESET_TALENTS_ONLINE,GetNameLink(target).c_str());
|
PSendSysMessage(LANG_RESET_TALENTS_ONLINE,GetNameLink(target).c_str());
|
||||||
|
|
||||||
Pet* pet = target->GetPet();
|
Pet* pet = target->GetPet();
|
||||||
Pet::resetTalentsForAllPetsOf(target,pet);
|
Pet::resetTalentsForAllPetsOf(target, pet);
|
||||||
if(pet)
|
if(pet)
|
||||||
target->SendTalentsInfoData(true);
|
target->SendTalentsInfoData(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (target_guid)
|
else if (target_guid)
|
||||||
{
|
{
|
||||||
uint32 at_flags = AT_LOGIN_NONE | AT_LOGIN_RESET_PET_TALENTS;
|
uint32 at_flags = AT_LOGIN_RESET_PET_TALENTS;
|
||||||
CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'",at_flags, GUID_LOPART(target_guid) );
|
CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE guid = '%u'", at_flags, GUID_LOPART(target_guid) );
|
||||||
std::string nameLink = playerLink(target_name);
|
std::string nameLink = playerLink(target_name);
|
||||||
PSendSysMessage(LANG_RESET_TALENTS_OFFLINE,nameLink.c_str());
|
PSendSysMessage(LANG_RESET_TALENTS_OFFLINE, nameLink.c_str());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
#define ARENA_TEAM_CHARTER_3v3_COST 1200000 // 120 G
|
#define ARENA_TEAM_CHARTER_3v3_COST 1200000 // 120 G
|
||||||
#define ARENA_TEAM_CHARTER_5v5 23562
|
#define ARENA_TEAM_CHARTER_5v5 23562
|
||||||
#define ARENA_TEAM_CHARTER_5v5_COST 2000000 // 200 G
|
#define ARENA_TEAM_CHARTER_5v5_COST 2000000 // 200 G
|
||||||
|
#define CHARTER_DISPLAY_ID 16161
|
||||||
|
|
||||||
void WorldSession::HandlePetitionBuyOpcode(WorldPacket & recv_data)
|
void WorldSession::HandlePetitionBuyOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
|
|
@ -148,12 +149,12 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(sObjectMgr.GetGuildByName(name))
|
if(sObjectMgr.GetGuildByName(name))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, name, GUILD_NAME_EXISTS);
|
SendGuildCommandResult(GUILD_CREATE_S, name, ERR_GUILD_NAME_EXISTS_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(sObjectMgr.IsReservedName(name) || !ObjectMgr::IsValidCharterName(name))
|
if(sObjectMgr.IsReservedName(name) || !ObjectMgr::IsValidCharterName(name))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, name, GUILD_NAME_INVALID);
|
SendGuildCommandResult(GUILD_CREATE_S, name, ERR_GUILD_NAME_INVALID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -204,8 +205,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket & recv_data)
|
||||||
_player->SendNewItem(charter, 1, true, false);
|
_player->SendNewItem(charter, 1, true, false);
|
||||||
|
|
||||||
// a petition is invalid, if both the owner and the type matches
|
// a petition is invalid, if both the owner and the type matches
|
||||||
// we checked above, if this player is in an arenateam, so this must be
|
// we checked above, if this player is in an arenateam, so this must be data corruption
|
||||||
// datacorruption
|
|
||||||
QueryResult *result = CharacterDatabase.PQuery("SELECT petitionguid FROM petition WHERE ownerguid = '%u' AND type = '%u'", _player->GetGUIDLow(), type);
|
QueryResult *result = CharacterDatabase.PQuery("SELECT petitionguid FROM petition WHERE ownerguid = '%u' AND type = '%u'", _player->GetGUIDLow(), type);
|
||||||
|
|
||||||
std::ostringstream ssInvalidPetitionGUIDs;
|
std::ostringstream ssInvalidPetitionGUIDs;
|
||||||
|
|
@ -258,7 +258,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket & recv_data)
|
||||||
delete result;
|
delete result;
|
||||||
|
|
||||||
// if guild petition and has guild => error, return;
|
// if guild petition and has guild => error, return;
|
||||||
if(type==9 && _player->GetGuildId())
|
if(type == 9 && _player->GetGuildId())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE petitionguid = '%u'", petitionguid_low);
|
result = CharacterDatabase.PQuery("SELECT playerguid FROM petition_sign WHERE petitionguid = '%u'", petitionguid_low);
|
||||||
|
|
@ -270,18 +270,18 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket & recv_data)
|
||||||
sLog.outDebug("CMSG_PETITION_SHOW_SIGNATURES petition entry: '%u'", petitionguid_low);
|
sLog.outDebug("CMSG_PETITION_SHOW_SIGNATURES petition entry: '%u'", petitionguid_low);
|
||||||
|
|
||||||
WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+1+signs*12));
|
WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+1+signs*12));
|
||||||
data << petitionguid; // petition guid
|
data << uint64(petitionguid); // petition guid
|
||||||
data << _player->GetGUID(); // owner guid
|
data << uint64(_player->GetGUID()); // owner guid
|
||||||
data << petitionguid_low; // guild guid (in mangos always same as GUID_LOPART(petitionguid)
|
data << uint32(petitionguid_low); // guild guid (in mangos always same as GUID_LOPART(petitionguid)
|
||||||
data << signs; // sign's count
|
data << uint8(signs); // sign's count
|
||||||
|
|
||||||
for(uint8 i = 1; i <= signs; ++i)
|
for(uint8 i = 1; i <= signs; ++i)
|
||||||
{
|
{
|
||||||
Field *fields2 = result->Fetch();
|
Field *fields2 = result->Fetch();
|
||||||
uint64 plguid = fields2[0].GetUInt64();
|
uint64 plguid = fields2[0].GetUInt64();
|
||||||
|
|
||||||
data << plguid; // Player GUID
|
data << uint64(plguid); // Player GUID
|
||||||
data << (uint32)0; // there 0 ...
|
data << uint32(0); // there 0 ...
|
||||||
|
|
||||||
result->NextRow();
|
result->NextRow();
|
||||||
}
|
}
|
||||||
|
|
@ -404,12 +404,12 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(sObjectMgr.GetGuildByName(newname))
|
if(sObjectMgr.GetGuildByName(newname))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, newname, GUILD_NAME_EXISTS);
|
SendGuildCommandResult(GUILD_CREATE_S, newname, ERR_GUILD_NAME_EXISTS_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(sObjectMgr.IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
|
if(sObjectMgr.IsReservedName(newname) || !ObjectMgr::IsValidCharterName(newname))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, newname, GUILD_NAME_INVALID);
|
SendGuildCommandResult(GUILD_CREATE_S, newname, ERR_GUILD_NAME_INVALID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -433,8 +433,9 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket & recv_data)
|
||||||
db_newname.c_str(), GUID_LOPART(petitionguid));
|
db_newname.c_str(), GUID_LOPART(petitionguid));
|
||||||
|
|
||||||
sLog.outDebug("Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionguid), newname.c_str());
|
sLog.outDebug("Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionguid), newname.c_str());
|
||||||
|
|
||||||
WorldPacket data(MSG_PETITION_RENAME, (8+newname.size()+1));
|
WorldPacket data(MSG_PETITION_RENAME, (8+newname.size()+1));
|
||||||
data << petitionguid;
|
data << uint64(petitionguid);
|
||||||
data << newname;
|
data << newname;
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
@ -479,7 +480,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
|
||||||
if(type != 9)
|
if(type != 9)
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
||||||
else
|
else
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_NOT_ALLIED);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_NOT_ALLIED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -487,7 +488,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(_player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
if(_player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
||||||
{
|
{
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName(), ERR_ARENA_TEAM_PLAYER_TO_LOW);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -511,12 +512,12 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(_player->GetGuildId())
|
if(_player->GetGuildId())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ALREADY_IN_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ERR_ALREADY_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(_player->GetGuildIdInvited())
|
if(_player->GetGuildIdInvited())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ALREADY_INVITED_TO_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ERR_ALREADY_INVITED_TO_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -532,9 +533,9 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
delete result;
|
delete result;
|
||||||
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
|
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
|
||||||
data << petitionguid;
|
data << uint64(petitionguid);
|
||||||
data << _player->GetGUID();
|
data << uint64(_player->GetGUID());
|
||||||
data << (uint32)PETITION_SIGN_ALREADY_SIGNED;
|
data << uint32(PETITION_SIGN_ALREADY_SIGNED);
|
||||||
|
|
||||||
// close at signer side
|
// close at signer side
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
|
|
@ -550,9 +551,9 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket & recv_data)
|
||||||
sLog.outDebug("PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionguid), _player->GetName(),plguidlo,GetAccountId());
|
sLog.outDebug("PETITION SIGN: GUID %u by player: %s (GUID: %u Account: %u)", GUID_LOPART(petitionguid), _player->GetName(),plguidlo,GetAccountId());
|
||||||
|
|
||||||
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
|
WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4));
|
||||||
data << petitionguid;
|
data << uint64(petitionguid);
|
||||||
data << _player->GetGUID();
|
data << uint64(_player->GetGUID());
|
||||||
data << (uint32)PETITION_SIGN_OK;
|
data << uint32(PETITION_SIGN_OK);
|
||||||
|
|
||||||
// close at signer side
|
// close at signer side
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
|
|
@ -589,7 +590,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket & recv_data)
|
||||||
if(owner) // petition owner online
|
if(owner) // petition owner online
|
||||||
{
|
{
|
||||||
WorldPacket data(MSG_PETITION_DECLINE, 8);
|
WorldPacket data(MSG_PETITION_DECLINE, 8);
|
||||||
data << _player->GetGUID();
|
data << uint64(_player->GetGUID());
|
||||||
owner->GetSession()->SendPacket(&data);
|
owner->GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -626,7 +627,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
|
||||||
if(type != 9)
|
if(type != 9)
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED);
|
||||||
else
|
else
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_NOT_ALLIED);
|
SendGuildCommandResult(GUILD_CREATE_S, "", ERR_GUILD_NOT_ALLIED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -635,7 +636,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
|
||||||
if(player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
if(player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL))
|
||||||
{
|
{
|
||||||
// player is too low level to join an arena team
|
// player is too low level to join an arena team
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName(), "", ERR_ARENA_TEAM_PLAYER_TO_LOW);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName(), "", ERR_ARENA_TEAM_TARGET_TOO_LOW_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -660,13 +661,13 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(player->GetGuildId())
|
if(player->GetGuildId())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ALREADY_IN_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ERR_ALREADY_IN_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player->GetGuildIdInvited())
|
if(player->GetGuildIdInvited())
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ALREADY_INVITED_TO_GUILD);
|
SendGuildCommandResult(GUILD_INVITE_S, _player->GetName(), ERR_ALREADY_INVITED_TO_GUILD_S);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -677,18 +678,18 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket & recv_data)
|
||||||
signs = (uint8)result->GetRowCount();
|
signs = (uint8)result->GetRowCount();
|
||||||
|
|
||||||
WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+signs+signs*12));
|
WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+signs+signs*12));
|
||||||
data << petitionguid; // petition guid
|
data << uint64(petitionguid); // petition guid
|
||||||
data << _player->GetGUID(); // owner guid
|
data << uint64(_player->GetGUID()); // owner guid
|
||||||
data << GUID_LOPART(petitionguid); // guild guid (in mangos always same as GUID_LOPART(petition guid)
|
data << uint32(GUID_LOPART(petitionguid)); // guild guid (in mangos always same as GUID_LOPART(petition guid)
|
||||||
data << signs; // sign's count
|
data << uint8(signs); // sign's count
|
||||||
|
|
||||||
for(uint8 i = 1; i <= signs; ++i)
|
for(uint8 i = 1; i <= signs; ++i)
|
||||||
{
|
{
|
||||||
Field *fields2 = result->Fetch();
|
Field *fields2 = result->Fetch();
|
||||||
plguid = fields2[0].GetUInt64();
|
plguid = fields2[0].GetUInt64();
|
||||||
|
|
||||||
data << plguid; // Player GUID
|
data << uint64(plguid); // Player GUID
|
||||||
data << (uint32)0; // there 0 ...
|
data << uint32(0); // there 0 ...
|
||||||
|
|
||||||
result->NextRow();
|
result->NextRow();
|
||||||
}
|
}
|
||||||
|
|
@ -734,7 +735,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
if(_player->GetGuildId())
|
if(_player->GetGuildId())
|
||||||
{
|
{
|
||||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||||
data << (uint32)PETITION_TURN_ALREADY_IN_GUILD; // already in guild
|
data << uint32(PETITION_TURN_ALREADY_IN_GUILD); // already in guild
|
||||||
_player->GetSession()->SendPacket(&data);
|
_player->GetSession()->SendPacket(&data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -748,7 +749,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
if(_player->GetArenaTeamId(slot))
|
if(_player->GetArenaTeamId(slot))
|
||||||
{
|
{
|
||||||
//data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
//data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||||
//data << (uint32)PETITION_TURN_ALREADY_IN_GUILD; // already in guild
|
//data << (uint32)PETITION_TURN_ALREADY_IN_GUILD; // already in guild
|
||||||
//_player->GetSession()->SendPacket(&data);
|
//_player->GetSession()->SendPacket(&data);
|
||||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
|
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM);
|
||||||
return;
|
return;
|
||||||
|
|
@ -771,11 +772,11 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
if(type == 9)
|
if(type == 9)
|
||||||
count = sWorld.getConfig(CONFIG_MIN_PETITION_SIGNS);
|
count = sWorld.getConfig(CONFIG_MIN_PETITION_SIGNS);
|
||||||
else
|
else
|
||||||
count = type-1;
|
count = type - 1;
|
||||||
if(signs < count)
|
if(signs < count)
|
||||||
{
|
{
|
||||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||||
data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES; // need more signatures...
|
data << uint32(PETITION_TURN_NEED_MORE_SIGNATURES); // need more signatures...
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
delete result;
|
delete result;
|
||||||
return;
|
return;
|
||||||
|
|
@ -785,7 +786,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
{
|
{
|
||||||
if(sObjectMgr.GetGuildByName(name))
|
if(sObjectMgr.GetGuildByName(name))
|
||||||
{
|
{
|
||||||
SendGuildCommandResult(GUILD_CREATE_S, name, GUILD_NAME_EXISTS);
|
SendGuildCommandResult(GUILD_CREATE_S, name, ERR_GUILD_NAME_EXISTS_S);
|
||||||
delete result;
|
delete result;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -811,7 +812,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
// OK!
|
// OK!
|
||||||
|
|
||||||
// delete charter item
|
// delete charter item
|
||||||
_player->DestroyItem(item->GetBagSlot(),item->GetSlot(), true);
|
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
|
||||||
|
|
||||||
if(type == 9) // create guild
|
if(type == 9) // create guild
|
||||||
{
|
{
|
||||||
|
|
@ -876,7 +877,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data)
|
||||||
sLog.outDebug("TURN IN PETITION GUID %u", GUID_LOPART(petitionguid));
|
sLog.outDebug("TURN IN PETITION GUID %u", GUID_LOPART(petitionguid));
|
||||||
|
|
||||||
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4);
|
||||||
data << (uint32)PETITION_TURN_OK;
|
data << uint32(PETITION_TURN_OK);
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -911,13 +912,13 @@ void WorldSession::SendPetitionShowList(uint64 guid)
|
||||||
count = 3;
|
count = 3;
|
||||||
|
|
||||||
WorldPacket data(SMSG_PETITION_SHOWLIST, 8+1+4*6);
|
WorldPacket data(SMSG_PETITION_SHOWLIST, 8+1+4*6);
|
||||||
data << guid; // npc guid
|
data << uint64(guid); // npc guid
|
||||||
data << count; // count
|
data << uint8(count); // count
|
||||||
if(count == 1)
|
if(count == 1)
|
||||||
{
|
{
|
||||||
data << uint32(1); // index
|
data << uint32(1); // index
|
||||||
data << uint32(GUILD_CHARTER); // charter entry
|
data << uint32(GUILD_CHARTER); // charter entry
|
||||||
data << uint32(16161); // charter display id
|
data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||||
data << uint32(GUILD_CHARTER_COST); // charter cost
|
data << uint32(GUILD_CHARTER_COST); // charter cost
|
||||||
data << uint32(0); // unknown
|
data << uint32(0); // unknown
|
||||||
data << uint32(9); // required signs?
|
data << uint32(9); // required signs?
|
||||||
|
|
@ -927,33 +928,33 @@ void WorldSession::SendPetitionShowList(uint64 guid)
|
||||||
// 2v2
|
// 2v2
|
||||||
data << uint32(1); // index
|
data << uint32(1); // index
|
||||||
data << uint32(ARENA_TEAM_CHARTER_2v2); // charter entry
|
data << uint32(ARENA_TEAM_CHARTER_2v2); // charter entry
|
||||||
data << uint32(16161); // charter display id
|
data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||||
data << uint32(ARENA_TEAM_CHARTER_2v2_COST); // charter cost
|
data << uint32(ARENA_TEAM_CHARTER_2v2_COST); // charter cost
|
||||||
data << uint32(2); // unknown
|
data << uint32(2); // unknown
|
||||||
data << uint32(2); // required signs?
|
data << uint32(2); // required signs?
|
||||||
// 3v3
|
// 3v3
|
||||||
data << uint32(2); // index
|
data << uint32(2); // index
|
||||||
data << uint32(ARENA_TEAM_CHARTER_3v3); // charter entry
|
data << uint32(ARENA_TEAM_CHARTER_3v3); // charter entry
|
||||||
data << uint32(16161); // charter display id
|
data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||||
data << uint32(ARENA_TEAM_CHARTER_3v3_COST); // charter cost
|
data << uint32(ARENA_TEAM_CHARTER_3v3_COST); // charter cost
|
||||||
data << uint32(3); // unknown
|
data << uint32(3); // unknown
|
||||||
data << uint32(3); // required signs?
|
data << uint32(3); // required signs?
|
||||||
// 5v5
|
// 5v5
|
||||||
data << uint32(3); // index
|
data << uint32(3); // index
|
||||||
data << uint32(ARENA_TEAM_CHARTER_5v5); // charter entry
|
data << uint32(ARENA_TEAM_CHARTER_5v5); // charter entry
|
||||||
data << uint32(16161); // charter display id
|
data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||||
data << uint32(ARENA_TEAM_CHARTER_5v5_COST); // charter cost
|
data << uint32(ARENA_TEAM_CHARTER_5v5_COST); // charter cost
|
||||||
data << uint32(5); // unknown
|
data << uint32(5); // unknown
|
||||||
data << uint32(5); // required signs?
|
data << uint32(5); // required signs?
|
||||||
}
|
}
|
||||||
//for(uint8 i = 0; i < count; ++i)
|
//for(uint8 i = 0; i < count; ++i)
|
||||||
//{
|
//{
|
||||||
// data << uint32(i); // index
|
// data << uint32(i); // index
|
||||||
// data << uint32(GUILD_CHARTER); // charter entry
|
// data << uint32(GUILD_CHARTER); // charter entry
|
||||||
// data << uint32(16161); // charter display id
|
// data << uint32(CHARTER_DISPLAY_ID); // charter display id
|
||||||
// data << uint32(GUILD_CHARTER_COST+i); // charter cost
|
// data << uint32(GUILD_CHARTER_COST+i); // charter cost
|
||||||
// data << uint32(0); // unknown
|
// data << uint32(0); // unknown
|
||||||
// data << uint32(9); // required signs?
|
// data << uint32(9); // required signs?
|
||||||
//}
|
//}
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
sLog.outDebug("Sent SMSG_PETITION_SHOWLIST");
|
sLog.outDebug("Sent SMSG_PETITION_SHOWLIST");
|
||||||
|
|
|
||||||
|
|
@ -376,7 +376,7 @@ void WorldSession::LogoutPlayer(bool Save)
|
||||||
|
|
||||||
///- Reset the online field in the account table
|
///- Reset the online field in the account table
|
||||||
// no point resetting online in character table here as Player::SaveToDB() will set it to 1 since player has not been removed from world at this stage
|
// no point resetting online in character table here as Player::SaveToDB() will set it to 1 since player has not been removed from world at this stage
|
||||||
//No SQL injection as AccountID is uint32
|
// No SQL injection as AccountID is uint32
|
||||||
loginDatabase.PExecute("UPDATE account SET active_realm_id = 0 WHERE id = '%u'", GetAccountId());
|
loginDatabase.PExecute("UPDATE account SET active_realm_id = 0 WHERE id = '%u'", GetAccountId());
|
||||||
|
|
||||||
///- If the player is in a guild, update the guild roster and broadcast a logout message to other guild members
|
///- If the player is in a guild, update the guild roster and broadcast a logout message to other guild members
|
||||||
|
|
@ -386,16 +386,11 @@ void WorldSession::LogoutPlayer(bool Save)
|
||||||
guild->SetMemberStats(_player->GetGUID());
|
guild->SetMemberStats(_player->GetGUID());
|
||||||
guild->UpdateLogoutTime(_player->GetGUID());
|
guild->UpdateLogoutTime(_player->GetGUID());
|
||||||
|
|
||||||
WorldPacket data(SMSG_GUILD_EVENT, (1+1+12+8)); // name limited to 12 in character table.
|
guild->BroadcastEvent(GE_SIGNED_OFF, _player->GetGUID(), 1, _player->GetName(), "", "");
|
||||||
data<<(uint8)GE_SIGNED_OFF;
|
|
||||||
data<<(uint8)1;
|
|
||||||
data<<_player->GetName();
|
|
||||||
data<<_player->GetGUID();
|
|
||||||
guild->BroadcastPacket(&data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///- Remove pet
|
///- Remove pet
|
||||||
_player->RemovePet(NULL,PET_SAVE_AS_CURRENT, true);
|
_player->RemovePet(NULL, PET_SAVE_AS_CURRENT, true);
|
||||||
|
|
||||||
///- empty buyback items and save the player in the database
|
///- empty buyback items and save the player in the database
|
||||||
// some save parts only correctly work in case player present in map/player_lists (pets, etc)
|
// some save parts only correctly work in case player present in map/player_lists (pets, etc)
|
||||||
|
|
|
||||||
|
|
@ -243,7 +243,6 @@ class MANGOS_DLL_SPEC WorldSession
|
||||||
// Guild/Arena Team
|
// Guild/Arena Team
|
||||||
void SendGuildCommandResult(uint32 typecmd, const std::string& str, uint32 cmdresult);
|
void SendGuildCommandResult(uint32 typecmd, const std::string& str, uint32 cmdresult);
|
||||||
void SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id);
|
void SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id);
|
||||||
void BuildArenaTeamEventPacket(WorldPacket *data, uint8 eventid, uint8 str_count, const std::string& str1, const std::string& str2, const std::string& str3);
|
|
||||||
void SendNotInArenaTeamPacket(uint8 type);
|
void SendNotInArenaTeamPacket(uint8 type);
|
||||||
void SendPetitionShowList( uint64 guid );
|
void SendPetitionShowList( uint64 guid );
|
||||||
void SendSaveGuildEmblem( uint32 msg );
|
void SendSaveGuildEmblem( uint32 msg );
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9352"
|
#define REVISION_NR "9353"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue