void WorldSession::HandlePlayerLoginOpcode( WorldPacket & recv_data ) { if(PlayerLoading() || GetPlayer() != NULL) { sLog.outError("Player tryes to login again, AccountId = %d", GetAccountId()); return; } m_playerLoading = true; uint64 playerGuid = 0; DEBUG_LOG( "WORLD: Recvd Player Logon Message" ); recv_data >> playerGuid; LoginQueryHolder *holder = new LoginQueryHolder(GetAccountId(), playerGuid); if(!holder->Initialize()) { delete holder; // delete all unprocessed queries m_playerLoading = false; return; } CharacterDatabase.DelayQueryHolder(&chrHandler, &CharacterHandler::HandlePlayerLoginCallback, holder); }
void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recv_data) { if (PlayerLoading() || GetPlayer() != NULL) { sLog->outError("Player tryes to login again, AccountId = %d", GetAccountId()); return; } m_playerLoading = true; uint64 playerGuid = 0; sLog->outDebug("WORLD: Recvd Player Logon Message"); recv_data >> playerGuid; if (!CharacterDatabase.PQuery("SELECT 1 FROM characters WHERE guid='%d' AND account='%d'", GUID_LOPART(playerGuid), GetAccountId())) KickPlayer(); LoginQueryHolder *holder = new LoginQueryHolder(GetAccountId(), playerGuid); if (!holder->Initialize()) { delete holder; // delete all unprocessed queries m_playerLoading = false; return; } CharacterDatabase.DelayQueryHolder(&chrHandler, &CharacterHandler::HandlePlayerLoginCallback, holder); }
void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recv_data) { ObjectGuid playerGuid; recv_data >> playerGuid; // check if character is currently a playerbot, if so then logout Player *checkChar = sObjectMgr.GetPlayer(playerGuid); if (checkChar && checkChar->GetPlayerbotAI()) { checkChar->GetPlayerbotAI()->GetManager()->LogoutPlayerBot(playerGuid); --checkChar->GetPlayerbotAI()->GetManager()->m_botCount; } if (PlayerLoading() || GetPlayer() != NULL) { sLog.outError("Player tryes to login again, AccountId = %d", GetAccountId()); return; } m_playerLoading = true; DEBUG_LOG("WORLD: Recvd Player Logon Message"); LoginQueryHolder* holder = new LoginQueryHolder(GetAccountId(), playerGuid); if (!holder->Initialize()) { delete holder; // delete all unprocessed queries m_playerLoading = false; return; } CharacterDatabase.DelayQueryHolder(&chrHandler, &CharacterHandler::HandlePlayerLoginCallback, holder); }
void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recv_data) { ObjectGuid playerGuid; recv_data >> playerGuid; Player* pCurrChar = nullptr; pCurrChar = ObjectAccessor::FindPlayer(playerGuid, false); WorldPacket data(SMSG_CHARACTER_LOGIN_FAILED, 1); if (PlayerLoading()) { sLog.outError("HandlePlayerLoginOpcode> Player try to login again while already in loading stage, AccountId = %u", GetAccountId()); data << (uint8)CHAR_LOGIN_DUPLICATE_CHARACTER; SendPacket(data, true); return; } if (_player) { // player is reconnecting if (!pCurrChar) { sLog.outError("HandlePlayerLoginOpcode> %s try to login a second char, AccountId = %u", _player->GetGuidStr().c_str(), GetAccountId()); data << (uint8)CHAR_LOGIN_DUPLICATE_CHARACTER; SendPacket(data, true); return; } if (!isLogingOut()) { sLog.outError("HandlePlayerLoginOpcode> %s try to login again, AccountId = %u", pCurrChar->GetGuidStr().c_str(), GetAccountId()); data << (uint8)CHAR_LOGIN_FAILED; SendPacket(data, true); return; } if (!_player->IsInWorld()) // finish pending transfers before starting the logout while (_player && _player->IsBeingTeleportedFar()) HandleMoveWorldportAckOpcode(); HandlePlayerReconnect(); return; } DEBUG_LOG("WORLD: Received opcode Player Logon Message"); LoginQueryHolder* holder = new LoginQueryHolder(GetAccountId(), playerGuid); if (!holder->Initialize()) { delete holder; // delete all unprocessed queries m_playerLoading = false; return; } CharacterDatabase.DelayQueryHolder(&chrHandler, &CharacterHandler::HandlePlayerLoginCallback, holder); }
void WorldSession::SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps) { if (PlayerLoading()) return; ObjectGuid guid = _player->GetObjectGuid(); WorldPacket data(SMSG_SET_PHASE_SHIFT, 1 + 8 + 4 + 4 + 4 + 4 + 2 * phaseIds.size() + 4 + terrainswaps.size() * 2); data.WriteGuidMask<2, 3, 1, 6, 4, 5, 0, 7>(guid); data.WriteGuidBytes<7, 4>(guid); data << uint32(0); //for (uint8 i = 0; i < worldMapAreaCount; ++i) // data << uint16(0); // WorldMapArea.dbc id (controls map display) data.WriteGuidBytes<1>(guid); data << uint32(phaseIds.size() ? 0 : 8); // flags (not phasemask) data.WriteGuidBytes<2, 6>(guid); data << uint32(0); // Inactive terrain swaps //for (uint8 i = 0; i < inactiveSwapsCount; ++i) // data << uint16(0); data << uint32(phaseIds.size() * 2); // Phase.dbc ids for (std::set<uint32>::const_iterator itr = phaseIds.begin(); itr != phaseIds.end(); ++itr) data << uint16(*itr); data.WriteGuidBytes<3, 0>(guid); data << uint32(terrainswaps.size() * 2); // Active terrain swaps for (std::set<uint32>::const_iterator itr = terrainswaps.begin(); itr != terrainswaps.end(); ++itr) data << uint16(*itr); data.WriteGuidBytes<5>(guid); SendPacket(&data); }