summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--console.c29
-rw-r--r--console.h2
-rw-r--r--console_cmds.c11
-rw-r--r--scripts/readme.txt1
-rw-r--r--ttd.c2
5 files changed, 43 insertions, 2 deletions
diff --git a/console.c b/console.c
index 626c062cf..bcaddbdc2 100644
--- a/console.c
+++ b/console.c
@@ -602,6 +602,7 @@ void IConsoleAliasExec(const char* cmdline, char* tokens[20], byte tokentypes[20
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 @@ void IConsoleAliasExec(const char* cmdline, char* tokens[20], byte tokentypes[20
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 @@ void IConsoleAliasExec(const char* cmdline, char* tokens[20], byte tokentypes[20
}
}
} else if (cmdline[i] == '\\') {
+ // \\ = \ \' = ' \% = %
i++;
if (cmdline[i] == '\\') {
*linestream = '\\';
@@ -639,11 +661,16 @@ void IConsoleAliasExec(const char* cmdline, char* tokens[20], byte tokentypes[20
} 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);
diff --git a/console.h b/console.h
index 6565032c5..fd4c45ea1 100644
--- a/console.h
+++ b/console.h
@@ -85,6 +85,8 @@ typedef struct _iconsole_alias {
void* _next;
} _iconsole_alias;
+_iconsole_alias* IConsoleAliasGet(const char* name);
+
// ** console parser ** //
_iconsole_cmd* _iconsole_cmds; // list of registred commands
diff --git a/console_cmds.c b/console_cmds.c
index 3e2dcb07f..7aaf3999c 100644
--- a/console_cmds.c
+++ b/console_cmds.c
@@ -367,8 +367,17 @@ DEF_CONSOLE_CMD(ConPrintFC)
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;
}
diff --git a/scripts/readme.txt b/scripts/readme.txt
index d8dafaaaa..8c126a3a2 100644
--- a/scripts/readme.txt
+++ b/scripts/readme.txt
@@ -8,6 +8,7 @@ OpenTTD supports scripts.
- '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.
diff --git a/ttd.c b/ttd.c
index cd1785999..ea2bffc33 100644
--- a/ttd.c
+++ b/ttd.c
@@ -644,6 +644,8 @@ int ttd_main(int argc, char* argv[])
// initialize the ingame console
IConsoleInit();
+ IConsoleCmdExec("exec scripts/autoexec.scr 0");
+
InitPlayerRandoms();
#ifdef ENABLE_NETWORK