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); } }
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); } } }
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); }
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 {
void WorldSession::HandleGuildBankBuyTab(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); uint64 guid; recv_data >> guid; guildmgr.Packet_BuyBankTab(this, guid); }
void WorldSession::HandleGuildSetOfficerNote(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); string target, newnote; recv_data >> target >> newnote; guildmgr.Packet_SetOfficerNote(this, target, newnote); }
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); }
void WorldSession::HandleGuildMotd(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); std::string motd = ""; if(recv_data.size()) recv_data >> motd; guildmgr.Packet_SetMotd(this, motd); }
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); }
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); }
void WorldSession::HandleGuildAddRank(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); string rankName; recv_data >> rankName; if(rankName.size() < 2) return; guildmgr.Packet_HandleAddRank(this, rankName); }
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); }
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 }
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); }
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); }
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); }
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); }
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); }
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); }
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(); }
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); }
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); }
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); } } }
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); }
// 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); }
void WorldSession::HandleGuildLeave(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); guildmgr.RemoveMember(_player, _player->getPlayerInfo()); }
void WorldSession::HandleGuildRoster(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); guildmgr.Packet_SendGuildRoster(this); }
void WorldSession::HandleGuildInfo(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); guildmgr.Packet_SendGuildInformation(this); }
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); }
void WorldSession::HandleGuildDecline(WorldPacket & recv_data) { CHECK_INWORLD_RETURN(); guildmgr.Packet_GuildInviteDecline(this); }