Fixed bugreport:5605 Spell Fist should now work properly. Also Added missing Elemental SC damage boosts
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15920 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
caafbf2417
commit
3c00ee29ae
@ -3202,17 +3202,67 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
if (battle_check_undead(tstatus->race,tstatus->def_ele))
|
if (battle_check_undead(tstatus->race,tstatus->def_ele))
|
||||||
skillratio += 5*skill_lv;
|
skillratio += 5*skill_lv;
|
||||||
break;
|
break;
|
||||||
case MG_FIREWALL:
|
case MG_FIREWALL: {
|
||||||
skillratio -= 50;
|
struct status_change *sc = status_get_sc(src);
|
||||||
|
skillratio -= 50;
|
||||||
|
if( sc && sc->data[SC_PYROTECHNIC_OPTION] )
|
||||||
|
skillratio += skillratio * sc->data[SC_PYROTECHNIC_OPTION]->val3 / 100;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
/**
|
case MG_COLDBOLT: {
|
||||||
* in Renewal Thunder Storm boost is 100% (in pre-re, 80%)
|
struct status_change *sc = status_get_sc(src);
|
||||||
**/
|
if ( sc && sc->count ) {
|
||||||
#ifndef RENEWAL
|
if ( sc->data[SC_SPELLFIST] && (!sd || !sd->state.autocast) ) {
|
||||||
case MG_THUNDERSTORM:
|
skillratio += (sc->data[SC_SPELLFIST]->val4 * 100) + (sc->data[SC_SPELLFIST]->val2 * 100) - 100;// val4 = used bolt level, val2 = used spellfist level. [Rytech]
|
||||||
skillratio -= 20;
|
ad.div_ = 1;// ad mods, to make it work similar to regular hits [Xazax]
|
||||||
|
ad.flag = BF_WEAPON|BF_SHORT;
|
||||||
|
ad.type = 0;
|
||||||
|
}
|
||||||
|
if( sc->data[SC_AQUAPLAY_OPTION] )
|
||||||
|
skillratio += skillratio * sc->data[SC_AQUAPLAY_OPTION]->val3 / 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MG_FIREBOLT: {
|
||||||
|
struct status_change *sc = status_get_sc(src);
|
||||||
|
if ( sc && sc->count ) {
|
||||||
|
if ( sc->data[SC_SPELLFIST] && (!sd || !sd->state.autocast) ) {
|
||||||
|
skillratio += (sc->data[SC_SPELLFIST]->val4 * 100) + (sc->data[SC_SPELLFIST]->val2 * 100) - 100;
|
||||||
|
ad.div_ = 1;
|
||||||
|
ad.flag = BF_WEAPON|BF_SHORT;
|
||||||
|
ad.type = 0;
|
||||||
|
}
|
||||||
|
if( sc->data[SC_PYROTECHNIC_OPTION] )
|
||||||
|
skillratio += skillratio * sc->data[SC_PYROTECHNIC_OPTION]->val3 / 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MG_LIGHTNINGBOLT: {
|
||||||
|
struct status_change *sc = status_get_sc(src);
|
||||||
|
if ( sc && sc->count ) {
|
||||||
|
if ( sc->data[SC_SPELLFIST] && (!sd || !sd->state.autocast) ) {
|
||||||
|
skillratio += (sc->data[SC_SPELLFIST]->val4 * 100) + (sc->data[SC_SPELLFIST]->val2 * 100) - 100;
|
||||||
|
ad.div_ = 1;
|
||||||
|
ad.flag = BF_WEAPON|BF_SHORT;
|
||||||
|
ad.type = 0;
|
||||||
|
}
|
||||||
|
if( sc->data[SC_GUST_OPTION] )
|
||||||
|
skillratio += skillratio * sc->data[SC_GUST_OPTION]->val2 / 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MG_THUNDERSTORM: {
|
||||||
|
struct status_change *sc = status_get_sc(src);
|
||||||
|
/**
|
||||||
|
* in Renewal Thunder Storm boost is 100% (in pre-re, 80%)
|
||||||
|
**/
|
||||||
|
#ifndef RENEWAL
|
||||||
|
skillratio -= 20;
|
||||||
|
#endif
|
||||||
|
if( sc && sc->data[SC_GUST_OPTION] )
|
||||||
|
skillratio += skillratio * sc->data[SC_GUST_OPTION]->val2 / 100;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
case MG_FROSTDIVER:
|
case MG_FROSTDIVER:
|
||||||
skillratio += 10*skill_lv;
|
skillratio += 10*skill_lv;
|
||||||
break;
|
break;
|
||||||
@ -4285,11 +4335,17 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
|
|||||||
|
|
||||||
wd = battle_calc_attack(BF_WEAPON, src, target, 0, 0, flag);
|
wd = battle_calc_attack(BF_WEAPON, src, target, 0, 0, flag);
|
||||||
|
|
||||||
if(sc) {
|
if( sc && sc->count ) {
|
||||||
if (sc->data[SC_EXEEDBREAK]) {
|
if (sc->data[SC_EXEEDBREAK]) {
|
||||||
wd.damage = wd.damage * sc->data[SC_EXEEDBREAK]->val1 / 100;
|
wd.damage = wd.damage * sc->data[SC_EXEEDBREAK]->val1 / 100;
|
||||||
status_change_end(src, SC_EXEEDBREAK, INVALID_TIMER);
|
status_change_end(src, SC_EXEEDBREAK, INVALID_TIMER);
|
||||||
}
|
}
|
||||||
|
if( sc->data[SC_SPELLFIST] ) {
|
||||||
|
if( --(sc->data[SC_SPELLFIST]->val1) >= 0 )
|
||||||
|
wd = battle_calc_attack(BF_MAGIC,src,target,sc->data[SC_SPELLFIST]->val3,sc->data[SC_SPELLFIST]->val4,flag);
|
||||||
|
else
|
||||||
|
status_change_end(src,SC_SPELLFIST,-1);
|
||||||
|
}
|
||||||
if( sc->data[SC_GIANTGROWTH] && (wd.flag&BF_SHORT) && rand()%100 < sc->data[SC_GIANTGROWTH]->val2 )
|
if( sc->data[SC_GIANTGROWTH] && (wd.flag&BF_SHORT) && rand()%100 < sc->data[SC_GIANTGROWTH]->val2 )
|
||||||
wd.damage *= 3; // Triple Damage
|
wd.damage *= 3; // Triple Damage
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user