// ====================================================================== // // ConsoleCommandParserVeteran.cpp // copyright (c) 2004 Sony Online Entertainment // // ====================================================================== #include "serverGame/FirstServerGame.h" #include "serverGame/ConsoleCommandParserVeteran.h" #include "UnicodeUtils.h" #include "serverGame/ConfigServerGame.h" #include "serverGame/GameServer.h" #include "serverGame/ServerMessageForwarding.h" #include "serverGame/ServerObject.h" #include "serverGame/VeteranRewardManager.h" #include "sharedNetworkMessages/GenericValueTypeMessage.h" #include "sharedObject/NetworkIdManager.h" //----------------------------------------------------------------------- static const CommandParser::CmdInfo cmds[] = { {"getRewardInfo", 1,"","Get the reward status of a player."}, {"claimReward", 3," ","For testing, claim a reward using the specified event."}, {"launchBrowser", 1,"","Test launching a web browser."}, {"setOverrideAccountAge",1,"","For testing, set all accounts as being the speficied age (in days)"}, {"", 0, "", ""} // this must be last }; ConsoleCommandParserVeteran::ConsoleCommandParserVeteran() : CommandParser ("veteran", 0, "...", "commands for the veteran reward system", 0) { createDelegateCommands (cmds); } //----------------------------------------------------------------------- bool ConsoleCommandParserVeteran::performParsing (const NetworkId & userId, const StringVector_t & argv, const String_t & /* originalMessage */, String_t & result, const CommandParser *) { if (isCommand( argv [0], "getRewardInfo")) { NetworkId targetPlayer(Unicode::wideToNarrow (argv[1])); ServerObject const * const so = safe_cast(NetworkIdManager::getObjectById(targetPlayer)); Client const * const client = so ? so->getClient() : NULL; if (client) { std::string output; // Claimed Rewards: std::vector > const & accountConsumedRewardEvents = client->getConsumedRewardEvents(); std::vector > const & accountClaimedRewardItems = client->getClaimedRewardItems(); std::vector localConsumedRewardEvents; VeteranRewardManager::getConsumedEvents(*so, localConsumedRewardEvents); std::vector localClaimedRewardItems; VeteranRewardManager::getClaimedItems(*so, localClaimedRewardItems); std::vector >::const_iterator i; output += "Consumed reward events (login server db): "; for (i = accountConsumedRewardEvents.begin(); i != accountConsumedRewardEvents.end(); ++i) { if (i != accountConsumedRewardEvents.begin()) output += ", "; output += '(' + i->first.getValueString() + ") " + i->second; } output += "\nClaimed reward items (login server db): "; for (i = accountClaimedRewardItems.begin(); i != accountClaimedRewardItems.end(); ++i) { if (i != accountClaimedRewardItems.begin()) output += ", "; output += '(' + i->first.getValueString() + ") " + i->second; } std::vector::const_iterator j; output += "\nConsumed reward events (cluster db): "; for (j = localConsumedRewardEvents.begin(); j != localConsumedRewardEvents.end(); ++j) { if (j != localConsumedRewardEvents.begin()) output += ", "; output += *j; } output += "\nClaimed reward items (cluster db): "; for (j = localClaimedRewardItems.begin(); j != localClaimedRewardItems.end(); ++j) { if (j != localClaimedRewardItems.begin()) output += ", "; output += *j; } output += "\n"; // Criteria used for granting rewards: unsigned int const entitledTime = client->getEntitlementEntitledTime(); uint32 const gameFeatures = client->getGameFeatures(); bool const adminLogin = client->isUsingAdminLogin(); char buffer[256]; snprintf(buffer,sizeof(buffer),"Entitled time: %u\nGame features: %lu\nUsing admin login: %s\n", entitledTime, gameFeatures, adminLogin ? "true" : "false"); buffer[sizeof(buffer)-1]='\0'; output += buffer; result += Unicode::narrowToWide(output); } else result += getErrorMessage(argv[0],ERR_INVALID_OBJECT); } if (isCommand( argv [0], "claimReward")) { NetworkId targetPlayer(Unicode::wideToNarrow(argv[1])); ServerObject const * const so = safe_cast(NetworkIdManager::getObjectById(targetPlayer)); CreatureObject const * const playerCreature = so ? so->asCreatureObject() : NULL; if (!playerCreature) result += getErrorMessage(argv[0],ERR_INVALID_OBJECT); else { std::string event(Unicode::wideToNarrow(argv[2])); std::string item(Unicode::wideToNarrow(argv[3])); std::string resultMessage; if (VeteranRewardManager::claimRewards(*playerCreature, event, item, &resultMessage)) result += Unicode::narrowToWide("returned true"); else result += Unicode::narrowToWide("returned false, message: " + resultMessage); } } if (isCommand( argv [0], "launchBrowser")) { std::string url(Unicode::wideToNarrow(argv[1])); ServerObject const * const so = safe_cast(NetworkIdManager::getObjectById(userId)); Client const * const client = so ? so->getClient() : NULL; if (client) { client->launchWebBrowser(url); result += getErrorMessage(argv[0], ERR_SUCCESS); } else result+=Unicode::narrowToWide("Could not get Client object"); } if (isCommand( argv [0], "setOverrideAccountAge")) { if (ConfigServerGame::getVeteranDebugEnableOverrideAccountAge()) { int age(atoi(Unicode::wideToNarrow(argv[1]).c_str())); VeteranRewardManager::setOverrideAccountAge(age); ServerMessageForwarding::beginBroadcast(); ServerMessageForwarding::send(GenericValueTypeMessage("SetOverrideAccountAgeMessage",age)); ServerMessageForwarding::end(); result += getErrorMessage(argv[0], ERR_SUCCESS); } else result += Unicode::narrowToWide("\"veteranDebugEnableOverrideAccountAge\" must be set to \"true\" in the server config file to use this feature."); } return true; } //-----------------------------------------------------------------------