Example #1
0
void WorldSession::HandleReadyCheckOpcode(WorldPacket& recv_data)
{
	CHECK_INWORLD_RETURN();
	Group * pGroup  = _player->GetGroup();
	if(!pGroup || ! _player->IsInWorld())
		return;

	if(recv_data.size() == 0)
	{
		if(pGroup->GetLeader() == _player->m_playerInfo || pGroup->GetAssistantLeader() == _player->m_playerInfo)
		{
			/* send packet to group */
			WorldPacket data(MSG_RAID_READY_CHECK, 8);
			data << _player->GetGUID();
			pGroup->SendPacketToAll(&data);
		}
		else
		{
			SendNotification(NOTIFICATION_MESSAGE_NO_PERMISSION);
		}
	}
	else
	{
		uint8 ready;
		recv_data >> ready;

		WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 8);
		data << _player->GetGUID();
		data << ready;

		if(pGroup->GetLeader() && pGroup->GetLeader()->m_loggedInPlayer)
			pGroup->GetLeader()->m_loggedInPlayer->GetSession()->SendPacket(&data);
	}
}
Example #2
0
void WorldSession::HandleGroupAssistantLeader(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	uint64 guid;
	uint8 on;

	if(_player->GetGroup() == NULL)
		return;

	if ( _player->GetGroup()->GetLeader() != _player->m_playerInfo )   //access denied
	{
		SendPartyCommandResult(_player, 0, "", ERR_PARTY_YOU_ARE_NOT_LEADER);
		return;
	}

	recv_data >> guid >> on;
	if(on == 0)
        _player->GetGroup()->SetAssistantLeader(NULL);
	else
	{
		PlayerInfo * np = objmgr.GetPlayerInfo((uint32)guid);
		if(np==NULL)
			_player->GetGroup()->SetAssistantLeader(NULL);
		else
		{
			if(_player->GetGroup()->HasMember(np))
				_player->GetGroup()->SetAssistantLeader(np);
		}
	}
}
Example #3
0
void WorldSession::HandleDuelAccepted(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	if( _player->DuelingWith == NULL )
		return;

	if( _player->m_duelState != DUEL_STATE_FINISHED )
		return;

	if( _player->m_duelCountdownTimer > 0 )
		return;

	_player->m_duelStatus = DUEL_STATUS_INBOUNDS;
	_player->DuelingWith->m_duelStatus = DUEL_STATUS_INBOUNDS;

	_player->m_duelState = DUEL_STATE_STARTED;
	_player->DuelingWith->m_duelState = DUEL_STATE_STARTED;

	WorldPacket data( SMSG_DUEL_COUNTDOWN, 4 );
	data << uint32( 3000 );

	SendPacket( &data );
	_player->DuelingWith->m_session->SendPacket( &data );

	_player->m_duelCountdownTimer = 3000;

	sEventMgr.AddEvent(_player, &Player::DuelCountdown, EVENT_PLAYER_DUEL_COUNTDOWN, 1000, 3,0);
}
Example #4
0
void WorldSession::HandleGuildBankSwapItem(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	uint64 guid;
	uint8 source_isfrombank;
	recv_data >> guid >> source_isfrombank;
	if(source_isfrombank)
	{
		uint8 autostore;
		uint8 dest_bank;
		uint8 dest_bankslot;
		uint8 source_bank;
		uint8 source_bankslot;
		int32 splitted_count;
		uint32 itementry;

		/* read packet */
		recv_data >> dest_bank;
		recv_data >> dest_bankslot;
		recv_data.read_skip<uint32>();
		recv_data >> source_bank;
		recv_data >> source_bankslot;

		recv_data >> itementry;
		recv_data >> autostore;
		recv_data >> splitted_count;

		guildmgr.Packet_WithdrawItem(this, dest_bank, dest_bankslot, source_bank, source_bankslot, itementry, autostore, splitted_count);
	}
	else
	{
Example #5
0
void WorldSession::HandleGuildBankBuyTab(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	uint64 guid;
	recv_data >> guid;

	guildmgr.Packet_BuyBankTab(this, guid);
}
Example #6
0
void WorldSession::HandleGuildSetOfficerNote(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	string target, newnote;
	recv_data >> target >> newnote;

	guildmgr.Packet_SetOfficerNote(this, target, newnote);
}
Example #7
0
void WorldSession::HandleSetGuildInformation(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 1);
	std::string NewGuildInfo;
	recv_data >> NewGuildInfo;

	guildmgr.Packet_SetGuildInformation(this, NewGuildInfo);
}
Example #8
0
void WorldSession::HandleGuildMotd(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	std::string motd = "";
	if(recv_data.size())
		recv_data >> motd;

	guildmgr.Packet_SetMotd(this, motd);
}
Example #9
0
void WorldSession::HandleGuildQuery(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 4);

	uint32 guildId;
	recv_data >> guildId;

	guildmgr.Packet_SendGuildQuery(this, guildId);
}
Example #10
0
void WorldSession::HandleInviteToGuild(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 1);

	std::string inviteeName;
	recv_data >> inviteeName;

	guildmgr.Packet_HandleGuildInvite(this, inviteeName);
}
Example #11
0
void WorldSession::HandleGuildAddRank(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	string rankName;
	recv_data >> rankName;
	if(rankName.size() < 2)
		return;

	guildmgr.Packet_HandleAddRank(this, rankName);
}
Example #12
0
void WorldSession::HandleGuildDemote(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 1);

	std::string demoteeName;
	recv_data >> demoteeName;

	guildmgr.Packet_DemoteGuildMember(this, demoteeName);
}
Example #13
0
void WorldSession::HandlePetAction(WorldPacket & recv_data)
{
    CHECK_INWORLD_RETURN();
    uint64 petGuid = 0;
    uint16 misc = 0;
    uint16 action = 0;
    uint64 targetguid = 0;
    recv_data >> petGuid;
    recv_data >> misc;
    recv_data >> action;

    if(GUID_HIPART(petGuid) == HIGHGUID_TYPE_CREATURE)
    {
        Creature* pCharm = GetPlayer()->GetMapMgr()->GetCreature(GUID_LOPART(petGuid));
        if(!pCharm)
            return;

        // must be a mind controled creature..
        if(action == PET_ACTION_ACTION)
        {
            switch(misc)
            {
            case PET_ACTION_ATTACK:
                {
                    if(!sEventMgr.HasEvent(_player, EVENT_PLAYER_CHARM_ATTACK))
                    {
                        uint32 timer = pCharm->GetUInt32Value(UNIT_FIELD_BASEATTACKTIME);
                        if(!timer) timer = 2000;

                        sEventMgr.AddEvent(_player, &Player::_EventCharmAttack, EVENT_PLAYER_CHARM_ATTACK, timer, 0,0);
                        _player->_EventCharmAttack();
                    }
                }break;
            }
        }
        return;
    }

    Pet* pPet = _player->GetMapMgr()->GetPet(GUID_LOPART(petGuid));
    if(pPet == NULL)
        return;
    if(!pPet->isAlive())
    {
        pPet->SendActionFeedback( PET_FEEDBACK_PET_DEAD );
        return;
    }

    Unit* pTarget = NULLUNIT;
    if(action == PET_ACTION_SPELL || action == PET_ACTION_SPELL_1 || action == PET_ACTION_SPELL_2 || (action == PET_ACTION_ACTION && misc == PET_ACTION_ATTACK )) // >> target
    {
        recv_data >> targetguid;
        pTarget = _player->GetMapMgr()->GetUnit(targetguid);
        if(!pTarget) 
            pTarget = pPet; // target self
    }
Example #14
0
void WorldSession::HandleSaveGuildEmblem(WorldPacket & recv_data)
{
	CHECK_PACKET_SIZE(recv_data, 28);
	CHECK_INWORLD_RETURN();

	uint64 guid;
	uint32 emblemStyle, emblemColor, borderStyle, borderColor, backgroundColor;
	recv_data >> guid >> emblemStyle >> emblemColor >> borderStyle >> borderColor >> backgroundColor;

	guildmgr.Packet_SaveGuildEmblem(this, emblemStyle, emblemColor, borderStyle, borderColor, backgroundColor);
}
Example #15
0
void WorldSession::HandleLearnTalentOpcode( WorldPacket & recv_data )
{
	CHECK_INWORLD_RETURN();
 
	uint32 talent_id, requested_rank;
	recv_data >> talent_id >> requested_rank;

	_player->LearnTalent(talent_id, requested_rank);

	_player->smsg_TalentsInfo(false);
}
Example #16
0
void WorldSession::HandleGuildLeader(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 1);

	std::string name;
	recv_data >> name;
	PlayerInfo * dstplr = objmgr.GetPlayerInfoByName(name.c_str());
	if( dstplr == NULL )
		return;

	guildmgr.Packet_ChangeGuildLeader(this, dstplr);
}
Example #17
0
void WorldSession::HandleGuildBankModifyTab(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	uint8 slot;
	uint64 guid;
	string tabname, tabicon;

	recv_data >> guid;
	recv_data >> slot;
	recv_data >> tabname;
	recv_data >> tabicon;

	guildmgr.Packet_SetBankTabInfo(this, guid, slot, tabname, tabicon);
}
Example #18
0
void WorldSession::HandleGuildBankDepositMoney(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	uint64 guid;
	uint32 amount;

	recv_data >> guid;
	recv_data >> amount;
	int64 highamount = int64(amount);
	if(highamount >= 2147483647 || highamount < 0)
		amount = 0;

	guildmgr.Packet_DepositMoney(this, guid, amount);
}
Example #19
0
void WorldSession::HandleGroupChangeSubGroup(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	std::string name;
	uint8 subGroup;

	recv_data >> name;
	recv_data >> subGroup;

	PlayerInfo * inf = objmgr.GetPlayerInfoByName(name.c_str());
	if(inf == NULL || inf->m_Group == NULL || inf->m_Group != _player->m_playerInfo->m_Group)
		return;

	_player->GetGroup()->MovePlayer(inf, subGroup);
}
Example #20
0
void WorldSession::HandleUnlearnTalents( WorldPacket & recv_data )
{
	CHECK_INWORLD_RETURN();
	uint32 playerGold = GetPlayer()->GetUInt32Value( PLAYER_FIELD_COINAGE );
	uint32 price = GetPlayer()->CalcTalentResetCost(GetPlayer()->GetTalentResetTimes());

	if( playerGold < price ) return;

	GetPlayer()->SetTalentResetTimes(GetPlayer()->GetTalentResetTimes() + 1);
	GetPlayer()->SetUInt32Value( PLAYER_FIELD_COINAGE, playerGold - price );
	GetPlayer()->Reset_Talents();

	GetPlayer()->GetAchievementInterface()->HandleAchievementCriteriaTalentResetCostTotal( price );
	GetPlayer()->GetAchievementInterface()->HandleAchievementCriteriaTalentResetCount();
}
Example #21
0
void WorldSession::HandleConvertGroupToRaidOpcode(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	// This is just soooo easy now
	Group *pGroup = _player->GetGroup();
	if(!pGroup) return;

	if ( pGroup->GetLeader() != _player->m_playerInfo )   //access denied
	{
		SendPartyCommandResult(_player, 0, "", ERR_PARTY_YOU_ARE_NOT_LEADER);
		return;
	}

	pGroup->ExpandToRaid();
	SendPartyCommandResult(_player, 0, "", ERR_PARTY_NO_ERROR);
}
Example #22
0
void WorldSession::HandleUnlearnSkillOpcode(WorldPacket& recv_data)
{
	CHECK_INWORLD_RETURN();
	uint32 skill_line;
	recv_data >> skill_line;

	// Cheater detection
	// if(!_player->HasSkillLine(skill_line)) return;

	// Remove any spells within that line that the player has
	_player->RemoveSpellsFromLine(skill_line);

	// Remove any quests finished and active for this skill
	_player->RemoveQuestsFromLine(skill_line);

	// Finally, remove the skill line.
	_player->_RemoveSkillLine(skill_line);
}
Example #23
0
void WorldSession::HandleGroupPromote(WorldPacket& recv_data)
{
	CHECK_INWORLD_RETURN();

	uint8 promotetype, on;
	uint64 guid;

	if(_player->GetGroup() == NULL)
		return;

	if ( _player->GetGroup()->GetLeader() != _player->m_playerInfo )   //access denied
	{
		SendPartyCommandResult(_player, 0, "", ERR_PARTY_YOU_ARE_NOT_LEADER);
		return;
	}

	recv_data >> promotetype >> on;
	recv_data >> guid;

	void(Group::*function_to_call)(PlayerInfo*) = NULL;

	if(promotetype == 0)
		function_to_call = &Group::SetMainTank;
	else if(promotetype==1)
		function_to_call = &Group::SetMainAssist;

	if(function_to_call == NULL)
		return;

	if(on == 0)
		(_player->GetGroup()->*function_to_call)(NULL);
	else
	{
		PlayerInfo * np = objmgr.GetPlayerInfo((uint32)guid);
		if(np==NULL)
			(_player->GetGroup()->*function_to_call)(NULL);
		else
		{
			if(_player->GetGroup()->HasMember(np))
				(_player->GetGroup()->*function_to_call)(np);
		}
	}
}
Example #24
0
void WorldSession::HandleGuildEditRank(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();
	CHECK_PACKET_SIZE(recv_data, 9);

	string newName;
	uint32 rankId, RankRights, iFlags[MAX_GUILD_BANK_TABS];
	int32 DailyGoldLimit, iStacksPerDay[MAX_GUILD_BANK_TABS];

	recv_data >> rankId >> RankRights >> newName;
	recv_data >> DailyGoldLimit;

	for(uint8 i = 0; i < MAX_GUILD_BANK_TABS; i++)
	{
		recv_data >> iFlags[i];
		recv_data >> iStacksPerDay[i];
	}

	guildmgr.Packet_HandleEditRank(this, newName, rankId, RankRights, DailyGoldLimit, iFlags, iStacksPerDay);
}
Example #25
0
// Charter part
void WorldSession::HandleCharterBuy(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	string name;
	uint64 creature_guid;
	uint32 arena_index, PetitionSignerCount;

	recv_data >> creature_guid;
	recv_data.read_skip<uint32>();
	recv_data.read_skip<uint64>();
	recv_data >> name;
	recv_data.read_skip<string>();
	for(uint32 s = 0; s < 7; ++s)
		recv_data.read_skip<uint32>();
	recv_data.read_skip<uint16>();
	recv_data.read_skip<uint64>();
	recv_data >> PetitionSignerCount;
	for(uint32 s = 0; s < 10; ++s)
		recv_data.read_skip<string>();
	recv_data >> arena_index;

	guildmgr.CharterBuy(this, creature_guid, name, PetitionSignerCount, arena_index);
}
Example #26
0
void WorldSession::HandleGuildLeave(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	guildmgr.RemoveMember(_player, _player->getPlayerInfo());
}
Example #27
0
void WorldSession::HandleGuildRoster(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	guildmgr.Packet_SendGuildRoster(this);
}
Example #28
0
void WorldSession::HandleGuildInfo(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	guildmgr.Packet_SendGuildInformation(this);
}
Example #29
0
void WorldSession::HandleLFDPlrLockOpcode( WorldPacket& recv_data )
{
	CHECK_INWORLD_RETURN();

	DungeonSet::iterator itr;
	DungeonSet randomDungeonSet;
	LookingForGroup* dungeon = NULL;
	uint32 level = _player->getLevel();
	DungeonSet LevelDungeonSet = sLfgMgr.GetLevelSet(level);
	for (itr = LevelDungeonSet.begin(); itr != LevelDungeonSet.end(); itr++)
	{
		dungeon = dbcLookingForGroup.LookupEntry(*itr);
		if (dungeon != NULL && dungeon->type == LFG_RANDOM
			&& dungeon->expansion <= GetHighestExpansion()
			&& dungeon->minlevel <= level && level <= dungeon->maxlevel)
			randomDungeonSet.insert(dungeon->ID);
		dungeon = NULL;
	}

	// Crow: Confirmed structure below
	WorldPacket data(SMSG_LFD_PLAYER_LOCK_INFO_RESPONSE, 400);
	uint8 randomsize = (uint8)randomDungeonSet.size();
	data << randomsize;
	for(itr = randomDungeonSet.begin(); itr != randomDungeonSet.end(); itr++)
	{
		dungeon = dbcLookingForGroup.LookupEntry(*itr);
		data << uint32(dungeon->GetEntry());

		uint8 done = 0;
		Quest* QuestReward = NULL;
		LfgReward* reward = sLfgMgr.GetLFGReward(*itr);
		if(reward)
		{
			QuestReward = sQuestMgr.GetQuestPointer(reward->reward[0].QuestId);
			if(QuestReward)
			{
				done = _player->HasFinishedQuest(reward->reward[0].QuestId);
				if(!done)
					done = _player->HasFinishedDailyQuest(reward->reward[0].QuestId);
				if (done)
					QuestReward = sQuestMgr.GetQuestPointer(reward->reward[1].QuestId);
			}
		}

		if (QuestReward)
		{
			data << uint8(done);
			data << uint32(sQuestMgr.GenerateRewardMoney(_player, QuestReward));
			data << uint32(sQuestMgr.GenerateQuestXP(_player, QuestReward)*sWorld.getRate(RATE_QUESTXP));
			data << uint32(reward->reward[done].MoneyReward);
			data << uint32(reward->reward[done].XPReward);
			if(QuestReward->rewards == NULL)
			{
				data << uint8(0);
			}
			else
			{
				data << uint8(QuestReward->rewards->count_reward_item);
				if (QuestReward->rewards->count_reward_item)
				{
					ItemPrototype* proto = NULL;
					for (uint8 i = 0; i < 4; i++)
					{
						if (!QuestReward->rewards->reward_item[i])
							continue;

						proto = ItemPrototypeStorage.LookupEntry(QuestReward->rewards->reward_item[i]);
						data << uint32(QuestReward->rewards->reward_item[i]);
						data << uint32(proto ? proto->DisplayInfoID : 0);
						data << uint32(QuestReward->rewards->reward_itemcount[i]);
					}
				}
			}
		}
		else
		{
			data << uint8(0);
			data << uint32(0);
			data << uint32(0);
			data << uint32(0);
			data << uint32(0);
			data << uint8(0);
		}
	}
	SendPacket(&data);
}
Example #30
0
void WorldSession::HandleGuildDecline(WorldPacket & recv_data)
{
	CHECK_INWORLD_RETURN();

	guildmgr.Packet_GuildInviteDecline(this);
}