diff options
-rw-r--r-- | Changelog-Trunk.txt | 1 | ||||
-rw-r--r-- | src/map/clif.c | 8 | ||||
-rw-r--r-- | src/map/map.h | 2 | ||||
-rw-r--r-- | src/map/npc.c | 19 | ||||
-rw-r--r-- | src/map/pc.c | 2 |
5 files changed, 23 insertions, 9 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index b4e712502..1e6433533 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/05/12
+ * Bugfix on fake npc [Lance]
* Fixed mob_once_spawn not working for non-random coordinates. [blackhole89]
* Reverted again the change that stuns the caster on Ske, Ska, Swoo when
the target is a nonplayer (rather than always) [Skotlex]
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;
}
|