Do you remember a long time ago in eAthena when Magic Rod used to only activate when you are being bolted? Do you miss this behavior?
Well, now you can have it that way. Here's how!
Step 1: Go to src\map\skill.c and find the following lines:
case SA_MAGICROD:
clif->skill_nodamage(src,src,SA_MAGICROD,skill_lv,1);
sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv));
break;
Comment the second line so it looks like this:
case SA_MAGICROD:
//clif->skill_nodamage(src,src,SA_MAGICROD,skill_lv,1);
sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv));
break;
Step 2: Still in skill.c, find the following code:
#endif /* MAGIC_REFLECTION_TYPE */
}
if(sc && sc->data[SC_MAGICROD] && src == dsrc) {
int sp = skill->get_sp(skill_id,skill_lv);
dmg.damage = dmg.damage2 = 0;
dmg.dmg_lv = ATK_MISS; //This will prevent skill additional effect from taking effect. [Skotlex]
sp = sp * sc->data[SC_MAGICROD]->val2 / 100;
if(skill_id == WZ_WATERBALL && skill_lv > 1)
sp = sp/((skill_lv|1)*(skill_lv|1)); //Estimate SP cost of a single water-ball
status->heal(bl, 0, sp, 2);
}
Add the following line below status->heal(bl, 0, sp, 2); so it looks like this:
#endif /* MAGIC_REFLECTION_TYPE */
}
if(sc && sc->data[SC_MAGICROD] && src == dsrc) {
int sp = skill->get_sp(skill_id,skill_lv);
dmg.damage = dmg.damage2 = 0;
dmg.dmg_lv = ATK_MISS; //This will prevent skill additional effect from taking effect. [Skotlex]
sp = sp * sc->data[SC_MAGICROD]->val2 / 100;
if(skill_id == WZ_WATERBALL && skill_lv > 1)
sp = sp/((skill_lv|1)*(skill_lv|1)); //Estimate SP cost of a single water-ball
status->heal(bl, 0, sp, 2);
clif->skill_nodamage(bl, bl, SA_MAGICROD, sc->data[SC_MAGICROD]->val1, 1);
}
Ta-da! All done. Compile your server and you're good to go. Magic rod now works like the old way!
Pst to devs, maybe we can have configs for stuff like this?