core/sm_srvcmds.cpp
author David Anderson <dvander@alliedmods.net>
Tue Jan 16 20:36:09 2007 +0000 (2007-01-16)
changeset 300 186b2f7bf277
parent 294 af1cdf8c81a1
child 308 f0e65f92cb34
permissions -rw-r--r--
fixed up bad includes
faluco@216
     1
#include "sm_srvcmds.h"
faluco@270
     2
#include "sm_version.h"
faluco@274
     3
#include "sm_stringutil.h"
faluco@216
     4
faluco@216
     5
ConVarAccessor g_ConCmdAccessor;
faluco@216
     6
faluco@216
     7
void ConVarAccessor::OnSourceModStartup(bool late)
faluco@216
     8
{
faluco@216
     9
	ConCommandBaseMgr::OneTimeInit(&g_ConCmdAccessor);
faluco@216
    10
}
faluco@216
    11
faluco@216
    12
bool ConVarAccessor::RegisterConCommandBase(ConCommandBase *pCommand)
faluco@216
    13
{
faluco@216
    14
	META_REGCVAR(pCommand);
faluco@216
    15
faluco@216
    16
	return true;
faluco@216
    17
}
faluco@216
    18
faluco@217
    19
inline const char *StatusToStr(PluginStatus st)
faluco@217
    20
{
faluco@217
    21
	switch (st)
faluco@217
    22
	{
faluco@217
    23
	case Plugin_Running:
faluco@217
    24
		return "Running";
faluco@217
    25
	case Plugin_Paused:
faluco@217
    26
		return "Paused";
faluco@217
    27
	case Plugin_Error:
faluco@217
    28
		return "Error";
faluco@217
    29
	case Plugin_Uncompiled:
faluco@217
    30
		return "Uncompiled";
faluco@217
    31
	case Plugin_BadLoad:
faluco@217
    32
		return "Bad Load";
dvander@283
    33
	case Plugin_Failed:
dvander@283
    34
		return "Failed";
faluco@217
    35
	default:
dvander@223
    36
		assert(false);
faluco@217
    37
		return "-";
faluco@217
    38
	}
faluco@217
    39
}
faluco@217
    40
faluco@224
    41
#define IS_STR_FILLED(var) (var[0] != '\0')
faluco@216
    42
