diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-03-14 16:59:50 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-03-14 16:59:50 +0300 |
commit | f57a705e52b4a21a6e34c93871f689ef971d885f (patch) | |
tree | 77e27d52e9a2d9db7188b9bae6823e539203d6a2 | |
parent | f03b90ff34e16a5fdd50e3994defffabd088f116 (diff) | |
download | plugin-f57a705e52b4a21a6e34c93871f689ef971d885f.tar.gz plugin-f57a705e52b4a21a6e34c93871f689ef971d885f.tar.bz2 plugin-f57a705e52b4a21a6e34c93871f689ef971d885f.tar.xz plugin-f57a705e52b4a21a6e34c93871f689ef971d885f.zip |
Fix npc assertions on maps with always visible npcs after reload scripts.
Clean npc info stored in plugin data if scripts was reloaded.
-rw-r--r-- | src/emap/init.c | 1 | ||||
-rw-r--r-- | src/emap/map.c | 7 | ||||
-rw-r--r-- | src/emap/map.h | 1 | ||||
-rw-r--r-- | src/emap/script.c | 6 | ||||
-rw-r--r-- | src/emap/script.h | 1 |
5 files changed, 15 insertions, 1 deletions
diff --git a/src/emap/init.c b/src/emap/init.c index 53a47df..e6e3556 100644 --- a/src/emap/init.c +++ b/src/emap/init.c @@ -225,6 +225,7 @@ HPExport void plugin_init (void) addHookPre("script->set_reg_ref_num", eset_reg_npcscope_num); addHookPre("script->set_reg_npc_str", eset_reg_npcscope_str); addHookPre("script->set_reg_ref_str", eset_reg_npcscope_str); + addHookPre("script->reload", escript_reload); addHookPre("status->calc_pc_additional", estatus_calc_pc_additional); addHookPost("clif->getareachar_unit", eclif_getareachar_unit_post); diff --git a/src/emap/map.c b/src/emap/map.c index 8f5c54f..7e43f8b 100644 --- a/src/emap/map.c +++ b/src/emap/map.c @@ -555,7 +555,7 @@ void map_alwaysVisible_send(TBL_PC *sd) } } -void edo_final_maps(void) +void map_clear_data(void) { int f; for (f = 0; f < map->count; f++) @@ -565,3 +565,8 @@ void edo_final_maps(void) VECTOR_CLEAR(data->npcs); } } + +void edo_final_maps(void) +{ + map_clear_data(); +} diff --git a/src/emap/map.h b/src/emap/map.h index 1813d57..6906af3 100644 --- a/src/emap/map.h +++ b/src/emap/map.h @@ -44,5 +44,6 @@ void map_alwaysVisible_delete(const struct block_list *bl); bool map_alwaysVisible_find(const struct block_list *bl); void map_alwaysVisible_send(TBL_PC *sd); void edo_final_maps(void); +void map_clear_data(void); #endif // EVOL_MAP_MAP diff --git a/src/emap/script.c b/src/emap/script.c index e323e20..74f908e 100644 --- a/src/emap/script.c +++ b/src/emap/script.c @@ -88,6 +88,12 @@ extern int mountScriptId; +int escript_reload(void) +{ + map_clear_data(); + return 0; +} + void eset_reg_npcscope_num(struct script_state* st, struct reg_db *n, int64 *num, const char* name, int *val) { if (!strcmp(name, ".lang")) diff --git a/src/emap/script.h b/src/emap/script.h index 534eb82..af851f7 100644 --- a/src/emap/script.h +++ b/src/emap/script.h @@ -4,6 +4,7 @@ #ifndef EVOL_MAP_SCRIPT #define EVOL_MAP_SCRIPT +int escript_reload(void); void eset_reg_npcscope_num(struct script_state* st, struct reg_db *n, int64 *num, const char* name, int *val); int eget_val_npcscope_num(struct script_state* st, struct reg_db *n, struct script_data* data); void eset_reg_npcscope_str(struct script_state* st, struct reg_db *n, int64 *num, const char* name, const char *str); |