Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2-2 jobs skill rebalance (Part 1) (2018 patch/Renewal) and small skill fixes #3229

Merged
merged 11 commits into from
May 25, 2024
Prev Previous commit
Next Next commit
Rebalance of CR_SHIELDBOOMERANG (Shield Boomerang)
- Damage formula changed
  - Old: (100 + 30 x SkillLevel)% ATK
         Shield weight gives extra flat damage
  - Now: (80 x SkillLevel + Shield Weight + Shield Upgrade x 4)% ATK

From massive skills rebalance (1st/2nd/transclass) (2018.10.31)
guilherme-gm committed May 24, 2024
commit 54c5b36ac3a24e668cdfe92b691395f8239bfc50
33 changes: 29 additions & 4 deletions src/map/battle.c
Original file line number Diff line number Diff line change
@@ -2193,7 +2193,20 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc
skillratio += 20 * skill_lv;
break;
case CR_SHIELDBOOMERANG:
#ifndef RENEWAL
skillratio += 30 * skill_lv;
#else
skillratio += -100 + 80 * skill_lv;
if (sd != NULL) {
short shield_index = sd->equip_index[EQI_HAND_L];

if (shield_index >= 0 && sd->inventory_data[shield_index] != NULL
&& sd->inventory_data[shield_index]->type == IT_ARMOR) {
skillratio += sd->inventory_data[shield_index]->weight / 10; // + <Shield Weight>%
skillratio += sd->status.inventory[shield_index].refine * 4; // + <Shield Upgrade x 4>%
}
}
#endif
break;
case NPC_DARKCROSS:
case CR_HOLYCROSS:
@@ -4779,7 +4792,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
#ifdef RENEWAL
case KN_BOWLINGBASH:
wd.div_ = 2;

// wflag stores the number of affected targets
if (sd != NULL && sd->weapontype == W_2HSWORD) {
if (wflag >= 2 && wflag < 4)
@@ -5280,17 +5293,29 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
case PA_SHIELDCHAIN:
#endif
case CR_SHIELDBOOMERANG:
#ifndef RENEWAL
wd.damage = sstatus->batk;
if (sd) {
if (sd != NULL) {
int damagevalue = 0;
short index = sd->equip_index[EQI_HAND_L];

if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR )
if (index >= 0 && sd->inventory_data[index] != NULL && sd->inventory_data[index]->type == IT_ARMOR)
damagevalue = sd->inventory_data[index]->weight/10;
ATK_ADD(damagevalue);
} else
} else {
ATK_ADD(sstatus->rhw.atk2); //Else use Atk2
}
#else // RENEWAL
if (sd != NULL) {
GET_NORMAL_ATTACK(0, skill_id);
} else {
// @TODO: Does this still applies for Renewal after rebalance?
wd.damage = sstatus->batk;
ATK_ADD(sstatus->rhw.atk2); //Else use Atk2
}
#endif
break;

case HFLI_SBR44: //[orn]
if (src->type == BL_HOM) {
const struct homun_data *hd = BL_UCCAST(BL_HOM, src);