From ea879babe4a053fb24178e2caf8f2a39043414c3 Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Fri, 30 Sep 2016 20:12:06 -0500 Subject: [PATCH] yay for inconsistencies --- .../serverGame/src/shared/core/Client.cpp | 340 ++++++++---------- 1 file changed, 159 insertions(+), 181 deletions(-) diff --git a/engine/server/library/serverGame/src/shared/core/Client.cpp b/engine/server/library/serverGame/src/shared/core/Client.cpp index 87de89f2..7459c3b5 100755 --- a/engine/server/library/serverGame/src/shared/core/Client.cpp +++ b/engine/server/library/serverGame/src/shared/core/Client.cpp @@ -972,89 +972,6 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) //---------------------------------------------------------------------- - case ObjectMenuSelectMessage::MESSAGE_TYPE : - { - Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); - const ObjectMenuSelectMessage m (ri); - ServerObject * const target = safe_cast(NetworkIdManager::getObjectById (m.getNetworkId())); - GameScriptObject * const scriptObject = target ? target->getScriptObject() : 0; - Object * const targetContainedBy = target ? ContainerInterface::getContainedByObject(*target) : nullptr; - const int menuType = m.getSelectedItemId(); - - static int examineMenuType = RadialMenuManager::getMenuTypeByName("EXAMINE"); - static int tradeMenuType = RadialMenuManager::getMenuTypeByName("TRADE_START"); - - CreatureObject* cobj = dynamic_cast(primaryControlledObject); - if (cobj && menuType != examineMenuType && menuType != tradeMenuType) - { - CreatureController* const controller = cobj->getCreatureController(); - if (controller && controller->getSecureTrade()) - { - controller->getSecureTrade()->cancelTrade(*cobj); - DEBUG_REPORT_LOG (true, ("Client ObjectMenuSelectMessage [%d] for [%s] canceling trade.\n", menuType, cobj->getNetworkId ().getValueString ().c_str ())); - } - } - - if (!scriptObject) - { - DEBUG_REPORT_LOG (true, ("Received an object menu select message from player %s for object %s, which does not exist or lacks a GameScriptObject.", m_characterObjectId.getValueString().c_str(),m.getNetworkId().getValueString().c_str())); - return; - } - - NOT_NULL(target); - - float range = 0.0f; - if (RadialMenuManager::getRangeForMenuType(menuType, range)) - { - Container::ContainerErrorCode errorCode = Container::CEC_Success; - if (!target->isAuthoritative()) - { - GenericValueTypeMessage > const rssMessage( - "RequestSameServer", - std::make_pair( - ContainerInterface::getTopmostContainer(*primaryControlledObject)->getNetworkId(), - ContainerInterface::getTopmostContainer(*target)->getNetworkId())); - GameServer::getInstance().sendToPlanetServer(rssMessage); - errorCode = Container::CEC_TryAgain; - } - else if (menuType != examineMenuType && targetContainedBy && targetContainedBy->asServerObject() && ( targetContainedBy->asServerObject()->getGameObjectType() == SharedObjectTemplate::GOT_chronicles_quest_holocron || targetContainedBy->asServerObject()->getGameObjectType() == SharedObjectTemplate::GOT_chronicles_quest_holocron_recipe ) ) - { - // Can only examine items that are contained in a holocron. - errorCode = Container::CEC_NoPermission; - } - else if (primaryControlledObject->canManipulateObject(*target, false, false, false, range, errorCode) - || ClientNamespace::canManipulateObjectExceptionCheck(*target, menuType, errorCode)) - { - ScriptParams params; - params.addParam (getCharacterObjectId()); - params.addParam (menuType); - - if (cobj && cobj->getObjVars().hasItem("cheater")) - { - std::string menuDesc = "unknown"; - bool tmp; - IGNORE_RETURN(RadialMenuManager::getCommandForMenuType(menuType, menuDesc, tmp)); - LOG("CustomerService",("SuspectedCheaterLog: %s has used a radial menu on object %s. Menu item %d (%s).", - PlayerObject::getAccountDescription(cobj).c_str(), - m.getNetworkId().getValueString().c_str(), - menuType, - menuDesc.c_str() )); - } - - IGNORE_RETURN (scriptObject->trigAllScripts(Scripting::TRIG_OBJECT_MENU_SELECT, params)); - } - if (errorCode != Container::CEC_Success) - ContainerInterface::sendContainerMessageToClient(*primaryControlledObject, errorCode); - } - else - { - DEBUG_REPORT_LOG(true, ("Received a message type %d that had no range in data (radial_menu.tab)\n", menuType)); - } - break; - } - - //---------------------------------------------------------------------- - case constcrc("ConGenericMessage") : { @@ -1318,12 +1235,6 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) break; } - case SuiEventNotification::MessageType : - { - ServerUIManager::receiveMessage(message); - break; - } - case constcrc("GuildRequestMessage") : { Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); @@ -1403,27 +1314,6 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) break; } - //---------------------------------------------------------------------- - - case PlayerMoneyRequest::MessageType : - { - Archive::ReadIterator ri = (*NON_NULL (static_cast(&message))).getByteStream().begin(); - const PlayerMoneyRequest m (ri); - - ServerObject * const playerObject = getCharacterObject(); - - WARNING (!playerObject, ("Got PlayerMoneyRequest for non-existant character (account=%s, networkid=%s)", m_accountName.c_str (), m_characterObjectId.getValueString ().c_str ())); - - if (playerObject) - { - PlayerMoneyResponse resp; - resp.m_balanceCash.set (playerObject->getCashBalance ()); - resp.m_balanceBank.set (playerObject->getBankBalance ()); - send (resp, true); - } - break; - } - //----------------------------------------------------------------- case constcrc("AcceptAuctionMessage") : @@ -1732,66 +1622,6 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) //----------------------------------------------------------------- - case PlanetTravelPointListRequest::cms_name : - { - Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); - const PlanetTravelPointListRequest requestMessage (readIterator); - - const std::string & planetName = requestMessage.getPlanetName (); - const PlanetObject* const planetObject = ServerUniverse::getInstance ().getPlanetByName (requestMessage.getPlanetName ()); - if (planetObject) - { - std::vector names; - planetObject->getTravelPointNameList (names); - - std::vector points; - planetObject->getTravelPointPointList (points); - - std::vector costs; - planetObject->getTravelPointCostList (costs); - - std::vector interplanetary; - planetObject->getTravelPointInterplanetaryList (interplanetary); - - PlanetTravelPointListResponse const rsp(planetName, names, points, costs, interplanetary, requestMessage.getSequenceId ()); - send(rsp, true); - } - else - DEBUG_WARNING (true, ("GameServer::receiveMessage: received request for travel point names from client [%s] for planet %s which does not exist", requestMessage.getPlanetName ().c_str (), requestMessage.getNetworkId ().getValueString ().c_str ())); - - break; - } - - //----------------------------------------------------------------- - - case NewbieTutorialResponse::cms_name : - { - Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); - const NewbieTutorialResponse responseMessage (readIterator); - - static const std::string clientReadyString("clientReady"); - - if (responseMessage.getResponse() == clientReadyString) - { - for (std::vector::iterator i = m_controlledObjects.begin(); i != m_controlledObjects.end(); ++i) - { - ServerObject * const so = *i; - if (so) - so->onLoadingScreenComplete(); - } - } - - ScriptParams scriptParameters; - scriptParameters.addParam (responseMessage.getResponse ().c_str ()); - - if (primaryControlledObject->getScriptObject ()->trigAllScripts (Scripting::TRIG_NEWBIE_TUTORIAL_RESPONSE, scriptParameters) != SCRIPT_CONTINUE) - DEBUG_REPORT_LOG (true, ("OnNewbieTutorialResponse: did not return SCRIPT_CONTINUE\n")); - - break; - } - - //----------------------------------------------------------------- - case constcrc("AddMapLocationMessage") : { Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); @@ -1814,17 +1644,6 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) break; } - //----------------------------------------------------------------- - - case GetMapLocationsMessage::MessageType : - { - Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); - const GetMapLocationsMessage msg (readIterator); - - PlanetMapManagerServer::handleClientRequest (*this, msg); - break; - } - case constcrc("GetSpecificMapLocationsMessage") : { Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); @@ -2028,6 +1847,165 @@ void Client::receiveClientMessage(const GameNetworkMessage & message) } break; } + default : + { + // am too lazy to convert these to constexpr's + if (message.isType(ObjectMenuSelectMessage::MESSAGE_TYPE)) + { + Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); + const ObjectMenuSelectMessage m (ri); + ServerObject * const target = safe_cast(NetworkIdManager::getObjectById (m.getNetworkId())); + GameScriptObject * const scriptObject = target ? target->getScriptObject() : 0; + Object * const targetContainedBy = target ? ContainerInterface::getContainedByObject(*target) : nullptr; + const int menuType = m.getSelectedItemId(); + + static int examineMenuType = RadialMenuManager::getMenuTypeByName("EXAMINE"); + static int tradeMenuType = RadialMenuManager::getMenuTypeByName("TRADE_START"); + + CreatureObject* cobj = dynamic_cast(primaryControlledObject); + if (cobj && menuType != examineMenuType && menuType != tradeMenuType) + { + CreatureController* const controller = cobj->getCreatureController(); + if (controller && controller->getSecureTrade()) + { + controller->getSecureTrade()->cancelTrade(*cobj); + DEBUG_REPORT_LOG (true, ("Client ObjectMenuSelectMessage [%d] for [%s] canceling trade.\n", menuType, cobj->getNetworkId ().getValueString ().c_str ())); + } + } + + if (!scriptObject) + { + DEBUG_REPORT_LOG (true, ("Received an object menu select message from player %s for object %s, which does not exist or lacks a GameScriptObject.", m_characterObjectId.getValueString().c_str(),m.getNetworkId().getValueString().c_str())); + return; + } + + NOT_NULL(target); + + float range = 0.0f; + if (RadialMenuManager::getRangeForMenuType(menuType, range)) + { + Container::ContainerErrorCode errorCode = Container::CEC_Success; + if (!target->isAuthoritative()) + { + GenericValueTypeMessage > const rssMessage( + "RequestSameServer", + std::make_pair( + ContainerInterface::getTopmostContainer(*primaryControlledObject)->getNetworkId(), + ContainerInterface::getTopmostContainer(*target)->getNetworkId())); + GameServer::getInstance().sendToPlanetServer(rssMessage); + errorCode = Container::CEC_TryAgain; + } + else if (menuType != examineMenuType && targetContainedBy && targetContainedBy->asServerObject() && ( targetContainedBy->asServerObject()->getGameObjectType() == SharedObjectTemplate::GOT_chronicles_quest_holocron || targetContainedBy->asServerObject()->getGameObjectType() == SharedObjectTemplate::GOT_chronicles_quest_holocron_recipe ) ) + { + // Can only examine items that are contained in a holocron. + errorCode = Container::CEC_NoPermission; + } + else if (primaryControlledObject->canManipulateObject(*target, false, false, false, range, errorCode) + || ClientNamespace::canManipulateObjectExceptionCheck(*target, menuType, errorCode)) + { + ScriptParams params; + params.addParam (getCharacterObjectId()); + params.addParam (menuType); + + if (cobj && cobj->getObjVars().hasItem("cheater")) + { + std::string menuDesc = "unknown"; + bool tmp; + IGNORE_RETURN(RadialMenuManager::getCommandForMenuType(menuType, menuDesc, tmp)); + LOG("CustomerService",("SuspectedCheaterLog: %s has used a radial menu on object %s. Menu item %d (%s).", + PlayerObject::getAccountDescription(cobj).c_str(), + m.getNetworkId().getValueString().c_str(), + menuType, + menuDesc.c_str() )); + } + + IGNORE_RETURN (scriptObject->trigAllScripts(Scripting::TRIG_OBJECT_MENU_SELECT, params)); + } + if (errorCode != Container::CEC_Success) + ContainerInterface::sendContainerMessageToClient(*primaryControlledObject, errorCode); + } + else + { + DEBUG_REPORT_LOG(true, ("Received a message type %d that had no range in data (radial_menu.tab)\n", menuType)); + } + } else if (message.isType(SuiEventNotification::MessageType)) + { + ServerUIManager::receiveMessage(message); + } else if (message.isType(PlayerMoneyRequest::MessageType)) + { + Archive::ReadIterator ri = (*NON_NULL (static_cast(&message))).getByteStream().begin(); + const PlayerMoneyRequest m (ri); + + ServerObject * const playerObject = getCharacterObject(); + + WARNING (!playerObject, ("Got PlayerMoneyRequest for non-existant character (account=%s, networkid=%s)", m_accountName.c_str (), m_characterObjectId.getValueString ().c_str ())); + + if (playerObject) + { + PlayerMoneyResponse resp; + resp.m_balanceCash.set (playerObject->getCashBalance ()); + resp.m_balanceBank.set (playerObject->getBankBalance ()); + send (resp, true); + } + } else if (message.isType(PlanetTravelPointListRequest::cms_name)) + { + Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); + const PlanetTravelPointListRequest requestMessage (readIterator); + + const std::string & planetName = requestMessage.getPlanetName (); + const PlanetObject* const planetObject = ServerUniverse::getInstance ().getPlanetByName (requestMessage.getPlanetName ()); + if (planetObject) + { + std::vector names; + planetObject->getTravelPointNameList (names); + + std::vector points; + planetObject->getTravelPointPointList (points); + + std::vector costs; + planetObject->getTravelPointCostList (costs); + + std::vector interplanetary; + planetObject->getTravelPointInterplanetaryList (interplanetary); + + PlanetTravelPointListResponse const rsp(planetName, names, points, costs, interplanetary, requestMessage.getSequenceId ()); + send(rsp, true); + } + else + DEBUG_WARNING (true, ("GameServer::receiveMessage: received request for travel point names from client [%s] for planet %s which does not exist", requestMessage.getPlanetName ().c_str (), requestMessage.getNetworkId ().getValueString ().c_str ())); + + } else if (message.isType(NewbieTutorialResponse::cms_name)) + { + Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); + const NewbieTutorialResponse responseMessage (readIterator); + + static const std::string clientReadyString("clientReady"); + + if (responseMessage.getResponse() == clientReadyString) + { + for (std::vector::iterator i = m_controlledObjects.begin(); i != m_controlledObjects.end(); ++i) + { + ServerObject * const so = *i; + if (so) + so->onLoadingScreenComplete(); + } + } + + ScriptParams scriptParameters; + scriptParameters.addParam (responseMessage.getResponse ().c_str ()); + + if (primaryControlledObject->getScriptObject ()->trigAllScripts (Scripting::TRIG_NEWBIE_TUTORIAL_RESPONSE, scriptParameters) != SCRIPT_CONTINUE) + DEBUG_REPORT_LOG (true, ("OnNewbieTutorialResponse: did not return SCRIPT_CONTINUE\n")); + + } else if (message.isType(GetMapLocationsMessage::MessageType)) + { + Archive::ReadIterator readIterator = static_cast (message).getByteStream ().begin (); + const GetMapLocationsMessage msg (readIterator); + + PlanetMapManagerServer::handleClientRequest (*this, msg); + } + break; + } } } catch (Archive::ReadException &)