about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-06-15 14:01:36 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-06-15 14:01:36 +0000
commit7b68ff42773976cafe39b59dc026350cda5c05fd (patch)
treea64ff77b56d62f3860e82513df4874436c353621 /src/engine
parent0160f2651448c2c2df332d2447629e23d5bd4a9a (diff)
downloadzcatch-7b68ff42773976cafe39b59dc026350cda5c05fd.tar.gz
zcatch-7b68ff42773976cafe39b59dc026350cda5c05fd.zip
fixed chaining of console commands, allows snatching updates of console variables. cleaned up some code
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/client/ec_client.c4
-rw-r--r--src/engine/e_console.c21
-rw-r--r--src/engine/e_console.h10
3 files changed, 35 insertions, 0 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c
index e741958f..0c707ccf 100644
--- a/src/engine/client/ec_client.c
+++ b/src/engine/client/ec_client.c
@@ -417,6 +417,10 @@ int client_send_msg()
 	
 	if(!info)
 		return -1;
+
+	if(client_state() == CLIENTSTATE_OFFLINE)
+		return 0;
+	
 		
 	mem_zero(&packet, sizeof(NETCHUNK));
 	
diff --git a/src/engine/e_console.c b/src/engine/e_console.c
index 0f6e6acd..5c0f37f3 100644
--- a/src/engine/e_console.c
+++ b/src/engine/e_console.c
@@ -428,6 +428,27 @@ static void str_variable_command(void *result, void *user_data)
 	}
 }
 
+static void console_chain(void *result, void *user_data)
+{
+	COMMANDCHAIN *info = (COMMANDCHAIN *)user_data;
+	info->chain_callback(result, info->user_data, info->callback, info->callback_user_data);
+}
+
+void console_chain_command(const char *cmd, COMMANDCHAIN *chaininfo, CONSOLE_CHAIN_CALLBACK cb, void *user)
+{
+	COMMAND *command = console_get_command(cmd);
+
+	/* store info */
+	chaininfo->chain_callback = cb;
+	chaininfo->callback = command->callback;
+	chaininfo->callback_user_data = command->user_data;
+	chaininfo->user_data = user;
+	
+	/* chain */
+	command->callback = console_chain;
+	command->user_data = chaininfo;
+}
+
 void console_init()
 {
 	MACRO_REGISTER_COMMAND("echo", "r", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_echo, 0x0, "Echo the text");
diff --git a/src/engine/e_console.h b/src/engine/e_console.h
index c2393e39..b37931b2 100644
--- a/src/engine/e_console.h
+++ b/src/engine/e_console.h
@@ -6,6 +6,7 @@ extern "C"{
 #endif
 
 typedef void (*CONSOLE_CALLBACK)(void *result, void *user_data);
+typedef void (*CONSOLE_CHAIN_CALLBACK)(void *result, void *user_data, CONSOLE_CALLBACK cb, void *cbuser);
 
 typedef struct COMMAND_t
 {
@@ -18,6 +19,14 @@ typedef struct COMMAND_t
 	struct COMMAND_t *next;
 } COMMAND;
 
+typedef struct COMMANDCHAIN_t
+{
+	CONSOLE_CHAIN_CALLBACK chain_callback;
+	CONSOLE_CALLBACK callback;
+	void *callback_user_data;
+	void *user_data;
+} COMMANDCHAIN;
+
 void console_init();
 void console_register(COMMAND *cmd);
 void console_execute_line(const char *str);
@@ -25,6 +34,7 @@ void console_execute_line_stroked(int stroke, const char *str);
 void console_execute_file(const char *filename);
 void console_possible_commands(const char *str, int flagmask, void (*callback)(const char *cmd, void *user), void *user);
 COMMAND *console_get_command(const char *cmd);
+void console_chain_command(const char *cmd, COMMANDCHAIN *chaininfo, CONSOLE_CHAIN_CALLBACK cb, void *user);
 void console_print(const char *str);
 void console_register_print_callback(void (*callback)(const char *, void *user_data), void *user_data);