From f57a705e52b4a21a6e34c93871f689ef971d885f Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 14 Mar 2016 16:59:50 +0300 Subject: Fix npc assertions on maps with always visible npcs after reload scripts. Clean npc info stored in plugin data if scripts was reloaded. --- src/emap/init.c | 1 + src/emap/map.c | 7 ++++++- src/emap/map.h | 1 + src/emap/script.c | 6 ++++++ src/emap/script.h | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/emap') 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); -- cgit v1.2.3-70-g09d2