From 23658c125f6c9e44b2015043d8dd913c687b9df6 Mon Sep 17 00:00:00 2001 From: ultramage Date: Tue, 24 Nov 2009 17:15:23 +0000 Subject: Fixed instances not initializing after reloadscript (bugreport:3522). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14167 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/instance.c | 11 ++++------- src/map/map.c | 2 +- src/map/npc.c | 2 +- src/map/script.c | 7 +++++++ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/map/instance.c b/src/map/instance.c index 8c8f9e2fd..454f92e98 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -214,12 +214,9 @@ int instance_map_npcsub(struct block_list* bl, va_list args) void instance_init(int instance_id) { int i; - if( !instance_id ) return; - if( instance[instance_id].state != INSTANCE_IDLE ) - { - ShowError("instance_init: instance already initialited.\n"); - return; - } + + if( !instance_id ) + return; // nothing to do for( i = 0; i < instance[instance_id].num_map; i++ ) map_foreachinmap(instance_map_npcsub, map[instance[instance_id].map[i]].instance_src_map, BL_NPC, instance[instance_id].map[i]); @@ -314,7 +311,7 @@ void instance_destroy(int instance_id) time_t now = time(NULL); if( !instance_id || instance[instance_id].state == INSTANCE_FREE ) - return; + return; // nothing to do if( instance[instance_id].progress_timeout && instance[instance_id].progress_timeout <= now ) type = 1; diff --git a/src/map/map.c b/src/map/map.c index 7488a5a15..7f8a72cd2 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3371,7 +3371,7 @@ void do_final(void) mapit_free(iter); for( i = 0; i < MAX_INSTANCE; i++ ) - if( instance[i].state != INSTANCE_FREE ) instance_destroy(i); + instance_destroy(i); id_db->foreach(id_db,cleanup_db_sub); chrif_char_reset_offline(); diff --git a/src/map/npc.c b/src/map/npc.c index 2a92a0e1b..6a3af6d40 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -3347,7 +3347,7 @@ int npc_reload(void) npc_id - npc_new_min, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob); for( i = 0; i < ARRAYLENGTH(instance); ++i ) - if( instance[i].instance_id ) instance_init(instance[i].instance_id); + instance_init(instance[i].instance_id); //Re-read the NPC Script Events cache. npc_read_event_script(); diff --git a/src/map/script.c b/src/map/script.c index 57b11f305..fac794ba4 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -14004,6 +14004,13 @@ BUILDIN_FUNC(instance_set_timeout) BUILDIN_FUNC(instance_init) { int instance_id = script_getnum(st, 2); + + if( instance[instance_id].state != INSTANCE_IDLE ) + { + ShowError("instance_init: instance already initialized.\n"); + return 0; + } + instance_init(instance_id); return 0; } -- cgit v1.2.3-70-g09d2