@@ -199,11 +199,11 @@ bool string_id<enchantment>::is_valid() const
199
199
}
200
200
201
201
template <typename TKey>
202
- void load_add_and_multiply ( const JsonObject &jo, const bool &is_child ,
203
- std::string_view array_key, const std::string &type_key, std::map<TKey, dbl_or_var> &add_map,
204
- std::map<TKey, dbl_or_var> &mult_map )
202
+ void load_add_and_multiply_dbl_or_var ( const JsonObject &jo, std::string_view array_key ,
203
+ const std::string &type_key, std::map<TKey, dbl_or_var> &add_map,
204
+ std::map<TKey, dbl_or_var> &mult_map )
205
205
{
206
- if ( !is_child && jo.has_array ( array_key ) ) {
206
+ if ( jo.has_array ( array_key ) ) {
207
207
for ( const JsonObject value_obj : jo.get_array ( array_key ) ) {
208
208
209
209
TKey value;
@@ -246,7 +246,11 @@ void load_add_and_multiply( const JsonObject &jo, std::string_view array_key,
246
246
if ( jo.has_array ( array_key ) ) {
247
247
for ( const JsonObject value_obj : jo.get_array ( array_key ) ) {
248
248
249
- const TKey value = TKey ( value_obj.get_string ( type_key ) );
249
+ // Migration from accidental corruption, remove after 0.J
250
+ const TKey value = !value_obj.has_string ( type_key ) && value_obj.has_string ( " value" ) ?
251
+ TKey ( value_obj.get_string ( " value" ) ) :
252
+ TKey ( value_obj.get_string ( type_key ) );
253
+ // Values of 0 used to be serialised exist (removed in 0.J exp) so for now load based on != 0 rather than on member existance
250
254
const double add = value_obj.get_float ( " add" , 0.0 );
251
255
const double mult = value_obj.get_float ( " multiply" , 0.0 );
252
256
@@ -293,7 +297,7 @@ void enchant_cache::save_add_and_multiply( JsonOut &jsout, const std::string_vie
293
297
continue ;
294
298
}
295
299
jsout.start_object ();
296
- jsout.member ( " value " , type );
300
+ jsout.member ( type_key , type );
297
301
jsout.member ( " multiply" , multiply );
298
302
jsout.end_object ();
299
303
}
@@ -569,25 +573,29 @@ void enchantment::load( const JsonObject &jo, std::string_view,
569
573
optional ( jo, was_loaded, " name" , name );
570
574
optional ( jo, was_loaded, " description" , description );
571
575
572
- load_add_and_multiply<enchant_vals::mod>( jo, is_child, " values" , " value" , values_add,
576
+ if ( is_child ) {
577
+ return ;
578
+ }
579
+
580
+ load_add_and_multiply_dbl_or_var<enchant_vals::mod>( jo, " values" , " value" , values_add,
573
581
values_multiply );
574
582
575
- load_add_and_multiply <skill_id>( jo, is_child, " skills" , " value" ,
576
- skill_values_add, skill_values_multiply );
583
+ load_add_and_multiply_dbl_or_var <skill_id>( jo, " skills" , " value" , skill_values_add ,
584
+ skill_values_multiply );
577
585
578
- load_add_and_multiply <bodypart_str_id>( jo, is_child , " encumbrance_modifier" , " part" ,
579
- encumbrance_values_add, encumbrance_values_multiply );
586
+ load_add_and_multiply_dbl_or_var <bodypart_str_id>( jo, " encumbrance_modifier" , " part" ,
587
+ encumbrance_values_add, encumbrance_values_multiply );
580
588
581
- load_add_and_multiply <damage_type_id>( jo, is_child , " melee_damage_bonus" , " type" ,
582
- damage_values_add, damage_values_multiply );
589
+ load_add_and_multiply_dbl_or_var <damage_type_id>( jo, " melee_damage_bonus" , " type" ,
590
+ damage_values_add, damage_values_multiply );
583
591
584
- load_add_and_multiply <damage_type_id>( jo, is_child , " incoming_damage_mod" , " type" ,
585
- armor_values_add, armor_values_multiply );
592
+ load_add_and_multiply_dbl_or_var <damage_type_id>( jo, " incoming_damage_mod" , " type" ,
593
+ armor_values_add, armor_values_multiply );
586
594
587
- load_add_and_multiply <damage_type_id>( jo, is_child , " incoming_damage_mod_post_absorbed" , " type" ,
588
- extra_damage_add, extra_damage_multiply );
595
+ load_add_and_multiply_dbl_or_var <damage_type_id>( jo, " incoming_damage_mod_post_absorbed" , " type" ,
596
+ extra_damage_add, extra_damage_multiply );
589
597
590
- if ( !is_child && jo.has_array ( " special_vision" ) ) {
598
+ if ( jo.has_array ( " special_vision" ) ) {
591
599
for ( const JsonObject vision_obj : jo.get_array ( " special_vision" ) ) {
592
600
special_vision _vision;
593
601
special_vision_descriptions _desc;
0 commit comments