1
0

mitigation_modifier sint16 added to info struct to allow modification of mitigation after the base is obtained from items

This commit is contained in:
Emagi 2025-01-26 14:59:55 -05:00
parent abfba27112
commit b8738480b2
2 changed files with 11 additions and 0 deletions

View File

@ -189,6 +189,7 @@ void Entity::MapInfoStruct()
get_int16_funcs["cur_mitigation"] = l::bind(&InfoStruct::get_cur_mitigation, &info_struct); 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["max_mitigation"] = l::bind(&InfoStruct::get_max_mitigation, &info_struct);
get_int16_funcs["mitigation_base"] = l::bind(&InfoStruct::get_mitigation_base, &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_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_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); 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["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["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_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_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_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); 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()); info->set_cur_mitigation(info->get_mitigation_base());
sint32 temp_mitigation = static_cast<sint32>(info->get_cur_mitigation()) + info->get_mitigation_modifier();
temp_mitigation = std::max(temp_mitigation, 0);
info->set_cur_mitigation(static_cast<int16>(temp_mitigation));
int32 calc_mit_cap = effective_level * rule_manager.GetZoneRule(GetZoneID(), R_Combat, CalculatedMitigationCapLevel)->GetInt32(); int32 calc_mit_cap = effective_level * rule_manager.GetZoneRule(GetZoneID(), R_Combat, CalculatedMitigationCapLevel)->GetInt32();
info->set_max_mitigation(calc_mit_cap); info->set_max_mitigation(calc_mit_cap);

View File

@ -116,6 +116,7 @@ struct InfoStruct{
cur_mitigation_ = 0; cur_mitigation_ = 0;
max_mitigation_ = 0; max_mitigation_ = 0;
mitigation_base_ = 0; mitigation_base_ = 0;
mitigation_modifier_ = 0;
avoidance_display_ = 0; avoidance_display_ = 0;
cur_avoidance_ = 0.0f; cur_avoidance_ = 0.0f;
base_avoidance_pct_ = 0; base_avoidance_pct_ = 0;
@ -322,6 +323,7 @@ struct InfoStruct{
cur_mitigation_ = oldStruct->get_cur_mitigation(); cur_mitigation_ = oldStruct->get_cur_mitigation();
max_mitigation_ = oldStruct->get_max_mitigation(); max_mitigation_ = oldStruct->get_max_mitigation();
mitigation_base_ = oldStruct->get_mitigation_base(); mitigation_base_ = oldStruct->get_mitigation_base();
mitigation_modifier_ = oldStruct->get_mitigation_modifier();
avoidance_display_ = oldStruct->get_avoidance_display(); avoidance_display_ = oldStruct->get_avoidance_display();
cur_avoidance_ = oldStruct->get_cur_avoidance(); cur_avoidance_ = oldStruct->get_cur_avoidance();
base_avoidance_pct_ = oldStruct->get_base_avoidance_pct(); base_avoidance_pct_ = oldStruct->get_base_avoidance_pct();
@ -523,6 +525,7 @@ struct InfoStruct{
int16 get_max_mitigation() { std::lock_guard<std::mutex> lk(classMutex); return max_mitigation_; } int16 get_max_mitigation() { std::lock_guard<std::mutex> lk(classMutex); return max_mitigation_; }
int16 get_mitigation_base() { std::lock_guard<std::mutex> lk(classMutex); return mitigation_base_; } int16 get_mitigation_base() { std::lock_guard<std::mutex> lk(classMutex); return mitigation_base_; }
sint16 get_mitigation_modifier() { std::lock_guard<std::mutex> lk(classMutex); return mitigation_modifier_; }
int16 get_avoidance_display() { std::lock_guard<std::mutex> lk(classMutex); return avoidance_display_; } int16 get_avoidance_display() { std::lock_guard<std::mutex> lk(classMutex); return avoidance_display_; }
float get_cur_avoidance() { std::lock_guard<std::mutex> lk(classMutex); return cur_avoidance_; } float get_cur_avoidance() { std::lock_guard<std::mutex> lk(classMutex); return cur_avoidance_; }
int16 get_base_avoidance_pct() { std::lock_guard<std::mutex> lk(classMutex); return base_avoidance_pct_; } int16 get_base_avoidance_pct() { std::lock_guard<std::mutex> lk(classMutex); return base_avoidance_pct_; }
@ -752,6 +755,7 @@ struct InfoStruct{
void set_max_mitigation(int16 value) { std::lock_guard<std::mutex> lk(classMutex); max_mitigation_ = value; } void set_max_mitigation(int16 value) { std::lock_guard<std::mutex> lk(classMutex); max_mitigation_ = value; }
void set_mitigation_base(int16 value) { std::lock_guard<std::mutex> lk(classMutex); mitigation_base_ = value; } void set_mitigation_base(int16 value) { std::lock_guard<std::mutex> lk(classMutex); mitigation_base_ = value; }
void add_mitigation_base(int16 value) { std::lock_guard<std::mutex> lk(classMutex); mitigation_base_ += value; } void add_mitigation_base(int16 value) { std::lock_guard<std::mutex> lk(classMutex); mitigation_base_ += value; }
void set_mitigation_modifier(sint16 value) { std::lock_guard<std::mutex> lk(classMutex); mitigation_modifier_ = value; }
void set_avoidance_display(int16 value) { std::lock_guard<std::mutex> lk(classMutex); avoidance_display_ = value; } void set_avoidance_display(int16 value) { std::lock_guard<std::mutex> lk(classMutex); avoidance_display_ = value; }
void set_cur_avoidance(float value) { std::lock_guard<std::mutex> lk(classMutex); cur_avoidance_ = value; } void set_cur_avoidance(float value) { std::lock_guard<std::mutex> lk(classMutex); cur_avoidance_ = value; }
@ -1076,6 +1080,7 @@ private:
int16 cur_mitigation_; int16 cur_mitigation_;
int16 max_mitigation_; int16 max_mitigation_;
int16 mitigation_base_; int16 mitigation_base_;
sint16 mitigation_modifier_;
int16 avoidance_display_; int16 avoidance_display_;
float cur_avoidance_; float cur_avoidance_;
int16 base_avoidance_pct_; int16 base_avoidance_pct_;