From ce5de238742ef84b9c559e453bbeacba2f4e2ed9 Mon Sep 17 00:00:00 2001 From: Atemo Date: Mon, 17 Jun 2024 19:38:00 +0200 Subject: [PATCH] Updated get_bosstype and UMOB_MODE (#8439) * Updated mob_data::get_bosstype() to use current mob data instead of db data to fix issue when the mode is changed via the setunitdata script command. * Added unit_refresh in UMOB_MODE to refresh the mini icon near the monster indicating the monster type. --- src/map/mob.cpp | 6 ++++-- src/map/script.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/map/mob.cpp b/src/map/mob.cpp index c6961f13aa..9e1a384a2b 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -377,8 +377,10 @@ e_mob_bosstype s_mob_db::get_bosstype(){ } e_mob_bosstype mob_data::get_bosstype(){ - if( this->db != nullptr ){ - return this->db->get_bosstype(); + if( status_has_mode( &this->status, MD_MVP ) ){ + return BOSSTYPE_MVP; + }else if( this->status.class_ == CLASS_BOSS ){ + return BOSSTYPE_MINIBOSS; }else{ return BOSSTYPE_NONE; } diff --git a/src/map/script.cpp b/src/map/script.cpp index 0446c7741c..27b55e68ba 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -19264,7 +19264,12 @@ BUILDIN_FUNC(setunitdata) case UMOB_X: if (!unit_walktoxy(bl, (short)value, md->bl.y, 2)) unit_movepos(bl, (short)value, md->bl.y, 0, 0); break; case UMOB_Y: if (!unit_walktoxy(bl, md->bl.x, (short)value, 2)) unit_movepos(bl, md->bl.x, (short)value, 0, 0); break; case UMOB_SPEED: md->base_status->speed = (unsigned short)value; status_calc_misc(bl, &md->status, md->level); calc_status = true; break; - case UMOB_MODE: md->base_status->mode = (enum e_mode)value; calc_status = true; break; + case UMOB_MODE: + md->base_status->mode = (enum e_mode)value; + // Mob mode must be updated before calling unit_refresh + status_calc_bl_(&md->bl, status_db.getSCB_BATTLE()); + unit_refresh(bl); + break; case UMOB_AI: md->special_state.ai = (enum mob_ai)value; break; case UMOB_SCOPTION: md->sc.option = (unsigned short)value; break; case UMOB_SEX: md->vd->sex = (char)value; unit_refresh(bl); break;