diff options
-rw-r--r-- | src/server/game/Accounts/AccountMgr.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/AddonHandler.cpp | 85 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/AuthHandler.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 | ||||
-rw-r--r-- | src/server/game/Tickets/TicketMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Tickets/TicketMgr.h | 16 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 116 |
7 files changed, 96 insertions, 185 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 3800cf91abf..918ab273a1c 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -19,19 +19,14 @@ */ #include "DatabaseEnv.h" - - #include "AccountMgr.h" #include "ObjectAccessor.h" #include "Player.h" #include "Util.h" #include "SHA1.h" -AccountMgr::AccountMgr() -{} - -AccountMgr::~AccountMgr() -{} +AccountMgr::AccountMgr() {} +AccountMgr::~AccountMgr() {} AccountOpResult AccountMgr::CreateAccount(std::string username, std::string password) { diff --git a/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp b/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp index 13fbd266ea4..d416b5fa085 100644 --- a/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/AddonHandler.cpp @@ -131,13 +131,6 @@ bool AddonHandler::BuildAddonPacket(WorldPacket *Source, WorldPacket *Target) uint32 count = 0; *Target << uint32(count); - /*for(uint32 i = 0; i < count; ++i) - { - uint32 - string (16 bytes) - string (16 bytes) - uint32 - }*/ if(AddOnPacked.rpos() != AddOnPacked.size()) sLog.outDebug("packet under read!"); @@ -149,81 +142,3 @@ bool AddonHandler::BuildAddonPacket(WorldPacket *Source, WorldPacket *Target) } return true; } - -/* Code use in 1.10.2 when client not ignore ban state sended for addons. Saved for reference if client switch to use server ban state information -void AddonHandler::BuildAddonPacket(WorldPacket* Source, WorldPacket* Target, uint32 Packetoffset) -{ - ByteBuffer AddOnPacked; - uLongf AddonRealSize; - uint32 CurrentPosition; - uint32 TempValue; - - *Source >> TempValue; //get real size of the packed structure - - AddonRealSize = TempValue; //temp value becouse ZLIB only excepts uLongf - - CurrentPosition = Source->rpos(); //get the position of the pointer in the structure - - AddOnPacked.resize(AddonRealSize); //resize target for zlib action - - if (!uncompress((uint8*)AddOnPacked.contents(), &AddonRealSize, (uint8*)(*Source).contents() + CurrentPosition, (*Source).size() - CurrentPosition)!= Z_OK) - { - bool* AddonAllowed = new bool; //handle addon check and enable-ing - - uint32 Unknown1; - uint8 Unknown0; - - AddOnPacked >> Unknown0; - AddOnPacked >> Unknown1; - - Target->Initialize(SMSG_ADDON_INFO); - - uint32 i = 5; //offset for addon extraction - while(i != AddOnPacked.size()) - { - std::string AddonNames; - AddOns* Addonstr = new AddOns; - uint8 unk6; - uint64 CRCCHECK; - AddOnPacked >> AddonNames >> CRCCHECK >> unk6; - - //sLog.outDebug("ADDON: Name:%s CRC:%x Unknown:%x",AddonNames.c_str(), CRCCHECK,unk6); - - Addonstr->Name = AddonNames; - Addonstr->CRC = CRCCHECK; - - //if not allowed but unknown added to list - if (GetAddonStatus(Addonstr, AddonAllowed)) // If addon is new - { - Addonstr->Enabled = m_Addon_Default; // by default new addons are set from Config file - *AddonAllowed = m_Addon_Default; // Set addon allowed on default value - _AddAddon(Addonstr); - sLog.outDetail("Found new Addon, Name:%s CRC:%x Unknown:%x",AddonNames.c_str(), CRCCHECK, unk6); - } - - if (CRCCHECK == 0x4C1C776D01LL) //If addon is Standard addon CRC - { - //value's standard Addons - *Target << uint8(0) << uint8(2) << uint8(1) << uint8(0) << uint32(0); - } - else if (*AddonAllowed) //if addon is Custom addons - //value's enable addon - *Target << uint8(0x00) << uint8(0x01) << uint8(0x00) << uint8(0x01); - else - //value's disable addom - *Target << uint8(0x00) << uint8(0x0) << uint8(0x00) << uint8(0x0); - - i += AddonNames.size() + 10; - } - *Target << uint8(0x0); - - //delete mem allocation - delete AddonAllowed; - } - else - { - //handle uncompress error - } -} -*/ - diff --git a/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp new file mode 100644 index 00000000000..3728f0edf7e --- /dev/null +++ b/src/server/game/Server/Protocol/Handlers/AuthHandler.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Opcodes.h" +#include "WorldSession.h" +#include "WorldPacket.h" + +void WorldSession::SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos) +{ + WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1 + (shortForm ? 0 : (4 + 1))); + packet << uint8(code); + packet << uint32(0); // BillingTimeRemaining + packet << uint8(0); // BillingPlanFlags + packet << uint32(0); // BillingTimeRested + packet << uint8(Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account + + if (!shortForm) + { + packet << uint32(queuePos); // Queue position + packet << uint8(0); // Unk 3.3.0 + } + + SendPacket(&packet); +} + +void WorldSession::SendClientCacheVersion(uint32 version) +{ + WorldPacket data(SMSG_CLIENTCACHE_VERSION, 4); + data << uint32(version); + SendPacket(&data); +} diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 965b398563b..8bcf0c1eccf 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -160,6 +160,9 @@ class WorldSession void SendSetPhaseShift(uint32 phaseShift); void SendQueryTimeResponse(); + void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0); + void SendClientCacheVersion(uint32 version); + AccountTypes GetSecurity() const { return _security; } uint32 GetAccountId() const { return _accountId; } Player* GetPlayer() const { return _player; } diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 9be0e2425e5..888801aee9e 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -44,10 +44,9 @@ uint64 TicketMgr::GenerateGMTicketId() void TicketMgr::LoadGMTickets() { if (!m_GMTicketList.empty()) - { for (GmTicketList::const_iterator itr = m_GMTicketList.begin(); itr != m_GMTicketList.end(); ++itr) delete *itr; - } + m_GMTicketList.clear(); m_GMticketid = 0; m_openTickets = 0; @@ -64,7 +63,7 @@ void TicketMgr::LoadGMTickets() } uint16 count = 0; - barGoLink bar ((*result).GetRowCount()); + barGoLink bar(result->GetRowCount()); GM_Ticket *ticket; do { @@ -93,7 +92,6 @@ void TicketMgr::LoadGMTickets() bar.step(); m_GMTicketList.push_back(ticket); - } while (result->NextRow()); result = CharacterDatabase.Query("SELECT MAX(guid) from gm_tickets"); diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index 8c60dbe3bf0..7c3603ff4bc 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -133,10 +133,7 @@ public: bool GetStatus() const { return status; } void SetStatus(bool newStatus) { status = newStatus; } uint64 GetOpenTicketCount() { return m_openTickets; } - uint64 GetNextSurveyID() - { - return ++m_GMSurveyID; - } + uint64 GetNextSurveyID() { return ++m_GMSurveyID; } GM_Ticket *GetOldestOpenGMTicket() { @@ -147,15 +144,8 @@ public: return NULL; } - time_t GetLastChange() - { - return lastChange; - } - - void UpdateLastChange() - { - lastChange = time(NULL); - } + time_t GetLastChange() { return lastChange; } + void UpdateLastChange() { lastChange = time(NULL); } GmTicketList m_GMTicketList; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 78572695c59..a42d20a4048 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -146,9 +146,11 @@ Player* World::FindPlayerInZone(uint32 zone) { if (!itr->second) continue; + Player *player = itr->second->GetPlayer(); if (!player) continue; + if (player->IsInWorld() && player->GetZoneId() == zone) { // Used by the weather system. We return the player to broadcast the change weather message to him and all players in the zone. @@ -216,7 +218,7 @@ void World::AddSession(WorldSession* s) } void -World::AddSession_ (WorldSession* s) +World::AddSession_(WorldSession* s) { ASSERT (s); @@ -268,19 +270,11 @@ World::AddSession_ (WorldSession* s) return; } - WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1); - packet << uint8 (AUTH_OK); - packet << uint32 (0); // BillingTimeRemaining - packet << uint8 (0); // BillingPlanFlags - packet << uint32 (0); // BillingTimeRested - packet << uint8 (s->Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account - s->SendPacket (&packet); + s->SendAuthResponse(AUTH_OK, true); s->SendAddonsInfo(); - WorldPacket pkt(SMSG_CLIENTCACHE_VERSION, 4); - pkt << uint32(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - s->SendPacket(&pkt); + s->SendClientCacheVersion(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); s->SendTutorialsData(); @@ -298,7 +292,8 @@ World::AddSession_ (WorldSession* s) bool World::HasRecentlyDisconnected(WorldSession* session) { - if (!session) return false; + if (!session) + return false; if (uint32 tolerance = getIntConfig(CONFIG_INTERVAL_DISCONNECT_TOLERANCE)) { @@ -334,17 +329,7 @@ void World::AddQueuedPlayer(WorldSession* sess) m_QueuedPlayer.push_back(sess); // The 1st SMSG_AUTH_RESPONSE needs to contain other info too. - WorldPacket packet(SMSG_AUTH_RESPONSE, 1+4+1+4+1+4+1); - packet << uint8(AUTH_WAIT_QUEUE); - packet << uint32(0); // BillingTimeRemaining - packet << uint8(0); // BillingPlanFlags - packet << uint32(0); // BillingTimeRested - packet << uint8(sess->Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account - packet << uint32(GetQueuePos(sess)); // Queue position - packet << uint8(0); // Unk 3.3.0 - sess->SendPacket(&packet); - - //sess->SendAuthWaitQue (GetQueuePos (sess)); + sess->SendAuthResponse(AUTH_WAIT_QUEUE, false, GetQueuePos(sess)); } bool World::RemoveQueuedPlayer(WorldSession* sess) @@ -386,10 +371,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess) pop_sess->SendAuthWaitQue(0); pop_sess->SendAddonsInfo(); - WorldPacket pkt(SMSG_CLIENTCACHE_VERSION, 4); - pkt << uint32(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - pop_sess->SendPacket(&pkt); - + pop_sess->SendClientCacheVersion(sWorld.getIntConfig(CONFIG_CLIENTCACHE_VERSION)); pop_sess->SendAccountDataTimes(GLOBAL_CACHE_MASK); pop_sess->SendTutorialsData(); @@ -1684,6 +1666,7 @@ void World::SetInitialWorldSettings() //to set mailtimer to return mails every day between 4 and 5 am //mailtimer is increased when updating auctions //one second is 1000 -(tested on win system) + //TODO: Get rid of magic numbers mail_timer = ((((localtime(&m_gameTime)->tm_hour + 20) % 24)* HOUR * IN_MILLISECONDS) / m_timers[WUPDATE_AUCTIONS].GetInterval()); //1440 mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval())); @@ -1813,9 +1796,9 @@ void World::RecordTimeDiff(const char *text, ...) if (diff > m_int_configs[CONFIG_MIN_LOG_UPDATE]) { va_list ap; - char str [256]; + char str[256]; va_start(ap, text); - vsnprintf(str,256,text, ap); + vsnprintf(str, 256, text, ap); va_end(ap); sLog.outDetail("Difftime %s: %u.", str, diff); } @@ -1848,7 +1831,6 @@ void World::LoadAutobroadcasts() bar.step(); Field *fields = result->Fetch(); - std::string message = fields[0].GetString(); m_Autobroadcasts.push_back(message); @@ -1882,10 +1864,12 @@ void World::Update(uint32 diff) ///- Update the different timers for (int i = 0; i < WUPDATE_COUNT; ++i) + { if (m_timers[i].GetCurrent() >= 0) m_timers[i].Update(diff); else m_timers[i].SetCurrent(0); + } ///- Update the game time and check for shutdown time _UpdateGameTime(); @@ -1947,9 +1931,6 @@ void World::Update(uint32 diff) { if (m_timers[WUPDATE_CLEANDB].Passed()) { - //uint32 tmpDiff = (m_gameTime - m_startTime); - //uint32 maxClientsNum = sWorld.GetMaxActiveSessionCount(); - m_timers[WUPDATE_CLEANDB].Reset(); LoginDatabase.PExecute("DELETE FROM logs WHERE (time + %u) < "UI64FMTD";", sWorld.getIntConfig(CONFIG_LOGDB_CLEARTIME), uint64(time(0))); @@ -1993,7 +1974,6 @@ void World::Update(uint32 diff) if (m_timers[WUPDATE_CORPSES].Passed()) { m_timers[WUPDATE_CORPSES].Reset(); - sObjectAccessor.RemoveOldCorpses(); } @@ -2073,19 +2053,19 @@ namespace Trinity { // we need copy va_list before use or original va_list will corrupted va_list ap; - va_copy(ap,*i_args); + va_copy(ap, *i_args); - char str [2048]; - vsnprintf(str,2048,text, ap); + char str[2048]; + vsnprintf(str, 2048, text, ap); va_end(ap); - do_helper(data_list,&str[0]); + do_helper(data_list, &str[0]); } else - do_helper(data_list,(char*)text); + do_helper(data_list, (char*)text); } private: - char* lineFromMessage(char*& pos) { char* start = strtok(pos,"\n"); pos = NULL; return start; } + char* lineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; } void do_helper(WorldPacketList& data_list, char* text) { char* pos = text; @@ -2156,7 +2136,7 @@ void World::SendGMText(int32 string_id, ...) va_end(ap); } -/// DEPRICATED, only for debug purpose. Send a System Message to all players (except self if mentioned) +/// DEPRECATED, only for debug purpose. Send a System Message to all players (except self if mentioned) void World::SendGlobalText(const char* text, WorldSession *self) { WorldPacket data; @@ -2224,7 +2204,7 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura { LoginDatabase.escape_string(nameOrIP); LoginDatabase.escape_string(reason); - std::string safe_author=author; + std::string safe_author = author; LoginDatabase.escape_string(safe_author); uint32 duration_secs = TimeStringToSecs(duration); @@ -2235,16 +2215,16 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura { case BAN_IP: //No SQL injection as strings are escaped - resultAccounts = LoginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'",nameOrIP.c_str()); - LoginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')",nameOrIP.c_str(),duration_secs,safe_author.c_str(),reason.c_str()); + resultAccounts = LoginDatabase.PQuery("SELECT id FROM account WHERE last_ip = '%s'", nameOrIP.c_str()); + LoginDatabase.PExecute("INSERT INTO ip_banned VALUES ('%s',UNIX_TIMESTAMP(),UNIX_TIMESTAMP()+%u,'%s','%s')", nameOrIP.c_str(), duration_secs, safe_author.c_str(), reason.c_str()); break; case BAN_ACCOUNT: //No SQL injection as string is escaped - resultAccounts = LoginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'",nameOrIP.c_str()); + resultAccounts = LoginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'", nameOrIP.c_str()); break; case BAN_CHARACTER: //No SQL injection as string is escaped - resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'",nameOrIP.c_str()); + resultAccounts = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", nameOrIP.c_str()); break; default: return BAN_SYNTAX_ERROR; @@ -2274,8 +2254,7 @@ BanReturn World::BanAccount(BanMode mode, std::string nameOrIP, std::string dura if (WorldSession* sess = FindSession(account)) if (std::string(sess->GetPlayerName()) != author) sess->KickPlayer(); - } - while (resultAccounts->NextRow()); + } while (resultAccounts->NextRow()); return BAN_SUCCESS; } @@ -2438,16 +2417,11 @@ void World::ShutdownMsg(bool show, Player* player) ///- Display a message every 12 hours, hours, 5 minutes, minute, 5 seconds and finally seconds if (show || (m_ShutdownTimer < 10) || - // < 30 sec; every 5 sec - (m_ShutdownTimer<30 && (m_ShutdownTimer % 5) == 0) || - // < 5 min ; every 1 min - (m_ShutdownTimer<5*MINUTE && (m_ShutdownTimer % MINUTE) == 0) || - // < 30 min ; every 5 min - (m_ShutdownTimer<30*MINUTE && (m_ShutdownTimer % (5*MINUTE)) == 0) || - // < 12 h ; every 1 h - (m_ShutdownTimer<12*HOUR && (m_ShutdownTimer % HOUR) == 0) || - // > 12 h ; every 12 h - (m_ShutdownTimer>12*HOUR && (m_ShutdownTimer % (12*HOUR)) == 0)) + (m_ShutdownTimer < 30 && (m_ShutdownTimer % 5) == 0) || // < 30 sec; every 5 sec + (m_ShutdownTimer < 5 * MINUTE && (m_ShutdownTimer % MINUTE) == 0) || // < 5 min ; every 1 min + (m_ShutdownTimer < 30 * MINUTE && (m_ShutdownTimer % (5 * MINUTE)) == 0) || // < 30 min ; every 5 min + (m_ShutdownTimer < 12 * HOUR && (m_ShutdownTimer % HOUR) == 0) || // < 12 h ; every 1 h + (m_ShutdownTimer > 12 * HOUR && (m_ShutdownTimer % (12 * HOUR)) == 0)) // > 12 h ; every 12 h { std::string str = secsToTimeString(m_ShutdownTimer); @@ -2546,13 +2520,13 @@ void World::SendAutoBroadcast() msg = *itr; uint32 abcenter = sWorld.getIntConfig(CONFIG_AUTOBROADCAST_CENTER); + if (abcenter == 0) { sWorld.SendWorldText(LANG_AUTO_BROADCAST, msg.c_str()); - sLog.outString("AutoBroadcast: '%s'",msg.c_str()); } - if (abcenter == 1) + else if (abcenter == 1) { WorldPacket data(SMSG_NOTIFICATION, (msg.size()+1)); data << msg; @@ -2560,7 +2534,7 @@ void World::SendAutoBroadcast() sLog.outString("AutoBroadcast: '%s'",msg.c_str()); } - if (abcenter == 2) + else if (abcenter == 2) { sWorld.SendWorldText(LANG_AUTO_BROADCAST, msg.c_str()); @@ -2575,9 +2549,7 @@ void World::SendAutoBroadcast() void World::UpdateRealmCharCount(uint32 accountId) { m_realmCharCallback.SetParam(accountId); - m_realmCharCallback.SetFutureResult( - CharacterDatabase.AsyncPQuery("SELECT COUNT(guid) FROM characters WHERE account = '%u'", accountId) - ); + m_realmCharCallback.SetFutureResult(CharacterDatabase.AsyncPQuery("SELECT COUNT(guid) FROM characters WHERE account = '%u'", accountId)); } void World::_UpdateRealmCharCount(QueryResult resultCharCount, uint32 accountId) @@ -2607,7 +2579,6 @@ void World::InitDailyQuestResetTime() if (result) { Field *fields = result->Fetch(); - mostRecentQuestTime = (time_t)fields[0].GetUInt64(); } else @@ -2630,11 +2601,8 @@ void World::InitDailyQuestResetTime() // need reset (if we have quest time before last reset time (not processed by some reason) if (mostRecentQuestTime && mostRecentQuestTime <= resetTime) m_NextDailyQuestReset = mostRecentQuestTime; - else - { - // plan next reset time + else // plan next reset time m_NextDailyQuestReset = (curTime >= curDayResetTime) ? curDayResetTime + DAY : curDayResetTime; - } } void World::InitRandomBGResetTime() @@ -2647,8 +2615,8 @@ void World::InitRandomBGResetTime() time_t curTime = time(NULL); tm localTm = *localtime(&curTime); localTm.tm_hour = getIntConfig(CONFIG_RANDOM_BG_RESET_HOUR); - localTm.tm_min = 0; - localTm.tm_sec = 0; + localTm.tm_min = 0; + localTm.tm_sec = 0; // current day reset time time_t nextDayResetTime = mktime(&localTm); @@ -2727,11 +2695,9 @@ void World::UpdateMaxSessionCounters() void World::LoadDBVersion() { QueryResult result = WorldDatabase.Query("SELECT db_version, script_version, cache_id FROM version LIMIT 1"); - //QueryResult* result = WorldDatabase.Query("SELECT version, creature_ai_version, cache_id FROM db_version LIMIT 1"); if (result) { Field* fields = result->Fetch(); - m_DBVersion = fields[0].GetString(); m_CreatureEventAIVersion = fields[1].GetString(); @@ -2789,8 +2755,7 @@ void World::LoadWorldStates() m_worldstates[fields[0].GetUInt32()] = fields[1].GetUInt64(); bar.step(); ++counter; - } - while (result->NextRow()); + } while (result->NextRow()); sLog.outString(); sLog.outString(">> Loaded %u world states.", counter); @@ -2817,7 +2782,6 @@ void World::ProcessQueryCallbacks() { QueryResult result; - //-UpdateRealmCharCount if (m_realmCharCallback.IsReady()) { uint32 param = m_realmCharCallback.GetParam(); |