# HG changeset patch # User dominik # Date 1102975982 0 # Node ID e833509107ad99b3397a5a4d2dc0714b280e1dd6 # Parent 6f04156241bd47dad6e34f48e5a17db511202ce2 (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 diff -r 6f04156241bd -r e833509107ad console.c --- 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); diff -r 6f04156241bd -r e833509107ad console.h --- 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 diff -r 6f04156241bd -r e833509107ad console_cmds.c --- 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; } diff -r 6f04156241bd -r e833509107ad scripts/readme.txt --- 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. diff -r 6f04156241bd -r e833509107ad ttd.c --- 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