diff options
author | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-05-02 02:57:30 +0000 |
---|---|---|
committer | shennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-05-02 02:57:30 +0000 |
commit | 086c382f4864497137a5d0a450918514eb1b9130 (patch) | |
tree | 58e055bb39b338cbc9b6e69a26f8b236180f089d /src/map/unit.c | |
parent | 18f9f28313b26c159172fa05204adb6815f81161 (diff) | |
download | hercules-086c382f4864497137a5d0a450918514eb1b9130.tar.gz hercules-086c382f4864497137a5d0a450918514eb1b9130.tar.bz2 hercules-086c382f4864497137a5d0a450918514eb1b9130.tar.xz hercules-086c382f4864497137a5d0a450918514eb1b9130.zip |
Fixed bugreport:5502 Fixed bug with character moving to attack target (normal attack) and stopping at attackable range without attacking (bow-bug only). apparently the client doesn't care if its a bow anymore. also applied some of my curly brace love.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16034 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/unit.c')
-rw-r--r-- | src/map/unit.c | 48 |
1 files changed, 15 insertions, 33 deletions
diff --git a/src/map/unit.c b/src/map/unit.c index 51bf92020..fb613f8a0 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1154,20 +1154,16 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh //Check range when not using skill on yourself or is a combo-skill during attack //(these are supposed to always have the same range as your attack) - if( src->id != target_id && (!temp || ud->attacktimer == INVALID_TIMER) ) - { - if( skill_get_state(ud->skillid) == ST_MOVE_ENABLE ) - { + if( src->id != target_id && (!temp || ud->attacktimer == INVALID_TIMER) ) { + if( skill_get_state(ud->skillid) == ST_MOVE_ENABLE ) { if( !unit_can_reach_bl(src, target, skill_get_range2(src, skill_num,skill_lv) + 1, 1, NULL, NULL) ) return 0; // Walk-path check failed. - } - else if( src->type == BL_MER && skill_num == MA_REMOVETRAP ) - { + } else if( src->type == BL_MER && skill_num == MA_REMOVETRAP ) { if( !battle_check_range(battle_get_master(src), target, skill_get_range2(src, skill_num, skill_lv) + 1) ) return 0; // Aegis calc remove trap based on Master position, ignoring mercenary O.O - } - else if( !battle_check_range(src, target, skill_get_range2(src, skill_num,skill_lv) + (skill_num == RG_CLOSECONFINE?0:2)) ) + } else if( !battle_check_range(src, target, skill_get_range2(src, skill_num,skill_lv) + (skill_num == RG_CLOSECONFINE?0:2)) ) { return 0; // Arrow-path check failed. + } } if (!temp) //Stop attack on non-combo skills [Skotlex] @@ -1514,33 +1510,26 @@ int unit_attack(struct block_list *src,int target_id,int continuous) nullpo_ret(ud = unit_bl2ud(src)); target = map_id2bl(target_id); - if( target==NULL || status_isdead(target) ) - { + if( target==NULL || status_isdead(target) ) { unit_unattackable(src); return 1; } - if( src->type == BL_PC ) - { + if( src->type == BL_PC ) { TBL_PC* sd = (TBL_PC*)src; - if( target->type == BL_NPC ) - { // monster npcs [Valaris] + if( target->type == BL_NPC ) { // monster npcs [Valaris] npc_click(sd,(TBL_NPC*)target); // submitted by leinsirk10 [Celest] return 0; } - if( pc_is90overweight(sd) || pc_isridingwug(sd) ) - { // overweight or mounted on warg - stop attacking + if( pc_is90overweight(sd) || pc_isridingwug(sd) ) { // overweight or mounted on warg - stop attacking unit_stop_attack(src); return 0; } } - - if( battle_check_target(src,target,BCT_ENEMY) <= 0 || !status_check_skilluse(src, target, 0, 0) ) - { + if( battle_check_target(src,target,BCT_ENEMY) <= 0 || !status_check_skilluse(src, target, 0, 0) ) { unit_unattackable(src); return 1; } - ud->state.attack_continue = continuous; unit_set_target(ud, target_id); @@ -1753,32 +1742,25 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t } sstatus = status_get_status_data(src); - range = sstatus->rhw.range; - - if( !sd || sd->status.weapon != W_BOW ) - range++; //Dunno why everyone but bows gets this extra range... + range = sstatus->rhw.range + 1; + if( unit_is_walking(target) ) range++; //Extra range when chasing - - if( !check_distance_bl(src,target,range) ) - { //Chase if required. + if( !check_distance_bl(src,target,range) ) { //Chase if required. if(sd) clif_movetoattack(sd,target); else if(ud->state.attack_continue) unit_walktobl(src,target,ud->chaserange,ud->state.walk_easy|2); return 1; } - if( !battle_check_range(src,target,range) ) - { + if( !battle_check_range(src,target,range) ) { //Within range, but no direct line of attack - if( ud->state.attack_continue ) - { + if( ud->state.attack_continue ) { if(ud->chaserange > 2) ud->chaserange-=2; unit_walktobl(src,target,ud->chaserange,ud->state.walk_easy|2); } return 1; } - //Sync packet only for players. //Non-players use the sync packet on the walk timer. [Skotlex] if (tid == INVALID_TIMER && sd) clif_fixpos(src); |