|
@@ -1920,23 +1920,6 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (sc->getSCE(SC_RULEBREAK)) {
|
|
|
|
- switch (skill_id) {
|
|
|
|
- case HN_METEOR_STORM_BUSTER:
|
|
|
|
- case HN_GROUND_GRAVITATION:
|
|
|
|
- damage += damage / 2;
|
|
|
|
- break;
|
|
|
|
- case HN_JUPITEL_THUNDER_STORM:
|
|
|
|
- case HN_JACK_FROST_NOVA:
|
|
|
|
- case HN_HELLS_DRIVE:
|
|
|
|
- damage += damage * 70 / 100;
|
|
|
|
- break;
|
|
|
|
- case HN_NAPALM_VULCAN_STRIKE:
|
|
|
|
- damage += damage * 40 / 100;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if ((sce = sc->getSCE(SC_BLOODLUST)) && flag & BF_WEAPON && damage > 0 && rnd_chance(sce->val3, 100))
|
|
if ((sce = sc->getSCE(SC_BLOODLUST)) && flag & BF_WEAPON && damage > 0 && rnd_chance(sce->val3, 100))
|
|
status_heal(src, damage * sce->val4 / 100, 0, 1);
|
|
status_heal(src, damage * sce->val4 / 100, 0, 1);
|
|
|
|
|
|
@@ -8699,53 +8682,95 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|
case HN_NAPALM_VULCAN_STRIKE:
|
|
case HN_NAPALM_VULCAN_STRIKE:
|
|
skillratio += -100 + 350 + 650 * skill_lv;
|
|
skillratio += -100 + 350 + 650 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
|
|
+ skillratio += 3 * sstatus->spl;
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_NAPALM_VULCAN_STRIKE by (2x skill level)%
|
|
|
|
+ skillratio += skillratio * 2 * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 40 / 100;
|
|
break;
|
|
break;
|
|
case HN_JUPITEL_THUNDER_STORM:
|
|
case HN_JUPITEL_THUNDER_STORM:
|
|
skillratio += -100 + 1800 * skill_lv;
|
|
skillratio += -100 + 1800 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
|
|
+ skillratio += 3 * sstatus->spl;
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_JUPITEL_THUNDER_STORM by (skill level)%
|
|
|
|
+ skillratio += skillratio * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 70 / 100;
|
|
break;
|
|
break;
|
|
case HN_HELLS_DRIVE:
|
|
case HN_HELLS_DRIVE:
|
|
skillratio += -100 + 1700 + 900 * skill_lv;
|
|
skillratio += -100 + 1700 + 900 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
|
|
+ skillratio += 3 * sstatus->spl;
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_HELLS_DRIVE by (skill level)%
|
|
|
|
+ skillratio += skillratio * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 70 / 100;
|
|
break;
|
|
break;
|
|
case HN_GROUND_GRAVITATION:
|
|
case HN_GROUND_GRAVITATION:
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
|
|
+ // Initial damage
|
|
skillratio += -100 + 3000 + 1500 * skill_lv;
|
|
skillratio += -100 + 3000 + 1500 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 4 * skill_lv;
|
|
|
|
+ skillratio += 5 * sstatus->spl;
|
|
ad.div_ = -2;
|
|
ad.div_ = -2;
|
|
} else {
|
|
} else {
|
|
|
|
+ // Gravitational field damage
|
|
skillratio += -100 + 800 + 700 * skill_lv;
|
|
skillratio += -100 + 800 + 700 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 2 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 2 * skill_lv;
|
|
|
|
+ skillratio += 2 * sstatus->spl;
|
|
}
|
|
}
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_GROUND_GRAVITATION (gravity field damage) by (skill level)%
|
|
|
|
+ if (!(mflag & SKILL_ALTDMG_FLAG))
|
|
|
|
+ skillratio += skillratio * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 50 / 100;
|
|
break;
|
|
break;
|
|
case HN_JACK_FROST_NOVA:
|
|
case HN_JACK_FROST_NOVA:
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
|
|
+ // Initial damage
|
|
skillratio += -100 + 200 * skill_lv;
|
|
skillratio += -100 + 200 * skill_lv;
|
|
|
|
+ skillratio += 2 * sstatus->spl;
|
|
|
|
+ ad.div_ = 1; // 1 hit
|
|
} else {
|
|
} else {
|
|
|
|
+ // Explosion damage
|
|
skillratio += -100 + 400 + 500 * skill_lv;
|
|
skillratio += -100 + 400 + 500 * skill_lv;
|
|
|
|
+ skillratio += 4 * sstatus->spl;
|
|
}
|
|
}
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 3 * skill_lv;
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_JACK_FROST_NOVA (explosion damage) by (skill level)%
|
|
|
|
+ if (!(mflag & SKILL_ALTDMG_FLAG))
|
|
|
|
+ skillratio += skillratio * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 70 / 100;
|
|
break;
|
|
break;
|
|
case HN_METEOR_STORM_BUSTER:
|
|
case HN_METEOR_STORM_BUSTER:
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
if (mflag & SKILL_ALTDMG_FLAG) {
|
|
- skillratio += -100 + 300 + 160 * skill_lv * 2;
|
|
|
|
|
|
+ // Fall damage
|
|
|
|
+ skillratio += -100 + 300 + 320 * skill_lv;
|
|
ad.div_ = -3;
|
|
ad.div_ = -3;
|
|
} else {
|
|
} else {
|
|
|
|
+ // Explosion damage
|
|
skillratio += -100 + 450 + 160 * skill_lv;
|
|
skillratio += -100 + 450 + 160 * skill_lv;
|
|
}
|
|
}
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 5 * skill_lv;
|
|
skillratio += pc_checkskill(sd, HN_SELFSTUDY_SOCERY) * 5 * skill_lv;
|
|
- skillratio += 5 * sstatus->spl;
|
|
|
|
|
|
+ skillratio += 3 * sstatus->spl;
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ // After RE_LVL_DMOD calculation, HN_SELFSTUDY_SOCERY amplifies the skill ratio of HN_METEOR_STORM_BUSTER (fall damage) by (skill level)%
|
|
|
|
+ if (mflag & SKILL_ALTDMG_FLAG)
|
|
|
|
+ skillratio += skillratio * pc_checkskill(sd, HN_SELFSTUDY_SOCERY) / 100;
|
|
|
|
+ // SC_RULEBREAK increases the skill ratio after HN_SELFSTUDY_SOCERY
|
|
|
|
+ if (sc && sc->getSCE(SC_RULEBREAK))
|
|
|
|
+ skillratio += skillratio * 50 / 100;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|