(svn r1077) Implements scripts/autoexec.scr to get executed on game starting (sign_de)
authordominik
Mon, 13 Dec 2004 22:13:02 +0000
changeset 644 e833509107ad
parent 643 6f04156241bd
child 645 07dd92183e9e
(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
console.c
console.h
console_cmds.c
scripts/readme.txt
ttd.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);
--- 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