From 7ec5611976e5b04a947cca187bbd33431d2df52c Mon Sep 17 00:00:00 2001 From: skotlex Date: Mon, 22 Jan 2007 14:35:28 +0000 Subject: - Reverted the battle_calc_return_damage code as the previous one was correct, ninja self-targetted skills CAN be reflected. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9689 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 7 +++---- src/map/battle.h | 2 +- src/map/skill.c | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index b6dba1939..951dbcc5c 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2790,7 +2790,7 @@ struct Damage battle_calc_attack( int attack_type, return d; } -int battle_calc_return_damage(struct block_list *bl, int skill, int *damage, int flag) { +int battle_calc_return_damage(struct block_list *bl, int *damage, int flag) { struct map_session_data *sd=NULL; struct status_change *sc; int rdamage = 0; @@ -2798,7 +2798,7 @@ int battle_calc_return_damage(struct block_list *bl, int skill, int *damage, int BL_CAST(BL_PC, bl, sd); sc = status_get_sc(bl); - if(flag&BF_WEAPON && skill != WS_CARTTERMINATION) { // FIXME(?): Quick and dirty check, but HSCR does bypass Shield Reflect... so I make it bypass the whole reflect thing [DracoRPG] + if(flag&BF_WEAPON) { //Bounces back part of the damage. if (flag & BF_SHORT) { if (sd && sd->short_weapon_damage_return) @@ -2823,7 +2823,6 @@ int battle_calc_return_damage(struct block_list *bl, int skill, int *damage, int if(flag&BF_MAGIC) { if(sd && sd->magic_damage_return && - !(skill_get_inf(skill)&(INF_GROUND_SKILL|INF_SELF_SKILL)) && rand()%100 < sd->magic_damage_return) { //Bounces back full damage, you take none. rdamage = *damage; @@ -3011,7 +3010,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, damage = wd.damage + wd.damage2; if (damage > 0 && src != target) { - rdamage = battle_calc_return_damage(target, 0, &damage, wd.flag); + rdamage = battle_calc_return_damage(target, &damage, wd.flag); if (rdamage > 0) { rdelay = clif_damage(src, src, tick, wd.amotion, sstatus->dmotion, rdamage, 1, 4, 0); //Use Reflect Shield to signal this kind of skill trigger. [Skotlex] diff --git a/src/map/battle.h b/src/map/battle.h index 9ae06005e..c38e9b20b 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -25,7 +25,7 @@ struct block_list; struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag); -int battle_calc_return_damage(struct block_list *bl, int skill, int *damage, int flag); +int battle_calc_return_damage(struct block_list *bl, int *damage, int flag); void battle_drain(struct map_session_data *sd, struct block_list *tbl, int rdamage, int ldamage, int race, int boss); diff --git a/src/map/skill.c b/src/map/skill.c index 4ead739b4..d79d9b4ae 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1930,8 +1930,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds damage = dmg.damage + dmg.damage2; - if (damage > 0 && src != bl && src == dsrc) - rdamage = battle_calc_return_damage(bl, skillid, &damage, dmg.flag); + if (damage > 0 && src != bl && src == dsrc && skillid != WS_CARTTERMINATION) // FIXME(?): Quick and dirty check, but HSCR does bypass Shield Reflect... so I make it bypass the whole reflect thing [DracoRPG] + rdamage = battle_calc_return_damage(bl, &damage, dmg.flag); //Skill hit type type=(skillid==0)?5:skill_get_hit(skillid); -- cgit v1.2.3-60-g2f50