(svn r1077) Implements scripts/autoexec.scr to get executed on game starting (sign_de)
- %! allows to merge alias parameters
- \% allows to use % in alias strings
- "alias" command now overwrites the old alias list entry
--- a/console.c Mon Dec 13 22:10:12 2004 +0000
+++ b/console.c Mon Dec 13 22:13:02 2004 +0000
@@ -602,6 +602,7 @@
if (cmdline[i] == '%') {
i++;
if (cmdline[i] == '+') {
+ // all params seperated: "[param 1]" "[param 2]"
t=1;
while ((tokens[t]!=NULL) && (t<20) &&
((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) {
@@ -617,10 +618,30 @@
x += l2+3;
t++;
}
+ } else if (cmdline[i] == '!') {
+ // merge the params to one: "[param 1] [param 2] [param 3...]"
+ t=1;
+ *linestream = '"';
+ linestream++;
+ while ((tokens[t]!=NULL) && (t<20) &&
+ ((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) {
+ int l2 = strlen(tokens[t]);
+ memcpy(linestream,tokens[t],l2);
+ linestream += l2;
+ *linestream = ' ';
+ linestream++;
+ x += l2+1;
+ t++;
+ }
+ *linestream = '"';
+ linestream++;
+ x += 2;
} else {
+ // one specific parameter: %A = [param 1] %B = [param 2] ...
int l2;
t = ((byte)cmdline[i]) - 64;
- if ((t<20) && (tokens[t]!=NULL)) {
+ if ((t<20) && (tokens[t]!=NULL) &&
+ ((tokentypes[t] == ICONSOLE_VAR_STRING) || (tokentypes[t] == ICONSOLE_VAR_UNKNOWN))) {
l2 = strlen(tokens[t]);
*linestream = '"';
linestream++;
@@ -632,6 +653,7 @@
}
}
} else if (cmdline[i] == '\\') {
+ // \\ = \ \' = ' \% = %
i++;
if (cmdline[i] == '\\') {
*linestream = '\\';
@@ -639,11 +661,16 @@
} else if (cmdline[i] == '\'') {
*linestream = '\'';
linestream++;
+ } else if (cmdline[i] == '%') {
+ *linestream = '%';
+ linestream++;
}
} else if (cmdline[i] == '\'') {
+ // ' = "
*linestream = '"';
linestream++;
} else if (cmdline[i] == ';') {
+ // ; = start a new line
c++;
*linestream = '\0';
linestream += 1024 - (x % 1024);
--- a/console.h Mon Dec 13 22:10:12 2004 +0000
+++ b/console.h Mon Dec 13 22:13:02 2004 +0000
@@ -85,6 +85,8 @@
void* _next;
} _iconsole_alias;
+_iconsole_alias* IConsoleAliasGet(const char* name);
+
// ** console parser ** //
_iconsole_cmd* _iconsole_cmds; // list of registred commands
--- a/console_cmds.c Mon Dec 13 22:10:12 2004 +0000
+++ b/console_cmds.c Mon Dec 13 22:13:02 2004 +0000
@@ -367,8 +367,17 @@
DEF_CONSOLE_CMD(ConAlias)
{
+ _iconsole_alias* alias;
+
if (argc < 3) return NULL;
- IConsoleAliasRegister(argv[1],argv[2]);
+
+ alias = IConsoleAliasGet(argv[1]);
+ if (alias == NULL) {
+ IConsoleAliasRegister(argv[1],argv[2]);
+ } else {
+ free(alias->cmdline);
+ alias->cmdline = strdup(argv[2]);
+ }
return NULL;
}
--- a/scripts/readme.txt Mon Dec 13 22:10:12 2004 +0000
+++ b/scripts/readme.txt Mon Dec 13 22:13:02 2004 +0000
@@ -8,6 +8,7 @@
- 'on_dedicated.scr' is additionally executed when you start a dedicated server
- 'pre_server.scr' is executed before the server is started
- 'pre_dedicated.scr' is additionally executed when you start a dedicated server
+ - 'autoexec.scr' is executed on gamestart [use this for custom aliases per ex.]
For examples how a script can look, check the .example examples.
--- a/ttd.c Mon Dec 13 22:10:12 2004 +0000
+++ b/ttd.c Mon Dec 13 22:13:02 2004 +0000
@@ -644,6 +644,8 @@
// initialize the ingame console
IConsoleInit();
+ IConsoleCmdExec("exec scripts/autoexec.scr 0");
+
InitPlayerRandoms();
#ifdef ENABLE_NETWORK