From 103416ca4079aa288f94abf9f709f94a32971a74 Mon Sep 17 00:00:00 2001 From: Aleos Date: Fri, 27 Nov 2020 18:47:50 -0500 Subject: [PATCH] Fixes Advent of Star Emperor behavior (#5424) * Fixes #5409. * Adjusts the behavior of Advent of Star Emperor spheres to work like Millennium Shield. * Fixes the spheres not visually being removed when the the status ends. Thanks to @molavian053! --- src/map/battle.cpp | 10 ++-------- src/map/skill.cpp | 6 ++---- src/map/status.cpp | 10 ++++++++++ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/map/battle.cpp b/src/map/battle.cpp index d6e9ceac54..3c3976c3ac 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -1101,22 +1101,16 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe if ((sce = sc->data[SC_DIMENSION1]) && damage > 0) { sce->val2 -= static_cast(cap_value(damage, INT_MIN, INT_MAX)); - if (sce->val2 >= 0) - damage = 0; - else - damage = -sce->val2; if (sce->val2 <= 0) status_change_end(target, SC_DIMENSION1, INVALID_TIMER); + return false; } if ((sce = sc->data[SC_DIMENSION2]) && damage > 0) { sce->val2 -= static_cast(cap_value(damage, INT_MIN, INT_MAX)); - if (sce->val2 >= 0) - damage = 0; - else - damage = -sce->val2; if (sce->val2 <= 0) status_change_end(target, SC_DIMENSION2, INVALID_TIMER); + return false; } if (damage == 0) diff --git a/src/map/skill.cpp b/src/map/skill.cpp index d4a4ede34b..ccecfc1e24 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -7511,10 +7511,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (sd) { // Remove old shields if any exist. pc_delspiritball(sd, sd->spiritball, 0); - for (i = 0; i < 2; i++) { - pc_addspiritball(sd, skill_get_time2(SJ_BOOKOFDIMENSION, 1), 2); - sc_start2(src, bl, static_cast(SC_DIMENSION1 + i), 100, skill_lv, status_get_max_sp(src), skill_get_time2(SJ_BOOKOFDIMENSION, 1)); - } + sc_start2(src, bl, SC_DIMENSION1, 100, skill_lv, status_get_max_sp(src), skill_get_time2(SJ_BOOKOFDIMENSION, 1)); + sc_start2(src, bl, SC_DIMENSION2, 100, skill_lv, status_get_max_sp(src), skill_get_time2(SJ_BOOKOFDIMENSION, 1)); } status_change_end(src, SC_DIMENSION, INVALID_TIMER); } diff --git a/src/map/status.cpp b/src/map/status.cpp index 69a81a2df8..3fae7d1fe5 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -12084,6 +12084,11 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val2 = 4 + 2 * val1; // ASPD Increase tick = INFINITE_TICK; break; + case SC_DIMENSION1: + case SC_DIMENSION2: + if (sd) + pc_addspiritball(sd, skill_get_time2(SJ_BOOKOFDIMENSION, 1), 2); + break; case SC_UNIVERSESTANCE: val2 = 2 + val1; // All Stats Increase tick = INFINITE_TICK; @@ -13567,6 +13572,11 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const case SC_JUMPINGCLAN: status_change_end(bl,SC_CLAN_INFO,INVALID_TIMER); break; + case SC_DIMENSION1: + case SC_DIMENSION2: + if (sd) + pc_delspiritball(sd, 1, 0); + break; case SC_SOULENERGY: if (sd) pc_delsoulball(sd, sd->soulball, false);