From b8738480b23ced327700c196965a4e377231bb76 Mon Sep 17 00:00:00 2001 From: Emagi Date: Sun, 26 Jan 2025 14:59:55 -0500 Subject: [PATCH] mitigation_modifier sint16 added to info struct to allow modification of mitigation after the base is obtained from items --- source/WorldServer/Entity.cpp | 6 ++++++ source/WorldServer/Entity.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/source/WorldServer/Entity.cpp b/source/WorldServer/Entity.cpp index dfacd5c..f3836f9 100644 --- a/source/WorldServer/Entity.cpp +++ b/source/WorldServer/Entity.cpp @@ -189,6 +189,7 @@ void Entity::MapInfoStruct() get_int16_funcs["cur_mitigation"] = l::bind(&InfoStruct::get_cur_mitigation, &info_struct); get_int16_funcs["max_mitigation"] = l::bind(&InfoStruct::get_max_mitigation, &info_struct); get_int16_funcs["mitigation_base"] = l::bind(&InfoStruct::get_mitigation_base, &info_struct); + get_sint16_funcs["mitigation_modifier"] = l::bind(&InfoStruct::get_mitigation_modifier, &info_struct); get_int16_funcs["avoidance_display"] = l::bind(&InfoStruct::get_avoidance_display, &info_struct); get_float_funcs["cur_avoidance"] = l::bind(&InfoStruct::get_cur_avoidance, &info_struct); get_int16_funcs["base_avoidance_pct"] = l::bind(&InfoStruct::get_base_avoidance_pct, &info_struct); @@ -395,6 +396,7 @@ void Entity::MapInfoStruct() set_int16_funcs["cur_mitigation"] = l::bind(&InfoStruct::set_cur_mitigation, &info_struct, l::_1); set_int16_funcs["max_mitigation"] = l::bind(&InfoStruct::set_max_mitigation, &info_struct, l::_1); set_int16_funcs["mitigation_base"] = l::bind(&InfoStruct::set_mitigation_base, &info_struct, l::_1); + set_sint16_funcs["mitigation_modifier"] = l::bind(&InfoStruct::set_mitigation_modifier, &info_struct, l::_1); set_int16_funcs["avoidance_display"] = l::bind(&InfoStruct::set_avoidance_display, &info_struct, l::_1); set_float_funcs["cur_avoidance"] = l::bind(&InfoStruct::set_cur_avoidance, &info_struct, l::_1); set_int16_funcs["base_avoidance_pct"] = l::bind(&InfoStruct::set_base_avoidance_pct, &info_struct, l::_1); @@ -1469,6 +1471,10 @@ void Entity::CalculateBonuses(){ info->set_cur_mitigation(info->get_mitigation_base()); + sint32 temp_mitigation = static_cast(info->get_cur_mitigation()) + info->get_mitigation_modifier(); + temp_mitigation = std::max(temp_mitigation, 0); + info->set_cur_mitigation(static_cast(temp_mitigation)); + int32 calc_mit_cap = effective_level * rule_manager.GetZoneRule(GetZoneID(), R_Combat, CalculatedMitigationCapLevel)->GetInt32(); info->set_max_mitigation(calc_mit_cap); diff --git a/source/WorldServer/Entity.h b/source/WorldServer/Entity.h index 3ffbf96..c0ffe34 100644 --- a/source/WorldServer/Entity.h +++ b/source/WorldServer/Entity.h @@ -116,6 +116,7 @@ struct InfoStruct{ cur_mitigation_ = 0; max_mitigation_ = 0; mitigation_base_ = 0; + mitigation_modifier_ = 0; avoidance_display_ = 0; cur_avoidance_ = 0.0f; base_avoidance_pct_ = 0; @@ -322,6 +323,7 @@ struct InfoStruct{ cur_mitigation_ = oldStruct->get_cur_mitigation(); max_mitigation_ = oldStruct->get_max_mitigation(); mitigation_base_ = oldStruct->get_mitigation_base(); + mitigation_modifier_ = oldStruct->get_mitigation_modifier(); avoidance_display_ = oldStruct->get_avoidance_display(); cur_avoidance_ = oldStruct->get_cur_avoidance(); base_avoidance_pct_ = oldStruct->get_base_avoidance_pct(); @@ -523,6 +525,7 @@ struct InfoStruct{ int16 get_max_mitigation() { std::lock_guard lk(classMutex); return max_mitigation_; } int16 get_mitigation_base() { std::lock_guard lk(classMutex); return mitigation_base_; } + sint16 get_mitigation_modifier() { std::lock_guard lk(classMutex); return mitigation_modifier_; } int16 get_avoidance_display() { std::lock_guard lk(classMutex); return avoidance_display_; } float get_cur_avoidance() { std::lock_guard lk(classMutex); return cur_avoidance_; } int16 get_base_avoidance_pct() { std::lock_guard lk(classMutex); return base_avoidance_pct_; } @@ -752,6 +755,7 @@ struct InfoStruct{ void set_max_mitigation(int16 value) { std::lock_guard lk(classMutex); max_mitigation_ = value; } void set_mitigation_base(int16 value) { std::lock_guard lk(classMutex); mitigation_base_ = value; } void add_mitigation_base(int16 value) { std::lock_guard lk(classMutex); mitigation_base_ += value; } + void set_mitigation_modifier(sint16 value) { std::lock_guard lk(classMutex); mitigation_modifier_ = value; } void set_avoidance_display(int16 value) { std::lock_guard lk(classMutex); avoidance_display_ = value; } void set_cur_avoidance(float value) { std::lock_guard lk(classMutex); cur_avoidance_ = value; } @@ -1076,6 +1080,7 @@ private: int16 cur_mitigation_; int16 max_mitigation_; int16 mitigation_base_; + sint16 mitigation_modifier_; int16 avoidance_display_; float cur_avoidance_; int16 base_avoidance_pct_;