diff options
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 527 |
1 files changed, 266 insertions, 261 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 9d7125d39c..038f02650c 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -45,15 +45,15 @@ class LoginQueryHolder : public SQLQueryHolder { - private: - uint32 m_accountId; - uint64 m_guid; - public: - LoginQueryHolder(uint32 accountId, uint64 guid) - : m_accountId(accountId), m_guid(guid) { } - uint64 GetGuid() const { return m_guid; } - uint32 GetAccountId() const { return m_accountId; } - bool Initialize(); +private: + uint32 m_accountId; + uint64 m_guid; +public: + LoginQueryHolder(uint32 accountId, uint64 guid) + : m_accountId(accountId), m_guid(guid) { } + uint64 GetGuid() const { return m_guid; } + uint32 GetAccountId() const { return m_accountId; } + bool Initialize(); }; bool LoginQueryHolder::Initialize() @@ -216,8 +216,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) _legitCharacters.insert(guidlow); ++num; } - } - while (result->NextRow()); + } while (result->NextRow()); } data.put<uint8>(0, num); @@ -225,7 +224,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) SendPacket(&data); } -void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recvData*/) +void WorldSession::HandleCharEnumOpcode(WorldPacket& /*recvData*/) { // remove expired bans // pussywizard: moved to world update to do it once >_> @@ -390,152 +389,71 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte switch (_charCreateCallback.GetStage()) { case 0: - { - if (result) { - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_NAME_IN_USE); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; - } - - ASSERT(_charCreateCallback.GetParam() == createInfo); + if (result) + { + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_NAME_IN_USE); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } - PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SUM_REALM_CHARACTERS); - stmt->setUInt32(0, GetAccountId()); + ASSERT(_charCreateCallback.GetParam() == createInfo); - _charCreateCallback.FreeResult(); - _charCreateCallback.SetFutureResult(LoginDatabase.AsyncQuery(stmt)); - _charCreateCallback.NextStage(); - } - break; - case 1: - { - uint16 acctCharCount = 0; - if (result) - { - Field* fields = result->Fetch(); - // SELECT SUM(x) is MYSQL_TYPE_NEWDECIMAL - needs to be read as string - const char* ch = fields[0].GetCString(); - if (ch) - acctCharCount = atoi(ch); - } + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_SUM_REALM_CHARACTERS); + stmt->setUInt32(0, GetAccountId()); - if (acctCharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_ACCOUNT)) - { - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_ACCOUNT_LIMIT); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; + _charCreateCallback.FreeResult(); + _charCreateCallback.SetFutureResult(LoginDatabase.AsyncQuery(stmt)); + _charCreateCallback.NextStage(); } - - - ASSERT(_charCreateCallback.GetParam() == createInfo); - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_SUM_CHARS); - stmt->setUInt32(0, GetAccountId()); - - _charCreateCallback.FreeResult(); - _charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); - _charCreateCallback.NextStage(); - } - break; - case 2: - { - if (result) + break; + case 1: { - Field* fields = result->Fetch(); - createInfo->CharCount = uint8(fields[0].GetUInt64()); // SQL's COUNT() returns uint64 but it will always be less than uint8.Max + uint16 acctCharCount = 0; + if (result) + { + Field* fields = result->Fetch(); + // SELECT SUM(x) is MYSQL_TYPE_NEWDECIMAL - needs to be read as string + const char* ch = fields[0].GetCString(); + if (ch) + acctCharCount = atoi(ch); + } - if (createInfo->CharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_REALM)) + if (acctCharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_ACCOUNT)) { WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_SERVER_LIMIT); + data << uint8(CHAR_CREATE_ACCOUNT_LIMIT); SendPacket(&data); delete createInfo; _charCreateCallback.Reset(); return; } - } - bool allowTwoSideAccounts = !sWorld->IsPvPRealm() || sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS) || !AccountMgr::IsPlayerAccount(GetSecurity()); - uint32 skipCinematics = sWorld->getIntConfig(CONFIG_SKIP_CINEMATICS); - _charCreateCallback.FreeResult(); + ASSERT(_charCreateCallback.GetParam() == createInfo); - if (!allowTwoSideAccounts || skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) - { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_CREATE_INFO); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_SUM_CHARS); stmt->setUInt32(0, GetAccountId()); - stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) ? 10 : 1); + + _charCreateCallback.FreeResult(); _charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); _charCreateCallback.NextStage(); - return; } - - _charCreateCallback.NextStage(); - HandleCharCreateCallback(PreparedQueryResult(nullptr), createInfo); // Will jump to case 3 - } - break; - case 3: - { - bool haveSameRace = false; - uint32 heroicReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER); - bool hasHeroicReqLevel = (heroicReqLevel == 0); - bool allowTwoSideAccounts = !sWorld->IsPvPRealm() || sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS) || !AccountMgr::IsPlayerAccount(GetSecurity()); - uint32 skipCinematics = sWorld->getIntConfig(CONFIG_SKIP_CINEMATICS); - - if (result) + break; + case 2: { - TeamId teamId = Player::TeamIdForRace(createInfo->Race); - uint32 freeHeroicSlots = sWorld->getIntConfig(CONFIG_HEROIC_CHARACTERS_PER_REALM); - - Field* field = result->Fetch(); - uint8 accRace = field[1].GetUInt8(); - - if (AccountMgr::IsPlayerAccount(GetSecurity()) && createInfo->Class == CLASS_DEATH_KNIGHT) - { - uint8 accClass = field[2].GetUInt8(); - if (accClass == CLASS_DEATH_KNIGHT) - { - if (freeHeroicSlots > 0) - --freeHeroicSlots; - - if (freeHeroicSlots == 0) - { - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; - } - } - - if (!hasHeroicReqLevel) - { - uint8 accLevel = field[0].GetUInt8(); - if (accLevel >= heroicReqLevel) - hasHeroicReqLevel = true; - } - } - - // need to check team only for first character - // TODO: what to if account already has characters of both races? - if (!allowTwoSideAccounts) + if (result) { - uint32 accTeamId = TEAM_NEUTRAL; - if (accRace > 0) - accTeamId = Player::TeamIdForRace(accRace); + Field* fields = result->Fetch(); + createInfo->CharCount = uint8(fields[0].GetUInt64()); // SQL's COUNT() returns uint64 but it will always be less than uint8.Max - if (accTeamId != teamId) + if (createInfo->CharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_REALM)) { WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_PVP_TEAMS_VIOLATION); + data << uint8(CHAR_CREATE_SERVER_LIMIT); SendPacket(&data); delete createInfo; _charCreateCallback.Reset(); @@ -543,23 +461,45 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte } } - // search same race for cinematic or same class if need - // TODO: check if cinematic already shown? (already logged in?; cinematic field) - while ((skipCinematics == 1 && !haveSameRace) || createInfo->Class == CLASS_DEATH_KNIGHT) + bool allowTwoSideAccounts = !sWorld->IsPvPRealm() || sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS) || !AccountMgr::IsPlayerAccount(GetSecurity()); + uint32 skipCinematics = sWorld->getIntConfig(CONFIG_SKIP_CINEMATICS); + + _charCreateCallback.FreeResult(); + + if (!allowTwoSideAccounts || skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) { - if (!result->NextRow()) - break; + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_CREATE_INFO); + stmt->setUInt32(0, GetAccountId()); + stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) ? 10 : 1); + _charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); + _charCreateCallback.NextStage(); + return; + } + + _charCreateCallback.NextStage(); + HandleCharCreateCallback(PreparedQueryResult(nullptr), createInfo); // Will jump to case 3 + } + break; + case 3: + { + bool haveSameRace = false; + uint32 heroicReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER); + bool hasHeroicReqLevel = (heroicReqLevel == 0); + bool allowTwoSideAccounts = !sWorld->IsPvPRealm() || sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ACCOUNTS) || !AccountMgr::IsPlayerAccount(GetSecurity()); + uint32 skipCinematics = sWorld->getIntConfig(CONFIG_SKIP_CINEMATICS); - field = result->Fetch(); - accRace = field[1].GetUInt8(); + if (result) + { + TeamId teamId = Player::TeamIdForRace(createInfo->Race); + uint32 freeHeroicSlots = sWorld->getIntConfig(CONFIG_HEROIC_CHARACTERS_PER_REALM); - if (!haveSameRace) - haveSameRace = createInfo->Race == accRace; + Field* field = result->Fetch(); + uint8 accRace = field[1].GetUInt8(); if (AccountMgr::IsPlayerAccount(GetSecurity()) && createInfo->Class == CLASS_DEATH_KNIGHT) { - uint8 acc_class = field[2].GetUInt8(); - if (acc_class == CLASS_DEATH_KNIGHT) + uint8 accClass = field[2].GetUInt8(); + if (accClass == CLASS_DEATH_KNIGHT) { if (freeHeroicSlots > 0) --freeHeroicSlots; @@ -577,100 +517,159 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte if (!hasHeroicReqLevel) { - uint8 acc_level = field[0].GetUInt8(); - if (acc_level >= heroicReqLevel) + uint8 accLevel = field[0].GetUInt8(); + if (accLevel >= heroicReqLevel) hasHeroicReqLevel = true; } } + + // need to check team only for first character + // TODO: what to if account already has characters of both races? + if (!allowTwoSideAccounts) + { + uint32 accTeamId = TEAM_NEUTRAL; + if (accRace > 0) + accTeamId = Player::TeamIdForRace(accRace); + + if (accTeamId != teamId) + { + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_PVP_TEAMS_VIOLATION); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } + } + + // search same race for cinematic or same class if need + // TODO: check if cinematic already shown? (already logged in?; cinematic field) + while ((skipCinematics == 1 && !haveSameRace) || createInfo->Class == CLASS_DEATH_KNIGHT) + { + if (!result->NextRow()) + break; + + field = result->Fetch(); + accRace = field[1].GetUInt8(); + + if (!haveSameRace) + haveSameRace = createInfo->Race == accRace; + + if (AccountMgr::IsPlayerAccount(GetSecurity()) && createInfo->Class == CLASS_DEATH_KNIGHT) + { + uint8 acc_class = field[2].GetUInt8(); + if (acc_class == CLASS_DEATH_KNIGHT) + { + if (freeHeroicSlots > 0) + --freeHeroicSlots; + + if (freeHeroicSlots == 0) + { + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } + } + + if (!hasHeroicReqLevel) + { + uint8 acc_level = field[0].GetUInt8(); + if (acc_level >= heroicReqLevel) + hasHeroicReqLevel = true; + } + } + } } - } - if (AccountMgr::IsPlayerAccount(GetSecurity()) && createInfo->Class == CLASS_DEATH_KNIGHT && !hasHeroicReqLevel) - { - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_LEVEL_REQUIREMENT); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; - } + if (AccountMgr::IsPlayerAccount(GetSecurity()) && createInfo->Class == CLASS_DEATH_KNIGHT && !hasHeroicReqLevel) + { + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_LEVEL_REQUIREMENT); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } - if (createInfo->Data.rpos() < createInfo->Data.wpos()) - { - uint8 unk; - createInfo->Data >> unk; + if (createInfo->Data.rpos() < createInfo->Data.wpos()) + { + uint8 unk; + createInfo->Data >> unk; #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) - sLog->outDebug(LOG_FILTER_NETWORKIO, "Character creation %s (account %u) has unhandled tail data: [%u]", createInfo->Name.c_str(), GetAccountId(), unk); + sLog->outDebug(LOG_FILTER_NETWORKIO, "Character creation %s (account %u) has unhandled tail data: [%u]", createInfo->Name.c_str(), GetAccountId(), unk); #endif - } + } - // pussywizard: - if (sWorld->GetGlobalPlayerGUID(createInfo->Name)) - { - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_NAME_IN_USE); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; - } + // pussywizard: + if (sWorld->GetGlobalPlayerGUID(createInfo->Name)) + { + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_NAME_IN_USE); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } - Player newChar(this); - newChar.GetMotionMaster()->Initialize(); - if (!newChar.Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PLAYER), createInfo)) - { - // Player not create (race/class/etc problem?) - newChar.CleanupsBeforeDelete(); + Player newChar(this); + newChar.GetMotionMaster()->Initialize(); + if (!newChar.Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PLAYER), createInfo)) + { + // Player not create (race/class/etc problem?) + newChar.CleanupsBeforeDelete(); - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_ERROR); - SendPacket(&data); - delete createInfo; - _charCreateCallback.Reset(); - return; - } + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_ERROR); + SendPacket(&data); + delete createInfo; + _charCreateCallback.Reset(); + return; + } - if ((haveSameRace && skipCinematics == 1) || skipCinematics == 2) - newChar.setCinematic(1); // not show intro + if ((haveSameRace && skipCinematics == 1) || skipCinematics == 2) + newChar.setCinematic(1); // not show intro - newChar.SetAtLoginFlag(AT_LOGIN_FIRST); // First login + newChar.SetAtLoginFlag(AT_LOGIN_FIRST); // First login - // Player created, save it now - newChar.SaveToDB(true, false); - createInfo->CharCount += 1; + // Player created, save it now + newChar.SaveToDB(true, false); + createInfo->CharCount += 1; - SQLTransaction trans = LoginDatabase.BeginTransaction(); + SQLTransaction trans = LoginDatabase.BeginTransaction(); - PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); - stmt->setUInt32(0, GetAccountId()); - stmt->setUInt32(1, realmID); - trans->Append(stmt); + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); + stmt->setUInt32(0, GetAccountId()); + stmt->setUInt32(1, realmID); + trans->Append(stmt); - stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); - stmt->setUInt32(0, createInfo->CharCount); - stmt->setUInt32(1, GetAccountId()); - stmt->setUInt32(2, realmID); - trans->Append(stmt); + stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); + stmt->setUInt32(0, createInfo->CharCount); + stmt->setUInt32(1, GetAccountId()); + stmt->setUInt32(2, realmID); + trans->Append(stmt); - LoginDatabase.CommitTransaction(trans); + LoginDatabase.CommitTransaction(trans); - WorldPacket data(SMSG_CHAR_CREATE, 1); - data << uint8(CHAR_CREATE_SUCCESS); - SendPacket(&data); + WorldPacket data(SMSG_CHAR_CREATE, 1); + data << uint8(CHAR_CREATE_SUCCESS); + SendPacket(&data); - std::string IP_str = GetRemoteAddress(); + std::string IP_str = GetRemoteAddress(); #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) - sLog->outDetail("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); + sLog->outDetail("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); #endif - sLog->outChar("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); - sScriptMgr->OnPlayerCreate(&newChar); - sWorld->AddGlobalPlayerData(newChar.GetGUIDLow(), GetAccountId(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel(), 0, 0); + sLog->outChar("Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), IP_str.c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); + sScriptMgr->OnPlayerCreate(&newChar); + sWorld->AddGlobalPlayerData(newChar.GetGUIDLow(), GetAccountId(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel(), 0, 0); - newChar.CleanupsBeforeDelete(); - delete createInfo; - _charCreateCallback.Reset(); - } - break; + newChar.CleanupsBeforeDelete(); + delete createInfo; + _charCreateCallback.Reset(); + } + break; } } @@ -753,7 +752,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData) SendPacket(&data); } -void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recvData) +void WorldSession::HandlePlayerLoginOpcode(WorldPacket& recvData) { if (PlayerLoading() || GetPlayer() != nullptr) { @@ -771,7 +770,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recvData) KickPlayer("Account can't login with this character"); return; } - + // pussywizard: if (WorldSession* sess = sWorld->FindOfflineSessionForCharacterGUID(GUID_LOPART(playerGuid))) if (sess->GetAccountId() != GetAccountId()) @@ -860,7 +859,7 @@ void WorldSession::HandlePlayerLoginOpcode(WorldPacket & recvData) m_playerLoading = true; - LoginQueryHolder *holder = new LoginQueryHolder(GetAccountId(), playerGuid); + LoginQueryHolder* holder = new LoginQueryHolder(GetAccountId(), playerGuid); if (!holder->Initialize()) { delete holder; // delete all unprocessed queries @@ -876,7 +875,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) uint64 playerGuid = holder->GetGuid(); Player* pCurrChar = new Player(this); - // for send server info and strings (config) + // for send server info and strings (config) ChatHandler chH = ChatHandler(this); // "GetAccountId() == db stored account id" checked in LoadFromDB (prevent login not own character using cheating tools) @@ -947,7 +946,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) } - data.Initialize(SMSG_LEARNED_DANCE_MOVES, 4+4); + data.Initialize(SMSG_LEARNED_DANCE_MOVES, 4 + 4); data << uint32(0); data << uint32(0); SendPacket(&data); @@ -1076,7 +1075,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) pCurrChar->CheckAllAchievementCriteria(); } - // Reputations if "StartAllReputation" is enabled, -- TODO: Fix this in a better way + // Reputations if "StartAllReputation" is enabled, -- TODO: Fix this in a better way if (sWorld->getBoolConfig(CONFIG_START_ALL_REP)) { ReputationMgr& repMgr = pCurrChar->GetReputationMgr(); @@ -1132,7 +1131,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) std::string IP_str = GetRemoteAddress(); sLog->outChar("Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d", - GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->getLevel()); + GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->getLevel()); if (!pCurrChar->IsStandState() && !pCurrChar->HasUnitState(UNIT_STATE_STUNNED)) pCurrChar->SetStandState(UNIT_STAND_STATE_STAND); @@ -1185,7 +1184,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) continue; if ((isReferrer && pCurrChar->GetSession()->GetAccountId() == itr->second->GetRecruiterId()) || (!isReferrer && pCurrChar->GetSession()->GetRecruiterId() == itr->second->GetAccountId())) { - Player * rf = itr->second->GetPlayer(); + Player* rf = itr->second->GetPlayer(); if (rf != nullptr) { pCurrChar->SendUpdateToPlayer(rf); @@ -1197,7 +1196,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder* holder) sScriptMgr->OnPlayerLogin(pCurrChar); - if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST)) + if (pCurrChar->HasAtLoginFlag(AT_LOGIN_FIRST)) { pCurrChar->RemoveAtLoginFlag(AT_LOGIN_FIRST); sScriptMgr->OnFirstLogin(pCurrChar); @@ -1241,7 +1240,7 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar) #endif } - data.Initialize(SMSG_LEARNED_DANCE_MOVES, 4+4); + data.Initialize(SMSG_LEARNED_DANCE_MOVES, 4 + 4); data << uint32(0); data << uint32(0); SendPacket(&data); @@ -1280,10 +1279,10 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar) for (int32 eff = 0; eff < 96; ++eff) { - if (eff != 0 && eff%32 == 0) + if (eff != 0 && eff % 32 == 0) _mask[i++] = 0; - _mask[i] = uint32(1) << (eff-(32*i)); + _mask[i] = uint32(1) << (eff - (32 * i)); int32 val = 0; for (SpellModList::const_iterator itr = spellMods.begin(); itr != spellMods.end(); ++itr) if ((*itr)->type == modType && (*itr)->mask & _mask) @@ -1292,7 +1291,7 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar) if (val == 0) continue; - WorldPacket data(Opcode, (1+1+4)); + WorldPacket data(Opcode, (1 + 1 + 4)); data << uint8(eff); data << uint8(opType); data << int32(val); @@ -1300,7 +1299,7 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar) } } } - + if (Group* group = pCurrChar->GetGroup()) group->SendUpdate(); @@ -1351,7 +1350,7 @@ void WorldSession::HandleSetFactionAtWar(WorldPacket& recvData) } //I think this function is never used :/ I dunno, but i guess this opcode not exists -void WorldSession::HandleSetFactionCheat(WorldPacket & /*recvData*/) +void WorldSession::HandleSetFactionCheat(WorldPacket& /*recvData*/) { sLog->outError("WORLD SESSION: HandleSetFactionCheat, not expected call, please report."); GetPlayer()->GetReputationMgr().SendStates(); @@ -1373,13 +1372,13 @@ void WorldSession::HandleTutorialFlag(WorldPacket& recvData) SetTutorialInt(index, flag); } -void WorldSession::HandleTutorialClear(WorldPacket & /*recvData*/) +void WorldSession::HandleTutorialClear(WorldPacket& /*recvData*/) { for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) SetTutorialInt(i, 0xFFFFFFFF); } -void WorldSession::HandleTutorialReset(WorldPacket & /*recvData*/) +void WorldSession::HandleTutorialReset(WorldPacket& /*recvData*/) { for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) SetTutorialInt(i, 0x00000000); @@ -1395,7 +1394,7 @@ void WorldSession::HandleSetWatchedFactionOpcode(WorldPacket& recvData) GetPlayer()->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fact); } -void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket & recvData) +void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket& recvData) { #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outStaticDebug("WORLD: Received CMSG_SET_FACTION_INACTIVE"); @@ -1445,7 +1444,7 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData) uint8 res = ObjectMgr::CheckPlayerName(newName, true); if (res != CHAR_NAME_SUCCESS) { - WorldPacket data(SMSG_CHAR_RENAME, 1+8+(newName.size()+1)); + WorldPacket data(SMSG_CHAR_RENAME, 1 + 8 + (newName.size() + 1)); data << uint8(res); data << uint64(guid); data << newName; @@ -1524,7 +1523,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult resu sLog->outChar("Account: %d (IP: %s), Character [%s] (guid: %u) Changed name to: %s", GetAccountId(), GetRemoteAddress().c_str(), oldName.c_str(), guidLow, newName.c_str()); - WorldPacket data(SMSG_CHAR_RENAME, 1+8+(newName.size()+1)); + WorldPacket data(SMSG_CHAR_RENAME, 1 + 8 + (newName.size() + 1)); data << uint8(RESPONSE_SUCCESS); data << uint64(guid); data << newName; @@ -1549,7 +1548,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) std::string name; if (!sObjectMgr->GetPlayerNameByGUID(guid, name)) { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1559,7 +1558,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) std::wstring wname; if (!Utf8toWStr(name, wname)) { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1568,7 +1567,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) if (!isCyrillicCharacter(wname[0])) // name already stored as only single alphabet using { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1582,7 +1581,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) if (name2 != name) // character have different name { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1594,7 +1593,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) recvData >> declinedname.name[i]; if (!normalizePlayerName(declinedname.name[i])) { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1604,7 +1603,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) if (!ObjectMgr::CheckDeclinedNames(wname, declinedname)) { - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(1); data << uint64(guid); SendPacket(&data); @@ -1624,13 +1623,13 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) stmt->setUInt32(0, GUID_LOPART(guid)); for (uint8 i = 0; i < 5; i++) - stmt->setString(i+1, declinedname.name[i]); + stmt->setString(i + 1, declinedname.name[i]); trans->Append(stmt); CharacterDatabase.CommitTransaction(trans); - WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4+8); + WorldPacket data(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, 4 + 8); data << uint32(0); // OK data << uint64(guid); SendPacket(&data); @@ -1743,7 +1742,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) if (!IsLegitCharacterForAccount(GUID_LOPART(guid))) { sLog->outError("Account %u, IP: %s tried to customise character %u, but it does not belong to their account!", - GetAccountId(), GetRemoteAddress().c_str(), GUID_LOPART(guid)); + GetAccountId(), GetRemoteAddress().c_str(), GUID_LOPART(guid)); recvData.rfinish(); KickPlayer("HandleCharCustomize"); return; @@ -1862,9 +1861,9 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) // xinef: update global data sWorld->UpdateGlobalNameData(GUID_LOPART(guid), playerData->name, newName); - sWorld->UpdateGlobalPlayerData(GUID_LOPART(guid), PLAYER_UPDATE_DATA_NAME|PLAYER_UPDATE_DATA_GENDER, newName, 0, gender); + sWorld->UpdateGlobalPlayerData(GUID_LOPART(guid), PLAYER_UPDATE_DATA_NAME | PLAYER_UPDATE_DATA_GENDER, newName, 0, gender); - WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1+8+(newName.size()+1)+6); + WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1 + 8 + (newName.size() + 1) + 6); data << uint8(RESPONSE_SUCCESS); data << uint64(guid); data << newName; @@ -1877,7 +1876,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) SendPacket(&data); } -void WorldSession::HandleEquipmentSetSave(WorldPacket &recvData) +void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData) { #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_EQUIPMENT_SET_SAVE"); @@ -1938,7 +1937,7 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket &recvData) _player->SetEquipmentSet(index, eqSet); } -void WorldSession::HandleEquipmentSetDelete(WorldPacket &recvData) +void WorldSession::HandleEquipmentSetDelete(WorldPacket& recvData) { #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_EQUIPMENT_SET_DELETE"); @@ -1950,7 +1949,7 @@ void WorldSession::HandleEquipmentSetDelete(WorldPacket &recvData) _player->DeleteEquipmentSet(setGuid); } -void WorldSession::HandleEquipmentSetUse(WorldPacket &recvData) +void WorldSession::HandleEquipmentSetUse(WorldPacket& recvData) { #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_EQUIPMENT_SET_USE"); @@ -1981,14 +1980,17 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket &recvData) item = _player->GetItemByGuid(itemGuid); uint16 dstpos = i | (INVENTORY_SLOT_BAG_0 << 8); - + InventoryResult msg; Item* uItem = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i); - if (uItem) { - if (uItem->IsEquipped()) { + if (uItem) + { + if (uItem->IsEquipped()) + { msg = _player->CanUnequipItem(dstpos, true); - if (msg != EQUIP_ERR_OK) { + if (msg != EQUIP_ERR_OK) + { _player->SendEquipError(msg, uItem, nullptr); continue; } @@ -2010,14 +2012,17 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket &recvData) } } - if (item) { + if (item) + { if (item->GetPos() == dstpos) continue; - if (!item->IsEquipped()) { + if (!item->IsEquipped()) + { uint16 _candidatePos; msg = _player->CanEquipItem(NULL_SLOT, _candidatePos, item, true); - if (msg != EQUIP_ERR_OK) { + if (msg != EQUIP_ERR_OK) + { _player->SendEquipError(msg, item, nullptr); continue; } @@ -2042,7 +2047,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) if (!IsLegitCharacterForAccount(GUID_LOPART(guid))) { sLog->outError("Account %u, IP: %s tried to factionchange character %u, but it does not belong to their account!", - GetAccountId(), GetRemoteAddress().c_str(), GUID_LOPART(guid)); + GetAccountId(), GetRemoteAddress().c_str(), GUID_LOPART(guid)); recvData.rfinish(); KickPlayer("HandleCharFactionOrRaceChange"); return; @@ -2105,9 +2110,9 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) // check auctions, current packet is processed single-threaded way, so not a problem bool has_auctions = false; - for (uint8 i=0; i<2; ++i) // check both neutral and faction-specific AH + for (uint8 i = 0; i < 2; ++i) // check both neutral and faction-specific AH { - AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(i == 0 ? 0 : (((1<<(playerData->race-1))&RACEMASK_ALLIANCE) ? 12 : 29)); + AuctionHouseObject* auctionHouse = sAuctionMgr->GetAuctionsMap(i == 0 ? 0 : (((1 << (playerData->race - 1))&RACEMASK_ALLIANCE) ? 12 : 29)); AuctionHouseObject::AuctionEntryMap::const_iterator itr = auctionHouse->GetAuctionsBegin(); AuctionHouseObject::AuctionEntryMap::const_iterator _end = auctionHouse->GetAuctionsEnd(); for (; itr != _end; ++itr) @@ -2157,7 +2162,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) // xinef: check money bool valid = Player::TeamIdForRace(oldRace) == Player::TeamIdForRace(race); if ((level < 10 && money <= 0) || (level > 10 && level <= 30 && money <= 3000000 ) || (level > 30 && level <= 50 && money <= 10000000) || - (level > 50 && level <= 70 && money <= 50000000) || (level > 70 && money <= 200000000)) + (level > 50 && level <= 70 && money <= 50000000) || (level > 70 && money <= 200000000)) valid = true; if (!valid) { @@ -2267,8 +2272,8 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) // xinef: update global data sWorld->UpdateGlobalNameData(GUID_LOPART(guid), playerData->name, newname); - sWorld->UpdateGlobalPlayerData(GUID_LOPART(guid), - PLAYER_UPDATE_DATA_NAME|PLAYER_UPDATE_DATA_RACE|PLAYER_UPDATE_DATA_GENDER, newname, 0, gender, race); + sWorld->UpdateGlobalPlayerData(GUID_LOPART(guid), + PLAYER_UPDATE_DATA_NAME | PLAYER_UPDATE_DATA_RACE | PLAYER_UPDATE_DATA_GENDER, newname, 0, gender, race); if (oldRace != race) { |