CON_COMMAND(sm, "SourceMod Menu")
faluco@216
    43
{
faluco@216
    44
	int argnum = engine->Cmd_Argc();
faluco@216
    45
faluco@216
    46
	if (argnum >= 2)
faluco@216
    47
	{
faluco@216
    48
		const char *cmd = engine->Cmd_Argv(1);
faluco@216
    49
		if (!strcmp("plugins", cmd))
faluco@216
    50
		{
faluco@216
    51
			if (argnum >= 3)
faluco@216
    52
			{
faluco@216
    53
				const char *cmd2 = engine->Cmd_Argv(2);
faluco@216
    54
				if (!strcmp("list", cmd2))
faluco@216
    55
				{
faluco@216
    56
					char buffer[256];
faluco@216
    57
					unsigned int id = 1;
faluco@216
    58
					int plnum = g_PluginSys.GetPluginCount();
faluco@216
    59
faluco@216
    60
					if (!plnum)
faluco@216
    61
					{
faluco@216
    62
						META_CONPRINT("[SM] No plugins loaded\n");
faluco@216
    63
						return;
faluco@216
    64
					} else {
faluco@216
    65
						META_CONPRINTF("[SM] Displaying %d plugin%s:\n", g_PluginSys.GetPluginCount(), (plnum > 1) ? "s" : "");
faluco@216
    66
					}
faluco@216
    67
faluco@216
    68
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
    69
					for (; iter->MorePlugins(); iter->NextPlugin(), id++)
faluco@216
    70
					{
faluco@217
    71
						IPlugin *pl = iter->GetPlugin();
faluco@217
    72
						assert(pl->GetStatus() != Plugin_Created);
faluco@216
    73
						int len = 0;
faluco@217
    74
						const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
    75
faluco@274
    76
						len += UTIL_Format(buffer, sizeof(buffer), "  %02d <%s>", id, StatusToStr(pl->GetStatus()));
faluco@274
    77
						len += UTIL_Format(&buffer[len], sizeof(buffer)-len, " \"%s\"", (IS_STR_FILLED(info->name)) ? info->name : pl->GetFilename());
faluco@224
    78
						if (IS_STR_FILLED(info->version))
faluco@216
    79
						{
faluco@274
    80
							len += UTIL_Format(&buffer[len], sizeof(buffer)-len, " (%s)", info->version);
faluco@216
    81
						}
faluco@224
    82
						if (IS_STR_FILLED(info->author))
faluco@216
    83
						{
faluco@274
    84
							UTIL_Format(&buffer[len], sizeof(buffer)-len, " by %s", info->author);
faluco@216
    85
						}
faluco@216
    86
						META_CONPRINTF("%s\n", buffer);
faluco@216
    87
					}
faluco@216
    88
faluco@216
    89
					iter->Release();
faluco@216
    90
					return;
faluco@216
    91
				} else if (!strcmp("load", cmd2)) {
faluco@216
    92
					if (argnum < 4)
faluco@216
    93
					{
faluco@216
    94
						META_CONPRINT("Usage: sm plugins load <file>\n");
faluco@216
    95
						return;
faluco@216
    96
					}
faluco@216
    97
faluco@217
    98
					char error[128];
faluco@216
    99
					const char *filename = engine->Cmd_Argv(3);
faluco@216
   100
					IPlugin *pl = g_PluginSys.LoadPlugin(filename, false, PluginType_MapUpdated, error, sizeof(error));
faluco@216
   101
faluco@216
   102
					if (pl)
faluco@216
   103
					{
faluco@216
   104
						META_CONPRINTF("Loaded plugin %s successfully.\n", filename);
faluco@216
   105
					} else {
faluco@216
   106
						META_CONPRINTF("Plugin %s failed to load: %s.\n", filename, error);
faluco@216
   107
					}
faluco@216
   108
faluco@216
   109
					return;
faluco@216
   110
				} else if (!strcmp("unload", cmd2)) {
faluco@216
   111
					if (argnum < 4)
faluco@216
   112
					{
faluco@216
   113
						META_CONPRINT("Usage: sm plugins unload <#>\n");
faluco@216
   114
						return;
faluco@216
   115
					}
faluco@216
   116
faluco@216
   117
					int id = 1;
faluco@216
   118
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   119
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   120
					{
faluco@216
   121
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   122
						return;
faluco@216
   123
					}
faluco@216
   124
faluco@216
   125
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   126
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
faluco@224
   127
					IPlugin *pl = iter->GetPlugin();
faluco@216
   128
faluco@216
   129
					char name[64];
faluco@216
   130
					const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@224
   131
					strcpy(name, (IS_STR_FILLED(info->name)) ? info->name : pl->GetFilename());
faluco@216
   132
faluco@216
   133
					if (g_PluginSys.UnloadPlugin(pl))
faluco@216
   134
					{
faluco@216
   135
						META_CONPRINTF("Plugin %s unloaded successfully.\n", name);
faluco@216
   136
					} else {
faluco@216
   137
						META_CONPRINTF("Failed to unload plugin %s.\n", name);
faluco@216
   138
					}
faluco@216
   139
faluco@216
   140
					iter->Release();
faluco@216
   141
					return;
faluco@216
   142
				} else if (!strcmp("info", cmd2)) {
faluco@216
   143
					if (argnum < 4)
faluco@216
   144
					{
faluco@216
   145
						META_CONPRINT("Usage: sm plugins info <#>\n");
faluco@216
   146
						return;
faluco@216
   147
					}
faluco@216
   148
faluco@216
   149
					int id = 1;
faluco@216
   150
					int num = atoi(engine->Cmd_Argv(3));
faluco@216
   151
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@216
   152
					{
faluco@216
   153
						META_CONPRINT("Plugin index not found.\n");
faluco@216
   154
						return;
faluco@216
   155
					}
faluco@216
   156
faluco@216
   157
					IPluginIterator *iter = g_PluginSys.GetPluginIterator();
faluco@216
   158
					for (; iter->MorePlugins() && id<num; iter->NextPlugin(), id++) {}
faluco@224
   159
faluco@224
   160
					IPlugin *pl = iter->GetPlugin();
faluco@216
   161
					const sm_plugininfo_t *info = pl->GetPublicInfo();
faluco@216
   162
faluco@216
   163
					META_CONPRINTF("  Filename: %s\n", pl->GetFilename());
faluco@224
   164
					if (IS_STR_FILLED(info->name))
faluco@216
   165
					{
faluco@216
   166
						META_CONPRINTF("  Title: %s\n", info->name);
faluco@216
   167
					}
faluco@224
   168
					if (IS_STR_FILLED(info->author))
faluco@216
   169
					{
faluco@216
   170
						META_CONPRINTF("  Author: %s\n", info->author);
faluco@216
   171
					}
faluco@224
   172
					if (IS_STR_FILLED(info->version))
faluco@216
   173
					{
faluco@216
   174
						META_CONPRINTF("  Version: %s\n", info->version);
faluco@216
   175
					}
faluco@224
   176
					if (IS_STR_FILLED(info->description))
faluco@216
   177
					{
faluco@216
   178
						META_CONPRINTF("  Description: %s\n", info->description);
faluco@216
   179
					}
faluco@224
   180
					if (IS_STR_FILLED(info->url))
faluco@216
   181
					{
faluco@216
   182
						META_CONPRINTF("  URL: %s\n", info->url);
faluco@216
   183
					}
faluco@216
   184
					//:TODO: write if it's in debug mode, or do it inside LIST ?
faluco@216
   185
faluco@216
   186
					iter->Release();
faluco@216
   187
					return;
faluco@290
   188
				} else if (!strcmp("debug", cmd2)) {
faluco@290
   189
					if (argnum < 5)
faluco@290
   190
					{
faluco@290
   191
						META_CONPRINT("Usage: sm plugins debug <#> [on|off]\n");
faluco@290
   192
						return;
faluco@290
   193
					}
faluco@290
   194
faluco@290
   195
					int num = atoi(engine->Cmd_Argv(3));
faluco@290
   196
					if (num < 1 || num > (int)g_PluginSys.GetPluginCount())
faluco@290
   197
					{
faluco@290
   198
						META_CONPRINT("Plugin index not found.\n");
faluco@290
   199
						return;
faluco@290
   200
					}
faluco@290
   201
faluco@290
   202
					int res;
faluco@290
   203
					char *mode = engine->Cmd_Argv(4);
faluco@290
   204
					if ((res=strcmp("on", mode)) && strcmp("off", mode))
faluco@290
   205
					{
faluco@290
   206
						META_CONPRINT("The only possible options are on and off.\n");
faluco@290
   207
						return;
faluco@290
   208
					}
faluco@290
   209
faluco@290
   210
					bool debug;
faluco@290
   211
					if (!res)
faluco@290
   212
					{
faluco@290
   213
						debug = true;
faluco@290
   214
					} else {
faluco@290
   215
						debug = false;
faluco@290
   216
					}
faluco@290
   217
faluco@290
   218
					CPlugin *pl = g_PluginSys.GetPluginByOrder(num);
faluco@290
   219
					if (debug && pl->IsDebugging())
faluco@290
   220
					{
faluco@290
   221
						META_CONPRINT("This plugin is already in debug mode.\n");
faluco@290
   222
						return;
faluco@290
   223
					} else if (!debug && !pl->IsDebugging()) {
faluco@290
   224
						META_CONPRINT("Debug mode is already disabled in this plugin.\n");
faluco@290
   225
						return;
faluco@290
   226
					}
faluco@290
   227
faluco@290
   228
					if (pl->ToggleDebugMode(debug))
faluco@290
   229
					{
dvander@294
   230
						META_CONPRINTF("Successfully toggled debug mode on plugin %s.\n", pl->GetFilename());
faluco@290
   231
						return;
faluco@290
   232
					} else {
dvander@294
   233
						/* :TODO: ... we should be getting an actual error message here */
dvander@294
   234
						META_CONPRINTF("Could not toggle debug mode on plugin %s.\n", pl->GetFilename());
faluco@290
   235
						return;
faluco@290
   236
					}
faluco@216
   237
				}
faluco@216
   238
			}
faluco@270
   239
faluco@270
   240
			META_CONPRINT(" SourceMod Plugin Menu:\n");
faluco@270
   241
			META_CONPRINT("    list   - Show loaded plugins\n");
faluco@270
   242
			META_CONPRINT("    load   - Load a plugin\n");
faluco@270
   243
			META_CONPRINT("    unload - Unload a plugin\n");
faluco@270
   244
			META_CONPRINT("    info   - Information about a plugin\n");
faluco@290
   245
			META_CONPRINT("    debug  - Toggles debug mode in a plugin\n");
faluco@270
   246
			return;
dvander@282
   247
		} else if (!strcmp("credits", cmd)) {
faluco@290
   248
			META_CONPRINT(" SourceMod was developed by AlliedModders, LLC.\n");
faluco@290
   249
			META_CONPRINT(" Development would not have been possible without the following people:\n");
faluco@290
   250
			META_CONPRINT("  David \"BAILOPAN\" Anderson, lead developer\n");
faluco@290
   251
			META_CONPRINT("  Borja \"faluco\" Ferrer, Core developer\n");
faluco@290
   252
			META_CONPRINT("  Scott \"Damaged Soul\" Ehlert, SourceMM developer\n");
faluco@290
   253
			META_CONPRINT("  Pavol \"PM OnoTo\" Marko, SourceHook developer\n");
faluco@290
   254
			META_CONPRINT(" Special thanks to Viper of GameConnect, and Mani\n");
faluco@290
   255
			META_CONPRINT(" http://www.sourcemod.net/\n");
dvander@282
   256
			return;
faluco@270
   257
		} else if (!strcmp("version", cmd)) {
faluco@270
   258
			META_CONPRINT(" SourceMod Version Information:\n");
faluco@270
   259
			META_CONPRINTF("    SourceMod Version: \"%s\"\n", SOURCEMOD_VERSION);
faluco@270
   260
			META_CONPRINTF("    JIT Version: %s (%s)\n", g_pVM->GetVMName(), g_pVM->GetVersionString());
faluco@270
   261
			META_CONPRINTF("    JIT Settings: %s\n", g_pVM->GetCPUOptimizations());
faluco@290
   262
			META_CONPRINT("    http://www.sourcemod.net/\n");
faluco@270
   263
			return;
faluco@216
   264
		}
faluco@216
   265
	}
faluco@270
   266
	META_CONPRINT(" SourceMod Menu:\n");
faluco@270
   267
	META_CONPRINT(" Usage: sm <command> [arguments]\n");
dvander@282
   268
	META_CONPRINT("    credits - Credits listing\n");
faluco@270
   269
	META_CONPRINT("    plugins - Plugins menu\n");
faluco@270
   270
	META_CONPRINT("    version - Display version information\n");
dvander@282
   271
}