summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-01-03 22:00:59 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-01-03 22:00:59 +0000
commitd3e6e368ac40c44fb13978a7529f8f818cdc0731 (patch)
treeda160c07691d6750859d734e376c4dcae3e554d0
parent1b241817a93f892a24379866a06e046e7e6c5e86 (diff)
downloadhercules-d3e6e368ac40c44fb13978a7529f8f818cdc0731.tar.gz
hercules-d3e6e368ac40c44fb13978a7529f8f818cdc0731.tar.bz2
hercules-d3e6e368ac40c44fb13978a7529f8f818cdc0731.tar.xz
hercules-d3e6e368ac40c44fb13978a7529f8f818cdc0731.zip
Fixed npc unloading not clearing NPC touch cells (bugreport:595).
Added a comment to npc_unsetcells(), pointing out that it's most likely not scanning for cells correctly. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12004 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt1
-rw-r--r--src/map/npc.c16
2 files changed, 3 insertions, 14 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 8cb8e9def..db75ac6fc 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.
2008/01/03
+ * Fixed npc unloading not clearing NPC touch cells (bugreport:595)
* Map cell mechanism rewrite
- defined a data structure for map cells (replaces 3 various cell arrays)
- both terrain (gat) and dynamic (cell) information is now stored as
diff --git a/src/map/npc.c b/src/map/npc.c
index 6514fbb6a..f18ba07a1 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1227,20 +1227,7 @@ int npc_remove_map(struct npc_data* nd)
return 1; //Not assigned to a map.
m = nd->bl.m;
clif_clearunit_area(&nd->bl,2);
- if (nd->subtype == WARP)
- {// Remove corresponding NPC CELLs
- int j, xs, ys, x, y;
- x = nd->bl.x;
- y = nd->bl.y;
- xs = nd->u.warp.xs;
- ys = nd->u.warp.ys;
-
- for( i = y-ys; i < y+ys; i++ )
- for( j = x-xs; j < x+xs; j++ )
- if( map_getcell(m, j, i, CELL_CHKNPC) )
- map_setcell(m, j, i, CELL_CLRNPC);
-
- }
+ npc_unsetcells(nd);
map_delblock(&nd->bl);
//Remove npc from map[].npc list. [Skotlex]
ARR_FIND( 0, map[m].npc_num, i, map[m].npc[i] == nd );
@@ -2014,6 +2001,7 @@ void npc_unsetcells(struct npc_data* nd)
return;
//Locate max range on which we can locate npc cells
+ //FIXME: does this really do what it's supposed to do? [ultramage]
for(x0 = x-xs; x0 > 0 && map_getcell(m, x0, y, CELL_CHKNPC); x0--);
for(x1 = x+xs; x1 < map[m].xs-1 && map_getcell(m, x1, y, CELL_CHKNPC); x1++);
for(y0 = y-ys; y0 > 0 && map_getcell(m, x, y0, CELL_CHKNPC); y0--);