@ -170,17 +170,11 @@ ItemEnchant::ItemEnchant(const std::string_view enchantName)
for ( const auto & [ attr , val ] : ItemEnchantInfo : : ENCHANT_LIST . at ( this - > enchantName ) . minStatModifiers ) {
float minVal = ItemEnchantInfo : : ENCHANT_LIST . at ( this - > enchantName ) . minStatModifiers . A_Read ( attr ) ;
float maxVal = ItemEnchantInfo : : ENCHANT_LIST . at ( this - > enchantName ) . maxStatModifiers . A_Read ( attr ) ;
if ( minVal = = maxVal ) A ( attr ) = minVal ;
if ( minVal = = maxVal ) Set Attribute ( attr . ActualName ( ) , minVal ) ;
else {
const auto & randRange { std : : ranges : : iota_view ( int ( minVal ) , int ( maxVal + 1 ) ) } ;
A ( attr ) = randRange [ util : : random ( ) % randRange . size ( ) ] ;
Set Attribute ( attr . ActualName ( ) , randRange [ util : : random ( ) % randRange . size ( ) ] ) ;
}
const std : : string wrappedConfigStr { std : : vformat ( " {{{}}} " , std : : make_format_args ( attr . ActualName ( ) ) ) } ;
size_t configValInd { description . find ( wrappedConfigStr ) } ;
if ( configValInd = = std : : string : : npos ) continue ;
std : : string formattedFloat { std : : format ( " {}{}#FFFFFF " , ItemEnchantInfo : : enchantAttributeCol . toHTMLColorCode ( ) , A_Read ( attr ) ) } ;
description = description . replace ( configValInd , wrappedConfigStr . length ( ) , formattedFloat ) ;
}
}
@ -248,3 +242,29 @@ const std::string ItemEnchant::RollRandomEnchant(){
return filteredEnchants [ util : : random ( ) % filteredEnchants . size ( ) ] . Name ( ) ;
}
void ItemEnchant : : UpdateDescription ( ) {
description = ItemEnchantInfo : : ENCHANT_LIST . at ( this - > enchantName ) . Description ( ) ;
for ( const auto & [ attr , val ] : ItemEnchantInfo : : ENCHANT_LIST . at ( this - > enchantName ) . minStatModifiers ) {
const std : : string wrappedConfigStr { std : : vformat ( " {{{}}} " , std : : make_format_args ( attr . ActualName ( ) ) ) } ;
size_t configValInd { description . find ( wrappedConfigStr ) } ;
if ( configValInd = = std : : string : : npos ) continue ;
std : : string formattedFloat { std : : format ( " {}{}#FFFFFF " , ItemEnchantInfo : : enchantAttributeCol . toHTMLColorCode ( ) , GetAttribute ( attr . ActualName ( ) ) ) } ;
description = description . replace ( configValInd , wrappedConfigStr . length ( ) , formattedFloat ) ;
}
}
void ItemEnchant : : SetAttribute ( const std : : string_view attr , const float val ) {
stats . A ( attr ) = val ;
UpdateDescription ( ) ;
}
const float & ItemEnchant : : GetAttribute ( const std : : string_view attr ) const {
return stats . A_Read ( attr ) ;
}
std : : map < ItemAttribute , float > : : const_iterator ItemEnchant : : begin ( ) const {
return stats . begin ( ) ;
}
std : : map < ItemAttribute , float > : : const_iterator ItemEnchant : : end ( ) const {
return stats . end ( ) ;
}