From 179b9771be97e87168b39799bdbf82767d46fc45 Mon Sep 17 00:00:00 2001 From: ai4rei Date: Sat, 2 Jul 2011 10:33:38 +0000 Subject: * Random updates to instance system. - Introduced a constant for instance name length. - Corrected comments related to instance packets 0x2cb (ZC_MEMORIALDUNGEON_SUBSCRIPTION_INFO) and 0x2ce (ZC_MEMORIALDUNGEON_NOTIFY). - Moved instance finalization out of map.c into instance.c git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14878 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 5 +++++ src/map/clif.c | 10 ++++++---- src/map/instance.c | 10 +++++++++- src/map/instance.h | 9 ++++++--- src/map/map.c | 4 +--- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index f8b235416..76195a89a 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,5 +1,10 @@ Date Added +2011/07/02 + * Random updates to instance system. [Ai4rei] + - Introduced a constant for instance name length. + - Corrected comments related to instance packets 0x2cb (ZC_MEMORIALDUNGEON_SUBSCRIPTION_INFO) and 0x2ce (ZC_MEMORIALDUNGEON_NOTIFY). + - Moved instance finalization out of map.c into instance.c 2011/07/01 * CMake: marked executables as different components and other miscellaneous changes. [FlavioJS] 2011/06/29 diff --git a/src/map/clif.c b/src/map/clif.c index d68a50570..8d2159823 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -13997,11 +13997,11 @@ int clif_instance(int instance_id, int type, int flag) switch( type ) { case 1: - // S 0x2cb .63B .W + // S 0x2cb .61B .W // Required to start the instancing information window on Client // This window re-appear each "refresh" of client automatically until type 4 is send to client. WBUFW(buf,0) = 0x02CB; - memcpy(WBUFP(buf,2),instance[instance_id].name,61); + memcpy(WBUFP(buf,2),instance[instance_id].name,INSTANCE_NAME_LENGTH); WBUFW(buf,63) = flag; clif_send(buf,packet_len(0x02CB),&sd->bl,PARTY); break; @@ -14029,14 +14029,16 @@ int clif_instance(int instance_id, int type, int flag) } clif_send(buf,packet_len(0x02CD),&sd->bl,PARTY); break; - case 5: // R 02CE .L + case 5: // S 0x2ce .L + // 0 = Notification (EnterLimitDate update?) // 1 = The Memorial Dungeon expired; it has been destroyed // 2 = The Memorial Dungeon's entry time limit expired; it has been destroyed // 3 = The Memorial Dungeon has been removed. - // 4 = Just remove the window, maybe party/guild leave + // 4 = Create failure (removes the instance window) WBUFW(buf,0) = 0x02CE; WBUFL(buf,2) = flag; + //WBUFL(buf,6) = EnterLimitDate; clif_send(buf,packet_len(0x02CE),&sd->bl,PARTY); break; } diff --git a/src/map/instance.c b/src/map/instance.c index 836543891..fecbe41f7 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -220,7 +220,7 @@ void instance_init(int instance_id) 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]); - instance[instance_id].state = INSTANCE_BUSSY; + instance[instance_id].state = INSTANCE_BUSY; ShowInfo("[Instance] Initialized %s.\n", instance[instance_id].name); } @@ -444,6 +444,14 @@ void instance_check_kick(struct map_session_data *sd) } } +void do_final_instance(void) +{ + int i; + + for( i = 1; i < MAX_INSTANCE; i++ ) + instance_destroy(i); +} + void do_init_instance(void) { memset(instance, 0x00, sizeof(instance)); diff --git a/src/map/instance.h b/src/map/instance.h index c663503f5..a4735113a 100644 --- a/src/map/instance.h +++ b/src/map/instance.h @@ -7,10 +7,12 @@ #define MAX_MAP_PER_INSTANCE 10 #define MAX_INSTANCE 500 -typedef enum instance_state { INSTANCE_FREE, INSTANCE_IDLE, INSTANCE_BUSSY } instance_state; +#define INSTANCE_NAME_LENGTH (60+1) + +typedef enum instance_state { INSTANCE_FREE, INSTANCE_IDLE, INSTANCE_BUSY } instance_state; struct s_instance { - char name[61]; // Instance Name - required for clif functions. + char name[INSTANCE_NAME_LENGTH]; // Instance Name - required for clif functions. instance_state state; short instance_id; int party_id; @@ -43,6 +45,7 @@ void instance_check_idle(int instance_id); void instance_check_kick(struct map_session_data *sd); void instance_set_timeout(int instance_id, unsigned int progress_timeout, unsigned int idle_timeout); -void do_init_instance(); +void do_final_instance(void); +void do_init_instance(void); #endif diff --git a/src/map/map.c b/src/map/map.c index 0c60e94aa..b8edabfe6 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3436,9 +3436,6 @@ void do_final(void) for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) ) map_quit(sd); mapit_free(iter); - - for( i = 0; i < MAX_INSTANCE; i++ ) - instance_destroy(i); id_db->foreach(id_db,cleanup_db_sub); chrif_char_reset_offline(); @@ -3449,6 +3446,7 @@ void do_final(void) do_final_chrif(); do_final_npc(); do_final_script(); + do_final_instance(); do_final_itemdb(); do_final_storage(); do_final_guild(); -- cgit v1.2.3-70-g09d2