From 365439943a76f23a450ec4649b8d0f333973c9ff Mon Sep 17 00:00:00 2001 From: Aleos Date: Thu, 11 Aug 2022 08:36:26 -0400 Subject: [PATCH] Cleans up Dancing cancellation (#7166) * Follow up to 724257e. * Fixes an issue where the val4 value was cleared too early resulting in the move state not being cleared properly. --- src/map/status.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/map/status.cpp b/src/map/status.cpp index 18e84126fe..bf9824a2ab 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -5205,7 +5205,7 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, std::bi || (sc->data[SC_FEAR] && sc->data[SC_FEAR]->val2 > 0) || (sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1) || (sc->data[SC_HIDING] && (bl->type != BL_PC || (pc_checkskill(BL_CAST(BL_PC,bl),RG_TUNNELDRIVE) <= 0))) - || (sc->data[SC_DANCING] && ( + || (sc->data[SC_DANCING] && sc->data[SC_DANCING]->val4 && ( #ifndef RENEWAL !sc->data[SC_LONGING] || #endif @@ -12935,14 +12935,15 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const break; case SC_DANCING: { - struct map_session_data *dsd; - struct status_change_entry *dsc; + map_session_data *dsd; if(sce->val4 && sce->val4 != BCT_SELF && (dsd=map_id2sd(sce->val4))) { // End status on partner as well - dsc = dsd->sc.data[SC_DANCING]; + status_change_entry *dsc = dsd->sc.data[SC_DANCING]; + if(dsc) { // This will prevent recursive loops. - dsc->val2 = dsc->val4 = 0; + dsc->val2 = 0; + dsc->val4 = BCT_SELF; status_change_end(&dsd->bl, SC_DANCING, INVALID_TIMER); } }