diff options
Diffstat (limited to 'src/map/map.c')
-rw-r--r-- | src/map/map.c | 87 |
1 files changed, 49 insertions, 38 deletions
diff --git a/src/map/map.c b/src/map/map.c index 0312b926f..21239a78b 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -511,13 +511,11 @@ struct skill_unit* map_find_skill_unit_oncell(struct block_list* target,int x,in *------------------------------------------*/ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_list* center, int range, int type, ...) { - va_list ap; int bx,by,m; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; int blockcount=bl_list_count,i; int x0,x1,y0,y1; - va_start(ap,type); m = center->m; x0 = max(center->x-range, 0); @@ -562,11 +560,15 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) // 有?かどうかチェック - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; //[Skotlex] } @@ -576,7 +578,6 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis *------------------------------------------*/ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block_list* center, int range, int type,...) { - va_list ap; int bx,by,m; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; @@ -587,8 +588,6 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block if (m < 0) return 0; - va_start(ap,type); - x0 = max(center->x-range, 0); y0 = max(center->y-range, 0); x1 = min(center->x+range, map[m].xs-1); @@ -633,11 +632,15 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) // 有?かどうかチェック - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; //[Skotlex] } @@ -649,7 +652,6 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block *------------------------------------------*/ int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, int y0, int x1, int y1, int type, ...) { - va_list ap; int bx,by; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; @@ -657,7 +659,6 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, in if (m < 0) return 0; - va_start(ap,type); if (x1 < x0) { //Swap range bx = x0; @@ -696,11 +697,15 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, in for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) // 有?かどうかチェック - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; //[Skotlex] } @@ -717,13 +722,11 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_ int bx,by,m; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; - va_list ap; int blockcount=bl_list_count,i; int x0, x1, y0, y1; if (!range) return 0; if (!dx && !dy) return 0; //No movement. - va_start(ap,type); m = center->m; x0 = center->x-range; @@ -830,11 +833,15 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_ for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; } @@ -848,13 +855,10 @@ int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int int bx,by; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; - va_list ap; int blockcount=bl_list_count,i; if (x < 0 || y < 0 || x >= map[m].xs || y >= map[m].ys) return 0; - va_start(ap,type); - by=y/BLOCK_SIZE; bx=x/BLOCK_SIZE; @@ -875,11 +879,15 @@ int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) // 有?かどうかチェック - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; } @@ -924,7 +932,6 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int m,int x0,int y // kRO. //Generic map_foreach* variables. - va_list ap; int i, blockcount = bl_list_count; struct block_list *bl; int bx, by; @@ -938,8 +945,6 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int m,int x0,int y if (m < 0) return 0; - - va_start(ap,type); len_limit = magnitude2 = MAGNITUDE2(x0,y0, x1,y1); if (magnitude2 < 1) //Same begin and ending point, can't trace path. @@ -1068,11 +1073,15 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int m,int x0,int y for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) //This check is done in case some object gets killed due to further skill processing. - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); - va_end(ap); bl_list_count = blockcount; return returnCount; //[Skotlex] @@ -1084,11 +1093,8 @@ int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type,.. int b, bsize; int returnCount =0; //total sum of returned values of func() [Skotlex] struct block_list *bl; - va_list ap; int blockcount=bl_list_count,i; - va_start(ap,type); - bsize = map[m].bxs * map[m].bys; if(type&~BL_MOB) @@ -1110,11 +1116,15 @@ int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type,.. for(i=blockcount;i<bl_list_count;i++) if(bl_list[i]->prev) // 有?かどうかチェック - returnCount += func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + returnCount += func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); // 解放を許可する - va_end(ap); bl_list_count = blockcount; return returnCount; } @@ -1210,9 +1220,6 @@ void map_foreachobject(int (*func)(struct block_list*,va_list),int type,...) { int i; int blockcount=bl_list_count; - va_list ap; - - va_start(ap,type); for(i=2;i<=last_object_id;i++){ if(objects[i]){ @@ -1230,11 +1237,15 @@ void map_foreachobject(int (*func)(struct block_list*,va_list),int type,...) for(i=blockcount;i<bl_list_count;i++) if( bl_list[i]->prev || bl_list[i]->next ) - func(bl_list[i],ap); + { + va_list ap; + va_start(ap, type); + func(bl_list[i], ap); + va_end(ap); + } map_freeblock_unlock(); - va_end(ap); bl_list_count = blockcount; } @@ -3271,7 +3282,7 @@ int cleanup_sub(struct block_list *bl, va_list ap) static int cleanup_db_sub(DBKey key,void *data,va_list va) { - return cleanup_sub((struct block_list*)data, NULL); + return cleanup_sub((struct block_list*)data, va); } /*========================================== |