From 3b800b8ffa7b6d2a21e4c66d830871a8cf51eaf1 Mon Sep 17 00:00:00 2001 From: Lance Date: Sun, 14 May 2006 12:57:50 +0000 Subject: * Bugfix on fake npc git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6585 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/clif.c | 8 +++++++- src/map/map.h | 2 ++ src/map/npc.c | 19 ++++++++++++------- src/map/pc.c | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) (limited to 'src/map') diff --git a/src/map/clif.c b/src/map/clif.c index bb7ba3287..6ce6c6e59 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -763,13 +763,19 @@ int clif_clearchar_delay(unsigned int tick, struct block_list *bl, int type) { *------------------------------------------ */ int clif_clearchar_id(int id, int type, int fd) { - unsigned char buf[16]; + /*unsigned char buf[16]; WBUFW(buf,0) = 0x80; WBUFL(buf,2) = id; WBUFB(buf,6) = type; WFIFOHEAD(fd, packet_len_table[0x80]); memcpy(WFIFOP(fd,0), buf, 7); + WFIFOSET(fd, packet_len_table[0x80]);*/ + + WFIFOHEAD(fd, packet_len_table[0x80]); + WFIFOW(fd,0) = 0x80; + WFIFOL(fd,2) = id; + WFIFOB(fd,6) = (char)type; // Why use int for a char in the first place? WFIFOSET(fd, packet_len_table[0x80]); return 0; diff --git a/src/map/map.h b/src/map/map.h index 18e159163..042058885 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1412,4 +1412,6 @@ typedef struct pet_data TBL_PET; extern int lowest_gm_level; extern char main_chat_nick[16]; +int fake_npc_id; + #endif diff --git a/src/map/npc.c b/src/map/npc.c index c463b0282..931a205c8 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -1076,14 +1076,19 @@ int npc_scriptcont(struct map_session_data *sd,int id) ShowWarning("npc_scriptcont: sd->npc_id (%d) is not id (%d).\n", sd->npc_id, id); return 1; } - if (npc_checknear(sd,id)){ - ShowWarning("npc_scriptcont: failed npc_checknear test.\n"); - return 1; - } - nd=(struct npc_data *)map_id2bl(id); + if(sd->npc_id != fake_npc_id){ // Not item script + if (npc_checknear(sd,id)){ + ShowWarning("npc_scriptcont: failed npc_checknear test.\n"); + return 1; + } + + nd=(struct npc_data *)map_id2bl(id); - sd->npc_pos=run_script(nd->u.scr.script,sd->npc_pos,sd->bl.id,id); + sd->npc_pos=run_script(nd->u.scr.script,sd->npc_pos,sd->bl.id,id); + } else { // Item script, continue execution... + sd->npc_pos=run_script(sd->npc_scriptroot,sd->npc_pos,sd->bl.id,id); + } return 0; } @@ -2920,7 +2925,7 @@ int do_init_npc(void) add_timer_func_list(npc_timerevent,"npc_timerevent"); // Init dummy NPC - //dummy_npc_id = npc_get_new_npc_id(); + fake_npc_id = npc_get_new_npc_id(); return 0; } diff --git a/src/map/pc.c b/src/map/pc.c index c3da30b6a..ad3d758c3 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2704,7 +2704,7 @@ int pc_useitem(struct map_session_data *sd,int n) } sd->canuseitem_tick= tick + battle_config.item_use_interval; //Update item use time. - run_script(script,0,sd->bl.id,0); + run_script(script,0,sd->bl.id,fake_npc_id); potion_flag = 0; return 1; } -- cgit v1.2.3-70-g09d2