diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java index 86ad89889..7b515670a 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java @@ -1,7 +1,5 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; -import java.util.ArrayList; - import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; @@ -10,61 +8,60 @@ import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; import com.gpl.rpg.AndorsTrail.model.ability.traits.StatsModifierTraits; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceObjectParser; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonParserFor; import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.L; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; public final class ItemTraitsParser { - private final ResourceObjectParser actorConditionEffectParser_withDuration; - private final ResourceObjectParser actorConditionEffectParser_withoutDuration; - private final ResourceFileTokenizer tokenize4Fields = new ResourceFileTokenizer(4); - private final ResourceFileTokenizer tokenize2Fields = new ResourceFileTokenizer(2); - + private final JsonParserFor actorConditionEffectParser_withDuration; + private final JsonParserFor actorConditionEffectParser_withoutDuration; + public ItemTraitsParser(final ActorConditionTypeCollection actorConditionTypes) { - this.actorConditionEffectParser_withDuration = new ResourceObjectParser() { + this.actorConditionEffectParser_withDuration = new JsonParserFor() { @Override - public ActorConditionEffect parseRow(String[] parts) { + protected ActorConditionEffect parseObject(JSONObject o) throws JSONException { return new ActorConditionEffect( - actorConditionTypes.getActorConditionType(parts[0]) - , ResourceParserUtils.parseInt(parts[1], ActorCondition.MAGNITUDE_REMOVE_ALL) - , ResourceParserUtils.parseInt(parts[2], ActorCondition.DURATION_FOREVER) - , ResourceParserUtils.parseChance(parts[3]) - ); + actorConditionTypes.getActorConditionType(o.getString(JsonFieldNames.ActorConditionEffect.condition)) + , o.optInt(JsonFieldNames.ActorConditionEffect.magnitude, ActorCondition.MAGNITUDE_REMOVE_ALL) + , o.optInt(JsonFieldNames.ActorConditionEffect.duration, ActorCondition.DURATION_FOREVER) + , ResourceParserUtils.parseChance(o.getString(JsonFieldNames.ActorConditionEffect.chance)) + ); } }; - this.actorConditionEffectParser_withoutDuration = new ResourceObjectParser() { + this.actorConditionEffectParser_withoutDuration = new JsonParserFor() { @Override - public ActorConditionEffect parseRow(String[] parts) { + protected ActorConditionEffect parseObject(JSONObject o) throws JSONException { return new ActorConditionEffect( - actorConditionTypes.getActorConditionType(parts[0]) - , ResourceParserUtils.parseInt(parts[1], 1) + actorConditionTypes.getActorConditionType(o.getString(JsonFieldNames.ActorConditionEffect.condition)) + , o.optInt(JsonFieldNames.ActorConditionEffect.magnitude, 1) , ActorCondition.DURATION_FOREVER , ResourceParserUtils.always - ); + ); } }; } - public ItemTraits_OnUse parseItemTraits_OnUse(String[] parts, int startIndex, boolean parseTargetConditions) { - boolean hasEffect = ResourceParserUtils.parseBoolean(parts[startIndex], false); - if (!hasEffect) return null; + public ItemTraits_OnUse parseItemTraits_OnUse(JSONObject o) throws JSONException { + if (o == null) return null; - ConstRange boostCurrentHP = ResourceParserUtils.parseConstRange(parts[startIndex + 1], parts[startIndex + 2]); - ConstRange boostCurrentAP = ResourceParserUtils.parseConstRange(parts[startIndex + 3], parts[startIndex + 4]); + ConstRange boostCurrentHP = ResourceParserUtils.parseConstRange(o.optJSONObject(JsonFieldNames.ItemTraits_OnUse.increaseCurrentHP)); + ConstRange boostCurrentAP = ResourceParserUtils.parseConstRange(o.optJSONObject(JsonFieldNames.ItemTraits_OnUse.increaseCurrentAP)); final ArrayList addedConditions_source = new ArrayList(); final ArrayList addedConditions_target = new ArrayList(); - tokenize4Fields.tokenizeArray(parts[startIndex + 5], addedConditions_source, actorConditionEffectParser_withDuration); - if (parseTargetConditions) { - tokenize4Fields.tokenizeArray(parts[startIndex + 6], addedConditions_target, actorConditionEffectParser_withDuration); - } - if ( boostCurrentHP == null + actorConditionEffectParser_withDuration.parseRows(o.optJSONArray(JsonFieldNames.ItemTraits_OnUse.conditionsSource), addedConditions_source); + actorConditionEffectParser_withDuration.parseRows(o.optJSONArray(JsonFieldNames.ItemTraits_OnUse.conditionsTarget), addedConditions_target); + if ( boostCurrentHP == null && boostCurrentAP == null && addedConditions_source.isEmpty() && addedConditions_target.isEmpty() ) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Tried to parseItemTraits_OnUse , where hasEffect=" + parts[startIndex] + ", but all data was empty."); + L.log("OPTIMIZE: Tried to parseItemTraits_OnUse , where hasEffect=" + o.toString() + ", but all data was empty."); } return null; } else { @@ -80,17 +77,16 @@ public final class ItemTraitsParser { } } - public ItemTraits_OnEquip parseItemTraits_OnEquip(String[] parts, int startIndex) { - boolean hasEffect = ResourceParserUtils.parseBoolean(parts[startIndex], false); - if (!hasEffect) return null; + public ItemTraits_OnEquip parseItemTraits_OnEquip(JSONObject o) throws JSONException { + if (o == null) return null; - AbilityModifierTraits stats = ResourceParserUtils.parseAbilityModifierTraits(parts, startIndex + 1); + AbilityModifierTraits stats = ResourceParserUtils.parseAbilityModifierTraits(o); final ArrayList addedConditions = new ArrayList(); - tokenize2Fields.tokenizeArray(parts[startIndex + 12], addedConditions, actorConditionEffectParser_withoutDuration); + actorConditionEffectParser_withoutDuration.parseRows(o.optJSONArray(JsonFieldNames.ItemTraits_OnEquip.addedConditions), addedConditions); if (stats == null && addedConditions.isEmpty()) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Tried to parseItemTraits_OnEquip , where hasEffect=" + parts[startIndex] + ", but all data was empty."); + L.log("OPTIMIZE: Tried to parseItemTraits_OnEquip , where hasEffect=" + o.toString() + ", but all data was empty."); } return null; } else { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java index c25728ece..6be33bce2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTypeParser.java @@ -6,41 +6,43 @@ import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.Pair; +import org.json.JSONException; +import org.json.JSONObject; -public final class ItemTypeParser extends ResourceParserFor { +public final class ItemTypeParser extends JsonCollectionParserFor { private final DynamicTileLoader tileLoader; private final ItemTraitsParser itemTraitsParser; private final ItemCategoryCollection itemCategories; public ItemTypeParser(DynamicTileLoader tileLoader, ActorConditionTypeCollection actorConditionsTypes, ItemCategoryCollection itemCategories) { - super(39); this.tileLoader = tileLoader; this.itemTraitsParser = new ItemTraitsParser(actorConditionsTypes); this.itemCategories = itemCategories; } @Override - public Pair parseRow(String[] parts) { - final String itemTypeName = parts[2]; - String id = parts[0]; - final ItemTraits_OnEquip equipEffect = itemTraitsParser.parseItemTraits_OnEquip(parts, 7); - final ItemTraits_OnUse useEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 20, false); - final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 26, true); - final ItemTraits_OnUse killEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 33, false); + public Pair parseObject(JSONObject o) throws JSONException { + final String id = o.getString(JsonFieldNames.ItemType.itemTypeID); + final String itemTypeName = o.getString(JsonFieldNames.ItemType.name); + final ItemTraits_OnEquip equipEffect = itemTraitsParser.parseItemTraits_OnEquip(o.optJSONObject(JsonFieldNames.ItemType.equipEffect)); + final ItemTraits_OnUse useEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.ItemType.useEffect)); + final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.ItemType.hitEffect)); + final ItemTraits_OnUse killEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.ItemType.killEffect)); - final int baseMarketCost = Integer.parseInt(parts[6]); - final boolean hasManualPrice = ResourceParserUtils.parseBoolean(parts[5], false); + final int baseMarketCost = o.getInt(JsonFieldNames.ItemType.baseMarketCost); + final boolean hasManualPrice = o.optInt(JsonFieldNames.ItemType.hasManualPrice, 0) > 0; final ItemType itemType = new ItemType( id - , ResourceParserUtils.parseImageID(tileLoader, parts[1]) + , ResourceParserUtils.parseImageID(tileLoader, o.getString(JsonFieldNames.ItemType.iconID)) , itemTypeName - , itemCategories.getItemCategory(parts[3]) // category - , ResourceParserUtils.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY) // Displaytype - , hasManualPrice // hasManualPrice - , baseMarketCost // Base market cost + , itemCategories.getItemCategory(o.getString(JsonFieldNames.ItemType.category)) + , o.optInt(JsonFieldNames.ItemType.displaytype, ItemType.DISPLAYTYPE_ORDINARY) + , hasManualPrice + , baseMarketCost , equipEffect , useEffect , hitEffect diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java index 1b6023de9..d008f7084 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java @@ -1,19 +1,21 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import android.util.FloatMath; - import com.gpl.rpg.AndorsTrail.controller.Constants; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection; import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.DropListCollection; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.Pair; import com.gpl.rpg.AndorsTrail.util.Size; +import org.json.JSONException; +import org.json.JSONObject; -public final class MonsterTypeParser extends ResourceParserFor { +public final class MonsterTypeParser extends JsonCollectionParserFor { private final Size size1x1 = new Size(1, 1); private final DropListCollection droplists; @@ -21,51 +23,51 @@ public final class MonsterTypeParser extends ResourceParserFor { private final DynamicTileLoader tileLoader; public MonsterTypeParser(final DropListCollection droplists, final ActorConditionTypeCollection actorConditionTypes, final DynamicTileLoader tileLoader) { - super(28); this.itemTraitsParser = new ItemTraitsParser(actorConditionTypes); this.droplists = droplists; this.tileLoader = tileLoader; } - + @Override - public Pair parseRow(String[] parts) { - final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 21, true); - int maxHP = ResourceParserUtils.parseInt(parts[8], 1); - int maxAP = ResourceParserUtils.parseInt(parts[9], 10); - int attackCost = ResourceParserUtils.parseInt(parts[11], 10); - int attackChance = ResourceParserUtils.parseInt(parts[12], 0); - ConstRange damagePotential = ResourceParserUtils.parseConstRange(parts[15], parts[16]); - int criticalSkill = ResourceParserUtils.parseInt(parts[13], 0); - float criticalMultiplier = ResourceParserUtils.parseFloat(parts[14], 0); - int blockChance = ResourceParserUtils.parseInt(parts[17], 0); - int damageResistance = ResourceParserUtils.parseInt(parts[18], 0); - + protected Pair parseObject(JSONObject o) throws JSONException { + final String monsterTypeID = o.getString(JsonFieldNames.Monster.monsterTypeID); + + int maxHP = o.optInt(JsonFieldNames.Monster.maxHP, 1); + int maxAP = o.optInt(JsonFieldNames.Monster.maxAP, 10); + int attackCost = o.optInt(JsonFieldNames.Monster.attackCost, 10); + int attackChance = o.optInt(JsonFieldNames.Monster.attackChance, 0); + ConstRange damagePotential = ResourceParserUtils.parseConstRange(o.optJSONObject(JsonFieldNames.Monster.attackDamage)); + int criticalSkill = o.optInt(JsonFieldNames.Monster.criticalSkill, 0); + float criticalMultiplier = (float) o.optDouble(JsonFieldNames.Monster.criticalMultiplier, 0); + int blockChance = o.optInt(JsonFieldNames.Monster.blockChance, 0); + int damageResistance = o.optInt(JsonFieldNames.Monster.damageResistance, 0); + final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(o.optJSONObject(JsonFieldNames.Monster.hitEffect)); + final int exp = getExpectedMonsterExperience(attackCost, attackChance, damagePotential, criticalSkill, criticalMultiplier, blockChance, damageResistance, hitEffect, maxHP, maxAP); - - final String monsterTypeId = parts[0]; - return new Pair(monsterTypeId, new MonsterType( - monsterTypeId - , parts[2] // Name - , parts[3] // SpawnGroup - , exp // Exp - , droplists.getDropList(parts[19]) // Droplist - , ResourceParserUtils.parseNullableString(parts[20]) // PhraseID - , ResourceParserUtils.parseBoolean(parts[6], false) // isUnique - , ResourceParserUtils.parseNullableString(parts[7]) // Faction - , ResourceParserUtils.parseInt(parts[5], MonsterType.MONSTERCLASS_HUMANOID) // MonsterClass - , ResourceParserUtils.parseSize(parts[4], size1x1) //TODO: This could be loaded from the tileset size instead. - , ResourceParserUtils.parseImageID(tileLoader, parts[1]) // IconID - , maxAP - , maxHP - , ResourceParserUtils.parseInt(parts[10], 10) // MoveCost - , attackCost - , attackChance - , criticalSkill - , criticalMultiplier - , damagePotential - , blockChance - , damageResistance - , hitEffect == null ? null : new ItemTraits_OnUse[] { hitEffect } + + return new Pair(monsterTypeID, new MonsterType( + monsterTypeID + , o.getString(JsonFieldNames.Monster.name) + , o.getString(JsonFieldNames.Monster.spawnGroup) + , exp + , droplists.getDropList(o.optString(JsonFieldNames.Monster.droplistID)) + , o.optString(JsonFieldNames.Monster.phraseID) + , o.optInt(JsonFieldNames.Monster.unique, 0) > 0 + , o.optString(JsonFieldNames.Monster.faction) + , o.optInt(JsonFieldNames.Monster.monsterClass, MonsterType.MONSTERCLASS_HUMANOID) + , ResourceParserUtils.parseSize(o.optString(JsonFieldNames.Monster.size), size1x1) //TODO: This could be loaded from the tileset size instead. + , ResourceParserUtils.parseImageID(tileLoader, o.getString(JsonFieldNames.Monster.iconID)) + , maxAP + , maxHP + , o.optInt(JsonFieldNames.Monster.moveCost, 10) + , attackCost + , attackChance + , criticalSkill + , criticalMultiplier + , damagePotential + , blockChance + , damageResistance + , hitEffect == null ? null : new ItemTraits_OnUse[] { hitEffect } )); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java index bc92956c1..f5fa50894 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/QuestParser.java @@ -1,28 +1,30 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; +import com.gpl.rpg.AndorsTrail.model.quest.Quest; +import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonCollectionParserFor; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonParserFor; +import com.gpl.rpg.AndorsTrail.util.Pair; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import com.gpl.rpg.AndorsTrail.model.quest.Quest; -import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor; -import com.gpl.rpg.AndorsTrail.util.Pair; - -public final class QuestParser extends ResourceParserFor { +public final class QuestParser extends JsonCollectionParserFor { private int sortOrder = 0; - private final ResourceFileTokenizer questStageResourceTokenizer = new ResourceFileTokenizer(4); - private final ResourceObjectParser questLogEntryParser = new ResourceObjectParser() { + private final JsonParserFor questLogEntryParser = new JsonParserFor() { @Override - public QuestLogEntry parseRow(String[] parts) { + protected QuestLogEntry parseObject(JSONObject o) throws JSONException { return new QuestLogEntry( - Integer.parseInt(parts[0]) // Progress - , parts[1] // Logtext - , ResourceParserUtils.parseInt(parts[2], 0) // RewardExperience - , ResourceParserUtils.parseBoolean(parts[3], false) // FinishesQuest - ); + o.getInt(JsonFieldNames.QuestLogEntry.progress) + ,o.getString(JsonFieldNames.QuestLogEntry.logText) + ,o.optInt(JsonFieldNames.QuestLogEntry.rewardExperience, 0) + ,o.optInt(JsonFieldNames.QuestLogEntry.finishesQuest, 0) > 0 + ); } }; private final Comparator sortByQuestProgress = new Comparator() { @@ -31,29 +33,24 @@ public final class QuestParser extends ResourceParserFor { return a.progress - b.progress; } }; - - public QuestParser() { - super(4); - } - + @Override - public Pair parseRow(String[] parts) { - // [id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|]; - + protected Pair parseObject(JSONObject o) throws JSONException { + final String id = o.getString(JsonFieldNames.Quest.questID); + final ArrayList stages = new ArrayList(); - questStageResourceTokenizer.tokenizeArray(parts[3], stages, questLogEntryParser); - Collections.sort(stages, sortByQuestProgress); + questLogEntryParser.parseRows(o.getJSONArray(JsonFieldNames.Quest.stages), stages); + Collections.sort(stages, sortByQuestProgress); final QuestLogEntry[] stages_ = stages.toArray(new QuestLogEntry[stages.size()]); - + ++sortOrder; - - final String questID = parts[0]; - return new Pair(questID, new Quest( - questID // questID - , parts[1] // name + + return new Pair(id, new Quest( + id + , o.getString(JsonFieldNames.Quest.name) , stages_ - , ResourceParserUtils.parseBoolean(parts[2], false) // showInLog + , o.optInt(JsonFieldNames.Quest.showInLog, 0) > 0 , sortOrder - )); + )); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java index f0291273a..c539d9395 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java @@ -5,60 +5,19 @@ import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; import com.gpl.rpg.AndorsTrail.model.ability.traits.StatsModifierTraits; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; -import com.gpl.rpg.AndorsTrail.util.*; -import org.json.JSONArray; +import com.gpl.rpg.AndorsTrail.util.ConstRange; +import com.gpl.rpg.AndorsTrail.util.L; +import com.gpl.rpg.AndorsTrail.util.Size; import org.json.JSONException; import org.json.JSONObject; -import java.util.ArrayList; - public final class ResourceParserUtils { public static int parseImageID(DynamicTileLoader tileLoader, String s) { String[] parts = s.split(":"); return tileLoader.prepareTileID(parts[0], Integer.parseInt(parts[1])); } - public static Range parseRange(String min, String max) { - if ( (max == null || max.length() <= 0) - && (min == null || min.length() <= 0) ) { - return null; - } - if (max == null || max.length() <= 0) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Unable to parse range with min=" + min + " because max was empty."); - } - return null; - } - if (min == null || min.length() <= 0) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Unable to parse range with max=" + max + " because min was empty."); - } - return null; - } - - return new Range(Integer.parseInt(max), Integer.parseInt(min)); - } - public static ConstRange parseConstRange(String min, String max) { - if ( (max == null || max.length() <= 0) - && (min == null || min.length() <= 0) ) { - return null; - } - if (max == null || max.length() <= 0) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Unable to parse range with min=" + min + " because max was empty."); - } - return null; - } - if (min == null || min.length() <= 0) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Unable to parse range with max=" + max + " because min was empty."); - } - return null; - } - - return new ConstRange(Integer.parseInt(max), Integer.parseInt(min)); - } - + private static final Size size1x1 = new Size(1, 1); public static Size parseSize(String s, final Size defaultSize) { if (s == null || s.length() <= 0) return defaultSize; @@ -68,110 +27,21 @@ public final class ResourceParserUtils { return new Size(Integer.parseInt(parts[0]), Integer.parseInt(parts[1])); } - public static String parseNullableString(String s) { - if (s == null || s.length() <= 0) return null; - return s; - } public static int parseInt(String s, int defaultValue) { if (s == null || s.length() <= 0) return defaultValue; return Integer.parseInt(s); } - public static float parseFloat(String s, int defaultValue) { - if (s == null || s.length() <= 0) return defaultValue; - return Float.parseFloat(s); - } - public static boolean parseBoolean(String s, boolean defaultValue) { - if (s == null || s.length() <= 0) return defaultValue; - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - if (Character.isDigit(s.charAt(0))) { - if (Integer.parseInt(s) > 1) { - L.log("WARNING: Tried to parseBoolean on \"" + s + "\"."); - } - } - } - return !s.equals("0") && !s.equals("false"); - } - public static StatsModifierTraits parseStatsModifierTraits(String[] parts, int startIndex) { - boolean hasEffect = parseBoolean(parts[startIndex], false); - if (!hasEffect) return null; - - String visualEffectID = parts[startIndex + 1]; - ConstRange boostCurrentHP = parseConstRange(parts[startIndex + 2], parts[startIndex + 3]); - ConstRange boostCurrentAP = parseConstRange(parts[startIndex + 4], parts[startIndex + 5]); - if ( boostCurrentHP == null - && boostCurrentAP == null - ) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Tried to parseStatsModifierTraits , where hasEffect=" + parts[startIndex] + ", but all data was empty."); - } - return null; - } else { - return new StatsModifierTraits( - parseInt(visualEffectID, StatsModifierTraits.VISUAL_EFFECT_NONE) - ,boostCurrentHP - ,boostCurrentAP - ); - } - } - - public static AbilityModifierTraits parseAbilityModifierTraits(String[] parts, int startIndex) { - String increaseMaxHP = parts[startIndex + 0]; - String increaseMaxAP = parts[startIndex + 1]; - String increaseMoveCost = parts[startIndex + 2]; - String increaseAttackCost = parts[startIndex + 3]; - String increaseAttackChance = parts[startIndex + 4]; - String increaseBlockChance = parts[startIndex + 9]; - String increaseMinDamage = parts[startIndex + 7]; - String increaseMaxDamage = parts[startIndex + 8]; - String increaseCriticalSkill = parts[startIndex + 5]; - String setCriticalMultiplier = parts[startIndex + 6]; - String increaseDamageResistance = parts[startIndex + 10]; - - if ( increaseMaxHP.length() <= 0 - && increaseMaxAP.length() <= 0 - && increaseMoveCost.length() <= 0 - && increaseAttackCost.length() <= 0 - && increaseAttackChance.length() <= 0 - && increaseBlockChance.length() <= 0 - && increaseMinDamage.length() <= 0 - && increaseMaxDamage.length() <= 0 - && increaseCriticalSkill.length() <= 0 - && setCriticalMultiplier.length() <= 0 - && increaseDamageResistance.length() <= 0 - ) { - return null; - } else { - return new AbilityModifierTraits( - parseInt(increaseMaxHP, 0) - ,parseInt(increaseMaxAP, 0) - ,parseInt(increaseMoveCost, 0) - ,0 // increaseUseItemCost - ,0 // increaseReequipCost - ,parseInt(increaseAttackCost, 0) - ,parseInt(increaseAttackChance, 0) - ,parseInt(increaseBlockChance, 0) - ,parseInt(increaseMinDamage, 0) - ,parseInt(increaseMaxDamage, 0) - ,parseInt(increaseCriticalSkill, 0) - ,parseFloat(setCriticalMultiplier, 0) - ,parseInt(increaseDamageResistance, 0) - ); - } - } - private static final ConstRange zero_or_one = new ConstRange(1, 0); private static final ConstRange one = new ConstRange(1, 1); private static final ConstRange five = new ConstRange(5, 5); private static final ConstRange ten = new ConstRange(10, 10); - public static ConstRange parseQuantity(String min, String max) { - if (min.equals("0") && max.equals("1")) return zero_or_one; - if (min.equals("1") && max.equals("1")) return one; - if (min.equals("5") && max.equals("5")) return five; - if (min.equals("10") && max.equals("10")) return ten; - return parseConstRange(min, max); + public static ConstRange parseConstRange(JSONObject o) throws JSONException { + if (o == null) return null; + + return new ConstRange(o.getInt(JsonFieldNames.Range.max), o.getInt(JsonFieldNames.Range.min)); } - + public static final ConstRange always = one; private static final ConstRange often = new ConstRange(100, 70); private static final ConstRange animalpart = new ConstRange(100, 30); @@ -202,16 +72,6 @@ public final class ResourceParserUtils { else return new ConstRange(100, parseInt(v, 10)); } - - - - - public static ConstRange parseConstRange(JSONObject o) throws JSONException { - if (o == null) return null; - - return new ConstRange(o.getInt(JsonFieldNames.Range.max), o.getInt(JsonFieldNames.Range.min)); - } - public static StatsModifierTraits parseStatsModifierTraits(JSONObject o) throws JSONException { if (o == null) return null; @@ -244,8 +104,8 @@ public final class ResourceParserUtils { ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseAttackCost, 0) ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseAttackChance, 0) ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseBlockChance, 0) - ,increaseAttackDamage.current - ,increaseAttackDamage.max + ,increaseAttackDamage != null ? increaseAttackDamage.current : 0 + ,increaseAttackDamage != null ? increaseAttackDamage.max : 0 ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseCriticalSkill, 0) ,o.optInt(JsonFieldNames.AbilityModifierTraits.setCriticalMultiplier, 0) ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseDamageResistance, 0) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java index 1acd13291..3299950c2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java @@ -1,5 +1,8 @@ package com.gpl.rpg.AndorsTrail.resource.parsers.json; +import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; +import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; + public final class JsonFieldNames { public static final class ActorCondition { public static final String conditionTypeID = "id"; @@ -87,4 +90,76 @@ public final class JsonFieldNames { public static final String rewardID = "rewardID"; public static final String value = "value"; } + + public static final class Quest { + public static final String questID = "id"; + public static final String name = "name"; + public static final String showInLog = "showInLog"; + public static final String stages = "stages"; + } + + public static final class QuestLogEntry { + public static final String progress = "progress"; + public static final String logText = "logText"; + public static final String rewardExperience = "rewardExperience"; + public static final String finishesQuest = "finishesQuest"; + } + + public static final class Monster { + public static final String monsterTypeID = "id"; + public static final String iconID = "iconID"; + public static final String name = "name"; + public static final String spawnGroup = "spawnGroup"; + public static final String size = "size"; + public static final String monsterClass = "monsterClass"; + public static final String unique = "unique"; + public static final String faction = "faction"; + public static final String maxHP = "maxHP"; + public static final String maxAP = "maxAP"; + public static final String moveCost = "moveCost"; + public static final String attackCost = "attackCost"; + public static final String attackChance = "attackChance"; + public static final String criticalSkill = "criticalSkill"; + public static final String criticalMultiplier = "criticalMultiplier"; + public static final String attackDamage = "attackDamage"; + public static final String blockChance = "blockChance"; + public static final String damageResistance = "damageResistance"; + public static final String droplistID = "droplistID"; + public static final String phraseID = "phraseID"; + public static final String hitEffect = "hitEffect"; + } + + public static final class ItemTraits_OnUse { + public static final String increaseCurrentHP = "increaseCurrentHP"; + public static final String increaseCurrentAP = "increaseCurrentAP"; + public static final String conditionsSource = "conditionsSource"; + public static final String conditionsTarget = "conditionsTarget"; + } + + public static final class ActorConditionEffect { + public static final String condition = "condition"; + public static final String magnitude = "magnitude"; + public static final String duration = "duration"; + public static final String chance = "chance"; + } + + public static final class ItemTraits_OnEquip { + public static final String addedConditions = "addedConditions"; + } + + public static final class ItemType { + public static final String itemTypeID = "id"; + public static final String iconID = "iconID"; + public static final String name = "name"; + public static final String category = "category"; + public static final String displaytype = "displaytype"; + public static final String hasManualPrice = "hasManualPrice"; + public static final String baseMarketCost = "baseMarketCost"; + public static final String equipEffect = "equipEffect"; + public static final String useEffect = "useEffect"; + public static final String hitEffect = "hitEffect"; + public static final String killEffect = "killEffect"; + } + + }