From 19e4f599de8d25bcd366ee1164970b136e2e68a8 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Sat, 2 Apr 2016 11:03:56 -0400 Subject: [PATCH] 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. --- src/map/skill.c | 18 +++++++----------- src/map/status.c | 5 +---- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 700589c71a..e50edb8cb5 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -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); } diff --git a/src/map/status.c b/src/map/status.c index 4867515abc..c8938bd8a2 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -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: