core/sm_srvcmds.cpp
author Borja Ferrer <faluco@alliedmods.net>
Mon Jan 01 23:14:20 2007 +0000 (2007-01-01)
changeset 258 2637fcf24c2f
parent 224 c099c75a81cc
child 270 04f8bbe51beb
permissions -rw-r--r--
more comments
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@224
    37
#define IS_STR_FILLED(var) (var[0] != '\0')
faluco@216
    38
CON_COMMAND(sm, "SourceMod Menu")
faluco@216
    39
{
faluco@216
    40
	int argnum = engine->Cmd_Argc();
faluco@216
    41
faluco@216
    42
	if (argnum >= 2)
faluco@216
    43
	{
faluco@216
    44
		const char *cmd = engine->Cmd_Argv(1);
faluco@216
    45
		if (!strcmp("plugins", cmd))
faluco@216
    46
		{
faluco@216
    47
			if (argnum >= 3)
faluco@216
    48
			{
faluco@216
    49
				const char *cmd2 = engine->Cmd_Argv(2);
faluco@216
    50
				if (!strcmp("list", cmd2))
faluco@216
    51
				{
faluco@216
    52
					char buffer[256];
faluco@216
    53
					unsigned int id = 1;
faluco@216
    54
					int plnum = g_PluginSys.GetPluginCount();
faluco@216
    55
faluco@216
    56
					if (!plnum)
faluco@216
    57
					{
faluco@216
    58
						META_CONPRINT("[SM] No plugins loaded\n");
faluco@216
    59
						return;
faluco@216
    60
					} else {
faluco@216
    61
						META_CONPRINTF("[SM] Displaying %d plugin%s:\n", g_PluginSys.GetPluginCount(), (plnum > 1) ? "s" : "");
faluco@216
    62
					}
faluco@216
    63
faluco@216
    64
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
    65
					for (; iter->MorePlugins(); iter->NextPlugin(), id++)
faluco@216
    66
					{
faluco@217
    67
						IPlugin *pl = iter->GetPlugin();
faluco@217
    68
						assert(pl->GetStatus() != Plugin_Created);
faluco@216
    69
						int len = 0;
faluco@217
    70
						const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
    71
faluco@217
    72
						len += snprintf(&buffer[len], sizeof(buffer)-len, "  %02d <%s>", id, StatusToStr(pl->GetStatus()));
faluco@224
    73
						len += snprintf(&buffer[len], sizeof(buffer)-len, " \"%s\"", (IS_STR_FILLED(info->name)) ? info->name : pl->GetFilename());
faluco@224
    74
						if (IS_STR_FILLED(info->version))
faluco@216
    75
						{
faluco@216
    76
							len += snprintf(&buffer[len], sizeof(buffer)-len, " (%s)", info->version);
faluco@216
    77
						}
faluco@224
    78
						if (IS_STR_FILLED(info->author))
faluco@216
    79
						{
faluco@216
    80
							snprintf(&buffer[len], sizeof(buffer)-len, " by %s", info->author);
faluco@216
    81
						}
faluco@216
    82
						META_CONPRINTF("%s\n", buffer);
faluco@216
    83
					}
faluco@216
    84
faluco@216
    85
					iter->Release();
faluco@216
    86
					return;
faluco@216
    87
				} else if (!strcmp("load", cmd2)) {
faluco@216
    88
					if (argnum < 4)
faluco@216
    89
					{
faluco@216
    90
						META_CONPRINT("Usage: sm plugins load <file>\n");
faluco@216
    91
						return;
faluco@216
    92
					}
faluco@216
    93
faluco@217
    94
					char error[128];
faluco@216
    95
					const char *filename = engine->Cmd_Argv(3);
faluco@216
    96
					IPlugin *pl = g_PluginSys.LoadPlugin(filename, false, PluginType_MapUpdated, error, sizeof(error));
faluco@216
    97
faluco@216
    98
					if (pl)
faluco@216
    99
					{
faluco@216
   100
						META_CONPRINTF("Loaded plugin %s successfully.\n", filename);
faluco@216
   101
					} else {
faluco@216
   102
						META_CONPRINTF("Plugin %s failed to load: %s.\n", filename, error);
faluco@216
   103
					}
faluco@216
   104
faluco@216
   105
					return;
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
faluco@216
   113
					int id = 1;
faluco@216
   114
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   115
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   116
					{
faluco@216
   117
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   118
						return;
faluco@216
   119
					}
faluco@216
   120
faluco@216
   121
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   122
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
faluco@224
   123
					IPlugin *pl = iter->GetPlugin();
faluco@216
   124
faluco@216
   125
					char name[64];
faluco@216
   126
					const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@224
   127
					strcpy(name, (IS_STR_FILLED(info->name)) ? info->name : pl->GetFilename());
faluco@216
   128
faluco@216
   129
					if (g_PluginSys.UnloadPlugin(pl))
faluco@216
   130
					{
faluco@216
   131
						META_CONPRINTF("Plugin %s unloaded successfully.\n", name);
faluco@216
   132
					} else {
faluco@216
   133
						META_CONPRINTF("Failed to unload plugin %s.\n", name);
faluco@216
   134
					}
faluco@216
   135
faluco@216
   136
					iter->Release();
faluco@216
   137
					return;
faluco@216
   138
				} else if (!strcmp("info", cmd2)) {
faluco@216
   139
					if (argnum < 4)
faluco@216
   140
					{
faluco@216
   141
						META_CONPRINT("Usage: sm plugins info <#>\n");
faluco@216
   142
						return;
faluco@216
   143
					}
faluco@216
   144
faluco@216
   145
					int id = 1;
faluco@216
   146
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   147
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   148
					{
faluco@216
   149
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   150
						return;
faluco@216
   151
					}
faluco@216
   152
faluco@216
   153
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   154
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
faluco@224
   155
faluco@224
   156
					IPlugin *pl = iter->GetPlugin();
faluco@216
   157
					const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
   158
faluco@216
   159
					META_CONPRINTF("  Filename: %s\n", pl->GetFilename());
faluco@224
   160
					if (IS_STR_FILLED(info->name))
faluco@216
   161
					{
faluco@216
   162
						META_CONPRINTF("  Title: %s\n", info->name);
faluco@216
   163
					}
faluco@224
   164
					if (IS_STR_FILLED(info->author))
faluco@216
   165
					{
faluco@216
   166
						META_CONPRINTF("  Author: %s\n", info->author);
faluco@216
   167
					}
faluco@224
   168
					if (IS_STR_FILLED(info->version))
faluco@216
   169
					{
faluco@216
   170
						META_CONPRINTF("  Version: %s\n", info->version);
faluco@216
   171
					}
faluco@224
   172
					if (IS_STR_FILLED(info->description))
faluco@216
   173
					{
faluco@216
   174
						META_CONPRINTF("  Description: %s\n", info->description);
faluco@216
   175
					}
faluco@224
   176
					if (IS_STR_FILLED(info->url))
faluco@216
   177
					{
faluco@216
   178
						META_CONPRINTF("  URL: %s\n", info->url);
faluco@216
   179
					}
faluco@216
   180
					//:TODO: write if it's in debug mode, or do it inside LIST ?
faluco@216
   181
faluco@216
   182
					iter->Release();
faluco@216
   183
					return;
faluco@216
   184
				}
faluco@216
   185
			}
faluco@216
   186
			//:TODO: print plugins cmd list
faluco@216
   187
		}
faluco@216
   188
	}
faluco@216
   189
	//:TODO: print cmd list or something
faluco@216
   190
}