|
@@ -1643,11 +1643,13 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
|
|
|
|
|
|
//Finally, add baseatk
|
|
//Finally, add baseatk
|
|
if(flag&4)
|
|
if(flag&4)
|
|
- damage += status->matk_min;
|
|
|
|
#ifdef RENEWAL
|
|
#ifdef RENEWAL
|
|
- else if(flag&32)
|
|
|
|
damage += status->matk_min + status->batk;
|
|
damage += status->matk_min + status->batk;
|
|
|
|
+#else
|
|
|
|
+ damage += status->matk_min;
|
|
#endif
|
|
#endif
|
|
|
|
+ else if(flag&32)
|
|
|
|
+ damage += status->matk_min;
|
|
else
|
|
else
|
|
damage += status->batk;
|
|
damage += status->batk;
|
|
|
|
|
|
@@ -2591,9 +2593,9 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
|
|
i = (is_attack_critical(wd, src, target, skill_id, skill_lv, false)?1:0)|
|
|
i = (is_attack_critical(wd, src, target, skill_id, skill_lv, false)?1:0)|
|
|
(is_skill_using_arrow(src, skill_id)?2:0)|
|
|
(is_skill_using_arrow(src, skill_id)?2:0)|
|
|
(skill_id == HW_MAGICCRASHER?4:0)|
|
|
(skill_id == HW_MAGICCRASHER?4:0)|
|
|
- (!skill_id && sc && sc->data[SC_CHANGE]?4:0)|
|
|
|
|
(skill_id == MO_EXTREMITYFIST?8:0)|
|
|
(skill_id == MO_EXTREMITYFIST?8:0)|
|
|
- (sc && sc->data[SC_WEAPONPERFECTION]?8:0);
|
|
|
|
|
|
+ (sc && sc->data[SC_WEAPONPERFECTION]?8:0)|
|
|
|
|
+ (!skill_id && sc && sc->data[SC_CHANGE]?32:0);
|
|
if (is_skill_using_arrow(src, skill_id) && sd)
|
|
if (is_skill_using_arrow(src, skill_id) && sd)
|
|
switch(sd->status.weapon) {
|
|
switch(sd->status.weapon) {
|
|
case W_BOW:
|
|
case W_BOW:
|
|
@@ -3218,7 +3220,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
|
//NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech]
|
|
//NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech]
|
|
break;
|
|
break;
|
|
case NC_AXEBOOMERANG:
|
|
case NC_AXEBOOMERANG:
|
|
- skillratio += 60 + 40 * skill_lv;
|
|
|
|
|
|
+ skillratio += (skill_lv * 50) + 250;
|
|
if( sd ) {
|
|
if( sd ) {
|
|
short index = sd->equip_index[EQI_HAND_R];
|
|
short index = sd->equip_index[EQI_HAND_R];
|
|
if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
|
|
if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
|
|
@@ -3226,9 +3228,10 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
|
}
|
|
}
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
break;
|
|
break;
|
|
- case NC_POWERSWING:
|
|
|
|
- skillratio += 80 + 20 * skill_lv + sstatus->str + sstatus->dex;
|
|
|
|
|
|
+ case NC_POWERSWING: // According to current sources, only the str + dex gets modified by level [Akinari]
|
|
|
|
+ skillratio += sstatus->str + sstatus->dex;
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
|
|
+ skillratio += 300 + 100 * skill_lv;
|
|
break;
|
|
break;
|
|
case NC_AXETORNADO:
|
|
case NC_AXETORNADO:
|
|
skillratio += 100 + 100 * skill_lv + sstatus->vit;
|
|
skillratio += 100 + 100 * skill_lv + sstatus->vit;
|
|
@@ -3238,7 +3241,8 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
|
skillratio += 100 * skill_lv;
|
|
skillratio += 100 * skill_lv;
|
|
break;
|
|
break;
|
|
case SC_TRIANGLESHOT:
|
|
case SC_TRIANGLESHOT:
|
|
- skillratio += 270 + 30 * skill_lv;
|
|
|
|
|
|
+ skillratio += ((skill_lv - 1) * (sstatus->agi / 2)) + 300;
|
|
|
|
+ RE_LVL_DMOD(120);
|
|
break;
|
|
break;
|
|
case SC_FEINTBOMB:
|
|
case SC_FEINTBOMB:
|
|
skillratio += (skill_lv + 1) * (sstatus->dex / 2) * (sd?(sd->status.job_level / 10):5);
|
|
skillratio += (skill_lv + 1) * (sstatus->dex / 2) * (sd?(sd->status.job_level / 10):5);
|
|
@@ -3281,16 +3285,15 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
break;
|
|
break;
|
|
case LG_OVERBRAND:
|
|
case LG_OVERBRAND:
|
|
- skillratio = 400 * skill_lv + (pc_checkskill(sd,CR_SPEARQUICKEN) * 30);
|
|
|
|
|
|
+ skillratio = 200 * skill_lv + (pc_checkskill(sd,CR_SPEARQUICKEN) * 50);
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
break;
|
|
break;
|
|
case LG_OVERBRAND_BRANDISH:
|
|
case LG_OVERBRAND_BRANDISH:
|
|
- skillratio = 300 * skill_lv + (2 * (sstatus->str + sstatus->dex) / 3);
|
|
|
|
|
|
+ skillratio = 100 * skill_lv + (sstatus->str + sstatus->dex);
|
|
RE_LVL_DMOD(100);
|
|
RE_LVL_DMOD(100);
|
|
break;
|
|
break;
|
|
- case LG_OVERBRAND_PLUSATK:
|
|
|
|
- skillratio = 150 * skill_lv;
|
|
|
|
- RE_LVL_DMOD(100);
|
|
|
|
|
|
+ case LG_OVERBRAND_PLUSATK: // Only Piercing and Swing damage get RE_LVL_DMOD bonus damage
|
|
|
|
+ skillratio = (100 * skill_lv) + rnd()%90 + 10;
|
|
break;
|
|
break;
|
|
case LG_RAYOFGENESIS:
|
|
case LG_RAYOFGENESIS:
|
|
skillratio = 300 + 300 * skill_lv;
|
|
skillratio = 300 + 300 * skill_lv;
|
|
@@ -4316,7 +4319,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef RENEWAL
|
|
#ifdef RENEWAL
|
|
|
|
+ // In Renewal we only cardfix to the weapon and equip ATK
|
|
if (sd) { //monsters, homuns and pets have their damage computed directly
|
|
if (sd) { //monsters, homuns and pets have their damage computed directly
|
|
|
|
+ //Card Fix for attacker (sd), 2 is added to the "left" flag meaning "attacker cards only"
|
|
|
|
+ wd.weaponAtk += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.weaponAtk, 2, wd.flag);
|
|
|
|
+ wd.equipAtk += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.equipAtk, 2, wd.flag);
|
|
|
|
+ if( is_attack_left_handed(src, skill_id )) {
|
|
|
|
+ wd.weaponAtk2 += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.weaponAtk2, 3, wd.flag);
|
|
|
|
+ wd.equipAtk2 += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.equipAtk2, 3, wd.flag);
|
|
|
|
+ }
|
|
wd.damage = wd.statusAtk + wd.weaponAtk + wd.equipAtk + wd.masteryAtk;
|
|
wd.damage = wd.statusAtk + wd.weaponAtk + wd.equipAtk + wd.masteryAtk;
|
|
wd.damage2 = wd.statusAtk2 + wd.weaponAtk2 + wd.equipAtk2 + wd.masteryAtk2;
|
|
wd.damage2 = wd.statusAtk2 + wd.weaponAtk2 + wd.equipAtk2 + wd.masteryAtk2;
|
|
}
|
|
}
|
|
@@ -4365,10 +4376,12 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|
ATK_ADD(wd.damage, wd.damage2, 10*sd->status.inventory[index].refine);
|
|
ATK_ADD(wd.damage, wd.damage2, 10*sd->status.inventory[index].refine);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifndef RENEWAL
|
|
//Card Fix for attacker (sd), 2 is added to the "left" flag meaning "attacker cards only"
|
|
//Card Fix for attacker (sd), 2 is added to the "left" flag meaning "attacker cards only"
|
|
wd.damage += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.damage, 2, wd.flag);
|
|
wd.damage += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.damage, 2, wd.flag);
|
|
if( is_attack_left_handed(src, skill_id ))
|
|
if( is_attack_left_handed(src, skill_id ))
|
|
wd.damage2 += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.damage2, 3, wd.flag);
|
|
wd.damage2 += battle_calc_cardfix(BF_WEAPON, src, target, battle_skill_get_damage_properties(skill_id, wd.miscflag), right_element, left_element, wd.damage2, 3, wd.flag);
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
|
|
|
|
// final attack bonuses that aren't affected by cards
|
|
// final attack bonuses that aren't affected by cards
|