diff --git a/core/AMBuilder b/core/AMBuilder
index 1dd911ff..cf957682 100644
--- a/core/AMBuilder
+++ b/core/AMBuilder
@@ -41,6 +41,7 @@ project.sources += [
'sm_srvcmds.cpp',
'ConsoleDetours.cpp',
'vprof_tool.cpp',
+ 'smn_commandline.cpp',
]
for sdk_name in SM.sdks:
diff --git a/core/smn_commandline.cpp b/core/smn_commandline.cpp
new file mode 100644
index 00000000..f103964a
--- /dev/null
+++ b/core/smn_commandline.cpp
@@ -0,0 +1,131 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod
+ * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * 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 General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#include "HalfLife2.h"
+
+static cell_t sm_GetCommandLine(IPluginContext *pCtx, const cell_t *params)
+{
+ ICommandLine *pCmdLine = g_HL2.GetValveCommandLine();
+
+ if (pCmdLine == NULL)
+ {
+ return pCtx->ThrowNativeError("Unable to get valve command line");
+ }
+
+ const char *commandLine = pCmdLine->GetCmdLine();
+
+ if (commandLine == NULL)
+ {
+ return 0;
+ }
+
+ pCtx->StringToLocal(params[1], params[2], commandLine);
+
+ return 1;
+}
+
+static cell_t sm_GetCommandLineParam(IPluginContext *pCtx, const cell_t *params)
+{
+ ICommandLine *pCmdLine = g_HL2.GetValveCommandLine();
+
+ if (pCmdLine == NULL)
+ {
+ return pCtx->ThrowNativeError("Unable to get valve command line");
+ }
+
+ char *param = NULL;
+ char *default = NULL;
+ pCtx->LocalToString(params[1], ¶m);
+ pCtx->LocalToString(params[4], ¶m);
+
+ const char *value = pCmdLine->ParmValue(param, default);
+
+ pCtx->StringToLocal(params[2], params[3], value);
+
+ return 1;
+}
+
+static cell_t sm_GetCommandLineParamNumber(IPluginContext *pCtx, const cell_t *params)
+{
+ ICommandLine *pCmdLine = g_HL2.GetValveCommandLine();
+
+ if (pCmdLine == NULL)
+ {
+ return pCtx->ThrowNativeError("Unable to get valve command line");
+ }
+
+ char *param = NULL;
+ pCtx->LocalToString(params[1], ¶m);
+
+ return pCmdLine->ParmValue(param, params[2]);
+}
+
+static cell_t sm_GetCommandLineParamFloat(IPluginContext *pCtx, const cell_t *params)
+{
+ ICommandLine *pCmdLine = g_HL2.GetValveCommandLine();
+
+ if (pCmdLine == NULL)
+ {
+ return pCtx->ThrowNativeError("Unable to get valve command line");
+ }
+
+ char *param = NULL;
+ pCtx->LocalToString(params[1], ¶m);
+
+ float value = pCmdLine->ParmValue(param, sp_ctof(params[2]));
+
+ return sp_ftoc(value);
+}
+
+static cell_t sm_FindCommandLineParam(IPluginContext *pCtx, const cell_t *params)
+{
+ ICommandLine *pCmdLine = g_HL2.GetValveCommandLine();
+
+ if (pCmdLine == NULL)
+ {
+ return pCtx->ThrowNativeError("Unable to get valve command line");
+ }
+
+ char *param = NULL;
+ pCtx->LocalToString(params[1], ¶m);
+
+ return pCmdLine->FindParm(param);
+}
+
+REGISTER_NATIVES(commandlinenatives)
+{
+ {"GetCommandLine", sm_GetCommandLine},
+ {"GetCommandLineParam", sm_GetCommandLineParam},
+ {"GetCommandLineParamNumber", sm_GetCommandLineParamNumber},
+ {"GetCommandLineParamFloat", sm_GetCommandLineParamFloat},
+ {"FindCommandLineParam", sm_FindCommandLineParam},
+ {NULL, NULL},
+};
diff --git a/plugins/include/commandline.inc b/plugins/include/commandline.inc
new file mode 100644
index 00000000..18e8e826
--- /dev/null
+++ b/plugins/include/commandline.inc
@@ -0,0 +1,87 @@
+/**
+ * vim: set ts=4 :
+ * =============================================================================
+ * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
+ * =============================================================================
+ *
+ * This file is part of the SourceMod/SourcePawn SDK.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * 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 General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ *
+ * As a special exception, AlliedModders LLC gives you permission to link the
+ * code of this program (as well as its derivative works) to "Half-Life 2," the
+ * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
+ * by the Valve Corporation. You must obey the GNU General Public License in
+ * all respects for all other code used. Additionally, AlliedModders LLC grants
+ * this exception to all derivative works. AlliedModders LLC defines further
+ * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
+ * or .
+ *
+ * Version: $Id$
+ */
+
+#if defined _commandline_included_
+ #endinput
+#endif
+#define _commandline_included_
+
+/**
+ * Gets the full command line the server was launched with.
+ *
+ * @param commandLine Buffer to store the command line in.
+ * @param maxlen Maximum length of the command line buffer.
+ * @return True if the command line is valid; otherwise, false.
+ * @error No command line available, or no mod support.
+ */
+native bool:GetCommandLine(String:commandLine[], maxlen);
+
+/**
+ * Gets the value of a command line parameter the server was launched with.
+ *
+ * @param param The command line parameter to get the value of.
+ * @param value Buffer to store the parameter value in.
+ * @param maxlen Maximum length of the value buffer.
+ * @param defValue The default value to return if the parameter wasn't specified.
+ * @return True if the command line is valid; otherwise, false.
+ * @error No command line available, or no mod support.
+ */
+native GetCommandLineParam(const String:param[], String:value[], maxlen, const String:defValue[]="");
+
+/**
+ * Gets the value of a command line parameter the server was launched with.
+ *
+ * @param param The command line parameter to get the value of.
+ * @param defValue The default value to return if the parameter wasn't specified.
+ * @return The integer value of the command line parameter value.
+ * @error No command line available, or no mod support.
+ */
+native GetCommandLineParamNumber(const String:param[], defValue=0);
+
+/**
+ * Gets the value of a command line parameter the server was launched with.
+ *
+ * @param param The command line parameter to get the value of.
+ * @param defValue The default value to return if the parameter wasn't specified.
+ * @return The floating point value of the command line parameter value.
+ * @error No command line available, or no mod support.
+ */
+native Float:GetCommandLineParamFloat(const String:param[], Float:defValue=0.0);
+
+/**
+ * Determines if a specific command line parameter is present.
+ *
+ * @param param The command line parameter to test.
+ * @return True if the command line parameter is specified; otherwise, false.
+ * @error No command line available, or no mod support.
+ */
+native bool:FindCommandLineParam(const String:param[]);
diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc
index 0c5cac76..e57fdd51 100644
--- a/plugins/include/sourcemod.inc
+++ b/plugins/include/sourcemod.inc
@@ -74,6 +74,7 @@ struct Plugin
#include
#include
#include
+#include
enum APLRes
{
diff --git a/tools/buildbot/PackageScript b/tools/buildbot/PackageScript
index 59da49fe..d112a0c7 100644
--- a/tools/buildbot/PackageScript
+++ b/tools/buildbot/PackageScript
@@ -296,6 +296,7 @@ CopyFiles('plugins/include', 'addons/sourcemod/scripting/include',
'clientprefs.inc',
'clients.inc',
'commandfilters.inc',
+ 'commandline.inc',
'console.inc',
'core.inc',
'cstrike.inc',