Updated Arrullo and Deep Sleep Lullaby (fixes #1063)

* Deep Sleep status is now avoidable thus removing the 5 second minimum duration.
* Corrected the success chance for Arrullo and Deep Sleep Lullaby being 10x higher.
* Deep Sleep status duration is now BaseDuration - 25 * tarBaseINT - 50 * tarBaseLevel.
-- Deep Sleep Lullaby duration is doubled with BaseDuration - 50 * tarBaseINT - 50 * tarBaseLevel.
This commit is contained in:
aleos89 2016-04-02 11:03:56 -04:00
parent c14758f932
commit 19e4f599de
2 changed files with 8 additions and 15 deletions

View File

@ -10100,24 +10100,20 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case SO_ARRULLO:
{
// Success chance: [(15 + 5 * Skill Level) + ( Caster's INT / 5 ) + ( Caster's Job Level / 5 ) - ( Target's INT / 6 ) - ( Target's LUK / 10 )] %
int rate = (15 + 5 * skill_lv) * 1000 + status_get_int(src) * 200 + (sd ? sd->status.job_level * 200 : 0) - status_get_int(bl) * 1000 / 6 - status_get_luk(bl) * 100;
// Resistance: {(Target's Base Level / 20) + (Target's Base INT / 40)} seconds
int duration = skill_get_time(skill_id, skill_lv) - (status_get_lv(bl) * 50 + (sd ? sd->status.int_ : status_get_base_status(bl)->int_) * 25);
int rate = (15 + 5 * skill_lv) + status_get_int(src) / 5 + (sd ? sd->status.job_level / 5 : 0) - status_get_int(bl) / 6 - status_get_luk(bl) / 10;
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
status_change_start(src,bl,type,rate,skill_lv,0,0,0,max(duration,5000),SCSTART_NORATEDEF|SCSTART_NOTICKDEF); // Avoid general resistance
sc_start(src, bl, type, rate, skill_lv, skill_get_time(skill_id, skill_lv));
}
break;
case WM_LULLABY_DEEPSLEEP:
if (flag&1) {
// Resistance: {(Target's Base Level / 20) + (Target's Base INT / 20)} seconds
int duration = skill_area_temp[6] - (status_get_lv(bl) * 50 + (sd ? sd->status.int_ : status_get_base_status(bl)->int_) * 50);
status_change_start(src,bl,type,skill_area_temp[5],skill_lv,0,0,0,max(duration,5000),SCSTART_NORATEDEF|SCSTART_NOTICKDEF); // Avoid general resistance
int rate = 4 * skill_lv + (sd ? pc_checkskill(sd, WM_LESSON) * 2) + status_get_lv(src) / 15 + (sd ? sd->status.job_level / 5 : 0);
int duration = skill_get_time(skill_id, skill_lv) - (status_get_base_status(bl)->int_ * 50 + status_get_lv(bl) * 50); // Duration reduction for Deep Sleep Lullaby is doubled
sc_start(src, bl, type, rate, skill_lv, duration);
} else {
// Success chance: [(Skill Level x 4) + (Voice Lessons Skill Level x 2) + (Caster's Base Level / 15) + (Caster's Job Level / 5)] %
skill_area_temp[5] = (4 * skill_lv * 1000) + ((sd) ? pc_checkskill(sd,WM_LESSON) : skill_get_max(WM_LESSON)) * 2000 + (status_get_lv(src) * 1000 / 15) + (sd ? sd->status.job_level * 200 : 0);
skill_area_temp[6] = skill_get_time(skill_id,skill_lv);
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ALL|BCT_WOS|1, skill_castend_nodamage_id);
}

View File

@ -7578,9 +7578,7 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
sc_def = status->agi*50;
break;
case SC_DEEPSLEEP:
sc_def = (sd ? sd->status.int_ : status_get_base_status(bl)->int_) * 50;
tick_def = 0; // Linear reduction instead
tick_def2 = ((sd ? sd->status.int_ : status_get_base_status(bl)->int_) + status_get_lv(bl)) * 50; // kRO balance update lists this formula
tick_def2 = status_get_base_status(bl)->int_ * 25 + status_get_lv(bl) * 50;
break;
case SC_NETHERWORLD:
// Resistance: {(Target's Base Level / 50) + (Target's Job Level / 10)} seconds
@ -7726,7 +7724,6 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
switch (type) {
case SC_ANKLE:
case SC_MARSHOFABYSS:
case SC_DEEPSLEEP:
tick = max(tick, 5000); // Minimum duration 5s
break;
case SC_FREEZING: