Compare commits
2 Commits
master
...
update/4th
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2f6c4d20de | ||
![]() |
c8db7d3aa1 |
File diff suppressed because it is too large
Load Diff
@ -7764,7 +7764,8 @@ Body:
|
|||||||
Icon: EFST_ATTACK_STANCE
|
Icon: EFST_ATTACK_STANCE
|
||||||
DurationLookup: IG_ATTACK_STANCE
|
DurationLookup: IG_ATTACK_STANCE
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Watk: true
|
Patk: true
|
||||||
|
Smatk: true
|
||||||
Def: true
|
Def: true
|
||||||
Flags:
|
Flags:
|
||||||
NoRemoveOnDead: true
|
NoRemoveOnDead: true
|
||||||
@ -8109,3 +8110,11 @@ Body:
|
|||||||
All: true
|
All: true
|
||||||
Flags:
|
Flags:
|
||||||
RemoveElementalOption: true
|
RemoveElementalOption: true
|
||||||
|
- Status: Rush_Quake1
|
||||||
|
Icon: EFST_RUSH_QUAKE1
|
||||||
|
DurationLookup: MT_RUSH_QUAKE
|
||||||
|
Flags:
|
||||||
|
BlEffect: true
|
||||||
|
- Status: Rush_Quake2
|
||||||
|
Icon: EFST_RUSH_QUAKE2
|
||||||
|
DurationLookup: MT_RUSH_QUAKE
|
||||||
|
@ -693,8 +693,6 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
|||||||
}
|
}
|
||||||
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100;
|
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100;
|
||||||
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100;
|
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100;
|
||||||
if (sd->status.weapon == W_2HSTAFF)// 2-Handed Staff Mastery
|
|
||||||
cardfix = cardfix * (100 + pc_checkskill(sd, AG_TWOHANDSTAFF)) / 100;
|
|
||||||
for (const auto &it : sd->add_mdmg) {
|
for (const auto &it : sd->add_mdmg) {
|
||||||
if (it.id == t_class) {
|
if (it.id == t_class) {
|
||||||
cardfix = cardfix * (100 + it.val) / 100;
|
cardfix = cardfix * (100 + it.val) / 100;
|
||||||
@ -1537,6 +1535,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
|||||||
if (sc->data[SC_SHADOW_SCAR])// Need official adjustment for this too.
|
if (sc->data[SC_SHADOW_SCAR])// Need official adjustment for this too.
|
||||||
damage += damage * (10 * sc->data[SC_SHADOW_SCAR]->val1) / 100;
|
damage += damage * (10 * sc->data[SC_SHADOW_SCAR]->val1) / 100;
|
||||||
|
|
||||||
|
if (sc->data[SC_RUSH_QUAKE1] && (flag & BF_WEAPONMASK) == BF_WEAPON)
|
||||||
|
damage += damage * 50 / 100;
|
||||||
|
|
||||||
// Damage reductions
|
// Damage reductions
|
||||||
// Assumptio increases DEF on RE mode, otherwise gives a reduction on the final damage. [Igniz]
|
// Assumptio increases DEF on RE mode, otherwise gives a reduction on the final damage. [Igniz]
|
||||||
#ifndef RENEWAL
|
#ifndef RENEWAL
|
||||||
@ -1805,6 +1806,18 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
|||||||
pc_addsoulball(tsd, 5 + 3 * pc_checkskill(tsd, SP_SOULENERGY));
|
pc_addsoulball(tsd, 5 + 3 * pc_checkskill(tsd, SP_SOULENERGY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sc->data[SC_RUSH_QUAKE2] && (flag & BF_WEAPONMASK) == BF_WEAPON)
|
||||||
|
damage += damage * (5 * sc->data[SC_RUSH_QUAKE2]->val1) / 100;
|
||||||
|
|
||||||
|
if (sc->data[SC_SHADOW_EXCEED]) {
|
||||||
|
switch (skill_id) {
|
||||||
|
case SHC_ETERNAL_SLASH:
|
||||||
|
case SHC_SAVAGE_IMPACT:
|
||||||
|
damage += damage / 4; // !TODO: What's the damage increase?
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} //End of caster SC_ check
|
} //End of caster SC_ check
|
||||||
|
|
||||||
//PK damage rates
|
//PK damage rates
|
||||||
@ -2446,7 +2459,6 @@ static int battle_range_type(struct block_list *src, struct block_list *target,
|
|||||||
// Renewal changes to ranged physical damage
|
// Renewal changes to ranged physical damage
|
||||||
#endif
|
#endif
|
||||||
case SR_RAMPAGEBLASTER:
|
case SR_RAMPAGEBLASTER:
|
||||||
case DK_HACKANDSLASHER_ATK: // 2 cell cast range.
|
|
||||||
return BF_LONG;
|
return BF_LONG;
|
||||||
case NJ_KIRIKAGE: // Cast range mimics NJ_SHADOWJUMP but damage is considered melee
|
case NJ_KIRIKAGE: // Cast range mimics NJ_SHADOWJUMP but damage is considered melee
|
||||||
case GC_CROSSIMPACT: // Cast range is 7 cells and player jumps to target but skill is considered melee
|
case GC_CROSSIMPACT: // Cast range is 7 cells and player jumps to target but skill is considered melee
|
||||||
@ -2463,6 +2475,17 @@ static int battle_range_type(struct block_list *src, struct block_list *target,
|
|||||||
if (sd && (sd->status.weapon == W_MACE || sd->status.weapon == W_2HMACE))
|
if (sd && (sd->status.weapon == W_MACE || sd->status.weapon == W_2HMACE))
|
||||||
return BF_LONG;
|
return BF_LONG;
|
||||||
}
|
}
|
||||||
|
case DK_HACKANDSLASHER:
|
||||||
|
case DK_HACKANDSLASHER_ATK: { // Range depends on weapon type.
|
||||||
|
map_session_data *sd = BL_CAST(BL_PC, src);
|
||||||
|
|
||||||
|
if (sd) {
|
||||||
|
if (sd->status.weapon == W_2HSWORD)
|
||||||
|
return BF_SHORT;
|
||||||
|
if (sd->status.weapon == W_2HSPEAR)
|
||||||
|
return BF_LONG;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Skill Range Criteria
|
//Skill Range Criteria
|
||||||
@ -2799,7 +2822,6 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
|
|||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
case ASC_BREAKER:
|
case ASC_BREAKER:
|
||||||
#endif
|
#endif
|
||||||
case LG_CANNONSPEAR:
|
|
||||||
case GC_CROSSIMPACT:
|
case GC_CROSSIMPACT:
|
||||||
case SHC_SAVAGE_IMPACT:
|
case SHC_SAVAGE_IMPACT:
|
||||||
case SHC_ETERNAL_SLASH:
|
case SHC_ETERNAL_SLASH:
|
||||||
@ -3012,7 +3034,7 @@ static bool is_attack_hitting(struct Damage* wd, struct block_list *src, struct
|
|||||||
hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
|
hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
|
||||||
break;
|
break;
|
||||||
case LG_BANISHINGPOINT:
|
case LG_BANISHINGPOINT:
|
||||||
hitrate += 3 * skill_lv;
|
hitrate += 5 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case GC_VENOMPRESSURE:
|
case GC_VENOMPRESSURE:
|
||||||
hitrate += 10 + 4 * skill_lv;
|
hitrate += 10 + 4 * skill_lv;
|
||||||
@ -3611,6 +3633,8 @@ static void battle_calc_skill_base_damage(struct Damage* wd, struct block_list *
|
|||||||
damagevalue = damagevalue * (90 + 10 * pc_checkskill(sd, RK_DRAGONTRAINING)) / 100;
|
damagevalue = damagevalue * (90 + 10 * pc_checkskill(sd, RK_DRAGONTRAINING)) / 100;
|
||||||
if (sc && sc->data[SC_DRAGONIC_AURA])// Need official damage increase. [Rytech]
|
if (sc && sc->data[SC_DRAGONIC_AURA])// Need official damage increase. [Rytech]
|
||||||
damagevalue += damagevalue * 50 / 100;
|
damagevalue += damagevalue * 50 / 100;
|
||||||
|
if (pc_checkskill(sd, DK_DRAGONIC_AURA)) // !TODO: Confirm
|
||||||
|
damagevalue += damagevalue * (sstatus->patk + sstatus->pow) / 500;
|
||||||
ATK_ADD(wd->damage, wd->damage2, damagevalue);
|
ATK_ADD(wd->damage, wd->damage2, damagevalue);
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
ATK_ADD(wd->weaponAtk, wd->weaponAtk2, damagevalue);
|
ATK_ADD(wd->weaponAtk, wd->weaponAtk2, damagevalue);
|
||||||
@ -4271,8 +4295,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
#else
|
#else
|
||||||
skillratio += 30 * skill_lv;
|
skillratio += 30 * skill_lv;
|
||||||
#endif
|
#endif
|
||||||
if (sc && sc->data[SC_SHIELD_POWER])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_SHIELD_POWER])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 50 + ((sd) ? pc_checkskill(sd, IG_SHIELD_MASTERY) * 60 : 0);
|
||||||
break;
|
break;
|
||||||
case WS_CARTTERMINATION:
|
case WS_CARTTERMINATION:
|
||||||
i = 10 * (16 - skill_lv);
|
i = 10 * (16 - skill_lv);
|
||||||
@ -4437,7 +4461,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
if (sc->data[SC_CHARGINGPIERCE_COUNT] && sc->data[SC_CHARGINGPIERCE_COUNT]->val1 >= 10)
|
if (sc->data[SC_CHARGINGPIERCE_COUNT] && sc->data[SC_CHARGINGPIERCE_COUNT]->val1 >= 10)
|
||||||
skillratio *= 2;
|
skillratio *= 2;
|
||||||
if (sc->data[SC_DRAGONIC_AURA])// Need official damage increase. [Rytech]
|
if (sc->data[SC_DRAGONIC_AURA])// Need official damage increase. [Rytech]
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 280 * skill_lv;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RK_WINDCUTTER:
|
case RK_WINDCUTTER:
|
||||||
@ -4552,7 +4576,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
skillratio += 50 * skill_lv;
|
skillratio += 50 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case NC_BOOSTKNUCKLE:
|
case NC_BOOSTKNUCKLE:
|
||||||
skillratio += 200 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
|
skillratio += 240 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case NC_PILEBUNKER:
|
case NC_PILEBUNKER:
|
||||||
@ -4560,7 +4584,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case NC_VULCANARM:
|
case NC_VULCANARM:
|
||||||
skillratio += -100 + 140 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
|
skillratio += -100 + 230 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case NC_FLAMELAUNCHER:
|
case NC_FLAMELAUNCHER:
|
||||||
@ -4569,7 +4593,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(150);
|
RE_LVL_DMOD(150);
|
||||||
break;
|
break;
|
||||||
case NC_ARMSCANNON:
|
case NC_ARMSCANNON:
|
||||||
skillratio += -100 + 400 + 300 * skill_lv;
|
skillratio += -100 + 400 + 350 * skill_lv;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case NC_AXEBOOMERANG:
|
case NC_AXEBOOMERANG:
|
||||||
@ -4594,14 +4618,14 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
case NC_AXETORNADO:
|
case NC_AXETORNADO:
|
||||||
skillratio += -100 + 200 + 180 * skill_lv + sstatus->vit / 6; // !TODO: What's the VIT bonus?
|
skillratio += -100 + 200 + 180 * skill_lv + sstatus->vit / 6; // !TODO: What's the VIT bonus?
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_AXE_STOMP])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_AXE_STOMP])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 120 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case SC_FATALMENACE:
|
case SC_FATALMENACE:
|
||||||
skillratio += 120 * skill_lv + sstatus->agi / 6; // !TODO: What's the AGI bonus?
|
skillratio += -100 + 120 * skill_lv + sstatus->agi / 6; // !TODO: What's the AGI bonus?
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_ABYSS_DAGGER])
|
if (sc && sc->data[SC_ABYSS_DAGGER])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 300;
|
||||||
break;
|
break;
|
||||||
case SC_TRIANGLESHOT:
|
case SC_TRIANGLESHOT:
|
||||||
skillratio += -100 + 230 * skill_lv + 3 * sstatus->agi;
|
skillratio += -100 + 230 * skill_lv + 3 * sstatus->agi;
|
||||||
@ -4612,19 +4636,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(120);
|
RE_LVL_DMOD(120);
|
||||||
break;
|
break;
|
||||||
case LG_CANNONSPEAR:
|
case LG_CANNONSPEAR:
|
||||||
skillratio += -100 + skill_lv * (50 + sstatus->str);
|
skillratio += -100 + 120 * skill_lv + (skill_lv * sstatus->str);
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SPEAR_SCAR])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_SPEAR_SCAR])// Whats the official increase? [Rytech]
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
break;
|
break;
|
||||||
case LG_BANISHINGPOINT:
|
case LG_BANISHINGPOINT:
|
||||||
skillratio += -100 + (80 * skill_lv) + ((sd) ? pc_checkskill(sd,SM_BASH) * 30 : 0);
|
skillratio += -100 + (100 * skill_lv) + ((sd) ? pc_checkskill(sd,SM_BASH) * 70 : 0);
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SPEAR_SCAR])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_SPEAR_SCAR])// Whats the official increase? [Rytech]
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
break;
|
break;
|
||||||
case LG_SHIELDPRESS:
|
case LG_SHIELDPRESS:
|
||||||
skillratio += -100 + 200 * skill_lv + sstatus->str;
|
skillratio += -100 + 200 * skill_lv + sstatus->str + sstatus->vit; // !TODO: What's the STR/VIT bonus?
|
||||||
if (sd) {
|
if (sd) {
|
||||||
short index = sd->equip_index[EQI_HAND_L];
|
short index = sd->equip_index[EQI_HAND_L];
|
||||||
|
|
||||||
@ -4632,8 +4656,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
skillratio += sd->inventory_data[index]->weight / 10;
|
skillratio += sd->inventory_data[index]->weight / 10;
|
||||||
}
|
}
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SHIELD_POWER])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_SHIELD_POWER])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 100 + ((sd) ? pc_checkskill(sd, IG_SHIELD_MASTERY) * 200 : 0);
|
||||||
break;
|
break;
|
||||||
case LG_PINPOINTATTACK:
|
case LG_PINPOINTATTACK:
|
||||||
skillratio += -100 + 100 * skill_lv + 5 * status_get_agi(src);
|
skillratio += -100 + 100 * skill_lv + 5 * status_get_agi(src);
|
||||||
@ -4652,17 +4676,18 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
break;
|
break;
|
||||||
case LG_OVERBRAND:
|
case LG_OVERBRAND:
|
||||||
if(sc && sc->data[SC_OVERBRANDREADY])
|
if(sc && sc->data[SC_OVERBRANDREADY])
|
||||||
skillratio += -100 + 450 * skill_lv;
|
skillratio += -100 + 500 * skill_lv;
|
||||||
else
|
else
|
||||||
skillratio += -100 + 300 * skill_lv;
|
skillratio += -100 + 300 * skill_lv;
|
||||||
|
skillratio += sstatus->dex / 2 + sstatus->str / 2; // !TODO: What's the STR/DEX bonus?
|
||||||
skillratio += ((sd) ? pc_checkskill(sd, CR_SPEARQUICKEN) * 50 : 0);
|
skillratio += ((sd) ? pc_checkskill(sd, CR_SPEARQUICKEN) * 50 : 0);
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case LG_EARTHDRIVE:
|
case LG_EARTHDRIVE:
|
||||||
skillratio += -100 + 380 * skill_lv + ((sstatus->str + sstatus->vit) / 6); // !TODO: What's the STR/VIT bonus?
|
skillratio += -100 + 380 * skill_lv + ((sstatus->str + sstatus->vit) / 6); // !TODO: What's the STR/VIT bonus?
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SHIELD_POWER])// Whats the official increase? [Rytech]
|
if (sc && sc->data[SC_SHIELD_POWER])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 150 + ((sd) ? pc_checkskill(sd, IG_SHIELD_MASTERY) * 180 : 0);
|
||||||
break;
|
break;
|
||||||
case LG_HESPERUSLIT:
|
case LG_HESPERUSLIT:
|
||||||
if (sc && sc->data[SC_INSPIRATION])
|
if (sc && sc->data[SC_INSPIRATION])
|
||||||
@ -5041,7 +5066,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
skillratio += skillratio * sc->data[SC_LIGHTOFSTAR]->val2 / 100;
|
skillratio += skillratio * sc->data[SC_LIGHTOFSTAR]->val2 / 100;
|
||||||
break;
|
break;
|
||||||
case DK_SERVANTWEAPON_ATK:
|
case DK_SERVANTWEAPON_ATK:
|
||||||
skillratio += 50 + 50 * skill_lv + 5 * sstatus->pow;
|
skillratio += 100 + 50 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case DK_SERVANT_W_PHANTOM:
|
case DK_SERVANT_W_PHANTOM:
|
||||||
@ -5072,11 +5097,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
skillratio += 450 * skill_lv;
|
skillratio += 450 * skill_lv;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case DK_MADNESS_CRUSHER:// How does weight affect the damage? [Rytech]
|
case DK_MADNESS_CRUSHER:
|
||||||
skillratio += -100 + 450 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 600 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_CHARGINGPIERCE_COUNT] && sc->data[SC_CHARGINGPIERCE_COUNT]->val1 >= 10)
|
if (sc && sc->data[SC_CHARGINGPIERCE_COUNT] && sc->data[SC_CHARGINGPIERCE_COUNT]->val1 >= 10)
|
||||||
skillratio *= 2;
|
skillratio *= 2;
|
||||||
|
if (sd && (sd->status.weapon == W_2HSWORD || sd->status.weapon == W_2HSPEAR)) {
|
||||||
|
short index = sd->equip_index[EQI_HAND_L];
|
||||||
|
|
||||||
|
if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON) {
|
||||||
|
skillratio += sd->inventory_data[index]->weight / 10; // !TODO: What's the bonus?
|
||||||
|
skillratio += sd->inventory_data[index]->weapon_level * 50; // !TODO: What's the bonus?
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case DK_STORMSLASH:
|
case DK_STORMSLASH:
|
||||||
skillratio += -100 + 120 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 120 * skill_lv + 5 * sstatus->pow;
|
||||||
@ -5095,10 +5128,10 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case IQ_EXPOSION_BLASTER:
|
case IQ_EXPOSION_BLASTER:
|
||||||
skillratio += -100 + 450 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 650 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (tsc && tsc->data[SC_HOLY_OIL])
|
if (tsc && tsc->data[SC_HOLY_OIL])
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += 200 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case IQ_FIRST_BRAND:
|
case IQ_FIRST_BRAND:
|
||||||
skillratio += -100 + 450 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 450 * skill_lv + 5 * sstatus->pow;
|
||||||
@ -5117,11 +5150,12 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case IQ_THIRD_PUNISH:
|
case IQ_THIRD_PUNISH:
|
||||||
skillratio += -100 + 550 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 650 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case IQ_THIRD_FLAME_BOMB:
|
case IQ_THIRD_FLAME_BOMB:
|
||||||
skillratio += -100 + 650 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 650 * skill_lv + 5 * sstatus->pow;
|
||||||
|
skillratio += sstatus->max_hp * 20 / 100;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case IQ_THIRD_CONSECRATION:
|
case IQ_THIRD_CONSECRATION:
|
||||||
@ -5145,8 +5179,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
skillratio += sd->inventory_data[index]->weight / 20 * sd->inventory.u.items_inventory[index].refine;
|
skillratio += sd->inventory_data[index]->weight / 20 * sd->inventory.u.items_inventory[index].refine;
|
||||||
}
|
}
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
|
if ((i = pc_checkskill_imperial_guard(sd, 1)) > 0)
|
||||||
skillratio += skillratio * i / 100;
|
skillratio += skill_lv * i * 15;
|
||||||
break;
|
break;
|
||||||
case IG_OVERSLASH:
|
case IG_OVERSLASH:
|
||||||
skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow;
|
||||||
@ -5169,7 +5203,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case SHC_SAVAGE_IMPACT:
|
case SHC_SAVAGE_IMPACT:
|
||||||
skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case SHC_ETERNAL_SLASH:
|
case SHC_ETERNAL_SLASH:
|
||||||
@ -5191,7 +5225,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case MT_AXE_STOMP:
|
case MT_AXE_STOMP:
|
||||||
skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case MT_RUSH_QUAKE:
|
case MT_RUSH_QUAKE:
|
||||||
@ -5205,18 +5239,21 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case ABC_ABYSS_DAGGER:
|
case ABC_ABYSS_DAGGER:
|
||||||
skillratio += -100 + 550 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case ABC_UNLUCKY_RUSH:
|
case ABC_UNLUCKY_RUSH:
|
||||||
skillratio += -100 + 500 * skill_lv + 5 * sstatus->crt;
|
skillratio += -100 + 100 + 300 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case ABC_CHAIN_REACTION_SHOT:
|
case ABC_CHAIN_REACTION_SHOT:
|
||||||
case ABC_CHAIN_REACTION_SHOT_ATK:// Same damage formula? [Rytech]
|
|
||||||
skillratio += -100 + 600 * skill_lv + 5 * sstatus->con;
|
skillratio += -100 + 600 * skill_lv + 5 * sstatus->con;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
|
case ABC_CHAIN_REACTION_SHOT_ATK:
|
||||||
|
skillratio += -100 + 950 * skill_lv + 5 * sstatus->con;
|
||||||
|
RE_LVL_DMOD(100);
|
||||||
|
break;
|
||||||
case ABC_DEFT_STAB:
|
case ABC_DEFT_STAB:
|
||||||
skillratio += -100 + 360 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 360 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
@ -5226,7 +5263,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case WH_HAWKRUSH:
|
case WH_HAWKRUSH:
|
||||||
skillratio += -100 + 100 * skill_lv + 5 * sstatus->con;
|
skillratio += -100 + 200 * skill_lv + 5 * sstatus->con;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case WH_HAWKBOOMERANG:// Affected by trait stats??? CON for sure but the other one unknown. Likely POW. [Rytech]
|
case WH_HAWKBOOMERANG:// Affected by trait stats??? CON for sure but the other one unknown. Likely POW. [Rytech]
|
||||||
@ -5236,7 +5273,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case WH_GALESTORM:
|
case WH_GALESTORM:
|
||||||
skillratio += -100 + 250 * skill_lv + 5 * sstatus->con;
|
skillratio += -100 + 250 * skill_lv + 7 * sstatus->con;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_CALAMITYGALE] && (tstatus->race == RC_BRUTE || tstatus->race == RC_FISH))
|
if (sc && sc->data[SC_CALAMITYGALE] && (tstatus->race == RC_BRUTE || tstatus->race == RC_FISH))
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
@ -5272,7 +5309,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
case BO_ACIDIFIED_ZONE_GROUND_ATK:
|
case BO_ACIDIFIED_ZONE_GROUND_ATK:
|
||||||
case BO_ACIDIFIED_ZONE_WIND_ATK:
|
case BO_ACIDIFIED_ZONE_WIND_ATK:
|
||||||
case BO_ACIDIFIED_ZONE_FIRE_ATK:
|
case BO_ACIDIFIED_ZONE_FIRE_ATK:
|
||||||
skillratio += -100 + 250 * skill_lv + 5 * sstatus->pow;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->pow;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_RESEARCHREPORT]) { // Does this also affect skills like acid demo? [Rytech]
|
if (sc && sc->data[SC_RESEARCHREPORT]) { // Does this also affect skills like acid demo? [Rytech]
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
@ -5287,23 +5324,34 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TR_ROSEBLOSSOM:
|
case TR_ROSEBLOSSOM:
|
||||||
case TR_ROSEBLOSSOM_ATK:// Same damage formula? [Rytech]
|
skillratio += -100 + 750 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||||
skillratio += -100 + 500 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
||||||
skillratio += skillratio * 40 / 100;
|
skillratio *= 2;
|
||||||
|
|
||||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
}
|
}
|
||||||
if (tsc && tsc->data[SC_SOUNDBLEND])
|
if (tsc && tsc->data[SC_SOUNDBLEND])
|
||||||
|
skillratio += 250 * skill_lv;
|
||||||
|
break;
|
||||||
|
case TR_ROSEBLOSSOM_ATK:
|
||||||
|
skillratio += -100 + 350 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||||
|
RE_LVL_DMOD(100);
|
||||||
|
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
||||||
|
skillratio *= 2;
|
||||||
|
|
||||||
|
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
|
}
|
||||||
|
if (tsc && tsc->data[SC_SOUNDBLEND])
|
||||||
|
skillratio += 400 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case TR_RHYTHMSHOOTING:
|
case TR_RHYTHMSHOOTING:
|
||||||
skillratio += -100 + 120 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
skillratio += -100 + 120 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
||||||
skillratio += skillratio * 40 / 100;
|
skillratio *= 2;
|
||||||
|
|
||||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
@ -6219,7 +6267,11 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
|
|||||||
wd.div_ = min(wd.div_ + wd.miscflag, 3); // Number of hits doesn't go above 3.
|
wd.div_ = min(wd.div_ + wd.miscflag, 3); // Number of hits doesn't go above 3.
|
||||||
break;
|
break;
|
||||||
case IG_OVERSLASH:
|
case IG_OVERSLASH:
|
||||||
wd.div_ = min(wd.div_ + wd.miscflag, 5); // Number of hits doesn't appear to go above 5.
|
wd.div_ = min(wd.div_ + wd.miscflag, 7); // Number of hits doesn't appear to go above 5.
|
||||||
|
break;
|
||||||
|
case SHC_SAVAGE_IMPACT:
|
||||||
|
if (sc && sc->data[SC_CLOAKINGEXCEED])
|
||||||
|
wd.div_ = 5;
|
||||||
break;
|
break;
|
||||||
case SHC_ETERNAL_SLASH:
|
case SHC_ETERNAL_SLASH:
|
||||||
if (sc && sc->data[SC_E_SLASH_COUNT])
|
if (sc && sc->data[SC_E_SLASH_COUNT])
|
||||||
@ -6235,7 +6287,11 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
|
|||||||
break;
|
break;
|
||||||
case MT_AXE_STOMP:
|
case MT_AXE_STOMP:
|
||||||
if (sd && sd->status.weapon == W_2HAXE)
|
if (sd && sd->status.weapon == W_2HAXE)
|
||||||
wd.div_ = 2;
|
wd.div_ = 3;
|
||||||
|
break;
|
||||||
|
case ABC_FRENZY_SHOT:
|
||||||
|
if (rnd() % 100 < 5 * skill_lv)
|
||||||
|
wd.div_ = 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -7172,7 +7228,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
RE_LVL_DMOD(100); // ! TODO: Confirm new formula
|
RE_LVL_DMOD(100); // ! TODO: Confirm new formula
|
||||||
break;
|
break;
|
||||||
case LG_RAYOFGENESIS:
|
case LG_RAYOFGENESIS:
|
||||||
skillratio += -100 + 230 * skill_lv + sstatus->int_ / 6; // !TODO: What's the INT bonus?
|
skillratio += -100 + 350 * skill_lv + sstatus->int_ / 6; // !TODO: What's the INT bonus?
|
||||||
if (sc && sc->data[SC_INSPIRATION])
|
if (sc && sc->data[SC_INSPIRATION])
|
||||||
skillratio += 70 * skill_lv;
|
skillratio += 70 * skill_lv;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
@ -7372,7 +7428,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case AG_MYSTERY_ILLUSION:
|
case AG_MYSTERY_ILLUSION:
|
||||||
skillratio += -100 + 250 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 500 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case AG_VIOLENT_QUAKE_ATK:
|
case AG_VIOLENT_QUAKE_ATK:
|
||||||
@ -7447,21 +7503,22 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case AG_ROCK_DOWN:
|
case AG_ROCK_DOWN:
|
||||||
skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
|
|
||||||
RE_LVL_DMOD(100);
|
|
||||||
break;
|
|
||||||
case AG_STORM_CANNON:
|
case AG_STORM_CANNON:
|
||||||
|
case AG_FROZEN_SLASH:
|
||||||
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
|
if (sc && sc->data[SC_CLIMAX])
|
||||||
|
skillratio += 250 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case AG_CRIMSON_ARROW:
|
case AG_CRIMSON_ARROW:
|
||||||
case AG_CRIMSON_ARROW_ATK:
|
|
||||||
skillratio += -100 + 300 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 300 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case AG_FROZEN_SLASH:
|
case AG_CRIMSON_ARROW_ATK:
|
||||||
skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
|
if (sc && sc->data[SC_CLIMAX])
|
||||||
|
skillratio *= 2;
|
||||||
break;
|
break;
|
||||||
case IG_JUDGEMENT_CROSS:
|
case IG_JUDGEMENT_CROSS:
|
||||||
skillratio += -100 + 750 * skill_lv + 10 * sstatus->spl;
|
skillratio += -100 + 750 * skill_lv + 10 * sstatus->spl;
|
||||||
@ -7471,17 +7528,24 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
|
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
|
||||||
skillratio += skillratio * i / 100;
|
skillratio += skillratio * i / 100;
|
||||||
break;
|
break;
|
||||||
case IG_CROSS_RAIN:// Need official damage increase from Spear and Sword Mastery. [Rytech]
|
case IG_CROSS_RAIN:
|
||||||
skillratio += -100 + 30 * skill_lv + 5 * sstatus->spl + 5 * pc_checkskill(sd, IG_SPEAR_SWORD_M);
|
skillratio += -100 + 30 * skill_lv + 5 * sstatus->spl + (skill_lv * 5 * pc_checkskill(sd, IG_SPEAR_SWORD_M));
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
|
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
|
||||||
skillratio += skillratio * i / 100;
|
skillratio += skillratio * i / 100;
|
||||||
if (sc && sc->data[SC_HOLY_S])
|
if (sc && sc->data[SC_HOLY_S])
|
||||||
skillratio += 20 * skill_lv;
|
skillratio += 20 * skill_lv + (skill_lv * 5 * pc_checkskill(sd, IG_SPEAR_SWORD_M));
|
||||||
break;
|
break;
|
||||||
case CD_ARBITRIUM:
|
case CD_ARBITRIUM:
|
||||||
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||||
|
if (sd)
|
||||||
|
skillratio += 100 * pc_checkskill(sd, CD_FIDUS_ANIMUS);
|
||||||
|
RE_LVL_DMOD(100);
|
||||||
|
break;
|
||||||
case CD_ARBITRIUM_ATK:
|
case CD_ARBITRIUM_ATK:
|
||||||
skillratio += -100 + 200 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 550 * skill_lv + 5 * sstatus->spl;
|
||||||
|
if (sd)
|
||||||
|
skillratio += 100 * pc_checkskill(sd, CD_FIDUS_ANIMUS);
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case CD_PNEUMATICUS_PROCELLA:
|
case CD_PNEUMATICUS_PROCELLA:
|
||||||
@ -7508,51 +7572,53 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|||||||
break;
|
break;
|
||||||
case ABC_ABYSS_SQUARE:
|
case ABC_ABYSS_SQUARE:
|
||||||
skillratio += -100 + 140 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 140 * skill_lv + 5 * sstatus->spl;
|
||||||
|
if (sd)
|
||||||
|
skillratio += pc_checkskill(sd, ABC_MAGIC_SWORD_M) * 130;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case TR_METALIC_FURY:
|
case TR_METALIC_FURY:
|
||||||
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 900 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
break;
|
break;
|
||||||
case TR_SOUNDBLEND:
|
case TR_SOUNDBLEND:
|
||||||
skillratio += -100 + 120 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 120 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
if (sc && sc->data[SC_MYSTIC_SYMPHONY]) {
|
||||||
skillratio += skillratio * 40 / 100;
|
skillratio *= 2;
|
||||||
|
|
||||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||||
skillratio += skillratio * 50 / 100;
|
skillratio += skillratio * 50 / 100;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EM_DIAMOND_STORM:
|
case EM_DIAMOND_STORM:
|
||||||
skillratio += -100 + 700 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 1250 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SUMMON_ELEMENTAL_DILUVIO])
|
if (sc && sc->data[SC_SUMMON_ELEMENTAL_DILUVIO])
|
||||||
skillratio += skillratio * 30 / 100;
|
skillratio += 3500 + 500 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case EM_LIGHTNING_LAND:
|
case EM_LIGHTNING_LAND:
|
||||||
skillratio += -100 + 150 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SUMMON_ELEMENTAL_PROCELLA])
|
if (sc && sc->data[SC_SUMMON_ELEMENTAL_PROCELLA])
|
||||||
skillratio += skillratio * 30 / 100;
|
skillratio += 400 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case EM_VENOM_SWAMP:
|
case EM_VENOM_SWAMP:
|
||||||
skillratio += -100 + 150 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SUMMON_ELEMENTAL_SERPENS])
|
if (sc && sc->data[SC_SUMMON_ELEMENTAL_SERPENS])
|
||||||
skillratio += skillratio * 30 / 100;
|
skillratio += 400 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case EM_CONFLAGRATION:
|
case EM_CONFLAGRATION:
|
||||||
skillratio += -100 + 150 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 400 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SUMMON_ELEMENTAL_ARDOR])
|
if (sc && sc->data[SC_SUMMON_ELEMENTAL_ARDOR])
|
||||||
skillratio += skillratio * 30 / 100;
|
skillratio += 400 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case EM_TERRA_DRIVE:
|
case EM_TERRA_DRIVE:
|
||||||
skillratio += -100 + 700 * skill_lv + 5 * sstatus->spl;
|
skillratio += -100 + 1250 * skill_lv + 5 * sstatus->spl;
|
||||||
RE_LVL_DMOD(100);
|
RE_LVL_DMOD(100);
|
||||||
if (sc && sc->data[SC_SUMMON_ELEMENTAL_TERREMOTUS])
|
if (sc && sc->data[SC_SUMMON_ELEMENTAL_TERREMOTUS])
|
||||||
skillratio += skillratio * 30 / 100;
|
skillratio += 3500 + 500 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case ABC_FROM_THE_ABYSS_ATK:
|
case ABC_FROM_THE_ABYSS_ATK:
|
||||||
skillratio += 50 + 70 * skill_lv + 5 * sstatus->spl;
|
skillratio += 50 + 70 * skill_lv + 5 * sstatus->spl;
|
||||||
@ -8968,9 +9034,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( sc ){
|
if( sc ){
|
||||||
// It has a success chance of triggering even tho the description says nothing about it.
|
if( sc->data[SC_SERVANTWEAPON] && sd->servantball > 0 && rnd() % 100 < 15) {
|
||||||
// TODO: Need to find out what the official success chance is. [Rytech]
|
|
||||||
if( sc->data[SC_SERVANTWEAPON] && sd->servantball > 0 && rnd() % 100 < 20 ){
|
|
||||||
uint16 skill_id = DK_SERVANTWEAPON_ATK;
|
uint16 skill_id = DK_SERVANTWEAPON_ATK;
|
||||||
uint16 skill_lv = sc->data[SC_SERVANTWEAPON]->val1;
|
uint16 skill_lv = sc->data[SC_SERVANTWEAPON]->val1;
|
||||||
|
|
||||||
@ -8992,9 +9056,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
|
|||||||
sd->state.autocast = 0;
|
sd->state.autocast = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// It has a success chance of triggering even tho the description says nothing about it.
|
if( sc->data[SC_ABYSSFORCEWEAPON] && sd->abyssball > 0 && rnd() % 100 < 15 ){
|
||||||
// TODO: Need to find out what the official success chance is. [Rytech]
|
|
||||||
if( sc->data[SC_ABYSSFORCEWEAPON] && sd->abyssball > 0 && rnd() % 100 < 20 ){
|
|
||||||
uint16 skill_id = ABC_FROM_THE_ABYSS_ATK;
|
uint16 skill_id = ABC_FROM_THE_ABYSS_ATK;
|
||||||
uint16 skill_lv = sc->data[SC_ABYSSFORCEWEAPON]->val1;
|
uint16 skill_lv = sc->data[SC_ABYSSFORCEWEAPON]->val1;
|
||||||
|
|
||||||
|
@ -1839,6 +1839,8 @@
|
|||||||
export_constant(SC_DEEP_POISONING_OPTION);
|
export_constant(SC_DEEP_POISONING_OPTION);
|
||||||
export_constant(SC_POISON_SHIELD);
|
export_constant(SC_POISON_SHIELD);
|
||||||
export_constant(SC_POISON_SHIELD_OPTION);
|
export_constant(SC_POISON_SHIELD_OPTION);
|
||||||
|
export_constant(SC_RUSH_QUAKE1);
|
||||||
|
export_constant(SC_RUSH_QUAKE2);
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
export_constant(SC_EXTREMITYFIST2);
|
export_constant(SC_EXTREMITYFIST2);
|
||||||
|
@ -2119,6 +2119,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
|||||||
case AG_CRYSTAL_IMPACT:// Targets hit are dealt aftershock damage.
|
case AG_CRYSTAL_IMPACT:// Targets hit are dealt aftershock damage.
|
||||||
skill_castend_damage_id(src, bl, AG_CRYSTAL_IMPACT_ATK, skill_lv, tick, SD_LEVEL);
|
skill_castend_damage_id(src, bl, AG_CRYSTAL_IMPACT_ATK, skill_lv, tick, SD_LEVEL);
|
||||||
break;
|
break;
|
||||||
|
case AG_CRIMSON_ARROW:
|
||||||
|
skill_castend_damage_id(src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, SD_LEVEL);
|
||||||
|
break;
|
||||||
case IQ_OLEUM_SANCTUM:
|
case IQ_OLEUM_SANCTUM:
|
||||||
sc_start(src, bl, SC_HOLY_OIL, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
sc_start(src, bl, SC_HOLY_OIL, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
break;
|
break;
|
||||||
@ -2183,6 +2186,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
|||||||
case EM_TERRA_DRIVE:
|
case EM_TERRA_DRIVE:
|
||||||
sc_start(src, bl, SC_HANDICAPSTATE_CRYSTALLIZATION, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
|
sc_start(src, bl, SC_HANDICAPSTATE_CRYSTALLIZATION, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||||
break;
|
break;
|
||||||
|
case MT_RUSH_QUAKE:
|
||||||
|
sc_start(src, bl, SC_RUSH_QUAKE1, 100, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||||
|
break;
|
||||||
} //end switch skill_id
|
} //end switch skill_id
|
||||||
|
|
||||||
if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai && md->special_state.ai != AI_ABR && md->special_state.ai != AI_BIONIC)
|
if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai && md->special_state.ai != AI_ABR && md->special_state.ai != AI_BIONIC)
|
||||||
@ -4014,10 +4020,6 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
|||||||
if (skill_area_temp[1] == bl->id && rnd()%100 < 4 * skill_lv)// Need official autocast chance. [Rytech]
|
if (skill_area_temp[1] == bl->id && rnd()%100 < 4 * skill_lv)// Need official autocast chance. [Rytech]
|
||||||
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, 2);
|
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, 2);
|
||||||
break;
|
break;
|
||||||
case ABC_FRENZY_SHOT:
|
|
||||||
if (rnd()%100 < 4 * skill_lv)// Need official autocast chance. [Rytech]
|
|
||||||
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, 2);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4603,11 +4605,8 @@ static TIMER_FUNC(skill_timerskill){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NPC_PULSESTRIKE2:
|
case NPC_PULSESTRIKE2:
|
||||||
skill_castend_damage_id(src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
|
|
||||||
break;
|
|
||||||
case ABC_DEFT_STAB:
|
case ABC_DEFT_STAB:
|
||||||
case ABC_FRENZY_SHOT:
|
skill_castend_damage_id(src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
|
||||||
skill_castend_damage_id(src, target, skl->skill_id, skl->skill_lv, tick, skl->flag);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
|
skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
|
||||||
@ -5258,8 +5257,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv), splash_target(src),
|
skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv), splash_target(src),
|
||||||
skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
||||||
}
|
}
|
||||||
if (skill_id == AG_CRIMSON_ARROW)
|
|
||||||
skill_attack(skill_get_type(AG_CRIMSON_ARROW_ATK), src, src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MO_INVESTIGATE:
|
case MO_INVESTIGATE:
|
||||||
@ -5480,6 +5477,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
case AG_SOUL_VC_STRIKE:
|
case AG_SOUL_VC_STRIKE:
|
||||||
case AG_CRYSTAL_IMPACT:
|
case AG_CRYSTAL_IMPACT:
|
||||||
case AG_CRYSTAL_IMPACT_ATK:
|
case AG_CRYSTAL_IMPACT_ATK:
|
||||||
|
case AG_CRIMSON_ARROW_ATK:
|
||||||
case AG_ROCK_DOWN:
|
case AG_ROCK_DOWN:
|
||||||
case AG_FROZEN_SLASH:
|
case AG_FROZEN_SLASH:
|
||||||
case IQ_OLEUM_SANCTUM:
|
case IQ_OLEUM_SANCTUM:
|
||||||
@ -5539,6 +5537,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
if (skill_id == DK_SERVANT_W_DEMOL && !(tsc && tsc->data[SC_SERVANT_SIGN] && tsc->data[SC_SERVANT_SIGN]->val1 == src->id))
|
if (skill_id == DK_SERVANT_W_DEMOL && !(tsc && tsc->data[SC_SERVANT_SIGN] && tsc->data[SC_SERVANT_SIGN]->val1 == src->id))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Over Slash - Appears to deal a number of hits equal to 2 + Number of Enemys In AoE. Max of 7 hits.
|
||||||
|
if (skill_id == IG_OVERSLASH)
|
||||||
|
sflag |= skill_area_temp[0];
|
||||||
|
|
||||||
// Deft Stab - Make sure the flag of 2 is passed on when the skill is double casted.
|
// Deft Stab - Make sure the flag of 2 is passed on when the skill is double casted.
|
||||||
if (skill_id == ABC_DEFT_STAB && flag&2)
|
if (skill_id == ABC_DEFT_STAB && flag&2)
|
||||||
sflag |= 2;
|
sflag |= 2;
|
||||||
@ -5612,10 +5614,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
if (sd && pc_search_inventory(sd, skill_db.find(SU_LUNATICCARROTBEAT)->require.itemid[0]) >= 0)
|
if (sd && pc_search_inventory(sd, skill_db.find(SU_LUNATICCARROTBEAT)->require.itemid[0]) >= 0)
|
||||||
skill_id = SU_LUNATICCARROTBEAT2;
|
skill_id = SU_LUNATICCARROTBEAT2;
|
||||||
break;
|
break;
|
||||||
|
case MT_RUSH_QUAKE:
|
||||||
|
sc_start(src, src, SC_RUSH_QUAKE2, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
|
// Fallthrough
|
||||||
case DK_SERVANT_W_PHANTOM:
|
case DK_SERVANT_W_PHANTOM:
|
||||||
case SHC_SAVAGE_IMPACT:
|
case SHC_SAVAGE_IMPACT:
|
||||||
case SHC_FATAL_SHADOW_CROW:
|
case SHC_FATAL_SHADOW_CROW:
|
||||||
case MT_RUSH_QUAKE:
|
|
||||||
// Jump to the target before attacking.
|
// Jump to the target before attacking.
|
||||||
if (skill_check_unit_movepos(5, src, bl->x, bl->y, 0, 1))
|
if (skill_check_unit_movepos(5, src, bl->x, bl->y, 0, 1))
|
||||||
skill_blown(src, src, 1, (map_calc_dir(bl, src->x, src->y) + 4) % 8, BLOWN_NONE);
|
skill_blown(src, src, 1, (map_calc_dir(bl, src->x, src->y) + 4) % 8, BLOWN_NONE);
|
||||||
@ -7768,7 +7772,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
case EM_INCREASING_ACTIVITY:
|
case EM_INCREASING_ACTIVITY:
|
||||||
if (bl->type == BL_PC) {
|
if (bl->type == BL_PC) {
|
||||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||||
status_heal(bl, 0, 0, 20 + 5 * skill_lv, 0);
|
status_heal(bl, 0, 0, 10 + 10 * skill_lv, 0);
|
||||||
} else
|
} else
|
||||||
clif_skill_fail(sd, skill_id, USESKILL_FAIL, 0);
|
clif_skill_fail(sd, skill_id, USESKILL_FAIL, 0);
|
||||||
break;
|
break;
|
||||||
|
@ -2365,9 +2365,9 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
|||||||
// Its unknown how the summoner's stats affects the ABR's stats.
|
// Its unknown how the summoner's stats affects the ABR's stats.
|
||||||
// I decided to do something similar to elementals for now until I know.
|
// I decided to do something similar to elementals for now until I know.
|
||||||
// Also added hit increase from ABR-Mastery for balance reasons. [Rytech]
|
// Also added hit increase from ABR-Mastery for balance reasons. [Rytech]
|
||||||
status->max_hp = (5000 + 2000 * abr_mastery) * mstatus->vit / 100;
|
status->max_hp = (5000 + 40000 * abr_mastery) * mstatus->vit / 100;
|
||||||
status->rhw.atk = (2 * mstatus->batk + 500 + 200 * abr_mastery) * 70 / 100;
|
status->rhw.atk = (2 * mstatus->batk + 200 + 600 * abr_mastery) * 70 / 100;
|
||||||
status->rhw.atk2 = 2 * mstatus->batk + 500 + 200 * abr_mastery;
|
status->rhw.atk2 = 2 * mstatus->batk + 200 + 600 * abr_mastery;
|
||||||
status->def = mstatus->def + 20 * abr_mastery;
|
status->def = mstatus->def + 20 * abr_mastery;
|
||||||
status->mdef = mstatus->mdef + 4 * abr_mastery;
|
status->mdef = mstatus->mdef + 4 * abr_mastery;
|
||||||
status->hit = mstatus->hit + 5 * abr_mastery / 2;
|
status->hit = mstatus->hit + 5 * abr_mastery / 2;
|
||||||
@ -2400,10 +2400,10 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
|||||||
// Its unknown how the summoner's stats affects the bionic's stats.
|
// Its unknown how the summoner's stats affects the bionic's stats.
|
||||||
// I decided to do something similar to elementals for now until I know.
|
// I decided to do something similar to elementals for now until I know.
|
||||||
// Also added hit increase from Bionic-Mastery for balance reasons. [Rytech]
|
// Also added hit increase from Bionic-Mastery for balance reasons. [Rytech]
|
||||||
status->max_hp = (5000 + 2000 * bionic_mastery) * mstatus->vit / 100;
|
status->max_hp = (5000 + 40000 * bionic_mastery) * mstatus->vit / 100;
|
||||||
//status->max_sp = (50 + 20 * bionic_mastery) * mstatus->int_ / 100;// Wait what??? Bionic Mastery increases MaxSP? They have SP???
|
//status->max_sp = (50 + 20 * bionic_mastery) * mstatus->int_ / 100;// Wait what??? Bionic Mastery increases MaxSP? They have SP???
|
||||||
status->rhw.atk = (2 * mstatus->batk + 200 * bionic_mastery) * 70 / 100;
|
status->rhw.atk = (2 * mstatus->batk + 600 * bionic_mastery) * 70 / 100;
|
||||||
status->rhw.atk2 = 2 * mstatus->batk + 200 * bionic_mastery;
|
status->rhw.atk2 = 2 * mstatus->batk + 600 * bionic_mastery;
|
||||||
status->def = mstatus->def + 20 * bionic_mastery;
|
status->def = mstatus->def + 20 * bionic_mastery;
|
||||||
status->mdef = mstatus->mdef + 4 * bionic_mastery;
|
status->mdef = mstatus->mdef + 4 * bionic_mastery;
|
||||||
status->hit = mstatus->hit + 5 * bionic_mastery / 2;
|
status->hit = mstatus->hit + 5 * bionic_mastery / 2;
|
||||||
@ -2415,7 +2415,7 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
|
|||||||
// costing summon. [Rytech]
|
// costing summon. [Rytech]
|
||||||
if (ud->skill_id == BO_HELLTREE) {
|
if (ud->skill_id == BO_HELLTREE) {
|
||||||
status->max_hp += 20000;
|
status->max_hp += 20000;
|
||||||
status->rhw.atk += 1400; // 70% of 2000
|
status->rhw.atk += 5600; // 70% of 2000
|
||||||
status->rhw.atk2 += 2000;
|
status->rhw.atk2 += 2000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3827,6 +3827,8 @@ int status_calc_pc_sub(struct map_session_data* sd, uint8 opt)
|
|||||||
base_status->patk += skill * 3;
|
base_status->patk += skill * 3;
|
||||||
base_status->smatk += skill * 3;
|
base_status->smatk += skill * 3;
|
||||||
}
|
}
|
||||||
|
if (sd->status.weapon == W_2HSTAFF && (skill = pc_checkskill(sd, AG_TWOHANDSTAFF)) > 0)
|
||||||
|
base_status->smatk += skill * 2;
|
||||||
|
|
||||||
// ----- PHYSICAL RESISTANCE CALCULATION -----
|
// ----- PHYSICAL RESISTANCE CALCULATION -----
|
||||||
if ((skill = pc_checkskill_imperial_guard(sd, 1)) > 0)// IG_SHIELD_MASTERY
|
if ((skill = pc_checkskill_imperial_guard(sd, 1)) > 0)// IG_SHIELD_MASTERY
|
||||||
@ -6488,8 +6490,6 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
|
|||||||
watk += sc->data[SC_POWERFUL_FAITH]->val2;
|
watk += sc->data[SC_POWERFUL_FAITH]->val2;
|
||||||
if (sc->data[SC_GUARD_STANCE])
|
if (sc->data[SC_GUARD_STANCE])
|
||||||
watk -= sc->data[SC_GUARD_STANCE]->val3;
|
watk -= sc->data[SC_GUARD_STANCE]->val3;
|
||||||
if (sc->data[SC_ATTACK_STANCE])
|
|
||||||
watk += sc->data[SC_ATTACK_STANCE]->val3;
|
|
||||||
|
|
||||||
return (unsigned short)cap_value(watk,0,USHRT_MAX);
|
return (unsigned short)cap_value(watk,0,USHRT_MAX);
|
||||||
}
|
}
|
||||||
@ -7762,6 +7762,8 @@ static signed short status_calc_patk(struct block_list *bl, struct status_change
|
|||||||
patk += sc->data[SC_ABYSS_SLAYER]->val2;
|
patk += sc->data[SC_ABYSS_SLAYER]->val2;
|
||||||
if (sc->data[SC_PRON_MARCH])
|
if (sc->data[SC_PRON_MARCH])
|
||||||
patk += sc->data[SC_PRON_MARCH]->val2;
|
patk += sc->data[SC_PRON_MARCH]->val2;
|
||||||
|
if (sc->data[SC_ATTACK_STANCE])
|
||||||
|
patk += sc->data[SC_ATTACK_STANCE]->val3;
|
||||||
|
|
||||||
return (short)cap_value(patk, 0, SHRT_MAX);
|
return (short)cap_value(patk, 0, SHRT_MAX);
|
||||||
}
|
}
|
||||||
@ -7786,6 +7788,8 @@ static signed short status_calc_smatk(struct block_list *bl, struct status_chang
|
|||||||
smatk += sc->data[SC_JAWAII_SERENADE]->val2;
|
smatk += sc->data[SC_JAWAII_SERENADE]->val2;
|
||||||
if (sc->data[SC_SPELL_ENCHANTING])
|
if (sc->data[SC_SPELL_ENCHANTING])
|
||||||
smatk += sc->data[SC_SPELL_ENCHANTING]->val2;
|
smatk += sc->data[SC_SPELL_ENCHANTING]->val2;
|
||||||
|
if (sc->data[SC_ATTACK_STANCE])
|
||||||
|
smatk += sc->data[SC_ATTACK_STANCE]->val3;
|
||||||
|
|
||||||
return (short)cap_value(smatk, 0, SHRT_MAX);
|
return (short)cap_value(smatk, 0, SHRT_MAX);
|
||||||
}
|
}
|
||||||
@ -11764,7 +11768,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
tick = INFINITE_TICK;
|
tick = INFINITE_TICK;
|
||||||
break;
|
break;
|
||||||
case SC_GUARDIAN_S:
|
case SC_GUARDIAN_S:
|
||||||
val2 = status->max_hp * (50 * val1) / 100;// Barrier HP
|
val2 = (status->max_hp / 2) * (50 * val1 + status_get_lv(src) + status->sta * 15) / 100;// Barrier HP
|
||||||
break;
|
break;
|
||||||
case SC_REBOUND_S:
|
case SC_REBOUND_S:
|
||||||
val2 = 10 * val1;// Reduced Damage From Devotion
|
val2 = 10 * val1;// Reduced Damage From Devotion
|
||||||
@ -11773,7 +11777,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
break;
|
break;
|
||||||
case SC_ATTACK_STANCE:
|
case SC_ATTACK_STANCE:
|
||||||
val2 = 40 * val1;// DEF Decrease
|
val2 = 40 * val1;// DEF Decrease
|
||||||
val3 = 5 + 5 * val1;// ATK Increase
|
val3 = 3 * val1;// P.ATK/S.MATK Increase
|
||||||
tick = INFINITE_TICK;
|
tick = INFINITE_TICK;
|
||||||
break;
|
break;
|
||||||
case SC_HOLY_S:
|
case SC_HOLY_S:
|
||||||
|
@ -1174,6 +1174,9 @@ enum sc_type : int16 {
|
|||||||
SC_POISON_SHIELD,
|
SC_POISON_SHIELD,
|
||||||
SC_POISON_SHIELD_OPTION,
|
SC_POISON_SHIELD_OPTION,
|
||||||
|
|
||||||
|
SC_RUSH_QUAKE1,
|
||||||
|
SC_RUSH_QUAKE2,
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user