Rebalance Troubadour & Trouvere 20220608 (3rd) (#7898)
* Sound Blend - Reduces SP consumption from 128 to 80 based on level 5. * Metallic Fury - Reduces cooldown from 0.5 seconds to 0.3 seconds. - Reduces SP consumption from 168 to 94 based on level 5. - Reduces AP recovery rate from 3 to 2 based on level 5. - Increases damage from 4500%/4950~6750%(area damage according to number of branded target)Matk to 11000%/12500~18500%(area damage according to number of branded target)Matk based on level 5. * Rhythm Shooting - Adds 0.15 seconds cooldown. - Removes 0.15 seconds delay after skill. - Reduces SP consumption from 90 to 52 based on level 5. - Increases damage from 600%/780%(branded target)Atk to 800%/1400%(branded target)Atk based on level 5. - Increases factor weight of CON in skill formula from 2 to 3. * Rose Blossom - Reduces variable casting time from 2 seconds to 1 second. - Increases cooldown from 0.5 seconds to 0.7 seconds. - Reduces SP consumption from 125 to 94 based on level 5. - Increases damage from 3750%/1750%(area damage)Atk to 11200%/15250%(area damage)Atk based on level 5. - Increases factor weight of CON in skill formula from 3/2(area damage) to 3/3(area damage). Checked against https://github.com/rathena/rathena/pull/7024 Credit to @datawulf for Metallic Fury update
This commit is contained in:
parent
6611aa731c
commit
eadfa053f6
@ -40229,20 +40229,20 @@ Body:
|
||||
CastTime: 1000
|
||||
AfterCastActDelay: 500
|
||||
Duration1: 500
|
||||
Cooldown: 500
|
||||
Cooldown: 700
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 105
|
||||
Amount: 70
|
||||
- Level: 2
|
||||
Amount: 110
|
||||
Amount: 76
|
||||
- Level: 3
|
||||
Amount: 115
|
||||
Amount: 82
|
||||
- Level: 4
|
||||
Amount: 120
|
||||
Amount: 88
|
||||
- Level: 5
|
||||
Amount: 125
|
||||
Amount: 94
|
||||
Weapon:
|
||||
Bow: true
|
||||
Musical: true
|
||||
@ -40299,21 +40299,21 @@ Body:
|
||||
Amount: 2
|
||||
CastCancel: true
|
||||
CastTime: 1000
|
||||
AfterCastActDelay: 500
|
||||
Cooldown: 1000
|
||||
AfterCastActDelay: 350
|
||||
Cooldown: 1150
|
||||
FixedCastTime: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 66
|
||||
Amount: 36
|
||||
- Level: 2
|
||||
Amount: 72
|
||||
Amount: 40
|
||||
- Level: 3
|
||||
Amount: 78
|
||||
Amount: 44
|
||||
- Level: 4
|
||||
Amount: 84
|
||||
Amount: 48
|
||||
- Level: 5
|
||||
Amount: 90
|
||||
Amount: 52
|
||||
Weapon:
|
||||
Bow: true
|
||||
Musical: true
|
||||
@ -40344,31 +40344,21 @@ Body:
|
||||
Area: 3
|
||||
- Level: 5
|
||||
Area: 3
|
||||
GiveAp:
|
||||
- Level: 1
|
||||
Amount: 2
|
||||
- Level: 2
|
||||
Amount: 2
|
||||
- Level: 3
|
||||
Amount: 2
|
||||
- Level: 4
|
||||
Amount: 3
|
||||
- Level: 5
|
||||
Amount: 3
|
||||
GiveAp: 2
|
||||
CastCancel: true
|
||||
Cooldown: 500
|
||||
Cooldown: 300
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 120
|
||||
Amount: 70
|
||||
- Level: 2
|
||||
Amount: 132
|
||||
Amount: 76
|
||||
- Level: 3
|
||||
Amount: 144
|
||||
Amount: 82
|
||||
- Level: 4
|
||||
Amount: 156
|
||||
Amount: 88
|
||||
- Level: 5
|
||||
Amount: 168
|
||||
Amount: 94
|
||||
Weapon:
|
||||
Musical: true
|
||||
Whip: true
|
||||
@ -40436,15 +40426,15 @@ Body:
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 80
|
||||
Amount: 40
|
||||
- Level: 2
|
||||
Amount: 92
|
||||
Amount: 50
|
||||
- Level: 3
|
||||
Amount: 104
|
||||
Amount: 60
|
||||
- Level: 4
|
||||
Amount: 116
|
||||
Amount: 70
|
||||
- Level: 5
|
||||
Amount: 128
|
||||
Amount: 80
|
||||
Weapon:
|
||||
Musical: true
|
||||
Whip: true
|
||||
|
@ -5626,46 +5626,57 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case TR_ROSEBLOSSOM:
|
||||
skillratio += -100 + 750 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||
skillratio += -100 + 200 + 2000 * skill_lv;
|
||||
|
||||
if (sd && pc_checkskill(sd, TR_STAGE_MANNER) > 0)
|
||||
skillratio += 3 * sstatus->con;
|
||||
|
||||
if( tsc != nullptr && tsc->getSCE( SC_SOUNDBLEND ) ){
|
||||
skillratio += 250 * skill_lv;
|
||||
skillratio += 200 * skill_lv;
|
||||
}
|
||||
|
||||
RE_LVL_DMOD(100);
|
||||
if (sc && sc->getSCE(SC_MYSTIC_SYMPHONY)) {
|
||||
skillratio += skillratio * 100 / 100;
|
||||
skillratio *= 2;
|
||||
|
||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||
skillratio += skillratio * 50 / 100;
|
||||
}
|
||||
break;
|
||||
case TR_ROSEBLOSSOM_ATK:
|
||||
skillratio += -100 + 350 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||
skillratio += -100 + 250 + 2800 * skill_lv;
|
||||
|
||||
if (sd && pc_checkskill(sd, TR_STAGE_MANNER) > 0)
|
||||
skillratio += 3 * sstatus->con;
|
||||
|
||||
if( tsc != nullptr && tsc->getSCE( SC_SOUNDBLEND ) ){
|
||||
skillratio += 400 * skill_lv;
|
||||
skillratio += 200 * skill_lv;
|
||||
}
|
||||
|
||||
RE_LVL_DMOD(100);
|
||||
if (sc && sc->getSCE(SC_MYSTIC_SYMPHONY)) {
|
||||
skillratio += skillratio * 100 / 100;
|
||||
skillratio *= 2;
|
||||
|
||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||
skillratio += skillratio * 50 / 100;
|
||||
}
|
||||
break;
|
||||
case TR_RHYTHMSHOOTING:
|
||||
skillratio += -100 + 120 * skill_lv + (sd ? pc_checkskill(sd, TR_STAGE_MANNER) : 5) * sstatus->con;
|
||||
skillratio += -100 + 200 + 120 * skill_lv;
|
||||
|
||||
if (sd && pc_checkskill(sd, TR_STAGE_MANNER) > 0)
|
||||
skillratio += 3 * sstatus->con;
|
||||
|
||||
if (tsc && tsc->getSCE(SC_SOUNDBLEND))
|
||||
skillratio += 100 + 100 * skill_lv;
|
||||
|
||||
RE_LVL_DMOD(100);
|
||||
if (sc && sc->getSCE(SC_MYSTIC_SYMPHONY)) {
|
||||
skillratio += skillratio * 100 / 100;
|
||||
skillratio *= 2;
|
||||
|
||||
if (tstatus->race == RC_FISH || tstatus->race == RC_DEMIHUMAN)
|
||||
skillratio += skillratio * 50 / 100;
|
||||
}
|
||||
if (tsc && tsc->getSCE(SC_SOUNDBLEND))
|
||||
skillratio += skillratio * 50 / 100;
|
||||
break;
|
||||
case ABR_BATTLE_BUSTER:// Need official formula.
|
||||
case ABR_DUAL_CANNON_FIRE:// Need official formula.
|
||||
@ -7172,9 +7183,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
if (mflag == 2)
|
||||
ad.div_ = 2;
|
||||
break;
|
||||
case TR_METALIC_FURY:// Deals up to 5 additional hits. But what affects the number of hits? [Rytech]
|
||||
ad.div_ = min(ad.div_ + mflag, 5); // Number of hits doesn't go above 5.
|
||||
break;
|
||||
case AG_CRIMSON_ARROW_ATK:
|
||||
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
|
||||
ad.div_ = 2;
|
||||
@ -7942,9 +7950,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
skillratio += -100 + ( 570 + 20 * pc_checkskill( sd, ABC_MAGIC_SWORD_M ) ) * skill_lv + 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case TR_METALIC_FURY:
|
||||
skillratio += -100 + 900 * skill_lv + 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
case TR_METALIC_FURY: {
|
||||
int area = skill_get_splash(skill_id, skill_lv);
|
||||
int count = map_forcountinarea(skill_check_bl_sc,target->m,target->x - area,target->y - area,target->x + area,target->y + area,5,BL_MOB,SC_SOUNDBLEND);
|
||||
skillratio += -100 + (2200 + 300 * count) * skill_lv + 5 * sstatus->spl;
|
||||
RE_LVL_DMOD(100);
|
||||
}
|
||||
break;
|
||||
case TR_SOUNDBLEND:
|
||||
skillratio += -100 + 120 * skill_lv + 5 * sstatus->spl;
|
||||
|
@ -5652,7 +5652,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case BO_ACIDIFIED_ZONE_WIND:
|
||||
case BO_ACIDIFIED_ZONE_FIRE:
|
||||
case TR_ROSEBLOSSOM_ATK:
|
||||
case TR_METALIC_FURY:
|
||||
case ABC_FROM_THE_ABYSS_ATK:
|
||||
case EM_ELEMENTAL_BUSTER_FIRE:
|
||||
case EM_ELEMENTAL_BUSTER_WATER:
|
||||
@ -5847,11 +5846,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
if (bl->type == BL_PC)// Place single cell AoE if hitting a player.
|
||||
skill_castend_pos2(src, bl->x, bl->y, skill_id, skill_lv, tick, 0);
|
||||
break;
|
||||
case TR_METALIC_FURY:
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
if (tsc && tsc->getSCE(SC_SOUNDBLEND))
|
||||
skill_area_temp[0] = 1 + rnd()%4;
|
||||
break;
|
||||
case MT_RUSH_QUAKE:
|
||||
// Jump to the target before attacking.
|
||||
if( skill_check_unit_movepos( 5, src, bl->x, bl->y, 0, 1 ) ){
|
||||
@ -5881,6 +5875,24 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TR_METALIC_FURY:
|
||||
{
|
||||
if (flag & 1) {
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
} else {
|
||||
int area = skill_get_splash(skill_id, skill_lv);
|
||||
int count = map_forcountinarea(skill_check_bl_sc,bl->m,bl->x - area,bl->y - area,bl->x + area,bl->y + area,5,BL_MOB,SC_SOUNDBLEND);
|
||||
if (count > 0){
|
||||
map_foreachinarea(skill_area_sub, bl->m, bl->x - area, bl->y - area, bl->x + area, bl->y + area, BL_CHAR,
|
||||
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
|
||||
} else{
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
//Place units around target
|
||||
case NJ_BAKUENRYU:
|
||||
@ -16994,6 +17006,28 @@ static bool skill_check_condition_sc_required(map_session_data *sd, unsigned sho
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check SC of BL
|
||||
* @param sc
|
||||
* @param skill_id
|
||||
* @return 1 if condition is met, 0 otherwise
|
||||
**/
|
||||
|
||||
int skill_check_bl_sc(struct block_list *target, va_list ap) {
|
||||
|
||||
nullpo_ret(target);
|
||||
|
||||
int sc_id = va_arg(ap,int);
|
||||
|
||||
status_change *sc = status_get_sc(target);
|
||||
|
||||
if (sc && sc->getSCE(sc_id))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check skill condition when cast begin
|
||||
* For ammo, only check if the skill need ammo
|
||||
|
@ -587,6 +587,8 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16
|
||||
#endif
|
||||
int skill_delayfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
|
||||
void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id);
|
||||
//Check sc of bl [Muh]
|
||||
int skill_check_bl_sc(struct block_list *target, va_list ap);
|
||||
|
||||
// Skill conditions check and remove [Inkfish]
|
||||
bool skill_check_condition_castbegin(map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
||||
|
Loading…
x
Reference in New Issue
Block a user