From 10fb201916b42c7502e6557a6fb0afb5a6ab059f Mon Sep 17 00:00:00 2001
From: epoque11 <epoque11@54d463be-8e91-2dee-dedb-b68131a5f0ec>
Date: Thu, 26 Apr 2012 19:19:31 +0000
Subject: - Follow-up to r15979, updated parse_simpleexpr to parse direction
 function invocation - Added SCRIPT_CALLFUNC_CHECK macro to disable direct
 callback if affecting performance

git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15981 54d463be-8e91-2dee-dedb-b68131a5f0ec
---
 src/map/config/core.h |  7 +++++++
 src/map/script.c      | 12 ++++++++++++
 2 files changed, 19 insertions(+)

(limited to 'src/map')

diff --git a/src/map/config/core.h b/src/map/config/core.h
index 4d8e38f95..519df60e7 100644
--- a/src/map/config/core.h
+++ b/src/map/config/core.h
@@ -13,6 +13,13 @@
  **/
 #define AUTOLOOTITEM_SIZE 10
 
+/// leave this line uncommented to enable callfunc checks when processing scripts.
+/// while allowed, the script engine will attempt to match user-defined functions
+/// in scripts allowing direct function callback (without the use of callfunc.)
+/// this CAN affect performance, so if you find scripts running slower or find
+/// your map-server using more resources while this is active, comment the line
+#define SCRIPT_CALLFUNC_CHECK
+
 //Uncomment to enable the Cell Stack Limit mod.
 //It's only config is the battle_config cell_stack_limit.
 //Only chars affected are those defined in BL_CHAR (mobs and players currently)
diff --git a/src/map/script.c b/src/map/script.c
index e56c06db8..4ba2b4cbf 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -952,9 +952,12 @@ const char* parse_callfunc(const char* p, int require_paren)
 		if( *arg != '*' )
 			++arg; // count func as argument
 	} else {
+#ifdef SCRIPT_CALLFUNC_CHECK
 		const char* name = get_str(func);
 		if( strdb_get(userfunc_db, name) == NULL ) {
+#endif
 			disp_error_message("parse_line: expect command, missing function name or calling undeclared function",p);
+#ifdef SCRIPT_CALLFUNC_CHECK
 		} else {
 			int callfunc = search_str("callfunc");
 			add_scriptl(callfunc);
@@ -965,6 +968,7 @@ const char* parse_callfunc(const char* p, int require_paren)
 			arg = buildin_func[str_data[callfunc].val].arg;
 			if( *arg != '*' ) ++ arg;
 		}
+#endif
 	}
 
 	p = skip_word(p);
@@ -1104,6 +1108,14 @@ const char* parse_simpleexpr(const char *p)
 		l=add_word(p);
 		if( str_data[l].type == C_FUNC || str_data[l].type == C_USERFUNC || str_data[l].type == C_USERFUNC_POS)
 			return parse_callfunc(p,1);
+#ifdef SCRIPT_CALLFUNC_CHECK
+		else {
+			const char* name = get_str(l);
+			if( strdb_get(userfunc_db,name) != NULL ) {
+				return parse_callfunc(p,1);
+			}
+		}
+#endif
 
 		p=skip_word(p);
 		if( *p == '[' ){
-- 
cgit v1.2.3-70-g09d2