summaryrefslogtreecommitdiff
path: root/src/map/skill.c
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-06-07 10:22:33 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-06-07 10:22:33 +0000
commitf2ee0402a0a700ea69c12a45fe2cdb6529224f6f (patch)
tree105e551a2b10e658d3b13dc68d586750280f7f86 /src/map/skill.c
parent66ab6386589152a7a509a828a399e83698746911 (diff)
downloadhercules-f2ee0402a0a700ea69c12a45fe2cdb6529224f6f.tar.gz
hercules-f2ee0402a0a700ea69c12a45fe2cdb6529224f6f.tar.bz2
hercules-f2ee0402a0a700ea69c12a45fe2cdb6529224f6f.tar.xz
hercules-f2ee0402a0a700ea69c12a45fe2cdb6529224f6f.zip
Kaite should not work against high-level mobs - bug introduced in r11230 (bugreport:1623).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12767 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/skill.c')
-rw-r--r--src/map/skill.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index c14053e1d..f08fd1f80 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1300,29 +1300,30 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in
}
-//Checks if bl should reflect back a spell.
+//Checks if 'bl' should reflect back a spell cast by 'src'.
//type is the type of magic attack: 0: indirect (aoe), 1: direct (targetted)
-static int skill_magic_reflect(struct block_list *bl, int type)
+static int skill_magic_reflect(struct block_list* src, struct block_list* bl, int type)
{
struct status_change *sc = status_get_sc(bl);
- struct map_session_data *sd;
- sd = BL_CAST(BL_PC, bl);
+ struct map_session_data* sd = BL_CAST(BL_PC, bl);
- if(sd && sd->magic_damage_return && type && rand()%100 < sd->magic_damage_return)
+ // item-based reflection
+ if( sd && sd->magic_damage_return && type && rand()%100 < sd->magic_damage_return )
return 1;
- if(sc && sc->count)
- {
- if(sc->data[SC_MAGICMIRROR] && rand()%100 < sc->data[SC_MAGICMIRROR]->val2)
- return 1;
+ // status-based reflection
+ if( !sc || sc->count == 0 )
+ return 0;
- if(sc->data[SC_KAITE] && (sd || status_get_lv(bl) <= 80))
- { //Works on players or mobs with level under 80.
- clif_specialeffect(bl, 438, AREA);
- if (--sc->data[SC_KAITE]->val2 <= 0)
- status_change_end(bl, SC_KAITE, -1);
- return 1;
- }
+ if( sc->data[SC_MAGICMIRROR] && rand()%100 < sc->data[SC_MAGICMIRROR]->val2 )
+ return 1;
+
+ if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) )
+ {// Kaite only works against non-players if they are low-level.
+ clif_specialeffect(bl, 438, AREA);
+ if( --sc->data[SC_KAITE]->val2 <= 0 )
+ status_change_end(bl, SC_KAITE, -1);
+ return 1;
}
return 0;
@@ -1403,8 +1404,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
}
if (attack_type&BF_MAGIC) {
- if (!(sstatus->mode&MD_BOSS) && (dmg.damage || dmg.damage2) &&
- skill_magic_reflect(bl, src==dsrc))
+ if( !(sstatus->mode&MD_BOSS) && (dmg.damage || dmg.damage2) && skill_magic_reflect(src, bl, src==dsrc) )
{ //Magic reflection, switch caster/target
struct block_list *tbl = bl;
bl = src;