Fixed instances not initializing after reloadscript (bugreport:3522).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14167 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ultramage 2009-11-24 17:15:23 +00:00
parent 96c3de31a6
commit ada5a13abe
4 changed files with 13 additions and 9 deletions

View File

@ -214,12 +214,9 @@ int instance_map_npcsub(struct block_list* bl, va_list args)
void instance_init(int instance_id) void instance_init(int instance_id)
{ {
int i; int i;
if( !instance_id ) return;
if( instance[instance_id].state != INSTANCE_IDLE ) if( !instance_id )
{ return; // nothing to do
ShowError("instance_init: instance already initialited.\n");
return;
}
for( i = 0; i < instance[instance_id].num_map; i++ ) 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]); 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); time_t now = time(NULL);
if( !instance_id || instance[instance_id].state == INSTANCE_FREE ) 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 ) if( instance[instance_id].progress_timeout && instance[instance_id].progress_timeout <= now )
type = 1; type = 1;

View File

@ -3371,7 +3371,7 @@ void do_final(void)
mapit_free(iter); mapit_free(iter);
for( i = 0; i < MAX_INSTANCE; i++ ) 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); id_db->foreach(id_db,cleanup_db_sub);
chrif_char_reset_offline(); chrif_char_reset_offline();

View File

@ -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); 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 ) 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. //Re-read the NPC Script Events cache.
npc_read_event_script(); npc_read_event_script();

View File

@ -14004,6 +14004,13 @@ BUILDIN_FUNC(instance_set_timeout)
BUILDIN_FUNC(instance_init) BUILDIN_FUNC(instance_init)
{ {
int instance_id = script_getnum(st, 2); 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); instance_init(instance_id);
return 0; return 0;
} }