diff --git a/src/engine/mbEnums.java b/src/engine/mbEnums.java index ed39f3da..207e92cb 100644 --- a/src/engine/mbEnums.java +++ b/src/engine/mbEnums.java @@ -824,6 +824,7 @@ public class mbEnums { ACID, DISEASE, UNKNOWN, + ANTISIEGE, // these added for immunities ATTACK, POWERS, @@ -1509,6 +1510,15 @@ public class mbEnums { } } + // rune_type values from the client cache data (COBJECTS/RUNE) + + public enum RuneType { + CLASS, + DISCIPLINE, + RACE, + TALENT + } + public enum ShrineType { Aelfborn(1701900, -75506007, true), diff --git a/src/engine/parsers/cache/CacheParserUtil.java b/src/engine/parsers/cache/CacheParserUtil.java index 091173a2..8f968149 100644 --- a/src/engine/parsers/cache/CacheParserUtil.java +++ b/src/engine/parsers/cache/CacheParserUtil.java @@ -158,14 +158,22 @@ public class CacheParserUtil { return valueMap; } - public static LinkedHashMap readFloatMap(JSONObject mapJson) { + // {"SLASHING": 0.0, ...} -> enum map - LinkedHashMap floatMap = new LinkedHashMap<>(); + public static > EnumMap readEnumFloatMap(Class enumClass, JSONObject mapJson, + int templateId, String fieldName) { - for (String key : mapJson.keySet()) - floatMap.put(key, mapJson.getFloat(key)); + EnumMap enumMap = new EnumMap<>(enumClass); + E enumValue; - return floatMap; + for (String key : mapJson.keySet()) { + enumValue = readEnum(enumClass, key, templateId, fieldName); + + if (enumValue != null) + enumMap.put(enumValue, mapJson.getFloat(key)); + } + + return enumMap; } // Values are read as long and wrapped to int so unsigned 32-bit hashes survive. diff --git a/src/engine/parsers/cache/DeedParser.java b/src/engine/parsers/cache/DeedParser.java index c3af2eff..ceb0e21c 100644 --- a/src/engine/parsers/cache/DeedParser.java +++ b/src/engine/parsers/cache/DeedParser.java @@ -84,7 +84,8 @@ public class DeedParser { deed.combat_health_current = deedJson.getFloat("combat_health_current"); deed.combat_health_full = deedJson.getFloat("combat_health_full"); - deed.combat_attack_resist.putAll(CacheParserUtil.readFloatMap(deedJson.getJSONObject("combat_attack_resist"))); + deed.combat_attack_resist.putAll(CacheParserUtil.readEnumFloatMap(mbEnums.DamageType.class, deedJson.getJSONObject("combat_attack_resist"), + templateId, "combat_attack_resist")); deed.combat_powers = deedJson.getJSONArray("combat_powers"); // item_ diff --git a/src/engine/parsers/cache/RuneParser.java b/src/engine/parsers/cache/RuneParser.java index cb1ba964..277cb68f 100644 --- a/src/engine/parsers/cache/RuneParser.java +++ b/src/engine/parsers/cache/RuneParser.java @@ -100,7 +100,8 @@ public class RuneParser { rune.combat_health_current = runeJson.getFloat("combat_health_current"); rune.combat_health_full = runeJson.getFloat("combat_health_full"); - rune.combat_attack_resist.putAll(CacheParserUtil.readFloatMap(runeJson.getJSONObject("combat_attack_resist"))); + rune.combat_attack_resist.putAll(CacheParserUtil.readEnumFloatMap(mbEnums.DamageType.class, runeJson.getJSONObject("combat_attack_resist"), + templateId, "combat_attack_resist")); rune.combat_powers = runeJson.getJSONArray("combat_powers"); // item_ @@ -177,7 +178,7 @@ public class RuneParser { // rune_ - rune.rune_type = runeJson.getString("rune_type"); + rune.rune_type = CacheParserUtil.readEnum(mbEnums.RuneType.class, runeJson.getString("rune_type"), templateId, "rune_type"); subType = runeJson.get("rune_sub_type"); diff --git a/src/engine/parsers/objects/DeedTemplate.java b/src/engine/parsers/objects/DeedTemplate.java index 9699e015..a78652d6 100644 --- a/src/engine/parsers/objects/DeedTemplate.java +++ b/src/engine/parsers/objects/DeedTemplate.java @@ -56,7 +56,7 @@ public class DeedTemplate { public float combat_health_current; public float combat_health_full; - public final LinkedHashMap combat_attack_resist = new LinkedHashMap<>(); + public final EnumMap combat_attack_resist = new EnumMap<>(mbEnums.DamageType.class); public JSONArray combat_powers; // item_ diff --git a/src/engine/parsers/objects/RuneTemplate.java b/src/engine/parsers/objects/RuneTemplate.java index 1aaa854a..0de46045 100644 --- a/src/engine/parsers/objects/RuneTemplate.java +++ b/src/engine/parsers/objects/RuneTemplate.java @@ -59,7 +59,7 @@ public class RuneTemplate { public float combat_health_current; public float combat_health_full; - public final LinkedHashMap combat_attack_resist = new LinkedHashMap<>(); + public final EnumMap combat_attack_resist = new EnumMap<>(mbEnums.DamageType.class); public JSONArray combat_powers; // item_ @@ -109,7 +109,7 @@ public class RuneTemplate { // rune_ - public String rune_type; + public mbEnums.RuneType rune_type; public String rune_sub_type; // A handful of runes carry a number instead of a name in rune_sub_type.