summaryrefslogtreecommitdiff
path: root/src/map/script.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/script.h')
-rw-r--r--src/map/script.h167
1 files changed, 88 insertions, 79 deletions
diff --git a/src/map/script.h b/src/map/script.h
index 8e2c4a6f5..82224a7af 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -6,36 +6,20 @@
#include "map.h" //EVENT_NAME_LENGTH
-#define NUM_WHISPER_VAR 10
-
+/**
+ * Declarations
+ **/
struct map_session_data;
struct eri;
-extern int potion_flag; //For use on Alchemist improved potions/Potion Pitcher. [Skotlex]
-extern int potion_hp, potion_per_hp, potion_sp, potion_per_sp;
-extern int potion_target;
-
-extern struct Script_Config {
- unsigned warn_func_mismatch_argtypes : 1;
- unsigned warn_func_mismatch_paramnum : 1;
- int check_cmdcount;
- int check_gotocount;
- int input_min_value;
- int input_max_value;
-
- const char *die_event_name;
- const char *kill_pc_event_name;
- const char *kill_mob_event_name;
- const char *login_event_name;
- const char *logout_event_name;
- const char *loadmap_event_name;
- const char *baselvup_event_name;
- const char *joblvup_event_name;
-
- const char* ontouch_name;
- const char* ontouch2_name;
-} script_config;
+/**
+ * Defines
+ **/
+#define NUM_WHISPER_VAR 10
+/**
+ * Enumerations
+ **/
typedef enum c_op {
C_NOP, // end of script/no value (nil)
C_POS,
@@ -51,7 +35,7 @@ typedef enum c_op {
C_USERFUNC, // internal script function
C_USERFUNC_POS, // internal script function label
C_REF, // the next call to c_op2 should push back a ref to the left operand
-
+
// operators
C_OP3, // a ? b : c
C_LOR, // a || b
@@ -79,6 +63,47 @@ typedef enum c_op {
C_SUB_PP, // --a
} c_op;
+enum hQueueOpt {
+ HQO_NONE,
+ HQO_onLogOut,
+ HQO_OnDeath,
+ HQO_OnMapChange,
+ HQO_MAX,
+};
+
+enum e_script_state { RUN,STOP,END,RERUNLINE,GOTO,RETFUNC,CLOSE };
+
+enum script_parse_options {
+ SCRIPT_USE_LABEL_DB = 0x1,// records labels in scriptlabel_db
+ SCRIPT_IGNORE_EXTERNAL_BRACKETS = 0x2,// ignores the check for {} brackets around the script
+ SCRIPT_RETURN_EMPTY_SCRIPT = 0x4// returns the script object instead of NULL for empty scripts
+};
+
+/**
+ * Structures
+ **/
+
+struct Script_Config {
+ unsigned warn_func_mismatch_argtypes : 1;
+ unsigned warn_func_mismatch_paramnum : 1;
+ int check_cmdcount;
+ int check_gotocount;
+ int input_min_value;
+ int input_max_value;
+
+ const char *die_event_name;
+ const char *kill_pc_event_name;
+ const char *kill_mob_event_name;
+ const char *login_event_name;
+ const char *logout_event_name;
+ const char *loadmap_event_name;
+ const char *baselvup_event_name;
+ const char *joblvup_event_name;
+
+ const char* ontouch_name;
+ const char* ontouch2_name;
+};
+
struct script_retinfo {
struct DBMap* var_function;// scope variables
struct script_code* script;// script code
@@ -113,14 +138,6 @@ struct script_stack {
struct DBMap* var_function;// scope variables
};
-enum hQueueOpt {
- HQO_NONE,
- HQO_onLogOut,
- HQO_OnDeath,
- HQO_OnMapChange,
- HQO_MAX,
-};
-
/* [Ind/Hercules] */
struct hQueue {
int id;
@@ -138,11 +155,6 @@ struct hQueueIterator {
int pos;
};
-//
-// Script state
-//
-enum e_script_state { RUN,STOP,END,RERUNLINE,GOTO,RETFUNC,CLOSE };
-
struct script_state {
struct script_stack* stack;
int start,end;
@@ -174,44 +186,6 @@ struct script_regstr {
char* data;
};
-enum script_parse_options {
- SCRIPT_USE_LABEL_DB = 0x1,// records labels in scriptlabel_db
- SCRIPT_IGNORE_EXTERNAL_BRACKETS = 0x2,// ignores the check for {} brackets around the script
- SCRIPT_RETURN_EMPTY_SCRIPT = 0x4// returns the script object instead of NULL for empty scripts
-};
-
-const char* skip_space(const char* p);
-void script_error(const char* src, const char* file, int start_line, const char* error_msg, const char* error_pos);
-
-struct script_code* parse_script(const char* src,const char* file,int line,int options);
-void run_script_sub(struct script_code *rootscript,int pos,int rid,int oid, char* file, int lineno);
-void run_script(struct script_code*,int,int,int);
-
-int set_var(struct map_session_data *sd, char *name, void *val);
-int run_script_timer(int tid, unsigned int tick, int id, intptr_t data);
-void run_script_main(struct script_state *st);
-
-void script_stop_instances(struct script_code *code);
-struct linkdb_node* script_erase_sleepdb(struct linkdb_node *n);
-void script_free_code(struct script_code* code);
-void script_free_vars(struct DBMap *storage);
-struct script_state* script_alloc_state(struct script_code* rootscript, int pos, int rid, int oid);
-void script_free_state(struct script_state* st);
-
-struct DBMap* script_get_userfunc_db(void);
-void script_run_autobonus(const char *autobonus,int id, int pos);
-
-void script_cleararray_pc(struct map_session_data* sd, const char* varname, void* value);
-void script_setarray_pc(struct map_session_data* sd, const char* varname, uint8 idx, void* value, int* refcache);
-
-int script_config_read(char *cfgName);
-int add_str(const char* p);
-const char* get_str(int id);
-int script_reload(void);
-
-// @commands (script based)
-void setd_sub(struct script_state *st, struct map_session_data *sd, const char *varname, int elem, void *value, struct DBMap **ref);
-
struct script_function {
bool (*func)(struct script_state *st);
char *name;
@@ -366,11 +340,28 @@ struct script_interface {
struct script_label_entry *labels;
int label_count;
int labels_size;
+ /* */
+ struct Script_Config config;
+ /* */
+ /* Caches compiled autoscript item code. */
+ /* Note: This is not cleared when reloading itemdb. */
+ DBMap* autobonus_db; // char* script -> char* bytecode
+ DBMap* userfunc_db; // const char* func_name -> struct script_code*
+ /* */
+ int potion_flag; //For use on Alchemist improved potions/Potion Pitcher. [Skotlex]
+ int potion_hp, potion_per_hp, potion_sp, potion_per_sp;
+ int potion_target;
/* */
void (*init) (void);
void (*final) (void);
- /* */
+ int (*reload) (void);
+ /* parse */
+ struct script_code* (*parse) (const char* src,const char* file,int line,int options);
void (*parse_builtin) (void);
+ const char* (*parse_subexpr) (const char* p,int limit);
+ const char* (*skip_space) (const char* p);
+ void (*error) (const char* src, const char* file, int start_line, const char* error_msg, const char* error_pos);
+ /* */
bool (*addScript) (char *name, char *args, bool (*func)(struct script_state *st));
int (*conv_num) (struct script_state *st,struct script_data *data);
const char* (*conv_str) (struct script_state *st,struct script_data *data);
@@ -387,6 +378,24 @@ struct script_interface {
void (*set_constant_force) (const char *name, int value, bool isparameter);
bool (*get_constant) (const char* name, int* value);
void (*label_add)(int key, int pos);
+ void (*run) (struct script_code *rootscript,int pos,int rid,int oid);
+ void (*run_main) (struct script_state *st);
+ int (*run_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ int (*set_var) (struct map_session_data *sd, char *name, void *val);
+ void (*stop_instances) (struct script_code *code);
+ void (*free_code) (struct script_code* code);
+ void (*free_vars) (struct DBMap *storage);
+ struct script_state* (*alloc_state) (struct script_code* rootscript, int pos, int rid, int oid);
+ void (*free_state) (struct script_state* st);
+ void (*run_autobonus) (const char *autobonus,int id, int pos);
+ void (*cleararray_pc) (struct map_session_data* sd, const char* varname, void* value);
+ void (*setarray_pc) (struct map_session_data* sd, const char* varname, uint8 idx, void* value, int* refcache);
+ int (*config_read) (char *cfgName);
+ int (*add_str) (const char* p);
+ const char* (*get_str) (int id);
+ int (*search_str) (const char* p);
+ void (*setd_sub) (struct script_state *st, struct map_session_data *sd, const char *varname, int elem, void *value, struct DBMap **ref);
+ void (*attach_state) (struct script_state* st);
/* */
struct hQueue *(*queue) (int idx);
bool (*queue_add) (int idx, int var);