// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . //----------------------------------------------------------------------------- // includes //----------------------------------------------------------------------------- //nel #include "nel/misc/command.h" // game share #include "game_share/utils.h" // local #include "ss_state_manager.h" #include "ss_script_manager.h" #include "ss_command_executor.h" #include "ss_service_comms_manager.h" //----------------------------------------------------------------------------- // Namespaces //----------------------------------------------------------------------------- using namespace std; using namespace NLMISC; //----------------------------------------------------------------------------- // CStateManager Commands //----------------------------------------------------------------------------- NLMISC_CATEGORISED_COMMAND(ShardScript,ssActiveStatesResetAll,"reset the active states","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; CStateManager::getInstance()->resetAll(); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssActiveStatesBegin,"activate a state","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=1) return false; CStateManager::getInstance()->beginState(args[0]); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssActiveStatesEnd,"deactivate an active state","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=1) return false; CStateManager::getInstance()->endState(args[0]); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssActiveStatesDisplay,"display the set of active states","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; CStateManager::getInstance()->display(); return true; } //----------------------------------------------------------------------------- // CScriptManager Commands //----------------------------------------------------------------------------- NLMISC_CATEGORISED_COMMAND(ShardScript,ssScrLoad,"clear current script from ram and read a new script file","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=1) return false; CScriptManager::getInstance()->clear(); return CScriptManager::getInstance()->readScriptFile(args[0]); } NLMISC_CATEGORISED_COMMAND(ShardScript,ssScrRoutineRun,"run a routine from the currently loaded script file","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=1) return false; CScriptManager::getInstance()->runScript(args[0]); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssScrDisplay,"display the currently loaded script routines","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; CScriptManager::getInstance()->display(); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssScrAddLine,"display the currently loaded script routines","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=2) return false; CScriptManager::getInstance()->addScriptLine(args[0],args[1]); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssScrHelp,"display some info on script syntax","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; log.displayNL("%s", "Script format (for *.shard_script):"); log.displayNL("\t%s", "The script is line based"); log.displayNL("\t%s", "Empty lines are allowed"); log.displayNL("\t%s", "Each script line begins with a keyword. The supported keywords are:"); log.displayNL("\t\t%-50s%s", "'include' ","// include another script file here"); log.displayNL("\t\t%-50s%s", "'sub' ","// begin a script that is not executed automatically"); log.displayNL("\t\t%-50s%s", "'state' ","// begin a new state"); log.displayNL("\t\t%-50s%s", "'begin'","// begin a script to be executed on 'start of state' for current state"); log.displayNL("\t\t%-50s%s", "'end'","// begin a script to be executed on 'end of state' for current state"); log.displayNL("\t\t%-50s%s", "'serviceUp' ","// begin a script to be executed on 'serviceUp' for named service and current state"); log.displayNL("\t\t%-50s%s", "'serviceDown' ","// begin a script to be executed on 'serviceDown' for named service and current state"); log.displayNL("\t\t%-50s%s", "'cmd' ","// add a command to the current script"); log.displayNL("\t\t%-50s%s", "'cmd' #.=","// add a 'setVar' command to the current script"); log.displayNL("\t\t%-50s%s", "'runScript' ","// add a 'runScript' command to the current script"); log.displayNL("\t\t%-50s%s", "'//' ","// add a comment to the current script"); return true; } //----------------------------------------------------------------------------- // CCommandExecutor Commands //----------------------------------------------------------------------------- NLMISC_CATEGORISED_COMMAND(ShardScript,ssCmdExecutorDisplay,"list pending commands with remaining times","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; CCommandExecutor::getInstance()->display(); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssCmdExecutorAdd,"add a command"," ") { CNLSmartLogOverride logOverride(&log); if (args.size()<1) return false; NLMISC::CVectorSString argVector; argVector= reinterpret_cast &>(args); NLMISC::CSString cmdLine; cmdLine.join(argVector,' '); CCommandExecutor::getInstance()->addCommand(cmdLine); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssCmdExecutorSimTick,"simulate the tick update","[]") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0 && args.size()!=1) return false; uint32 count=1; if (!args.empty()) { count= atoi(args[0].c_str()); if (NLMISC::toString("%u",count)!=args[0]) { nlwarning("Bad numeric argument for 'count': %s",args[0].c_str()); return false; } } for (uint32 i=0;itickUpdate(); return true; } //----------------------------------------------------------------------------- // CCommandExecutor Commands //----------------------------------------------------------------------------- NLMISC_CATEGORISED_COMMAND(ShardScript,ssServiceCommsManagerExecute,"execute a command on a remote service","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=2) return false; CServiceCommsManager::getInstance()->execute(args[0],args[1]); return true; } NLMISC_CATEGORISED_COMMAND(ShardScript,ssServiceCommsManagerDisplay,"display the state of the comms manager (connected services, etc)","") { CNLSmartLogOverride logOverride(&log); if (args.size()!=0) return false; CServiceCommsManager::getInstance()->display(); return true; } //-----------------------------------------------------------------------------