core/sm_srvcmds.cpp
author David Anderson <dvander@alliedmods.net>
Sun Dec 17 09:59:01 2006 +0000 (2006-12-17)
changeset 223 abac51bc062b
parent 221 5659ebceaa16
child 224 c099c75a81cc
permissions -rw-r--r--
Clarified states a little
Fixed include order and double include prevention
faluco@216
     1
#include "sm_srvcmds.h"
faluco@216
     2
faluco@216
     3
ConVarAccessor g_ConCmdAccessor;
faluco@216
     4
faluco@216
     5
void ConVarAccessor::OnSourceModStartup(bool late)
faluco@216
     6
{
faluco@216
     7
	ConCommandBaseMgr::OneTimeInit(&g_ConCmdAccessor);
faluco@216
     8
}
faluco@216
     9
faluco@216
    10
bool ConVarAccessor::RegisterConCommandBase(ConCommandBase *pCommand)
faluco@216
    11
{
faluco@216
    12
	META_REGCVAR(pCommand);
faluco@216
    13
faluco@216
    14
	return true;
faluco@216
    15
}
faluco@216
    16
faluco@217
    17
inline const char *StatusToStr(PluginStatus st)
faluco@217
    18
{
faluco@217
    19
	switch (st)
faluco@217
    20
	{
faluco@217
    21
	case Plugin_Running:
faluco@217
    22
		return "Running";
faluco@217
    23
	case Plugin_Paused:
faluco@217
    24
		return "Paused";
faluco@217
    25
	case Plugin_Error:
faluco@217
    26
		return "Error";
faluco@217
    27
	case Plugin_Uncompiled:
faluco@217
    28
		return "Uncompiled";
faluco@217
    29
	case Plugin_BadLoad:
faluco@217
    30
		return "Bad Load";
faluco@217
    31
	default:
dvander@223
    32
		assert(false);
faluco@217
    33
		return "-";
faluco@217
    34
	}
faluco@217
    35
}
faluco@217
    36
faluco@216
    37
