From cd5cecdf0ffb4b4099f3120bd48f6cddbd2db527 Mon Sep 17 00:00:00 2001 From: skotlex Date: Wed, 23 Aug 2006 00:57:21 +0000 Subject: [PATCH] - Adjusted skill_attack_area so that skill_area_temp[1] holds the ID of the target, this way the skill animation will correctly display for the targetted mob, and not the others who get caught in the splash area. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8447 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ src/map/skill.c | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 971260e914..78fbfad07b 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,8 @@ 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. 2006/08/22 + * More fixes to the splash code. Kamaitachi and Sharpshooting should + display correctly now. [Skotlex] * Fixed a crash on the mobspawn script command. [Skotlex] * Made SC_FLEET increase batk as well as watk. [Skotlex] * Fixed gcc warning [Toms] diff --git a/src/map/skill.c b/src/map/skill.c index 2441a9e29e..974d3c2aef 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2778,9 +2778,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case TK_STORMKICK: // Taekwon kicks [Dralnu] clif_skill_nodamage(src,bl,skillid,skilllv,1); + skill_area_temp[1] = 0; map_foreachinrange(skill_attack_area, src, skill_get_splash(skillid, skilllv), BL_CHAR, - BF_WEAPON, src, src, skillid, skilllv, tick, flag|SD_ANIMATION, BCT_ENEMY); + BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY); break; case TK_JUMPKICK: @@ -2793,10 +2794,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case NJ_KAMAITACHI: //It won't shoot through walls since on castend there has to be a direct //line of sight between caster and target. - clif_skill_nodamage(src,bl,skillid,skilllv,1); + skill_area_temp[1] = bl->id; map_foreachinpath (skill_attack_area,src->m,src->x,src->y,bl->x,bl->y, skill_get_splash(skillid, skilllv),BL_CHAR, - skill_get_type(skillid),src,src,skillid,skilllv,tick,flag|SD_ANIMATION,BCT_ENEMY); + skill_get_type(skillid),src,src,skillid,skilllv,tick,flag,BCT_ENEMY); break; case MO_INVESTIGATE: @@ -4036,9 +4037,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case NJ_RAIGEKISAI: case WZ_FROSTNOVA: clif_skill_nodamage(src,bl,skillid,skilllv,1); + skill_area_temp[1] = 0; map_foreachinrange(skill_attack_area, src, skill_get_splash(skillid, skilllv), BL_CHAR, - BF_MAGIC, src, src, skillid, skilllv, tick, flag|SD_ANIMATION, BCT_ENEMY); + BF_MAGIC, src, src, skillid, skilllv, tick, flag, BCT_ENEMY); break; case HVAN_EXPLOSION: //[orn] @@ -7062,6 +7064,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns break; case UNT_FIREPILLAR_ACTIVE: + skill_area_temp[1] = 0; map_foreachinrange(skill_attack_area,bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, BF_MAGIC,ss,&src->bl,sg->skill_id,sg->skill_lv,tick,0,BCT_ENEMY); // area damage [Celest] @@ -9172,11 +9175,15 @@ int skill_attack_area (struct block_list *bl, va_list ap) flag=va_arg(ap,int); type=va_arg(ap,int); + if (skill_area_temp[1] == bl->id) //This is the target of the skill, do a full attack and skip target checks. + return skill_attack(atk_type,src,dsrc,bl,skillid,skilllv,tick,flag); + if(battle_check_target(dsrc,bl,type) <= 0 || !status_check_skilluse(NULL, bl, skillid, 2)) return 0; - - return skill_attack(atk_type,src,dsrc,bl,skillid,skilllv,tick,flag); + + //Area-splash, disable skill animation. + return skill_attack(atk_type,src,dsrc,bl,skillid,skilllv,tick,flag|SD_ANIMATION); } /*========================================== *