Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 17312)
+++ src/map/atcommand.c (working copy)
@@ -3726,10 +3726,18 @@
*------------------------------------------*/
ACMD_FUNC(reloadscript)
{
+ struct s_mapiterator* iter;
+ struct map_session_data* pl_sd;
+
nullpo_retr(-1, sd);
//atcommand_broadcast( fd, sd, "@broadcast", "Server is reloading scripts..." );
//atcommand_broadcast( fd, sd, "@broadcast", "You will feel a bit of lag at this point !" );
+ iter = mapit_getallusers();
+ for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) )
+ pc_close_npc(pl_sd,2);
+ mapit_free(iter);
+
flush_fifos();
map_reloadnpc(true); // reload config files seeking for npcs
script_reload();
Index: src/map/clif.c
===================================================================
--- src/map/clif.c (revision 17312)
+++ src/map/clif.c (working copy)
@@ -10413,7 +10413,18 @@
clif_npc_sell_result(sd, fail);
}
+/// Close out a window because the NPC is unloaded
+void clif_NpcCloseShopList(struct map_session_data *sd)
+{
+ sd->npc_shopid = 0; //Clear shop data.
+ sd->npc_shopchoice == 0;
+ if(sd->npc_shopchoice == 1)
+ clif_npc_buy_result(sd, 3);
+ else if(sd->npc_shopchoice == 2)
+ clif_npc_sell_result(sd, 1);
+}
+
/// Chatroom creation request (CZ_CREATE_CHATROOM).
/// 00d5 <packet len>.W <limit>.W <type>.B <passwd>.8B <title>.?B
/// type:
Index: src/map/clif.h
===================================================================
--- src/map/clif.h (revision 17312)
+++ src/map/clif.h (working copy)
@@ -349,9 +349,6 @@
void clif_blown(struct block_list *bl); // area
void clif_slide(struct block_list *bl, int x, int y); // area
void clif_fixpos(struct block_list *bl); // area
-void clif_npcbuysell(struct map_session_data* sd, int id); //self
-void clif_buylist(struct map_session_data *sd, struct npc_data *nd); //self
-void clif_selllist(struct map_session_data *sd); //self
void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes); //self
void clif_scriptnext(struct map_session_data *sd,int npcid); //self
void clif_scriptclose(struct map_session_data *sd, int npcid); //self
@@ -394,6 +391,11 @@
void clif_changechatstatus(struct chat_data* cd); // chat
void clif_refresh(struct map_session_data *sd); // self
+void clif_npcbuysell(struct map_session_data* sd, int id);
+void clif_buylist(struct map_session_data *sd, struct npc_data *nd);
+void clif_selllist(struct map_session_data *sd);
+void clif_NpcCloseShopList(struct map_session_data *sd);
+
void clif_fame_blacksmith(struct map_session_data *sd, int points);
void clif_fame_alchemist(struct map_session_data *sd, int points);
void clif_fame_taekwon(struct map_session_data *sd, int points);
Index: src/map/npc.c
===================================================================
--- src/map/npc.c (revision 17312)
+++ src/map/npc.c (working copy)
@@ -1287,11 +1287,14 @@
sd->state.callshop = 0;
sd->npc_shopid = id;
- if (type==0) {
+ if(type==0) {
+ sd->npc_shopchoice = 1;
clif_buylist(sd,nd);
} else {
+ sd->npc_shopchoice = 2;
clif_selllist(sd);
}
+
return 0;
}
Index: src/map/pc.c
===================================================================
--- src/map/pc.c (revision 17312)
+++ src/map/pc.c (working copy)
@@ -6584,11 +6584,14 @@
{
nullpo_retv(sd);
- if (sd->npc_id) {
+ if (sd->npc_id || sd->npc_shopid) {
if (sd->state.using_fake_npc) {
clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd);
sd->state.using_fake_npc = 0;
}
+ if(sd->npc_shopid && sd->npc_shopchoice)
+ clif_NpcCloseShopList(sd);
+
if (sd->st) {
if(sd->st->state == RUN){ //wait ending code execution
add_timer(gettick()+500,pc_close_npc_timer,sd->bl.id,flag);
Index: src/map/pc.h
===================================================================
--- src/map/pc.h (revision 17312)
+++ src/map/pc.h (working copy)
@@ -202,7 +202,7 @@
unsigned short mapindex;
unsigned char head_dir; //0: Look forward. 1: Look right, 2: Look left.
unsigned int client_tick;
- int npc_id,areanpc_id,npc_shopid,touching_id; //for script follow scriptoid; ,npcid
+ int npc_id,areanpc_id,npc_shopid,touching_id,npc_shopchoice; //for script follow scriptoid; ,npcid
int npc_item_flag; //Marks the npc_id with which you can use items during interactions with said npc (see script command enable_itemuse)
int npc_menu; // internal variable, used in npc menu handling
int npc_amount;