From 61f462a882c97bb1ef56e5396a82597bda879cf2 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 2 Dec 2014 23:55:12 +1100 Subject: [PATCH] Server-side HandleCharacterUnload() --- server/server_methods.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/server/server_methods.cpp b/server/server_methods.cpp index bf80735..f3a21b9 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -330,7 +330,7 @@ void ServerApplication::HandleCharacterCreate(CharacterPacket* const argPacket) //send this character to the player CharacterPacket newPacket; newPacket.type = SerialPacketType::CHARACTER_CREATE; - //TODO? + //TODO: pump character load } void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) { @@ -399,11 +399,36 @@ void ServerApplication::HandleCharacterLoad(CharacterPacket* const argPacket) { //send this character to the player CharacterPacket newPacket; newPacket.type = SerialPacketType::CHARACTER_CREATE; - //TODO? + //TODO: pump character load } void ServerApplication::HandleCharacterUnload(CharacterPacket* const argPacket) { - //TODO + //get the entries + CharacterData* characterData = characterMgr.Get(argPacket->characterIndex); + if (!characterData) { + return; + } + + AccountData* accountData = accountMgr.Get(characterData->GetOwner()); + if (!accountData) { + return; //TODO: logic_error + } + + ClientData* clientData = clientMgr.Get(accountData->GetClientIndex()); + if (!clientData) { + return; //TODO: logic_error + } + + //check for fraud + if (clientData->GetAddress() != argPacket->srcAddress) { + std::cerr << "Falsified character unload detected targeting: uid(" << argPacket->characterIndex << ")" << std::endl; + return; + } + + //unload the character + characterMgr.Unload(argPacket->characterIndex); + + //TODO: pump character unload } /*