diff options
author | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-11-23 11:13:49 +0000 |
---|---|---|
committer | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-11-23 11:13:49 +0000 |
commit | 9de2906e31ec3311939acf5d311bca50ab44d59e (patch) | |
tree | 7d24187795d0cf52c30d0330e3a71da7dbe5618d /src/map/unit.c | |
parent | 35467de0fb6dc06a402315ea478495d74080e3c5 (diff) | |
download | hercules-9de2906e31ec3311939acf5d311bca50ab44d59e.tar.gz hercules-9de2906e31ec3311939acf5d311bca50ab44d59e.tar.bz2 hercules-9de2906e31ec3311939acf5d311bca50ab44d59e.tar.xz hercules-9de2906e31ec3311939acf5d311bca50ab44d59e.zip |
* Various small cleanups.
- Fixed truncation warnings in @statuspoint, @skillpoint and @str/@agi/@vit/@int/@dex/@luk (since r14436).
- Fixed data type inconsistency in @statuspoint and @skillpoint (since r5762, related r13541).
- Silenced truncation warnings in CR_ACIDDEMONSTRATION damage calculation and cardfix application (since r13700).
- Reformatted unit_blown to make it look cleaner (follow up to r14492).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14493 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/unit.c')
-rw-r--r-- | src/map/unit.c | 82 |
1 files changed, 53 insertions, 29 deletions
diff --git a/src/map/unit.c b/src/map/unit.c index f2dcdc921..05c0bcb16 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -572,46 +572,70 @@ uint8 unit_getdir(struct block_list *bl) // &1 Do not send position update packets. int unit_blown(struct block_list* bl, int dx, int dy, int count, int flag) { - int nx, ny, ret; - struct skill_unit* su = BL_CAST(BL_SKILL, bl); + int nx, ny, result; + struct map_session_data* sd; + struct skill_unit* su = NULL; - ret=path_blownpos(bl->m,bl->x,bl->y,dx,dy,count); - nx = ret>>16; - ny = ret&0xffff; + if(count) + { + sd = BL_CAST(BL_PC, bl); + su = BL_CAST(BL_SKILL, bl); - if (!su) - unit_stop_walking(bl,0); + result = path_blownpos(bl->m, bl->x, bl->y, dx, dy, count); - dx = nx - bl->x; - dy = ny - bl->y; + nx = result>>16; + ny = result&0xffff; - if (!dx && !dy) //Could not knockback. - return 0; + if(!su) + { + unit_stop_walking(bl, 0); + } - map_foreachinmovearea(clif_outsight, bl, AREA_SIZE, dx, dy, bl->type == BL_PC ? BL_ALL : BL_PC, bl); + dx = nx-bl->x; + dy = ny-bl->y; - if(su) - skill_unit_move_unit_group(su->group,bl->m,dx,dy); - else - map_moveblock(bl, nx, ny, gettick()); + if(dx || dy) + { + map_foreachinmovearea(clif_outsight, bl, AREA_SIZE, dx, dy, bl->type == BL_PC ? BL_ALL : BL_PC, bl); - map_foreachinmovearea(clif_insight, bl, AREA_SIZE, -dx, -dy, bl->type == BL_PC ? BL_ALL : BL_PC, bl); + if(su) + { + skill_unit_move_unit_group(su->group, bl->m, dx, dy); + } + else + { + map_moveblock(bl, nx, ny, gettick()); + } - if(!(flag&0x1)) - clif_blown(bl); + map_foreachinmovearea(clif_insight, bl, AREA_SIZE, -dx, -dy, bl->type == BL_PC ? BL_ALL : BL_PC, bl); - if( bl->type == BL_PC ) - { - TBL_PC *sd = (TBL_PC*)bl; - if( sd->touching_id ) - npc_touchnext_areanpc(sd,false); - if( map_getcell(bl->m,bl->x,bl->y,CELL_CHKNPC) ) - npc_touch_areanpc(sd,bl->m,bl->x,bl->y); + if(!(flag&1)) + { + clif_blown(bl); + } + + if(sd) + { + if(sd->touching_id) + { + npc_touchnext_areanpc(sd, false); + } + if(map_getcell(bl->m, bl->x, bl->y, CELL_CHKNPC)) + { + npc_touch_areanpc(sd, bl->m, bl->x, bl->y); + } + else + { + sd->areanpc_id = 0; + } + } + } else - sd->areanpc_id=0; + {// could not knockback + count = 0; + } } - - return count; //Return amount of knocked back cells. + return count; // return amount of knocked back cells } //Warps a unit/ud to a given map/position. |