summaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/CharacterHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp527
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)
{