summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/clif.c10
-rw-r--r--src/map/instance.c10
-rw-r--r--src/map/instance.h9
-rw-r--r--src/map/map.c4
4 files changed, 22 insertions, 11 deletions
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 <Instance name>.63B <Standby Position>.W
+ // S 0x2cb <Instance name>.61B <Standby Position>.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 <message ID>.L
+ case 5:
// S 0x2ce <Message ID>.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();