mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-09-22 07:13:03 -04:00
131 lines
3.4 KiB
C++
131 lines
3.4 KiB
C++
// ======================================================================
|
|
//
|
|
// ConsoleCommandParserSpawner.cpp
|
|
// copyright (c) 2001 Sony Online Entertainment
|
|
//
|
|
// ======================================================================
|
|
|
|
#include "serverGame/FirstServerGame.h"
|
|
#include "serverGame/ConsoleCommandParserSpawner.h"
|
|
|
|
#include "UnicodeUtils.h"
|
|
#include "serverGame/CreatureObject.h"
|
|
|
|
#include <cstdio>
|
|
#include <hash_set>
|
|
|
|
// ======================================================================
|
|
|
|
namespace
|
|
{
|
|
namespace CommandNames
|
|
{
|
|
#define MAKE_COMMAND(a) const char * const a = #a
|
|
MAKE_COMMAND(showQueue);
|
|
MAKE_COMMAND(showCreatures);
|
|
#undef MAKE_COMMAND
|
|
}
|
|
|
|
const CommandParser::CmdInfo cmds[] =
|
|
{
|
|
{CommandNames::showQueue, 0, "", "Lists players on the spawn queue."},
|
|
{CommandNames::showCreatures, 0, "[pc|npc]", "Lists all creatures on the server."},
|
|
{"", 0, "", ""} // this must be last
|
|
};
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------
|
|
|
|
ConsoleCommandParserSpawner::ConsoleCommandParserSpawner (void) :
|
|
CommandParser ("Spawner", 0, "...", "Spawner related commands.", 0)
|
|
{
|
|
createDelegateCommands (cmds);
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
bool ConsoleCommandParserSpawner::performParsing (const NetworkId &, const StringVector_t & argv, const String_t & , String_t & result, const CommandParser *)
|
|
{
|
|
// ----------------------------------------------------------------
|
|
|
|
if (isCommand (argv[0], CommandNames::showQueue))
|
|
{
|
|
CreatureObject::showSpawnQueue(result);
|
|
return true;
|
|
}
|
|
|
|
else if(isCommand (argv[0], CommandNames::showCreatures))
|
|
{
|
|
bool npcOnly = false;
|
|
bool pcOnly = false;
|
|
if(argv.size() >= 2)
|
|
{
|
|
std::string arg2 = Unicode::wideToNarrow(argv[1]);
|
|
if(arg2 == "npc")
|
|
{
|
|
npcOnly = true;
|
|
}
|
|
else if(arg2 == "pc")
|
|
{
|
|
pcOnly = true;
|
|
}
|
|
}
|
|
|
|
static const Unicode::String header(Unicode::narrowToWide(std::string("Creature Listing - ID: POS: Auth Server: Template Name\n")));
|
|
result += header;
|
|
const CreatureObject::AllCreaturesSet & creatureList = CreatureObject::getAllCreatures();
|
|
CreatureObject::AllCreaturesSet::const_iterator i;
|
|
int count = 0;
|
|
for(i = creatureList.begin(); i != creatureList.end(); ++i)
|
|
{
|
|
const CreatureObject * creature = (*i);
|
|
if(creature)
|
|
{
|
|
if(pcOnly && (!creature->isPlayerControlled()) )
|
|
continue;
|
|
if(npcOnly && creature->isPlayerControlled())
|
|
continue;
|
|
|
|
std::string creatureEntry = creature->getNetworkId().getValueString();
|
|
creatureEntry += ": ";
|
|
|
|
char locBuffer[32] = {"\0"};
|
|
Vector loc = creature->getTransform_o2w().getPosition_p();
|
|
snprintf(locBuffer, sizeof(locBuffer), "%.0f, %.0f: ", loc.x, loc.z);
|
|
creatureEntry += locBuffer;
|
|
|
|
snprintf(locBuffer, sizeof(locBuffer), "%lu: ", creature->getAuthServerProcessId());
|
|
creatureEntry += locBuffer;
|
|
creatureEntry += creature->getObjectTemplateName();
|
|
|
|
creatureEntry += "\n";
|
|
|
|
result += Unicode::narrowToWide(creatureEntry);
|
|
count++;
|
|
}
|
|
}
|
|
char countBuffer[32] = {"\0"};
|
|
snprintf(countBuffer, sizeof(countBuffer), "%d creatures listed: ", count);
|
|
result += Unicode::narrowToWide(std::string(countBuffer));
|
|
return true;
|
|
}
|
|
|
|
|
|
else
|
|
{
|
|
result += getErrorMessage (argv[0], ERR_NO_HANDLER);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// ======================================================================
|
|
|
|
|
|
|
|
|
|
|