diff options
| author | Spp <spp@jorge.gr> | 2012-02-23 13:06:35 +0100 |
|---|---|---|
| committer | Spp <spp@jorge.gr> | 2012-02-23 13:06:35 +0100 |
| commit | 5cff9e071640bc47688b71bb264edd8267ba77c3 (patch) | |
| tree | c599d12dfb7870d7c34a07490a930b3102c3d8ac /src/server/game/Server | |
| parent | f0ca875a216eaab3d213feae8ba75c07795c9304 (diff) | |
| parent | 9219625243bc9f63e5a152e6cda1043cfaade201 (diff) | |
Merge branch 'master' into 4.x
Conflicts:
sql/base/auth_database.sql
src/server/authserver/Server/AuthSocket.cpp
src/server/game/AI/CoreAI/CombatAI.cpp
src/server/game/AuctionHouse/AuctionHouseMgr.cpp
src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
src/server/game/DataStores/DBCStructure.h
src/server/game/DataStores/DBCfmt.h
src/server/game/Entities/Unit/Unit.cpp
src/server/game/Entities/Vehicle/Vehicle.cpp
src/server/game/Globals/ObjectMgr.cpp
src/server/game/Globals/ObjectMgr.h
src/server/game/Handlers/AuctionHouseHandler.cpp
src/server/game/Miscellaneous/SharedDefines.h
src/server/game/Movement/MotionMaster.cpp
src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
src/server/game/Quests/QuestDef.cpp
src/server/game/Server/Protocol/Opcodes.cpp
src/server/game/Server/WorldSocket.cpp
src/server/game/Spells/Spell.cpp
src/server/game/Spells/SpellEffects.cpp
src/server/game/Spells/SpellInfo.cpp
src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
src/server/scripts/Spells/spell_quest.cpp
src/server/shared/Logging/Log.h
src/server/worldserver/worldserver.conf.dist
src/tools/vmap3_extractor/model.h
src/tools/vmap4_extractor/CMakeLists.txt
src/tools/vmap4_extractor/dbcfile.cpp
src/tools/vmap4_extractor/dbcfile.h
src/tools/vmap4_extractor/loadlib/loadlib.h
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSession.cpp | 38 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSession.h | 10 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSocket.cpp | 20 |
4 files changed, 59 insertions, 12 deletions
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 4ed8f90b10e..707dd65e2ad 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -27,7 +27,6 @@ OpcodeHandler* opcodeTable[NUM_OPCODE_HANDLERS] = { }; /// Correspondence between opcodes and their names void InitOpcodes() { - #define DEFINE_OPCODE_HANDLER(opcode, status, processing, handler) \ if (opcode == 0) \ sLog->outError("Opcode %s got value 0", #opcode); \ @@ -803,7 +802,7 @@ void InitOpcodes() //DEFINE_OPCODE_HANDLER(SMSG_AREA_SPIRIT_HEALER_TIME, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(CMSG_GM_UNTEACH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //DEFINE_OPCODE_HANDLER(SMSG_WARDEN_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //DEFINE_OPCODE_HANDLER(CMSG_WARDEN_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenDataOpcode ); + //DEFINE_OPCODE_HANDLER(CMSG_WARDEN_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenDataOpcode ); //DEFINE_OPCODE_HANDLER(SMSG_GROUP_JOINED_BATTLEGROUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //DEFINE_OPCODE_HANDLER(MSG_BATTLEGROUND_PLAYER_POSITIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlegroundPlayerPositionsOpcode); //DEFINE_OPCODE_HANDLER(CMSG_PET_STOP_ATTACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetStopAttack ); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 978f33c88aa..e93c0eb8102 100755 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -42,6 +42,8 @@ #include "zlib.h" #include "ScriptMgr.h" #include "Transport.h" +#include "WardenWin.h" +#include "WardenMac.h" bool MapSessionFilter::Process(WorldPacket* packet) { @@ -98,6 +100,8 @@ m_sessionDbLocaleIndex(locale), m_latency(0), m_TutorialsChanged(false), recruiterId(recruiter), isRecruiter(isARecruiter), timeLastWhoCommand(0) { + _warden = NULL; + if (sock) { m_Address = sock->GetRemoteAddress(); @@ -124,6 +128,9 @@ WorldSession::~WorldSession() m_Socket = NULL; } + if (_warden) + delete _warden; + ///- empty incoming packet queue WorldPacket* packet = NULL; while (_recvQueue.next(packet)) @@ -144,6 +151,12 @@ char const* WorldSession::GetPlayerName() const return GetPlayer() ? GetPlayer()->GetName() : "<none>"; } +/// Get player guid if available. Use for logging purposes only +uint32 WorldSession::GetGuidLow() const +{ + return GetPlayer() ? GetPlayer()->GetGUIDLow() : 0; +} + /// Send a packet to the client void WorldSession::SendPacket(WorldPacket const* packet) { @@ -349,6 +362,9 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) delete packet; } + if (m_Socket && !m_Socket->IsClosed() && _warden) + _warden->Update(); + ProcessQueryCallbacks(); //check if we are safe to proceed with logout @@ -360,6 +376,9 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) if (ShouldLogOut(currTime) && !m_playerLoading) LogoutPlayer(true); + if (m_Socket && GetPlayer() && _warden) + _warden->Update(); + ///- Cleanup socket pointer if need if (m_Socket && m_Socket->IsClosed()) { @@ -520,8 +539,8 @@ void WorldSession::LogoutPlayer(bool Save) // calls to GetMap in this case may cause crashes _player->CleanupsBeforeDelete(); sLog->outChar("Account: %d (IP: %s) Logout Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), _player->GetName(), _player->GetGUIDLow()); - Map* _map = _player->GetMap(); - _map->RemovePlayerFromMap(_player, true); + if (Map* _map = _player->FindMap()) + _map->RemovePlayerFromMap(_player, true); SetPlayer(NULL); // deleted in Remove call ///- Send the 'logout complete' packet to the client @@ -997,3 +1016,18 @@ void WorldSession::ProcessQueryCallbacks() _stableSwapCallback.FreeResult(); } } + +void WorldSession::InitWarden(BigNumber* k, std::string os) +{ + if (os == "Win") + { + _warden = new WardenWin(); + _warden->Init(this, k); + } + else if (os == "OSX") + { + // Disabled as it is causing the client to crash + // _warden = new WardenMac(); + // _warden->Init(this, k); + } +} diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index ec2587f8b29..21cc3991b9f 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -29,6 +29,7 @@ #include "DatabaseEnv.h" #include "World.h" #include "WorldPacket.h" +#include "Cryptography/BigNumber.h" struct ItemTemplate; struct AuctionEntry; @@ -46,6 +47,7 @@ class WorldPacket; class WorldSocket; class LoginQueryHolder; class SpellCastTargets; +class Warden; struct AreaTableEntry; struct LfgJoinResultData; struct LfgLockStatus; @@ -252,11 +254,14 @@ class WorldSession uint32 GetAccountId() const { return _accountId; } Player* GetPlayer() const { return _player; } char const* GetPlayerName() const; + uint32 GetGuidLow() const; void SetSecurity(AccountTypes security) { _security = security; } std::string const& GetRemoteAddress() { return m_Address; } void SetPlayer(Player* player); uint8 Expansion() const { return m_expansion; } + void InitWarden(BigNumber* k, std::string os); + /// Session in auth.queue currently void SetInQueue(bool state) { m_inQueue = state; } @@ -501,6 +506,7 @@ class WorldSession void HandleSetActionButtonOpcode(WorldPacket& recvPacket); void HandleGameObjectUseOpcode(WorldPacket& recPacket); + void HandleMeetingStoneInfo(WorldPacket& recPacket); void HandleGameobjectReportUse(WorldPacket& recvPacket); void HandleNameQueryOpcode(WorldPacket& recvPacket); @@ -585,6 +591,7 @@ class WorldSession void HandleActivateTaxiOpcode(WorldPacket& recvPacket); void HandleActivateTaxiExpressOpcode(WorldPacket& recvPacket); void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket); + void SendActivateTaxiReply(ActivateTaxiReply reply); void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket); void HandleBankerActivateOpcode(WorldPacket& recvPacket); @@ -950,6 +957,9 @@ class WorldSession typedef std::list<AddonInfo> AddonsList; + // Warden + Warden* _warden; // Remains NULL if Warden system is not enabled by config + time_t _logoutTime; bool m_inQueue; // session wait in auth.queue bool m_playerLoading; // code processed in LoginPlayer diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 881464ce40a..22689e40c2b 100755 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -869,7 +869,8 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) "expansion, " //6 "mutetime, " //7 "locale, " //8 - "recruiter " //9 + "recruiter, " //9 + "os " "FROM account " "WHERE username = '%s'", safe_account.c_str()); @@ -926,10 +927,10 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) id = fields[0].GetUInt32(); /* if (security > SEC_ADMINISTRATOR) // prevent invalid security settings in DB - security = SEC_ADMINISTRATOR; - */ + security = SEC_ADMINISTRATOR; + */ - K.SetHexStr (fields[1].GetCString()); + k.SetHexStr (fields[1].GetCString()); int64 mutetime = fields[7].GetInt64(); //! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now. @@ -950,6 +951,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) locale = LOCALE_enUS; uint32 recruiter = fields[9].GetUInt32(); + std::string os = fields[10].GetString(); // Checks gmlevel per Realm result = LoginDatabase.PQuery ("SELECT " @@ -1000,8 +1002,6 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) } // Check that Key and account name are the same on client and server - SHA1Hash sha; - uint32 t = 0; uint32 seed = m_Seed; @@ -1009,7 +1009,7 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) sha.UpdateData ((uint8 *) & t, 4); sha.UpdateData ((uint8 *) & clientSeed, 4); sha.UpdateData ((uint8 *) & seed, 4); - sha.UpdateBigNumbers (&K, NULL); + sha.UpdateBigNumbers (&k, NULL); sha.Finalize(); std::string address = GetRemoteAddress(); @@ -1037,13 +1037,17 @@ int WorldSocket::HandleAuthSession(WorldPacket& recvPacket) // NOTE ATM the socket is single-threaded, have this in mind ... ACE_NEW_RETURN (m_Session, WorldSession (id, this, AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter), -1); - m_Crypt.Init(&K); + m_Crypt.Init(&k); m_Session->LoadGlobalAccountData(); m_Session->LoadTutorialsData(); packetAddon.rpos(0); m_Session->ReadAddonsInfo(packetAddon); + // Initialize Warden system only if it is enabled by config + if (sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED)) + m_Session->InitWarden(&k, os); + // Sleep this Network thread for uint32 sleepTime = sWorld->getIntConfig(CONFIG_SESSION_ADD_DELAY); ACE_OS::sleep (ACE_Time_Value (0, sleepTime)); |
