2010-10-07 15:35:36 +02:00
/*
2012-01-01 00:32:13 +01:00
* Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
2010-10-07 15:35:36 +02:00
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
2008-10-02 16:23:55 -05:00
*/
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
#include "Common.h"
#include "WorldPacket.h"
#include "WorldSession.h"
#include "World.h"
#include "ObjectMgr.h"
2011-05-04 10:08:09 +02:00
#include "GuildMgr.h"
2008-10-02 16:23:55 -05:00
#include "Log.h"
#include "Opcodes.h"
#include "Guild.h"
#include "GossipDef.h"
#include "SocialMgr.h"
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
// Helper for getting guild object of session's player.
// If guild does not exist, sends error (if necessary).
inline Guild * _GetPlayerGuild ( WorldSession * session , bool sendError = false )
{
if ( uint32 guildId = session -> GetPlayer () -> GetGuildId ()) // If guild id = 0, player is not in guild
2011-10-07 10:54:53 -05:00
if ( Guild * guild = sGuildMgr -> GetGuildById ( guildId )) // Find guild by id
return guild ;
2010-10-17 19:54:13 +06:00
if ( sendError )
Guild :: SendCommandResult ( session , GUILD_CREATE_S , ERR_GUILD_PLAYER_NOT_IN_GUILD );
return NULL ;
}
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildQueryOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_QUERY" );
2009-10-17 15:51:44 -07:00
2009-12-17 11:14:55 +01:00
uint32 guildId ;
2008-10-02 16:23:55 -05:00
recvPacket >> guildId ;
2010-10-17 19:54:13 +06:00
// Use received guild id to access guild method (not player's guild id)
2011-10-07 10:54:53 -05:00
if ( Guild * guild = sGuildMgr -> GetGuildById ( guildId ))
guild -> HandleQuery ( this );
2010-10-17 19:54:13 +06:00
else
Guild :: SendCommandResult ( this , GUILD_CREATE_S , ERR_GUILD_PLAYER_NOT_IN_GUILD );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildCreateOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_CREATE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string name ;
recvPacket >> name ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( ! GetPlayer () -> GetGuildId ()) // Player cannot be in guild
2008-10-02 16:23:55 -05:00
{
2011-10-07 10:54:53 -05:00
Guild * guild = new Guild ();
if ( guild -> Create ( GetPlayer (), name ))
sGuildMgr -> AddGuild ( guild );
2010-10-17 19:54:13 +06:00
else
2011-10-07 10:54:53 -05:00
delete guild ;
2008-10-02 16:23:55 -05:00
}
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildInviteOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_INVITE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string invitedName ;
recvPacket >> invitedName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( invitedName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleInviteMember ( this , invitedName );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildRemoveOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_REMOVE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string playerName ;
recvPacket >> playerName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( playerName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleRemoveMember ( this , playerName );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildAcceptOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_ACCEPT" );
2010-10-17 19:54:13 +06:00
// Player cannot be in guild
if ( ! GetPlayer () -> GetGuildId ())
// Guild where player was invited must exist
2011-10-07 10:54:53 -05:00
if ( Guild * guild = sGuildMgr -> GetGuildById ( GetPlayer () -> GetGuildIdInvited ()))
guild -> HandleAcceptMember ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildDeclineOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_DECLINE" );
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
GetPlayer () -> SetGuildIdInvited ( 0 );
GetPlayer () -> SetInGuild ( 0 );
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildInfoOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_INFO" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> SendInfo ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildRosterOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_ROSTER" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleRoster ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildPromoteOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_PROMOTE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string playerName ;
recvPacket >> playerName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( playerName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleUpdateMemberRank ( this , playerName , false );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildDemoteOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_DEMOTE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string playerName ;
recvPacket >> playerName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( playerName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleUpdateMemberRank ( this , playerName , true );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildLeaveOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_LEAVE" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleLeaveMember ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildDisbandOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_DISBAND" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleDisband ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildLeaderOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_LEADER" );
2009-10-17 15:51:44 -07:00
2009-12-17 11:14:55 +01:00
std :: string name ;
2008-10-02 16:23:55 -05:00
recvPacket >> name ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( name ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleSetLeader ( this , name );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildMOTDOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_MOTD" );
2009-12-17 11:14:55 +01:00
2010-10-17 19:54:13 +06:00
std :: string motd ; // Empty by default
2010-04-07 19:14:10 +02:00
if ( ! recvPacket . empty ())
2010-10-17 19:54:13 +06:00
recvPacket >> motd ;
2009-12-17 11:14:55 +01:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleSetMOTD ( this , motd );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildSetPublicNoteOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string playerName ;
recvPacket >> playerName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string publicNote ;
recvPacket >> publicNote ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( playerName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleSetMemberNote ( this , playerName , publicNote , false );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildSetOfficerNoteOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string playerName ;
recvPacket >> playerName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string officerNote ;
recvPacket >> officerNote ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( normalizePlayerName ( playerName ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleSetMemberNote ( this , playerName , officerNote , true );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildRankOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_RANK" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
Guild * guild = _GetPlayerGuild ( this , true );
if ( ! guild )
2008-10-02 16:23:55 -05:00
{
2010-10-17 19:54:13 +06:00
recvPacket . rpos ( recvPacket . wpos ());
2008-10-02 16:23:55 -05:00
return ;
}
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint32 rankId ;
2008-10-02 16:23:55 -05:00
recvPacket >> rankId ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint32 rights ;
recvPacket >> rights ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string rankName ;
recvPacket >> rankName ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint32 money ;
recvPacket >> money ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
GuildBankRightsAndSlotsVec rightsAndSlots ( GUILD_BANK_MAX_TABS );
for ( uint8 tabId = 0 ; tabId < GUILD_BANK_MAX_TABS ; ++ tabId )
{
uint32 bankRights ;
uint32 slots ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
recvPacket >> bankRights ;
recvPacket >> slots ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
rightsAndSlots [ tabId ] = GuildBankRightsAndSlots ( uint8 ( bankRights ), slots );
}
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
guild -> HandleSetRankInfo ( this , rankId , rankName , rights , money , rightsAndSlots );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildAddRankOpcode ( WorldPacket & recvPacket )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_ADD_RANK" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string rankName ;
recvPacket >> rankName ;
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleAddNewRank ( this , rankName );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
void WorldSession :: HandleGuildDelRankOpcode ( WorldPacket & /*recvPacket*/ )
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_DEL_RANK" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleRemoveLowestRank ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void WorldSession :: HandleGuildChangeInfoTextOpcode ( WorldPacket & recvPacket )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_GUILD_INFO_TEXT" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string info ;
recvPacket >> info ;
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this , true ))
guild -> HandleSetInfo ( this , info );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void WorldSession :: HandleSaveGuildEmblemOpcode ( WorldPacket & recvPacket )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received MSG_SAVE_GUILD_EMBLEM" );
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
uint64 vendorGuid ;
recvPacket >> vendorGuid ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
EmblemInfo emblemInfo ;
emblemInfo . ReadPacket ( recvPacket );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( GetPlayer () -> GetNPCIfCanInteractWith ( vendorGuid , UNIT_NPC_FLAG_TABARDDESIGNER ))
2008-10-02 16:23:55 -05:00
{
2010-10-17 19:54:13 +06:00
// Remove fake death
2010-12-17 13:43:24 +01:00
if ( GetPlayer () -> HasUnitState ( UNIT_STAT_DIED ))
2010-10-17 19:54:13 +06:00
GetPlayer () -> RemoveAurasByType ( SPELL_AURA_FEIGN_DEATH );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleSetEmblem ( this , emblemInfo );
2010-10-17 19:54:13 +06:00
else
2011-10-07 10:54:53 -05:00
// "You are not part of a guild!";
2010-10-17 19:54:13 +06:00
Guild :: SendSaveEmblemResult ( this , ERR_GUILDEMBLEM_NOGUILD );
2008-10-02 16:23:55 -05:00
}
2010-10-17 19:54:13 +06:00
else
2008-10-02 16:23:55 -05:00
{
2010-10-17 19:54:13 +06:00
// "That's not an emblem vendor!"
Guild :: SendSaveEmblemResult ( this , ERR_GUILDEMBLEM_INVALIDVENDOR );
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: HandleSaveGuildEmblemOpcode - Unit (GUID: %u) not found or you can't interact with him." , GUID_LOPART ( vendorGuid ));
2008-10-02 16:23:55 -05:00
}
}
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void WorldSession :: HandleGuildEventLogQueryOpcode ( WorldPacket & /* recvPacket */ )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (MSG_GUILD_EVENT_LOG_QUERY)" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendEventLog ( this );
2010-10-17 19:54:13 +06:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankMoneyWithdrawn ( WorldPacket & /* recv_data */ )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (MSG_GUILD_BANK_MONEY_WITHDRAWN)" );
2010-10-17 19:54:13 +06:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendMoneyInfo ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildPermissions ( WorldPacket & /* recv_data */ )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (MSG_GUILD_PERMISSIONS)" );
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendPermissions ( this );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
// Called when clicking on Guild bank gameobject
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankerActivate ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANKER_ACTIVATE)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
2010-10-17 19:54:13 +06:00
recv_data >> GoGuid ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 unk ;
recv_data >> unk ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2008-10-02 16:23:55 -05:00
{
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendBankTabsInfo ( this );
2010-12-13 22:37:56 +01:00
else
2010-10-17 19:54:13 +06:00
Guild :: SendCommandResult ( this , GUILD_UNK1 , ERR_GUILD_PLAYER_NOT_IN_GUILD );
2008-10-02 16:23:55 -05:00
}
}
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
// Called when opening guild bank tab only (first one)
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankQueryTab ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_QUERY_TAB)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
2010-10-17 19:54:13 +06:00
recv_data >> GoGuid ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 unk1 ;
recv_data >> unk1 ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendBankTabData ( this , tabId );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankDepositMoney ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_DEPOSIT_MONEY)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
2010-10-17 19:54:13 +06:00
recv_data >> GoGuid ;
2010-08-21 03:19:25 +02:00
2010-10-17 19:54:13 +06:00
uint32 money ;
recv_data >> money ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
if ( money && GetPlayer () -> HasEnoughMoney ( money ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleMemberDepositMoney ( this , money );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankWithdrawMoney ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_WITHDRAW_MONEY)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
2010-10-17 19:54:13 +06:00
recv_data >> GoGuid ;
2010-08-21 03:19:25 +02:00
2010-10-17 19:54:13 +06:00
uint32 money ;
recv_data >> money ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( money )
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleMemberWithdrawMoney ( this , money );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankSwapItems ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_SWAP_ITEMS)" );
2009-10-17 15:51:44 -07:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
2010-10-17 19:54:13 +06:00
recv_data >> GoGuid ;
2009-12-17 11:14:55 +01:00
2010-10-17 19:54:13 +06:00
if ( ! GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2009-12-17 11:14:55 +01:00
{
2011-09-05 14:54:19 +02:00
recv_data . rfinish (); // Prevent additional spam at rejected packet
2009-12-17 11:14:55 +01:00
return ;
}
2011-10-07 10:54:53 -05:00
Guild * guild = _GetPlayerGuild ( this );
if ( ! guild )
2009-12-17 11:14:55 +01:00
{
2011-09-05 14:54:19 +02:00
recv_data . rfinish (); // Prevent additional spam at rejected packet
2009-12-17 11:14:55 +01:00
return ;
}
2010-10-17 19:54:13 +06:00
uint8 bankToBank ;
recv_data >> bankToBank ;
uint8 tabId ;
uint8 slotId ;
uint32 itemEntry ;
uint32 splitedAmount = 0 ;
if ( bankToBank )
2008-10-02 16:23:55 -05:00
{
2010-10-17 19:54:13 +06:00
uint8 destTabId ;
recv_data >> destTabId ;
uint8 destSlotId ;
recv_data >> destSlotId ;
recv_data . read_skip < uint32 > (); // Always 0
recv_data >> tabId ;
recv_data >> slotId ;
recv_data >> itemEntry ;
recv_data . read_skip < uint8 > (); // Always 0
recv_data >> splitedAmount ;
2011-10-07 10:54:53 -05:00
guild -> SwapItems ( GetPlayer (), tabId , slotId , destTabId , destSlotId , splitedAmount );
2008-10-02 16:23:55 -05:00
}
else
{
2010-10-17 19:54:13 +06:00
uint8 playerBag = NULL_BAG ;
uint8 playerSlotId = NULL_SLOT ;
uint8 toChar = 1 ;
recv_data >> tabId ;
recv_data >> slotId ;
recv_data >> itemEntry ;
uint8 autoStore ;
recv_data >> autoStore ;
if ( autoStore )
2008-10-02 16:23:55 -05:00
{
2010-12-06 02:07:53 +01:00
recv_data . read_skip < uint32 > (); // autoStoreCount
2010-10-17 19:54:13 +06:00
recv_data . read_skip < uint8 > (); // ToChar (?), always and expected to be 1 (autostore only triggered in Bank -> Char)
recv_data . read_skip < uint32 > (); // Always 0
2008-10-02 16:23:55 -05:00
}
2009-08-19 17:07:21 -05:00
else
2008-10-02 16:23:55 -05:00
{
2010-10-17 19:54:13 +06:00
recv_data >> playerBag ;
recv_data >> playerSlotId ;
recv_data >> toChar ;
recv_data >> splitedAmount ;
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
// Player <-> Bank
// Allow to work with inventory only
if ( ! Player :: IsInventoryPos ( playerBag , playerSlotId ) && ! ( playerBag == NULL_BAG && playerSlotId == NULL_SLOT ))
GetPlayer () -> SendEquipError ( EQUIP_ERR_NONE , NULL );
else
2011-10-07 10:54:53 -05:00
guild -> SwapItemsWithInventory ( GetPlayer (), toChar , tabId , slotId , playerBag , playerSlotId , splitedAmount );
2008-10-02 16:23:55 -05:00
}
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankBuyTab ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_BUY_TAB)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
recv_data >> GoGuid ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleBuyBankTab ( this , tabId );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankUpdateTab ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (CMSG_GUILD_BANK_UPDATE_TAB)" );
2009-12-17 11:14:55 +01:00
2008-10-02 16:23:55 -05:00
uint64 GoGuid ;
recv_data >> GoGuid ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
std :: string name ;
recv_data >> name ;
2009-12-17 11:14:55 +01:00
2010-10-17 19:54:13 +06:00
std :: string icon ;
recv_data >> icon ;
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
if ( ! name . empty () && ! icon . empty ())
if ( GetPlayer () -> GetGameObjectIfCanInteractWith ( GoGuid , GAMEOBJECT_TYPE_GUILD_BANK ))
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> HandleSetBankTabInfo ( this , tabId , name , icon );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2010-04-07 22:59:46 +02:00
void WorldSession :: HandleGuildBankLogQuery ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received (MSG_GUILD_BANK_LOG_QUERY)" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendBankLog ( this , tabId );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void WorldSession :: HandleQueryGuildBankTabText ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received MSG_QUERY_GUILD_BANK_TEXT" );
2009-10-17 15:51:44 -07:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-12-17 11:14:55 +01:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SendBankTabText ( this , tabId );
2008-10-02 16:23:55 -05:00
}
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void WorldSession :: HandleSetGuildBankTabText ( WorldPacket & recv_data )
2008-10-02 16:23:55 -05:00
{
2011-02-20 20:16:34 +01:00
sLog -> outDebug ( LOG_FILTER_NETWORKIO , "WORLD: Received CMSG_SET_GUILD_BANK_TEXT" );
2009-12-17 11:14:55 +01:00
2010-10-17 19:54:13 +06:00
uint8 tabId ;
recv_data >> tabId ;
2009-12-17 11:14:55 +01:00
2010-10-17 19:54:13 +06:00
std :: string text ;
recv_data >> text ;
2009-10-17 15:51:44 -07:00
2011-10-07 10:54:53 -05:00
if ( Guild * guild = _GetPlayerGuild ( this ))
guild -> SetBankTabText ( tabId , text );
2008-10-02 16:23:55 -05:00
}