Implemented SH_TEMPORARY_COMMUNION

MAX Lv: 5
Skill Requirement: Mystical Creature Mastery 10
Skill Form: Active(AP)
Type: Secondary
Target: Instant Casting
Consumes: AP 150
Description: Can only be used when the user learned at least one of either Commune with Chulho, Kisul or Hyunrok.
Through the temporary communion with Chulho, Kisul and Hyunrok, the user is in the state of communion of all three mystical creatures for the certain duration.
Increases P.Atk, S.Matk and H.Plus for the duration.
_
[Level 1]: Duration: 30 seconds / P.Atk, S.Matk, H.Plus +3
[Level 2]: Duration: 60 seconds / P.Atk, S.Matk, H.Plus +6
[Level 3]: Duration: 90 seconds / P.Atk, S.Matk, H.Plus +9
[Level 4]: Duration: 120 seconds / P.Atk, S.Matk, H.Plus +12
[Level 5]: Duration: 150 seconds / P.Atk, S.Matk, H.Plus +15

1st rebalance :
(none)

2nd rebalance :
(none)
This commit is contained in:
Atemo 2023-10-28 16:13:49 +02:00
parent 9de0a5fa53
commit c006ae4da7
4 changed files with 52 additions and 0 deletions

View File

@ -41533,6 +41533,34 @@ Body:
Name: SH_COMMUNE_WITH_HYUN_ROK
Description: Commune with Hyunrok
MaxLevel: 1
- Id: 5447
Name: SH_TEMPORARY_COMMUNION
Description: Temporary Communion
MaxLevel: 5
Type: Magic
TargetType: Self
DamageFlags:
NoDamage: true
CastCancel: true
CastTime: 2000
AfterCastActDelay: 500
Cooldown: 60000
FixedCastTime: 1500
Duration1:
- Level: 1
Time: 30000
- Level: 2
Time: 60000
- Level: 3
Time: 90000
- Level: 4
Time: 12000
- Level: 5
Time: 150000
Requires:
SpCost: 100
ApCost: 150
Status: Temporary_Communion
- Id: 6001
Name: DK_DRAGONIC_BREATH
Description: Dragonic Breath

View File

@ -8758,3 +8758,10 @@ Body:
Debuff: true
BlEffect: true
DisplayPc: true
- Status: Temporary_Communion
Icon: EFST_TEMPORARY_COMMUNION
DurationLookup: SH_TEMPORARY_COMMUNION
CalcFlags:
Patk: true
Smatk: true
Hplus: true

View File

@ -7920,6 +7920,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case NPC_DAMAGE_HEAL:
case NPC_RELIEVE_ON:
case NPC_RELIEVE_OFF:
case SH_TEMPORARY_COMMUNION:
clif_skill_nodamage(src,bl,skill_id,skill_lv,
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
break;
@ -17839,6 +17840,12 @@ bool skill_check_condition_castbegin(map_session_data* sd, uint16 skill_id, uint
if (!(sc && sc->getSCE(SC_THIRD_EXOR_FLAME)))
return false;
break;
case SH_TEMPORARY_COMMUNION:
if (sd && !pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO) && !pc_checkskill(sd, SH_COMMUNE_WITH_HYUN_ROK) && !pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_CONDITION,0);
return false;
}
break;
}
/* check state required */

View File

@ -8487,6 +8487,8 @@ static signed short status_calc_patk(struct block_list *bl, status_change *sc, i
if( sc->getSCE( SC_ATTACK_STANCE ) ){
patk += sc->getSCE( SC_ATTACK_STANCE )->val3;
}
if (sc->getSCE(SC_TEMPORARY_COMMUNION))
patk += sc->getSCE(SC_TEMPORARY_COMMUNION)->val2;
return (short)cap_value(patk, 0, SHRT_MAX);
}
@ -8514,6 +8516,8 @@ static signed short status_calc_smatk(struct block_list *bl, status_change *sc,
if( sc->getSCE( SC_ATTACK_STANCE ) ){
smatk += sc->getSCE( SC_ATTACK_STANCE )->val3;
}
if (sc->getSCE(SC_TEMPORARY_COMMUNION))
smatk += sc->getSCE(SC_TEMPORARY_COMMUNION)->val2;
return (short)cap_value(smatk, 0, SHRT_MAX);
}
@ -8582,6 +8586,9 @@ static signed short status_calc_hplus(struct block_list *bl, status_change *sc,
if (!sc || !sc->count)
return cap_value(hplus, 0, SHRT_MAX);
if (sc->getSCE(SC_TEMPORARY_COMMUNION))
hplus += sc->getSCE(SC_TEMPORARY_COMMUNION)->val2;
return (short)cap_value(hplus, 0, SHRT_MAX);
}
@ -12693,6 +12700,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_WEAPONBREAKER:
val2 = val1 * 2 * 100; // Chance to break weapon
break;
case SC_TEMPORARY_COMMUNION:
val2 = val1 * 3;
break;
default:
if (calc_flag.none() && scdb->skill_id == 0 && scdb->icon == EFST_BLANK && scdb->opt1 == OPT1_NONE && scdb->opt2 == OPT2_NONE && scdb->state.none() && scdb->flag.none() && scdb->endonstart.empty() && scdb->endreturn.empty() && scdb->fail.empty() && scdb->endonend.empty()) {