CON_COMMAND(sm, "SourceMod Menu")
faluco@216
    38
{
faluco@216
    39
	int argnum = engine->Cmd_Argc();
faluco@216
    40
faluco@216
    41
	if (argnum >= 2)
faluco@216
    42
	{
faluco@216
    43
		const char *cmd = engine->Cmd_Argv(1);
faluco@216
    44
		if (!strcmp("plugins", cmd))
faluco@216
    45
		{
faluco@216
    46
			if (argnum >= 3)
faluco@216
    47
			{
faluco@216
    48
				const char *cmd2 = engine->Cmd_Argv(2);
faluco@216
    49
				if (!strcmp("list", cmd2))
faluco@216
    50
				{
faluco@216
    51
					char buffer[256];
faluco@216
    52
					unsigned int id = 1;
faluco@216
    53
					int plnum = g_PluginSys.GetPluginCount();
faluco@216
    54
faluco@216
    55
					if (!plnum)
faluco@216
    56
					{
faluco@216
    57
						META_CONPRINT("[SM] No plugins loaded\n");
faluco@216
    58
						return;
faluco@216
    59
					} else {
faluco@216
    60
						META_CONPRINTF("[SM] Displaying %d plugin%s:\n", g_PluginSys.GetPluginCount(), (plnum > 1) ? "s" : "");
faluco@216
    61
					}
faluco@216
    62
faluco@216
    63
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
    64
					for (; iter->MorePlugins(); iter->NextPlugin(), id++)
faluco@216
    65
					{
faluco@217
    66
						IPlugin *pl = iter->GetPlugin();
faluco@217
    67
						assert(pl->GetStatus() != Plugin_Created);
faluco@216
    68
						int len = 0;
faluco@217
    69
						const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
    70
faluco@217
    71
						len += snprintf(&buffer[len], sizeof(buffer)-len, "  %02d <%s>", id, StatusToStr(pl->GetStatus()));
dvander@223
    72
						len += snprintf(&buffer[len], sizeof(buffer)-len, " \"%s\"", (info->name) ? info->name : iter->GetPlugin()->GetFilename());
dvander@223
    73
						if (info->version)
faluco@216
    74
						{
faluco@216
    75
							len += snprintf(&buffer[len], sizeof(buffer)-len, " (%s)", info->version);
faluco@216
    76
						}
dvander@223
    77
						if (info->author)
faluco@216
    78
						{
faluco@216
    79
							snprintf(&buffer[len], sizeof(buffer)-len, " by %s", info->author);
faluco@216
    80
						}
faluco@216
    81
						META_CONPRINTF("%s\n", buffer);
faluco@216
    82
					}
faluco@216
    83
faluco@216
    84
					iter->Release();
faluco@216
    85
					return;
faluco@216
    86
				} else if (!strcmp("load", cmd2)) {
faluco@216
    87
					if (argnum < 4)
faluco@216
    88
					{
faluco@216
    89
						META_CONPRINT("Usage: sm plugins load <file>\n");
faluco@216
    90
						return;
faluco@216
    91
					}
faluco@216
    92
faluco@217
    93
					char error[128];
faluco@216
    94
					const char *filename = engine->Cmd_Argv(3);
faluco@216
    95
					IPlugin *pl = g_PluginSys.LoadPlugin(filename, false, PluginType_MapUpdated, error, sizeof(error));
faluco@216
    96
faluco@216
    97
					if (pl)
faluco@216
    98
					{
faluco@216
    99
						META_CONPRINTF("Loaded plugin %s successfully.\n", filename);
faluco@216
   100
					} else {
faluco@216
   101
						META_CONPRINTF("Plugin %s failed to load: %s.\n", filename, error);
faluco@216
   102
					}
faluco@216
   103
faluco@216
   104
					return;
dvander@223
   105
faluco@216
   106
				} else if (!strcmp("unload", cmd2)) {
faluco@216
   107
					if (argnum < 4)
faluco@216
   108
					{
faluco@216
   109
						META_CONPRINT("Usage: sm plugins unload <#>\n");
faluco@216
   110
						return;
faluco@216
   111
					}
faluco@216
   112
dvander@223
   113
					IPlugin *pl = NULL;
faluco@216
   114
					int id = 1;
faluco@216
   115
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   116
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   117
					{
faluco@216
   118
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   119
						return;
faluco@216
   120
					}
faluco@216
   121
faluco@216
   122
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   123
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
dvander@223
   124
					pl = iter->GetPlugin();
faluco@216
   125
faluco@216
   126
					char name[64];
faluco@216
   127
					const sm_plugininfo_t *info = pl->GetPublicInfo();
dvander@223
   128
					strcpy(name, (info->name) ? info->name : pl->GetFilename());
faluco@216
   129
faluco@216
   130
					if (g_PluginSys.UnloadPlugin(pl))
faluco@216
   131
					{
faluco@216
   132
						META_CONPRINTF("Plugin %s unloaded successfully.\n", name);
faluco@216
   133
					} else {
faluco@216
   134
						META_CONPRINTF("Failed to unload plugin %s.\n", name);
faluco@216
   135
					}
faluco@216
   136
faluco@216
   137
					iter->Release();
faluco@216
   138
					return;
dvander@223
   139
faluco@216
   140
				} else if (!strcmp("info", cmd2)) {
faluco@216
   141
					if (argnum < 4)
faluco@216
   142
					{
faluco@216
   143
						META_CONPRINT("Usage: sm plugins info <#>\n");
faluco@216
   144
						return;
faluco@216
   145
					}
faluco@216
   146
dvander@223
   147
					IPlugin *pl = NULL;
faluco@216
   148
					int id = 1;
faluco@216
   149
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   150
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   151
					{
faluco@216
   152
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   153
						return;
faluco@216
   154
					}
faluco@216
   155
faluco@216
   156
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   157
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
dvander@223
   158
					pl = iter->GetPlugin();
faluco@216
   159
					const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
   160
faluco@216
   161
					META_CONPRINTF("  Filename: %s\n", pl->GetFilename());
dvander@223
   162
					if (info->name)
faluco@216
   163
					{
faluco@216
   164
						META_CONPRINTF("  Title: %s\n", info->name);
faluco@216
   165
					}
dvander@223
   166
					if (info->author)
faluco@216
   167
					{
faluco@216
   168
						META_CONPRINTF("  Author: %s\n", info->author);
faluco@216
   169
					}
dvander@223
   170
					if (info->version)
faluco@216
   171
					{
faluco@216
   172
						META_CONPRINTF("  Version: %s\n", info->version);
faluco@216
   173
					}
dvander@223
   174
					if (info->description)
faluco@216
   175
					{
faluco@216
   176
						META_CONPRINTF("  Description: %s\n", info->description);
faluco@216
   177
					}
dvander@223
   178
					if (info->url)
faluco@216
   179
					{
faluco@216
   180
						META_CONPRINTF("  URL: %s\n", info->url);
faluco@216
   181
					}
faluco@216
   182
					//:TODO: write if it's in debug mode, or do it inside LIST ?
faluco@216
   183
faluco@216
   184
					iter->Release();
faluco@216
   185
					return;
faluco@216
   186
				}
faluco@216
   187
			}
faluco@216
   188
			//:TODO: print plugins cmd list
faluco@216
   189
		}
faluco@216
   190
	}
faluco@216
   191
	//:TODO: print cmd list or something
faluco@216
   192
}