diff options
author | Lance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-01 05:48:06 +0000 |
---|---|---|
committer | Lance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-01 05:48:06 +0000 |
commit | a76908de39c38dcb65afb6d1ab628bc414abd483 (patch) | |
tree | bb1cd4e78c3a5f956dd974bd01b02b5c0c8e92e6 /src/map | |
parent | b8b2214648b6408c15cd9018a05a6dc63de45535 (diff) | |
download | hercules-a76908de39c38dcb65afb6d1ab628bc414abd483.tar.gz hercules-a76908de39c38dcb65afb6d1ab628bc414abd483.tar.bz2 hercules-a76908de39c38dcb65afb6d1ab628bc414abd483.tar.xz hercules-a76908de39c38dcb65afb6d1ab628bc414abd483.zip |
* Optimized fake npc system. Added npc_checknear back to npc_buysellsel.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6426 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/clif.c | 18 | ||||
-rw-r--r-- | src/map/npc.c | 15 | ||||
-rw-r--r-- | src/map/script.c | 13 |
3 files changed, 26 insertions, 20 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index 0efd160b4..8321368c0 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1809,10 +1809,16 @@ void clif_sendfakenpc(struct map_session_data *sd, int npcid) { int clif_scriptmenu(struct map_session_data *sd, int npcid, char *mes) {
int fd;
int slen = strlen(mes) + 8;
+ struct block_list *bl = map_id2bl(npcid);
WFIFOHEAD(fd, slen);
nullpo_retr(0, sd);
+ if (bl->type == BL_PC || bl->m!=sd->bl.m ||
+ bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 ||
+ bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)
+ clif_sendfakenpc(sd, npcid);
+
fd=sd->fd;
WFIFOW(fd,0)=0xb7;
WFIFOW(fd,2)=slen;
@@ -1829,8 +1835,14 @@ int clif_scriptmenu(struct map_session_data *sd, int npcid, char *mes) { */
int clif_scriptinput(struct map_session_data *sd, int npcid) {
int fd;
+ struct block_list *bl = map_id2bl(npcid);
nullpo_retr(0, sd);
+
+ if (bl->type == BL_PC || bl->m!=sd->bl.m ||
+ bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 ||
+ bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)
+ clif_sendfakenpc(sd, npcid);
fd=sd->fd;
WFIFOHEAD(fd, packet_len_table[0x142]);
@@ -1847,9 +1859,15 @@ int clif_scriptinput(struct map_session_data *sd, int npcid) { */
int clif_scriptinputstr(struct map_session_data *sd, int npcid) {
int fd;
+ struct block_list *bl = map_id2bl(npcid);
nullpo_retr(0, sd);
+ if (bl->type == BL_PC || bl->m!=sd->bl.m ||
+ bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 ||
+ bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)
+ clif_sendfakenpc(sd, npcid);
+
fd=sd->fd;
WFIFOHEAD(fd, packet_len_table[0x1d4]);
WFIFOW(fd,0)=0x1d4;
diff --git a/src/map/npc.c b/src/map/npc.c index a38d36a3d..12c17de7a 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -979,9 +979,9 @@ int npc_checknear(struct map_session_data *sd,int id) return 1;
}
- // Reprecated, please do not uncomment this. [Lance]
- //if (nd->class_<0) // イベント系は常にOK
- // return 0;
+
+ if (nd->class_<0) // イベント系は常にOK
+ return 0;
// エリア判定
if (nd->bl.m!=sd->bl.m ||
@@ -1026,13 +1026,14 @@ int npc_click(struct map_session_data *sd,int id) return 1;
}
+
if (npc_checknear(sd,id))
return 1;
nd=(struct npc_data *)map_id2bl(id);
- //Disabled npc.
- if (nd->sc.option&OPTION_INVISIBLE)
+ //Hidden/Disabled npc.
+ if (nd->class_ < 0 || nd->sc.option&OPTION_INVISIBLE)
return 1;
sd->npc_id=id;
@@ -1085,8 +1086,8 @@ int npc_buysellsel(struct map_session_data *sd,int id,int type) nullpo_retr(1, sd);
- //if (npc_checknear(sd,id))
- // return 1;
+ if (npc_checknear(sd,id))
+ return 1;
nd=(struct npc_data *)map_id2bl(id);
if (nd->bl.subtype!=SHOP) {
diff --git a/src/map/script.c b/src/map/script.c index f9a87e1be..eeb055ed0 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -10909,20 +10909,7 @@ int run_script_main(struct script_state *st) st->state = RUN;
}
} else {
- struct block_list *bl;
st->state = RUN;
- if(st->oid && st->rid && (bl = map_id2bl(st->oid))){
- // Perfomance impact, use buildin_doevent instead for interactive item scripts.
- /*if(bl->type == BL_PC){
- clif_sendfakenpc(((TBL_PC *)bl),dummy_npc_id);
- } else */
- if(bl->type == BL_NPC){
- if((bl = map_id2bl(st->rid))){ // Should be type PC now
- if(npc_checknear(((TBL_PC *)bl), st->oid))
- clif_sendfakenpc(((struct map_session_data *)bl),st->oid);
- }
- }
- }
}
while( st->state == RUN) {
c= get_com((unsigned char *) st->script,&st->pos);
|