diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java index 17af2a178..e44ce21ed 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java @@ -1,39 +1,35 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType; -import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; 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 ActorConditionsTypeParser extends ResourceParserFor { +public final class ActorConditionsTypeParser extends JsonCollectionParserFor { private final DynamicTileLoader tileLoader; public ActorConditionsTypeParser(final DynamicTileLoader tileLoader) { - super(30); this.tileLoader = tileLoader; } - + @Override - public Pair parseRow(String[] parts) { - final String conditionTypeID = parts[0]; - - AbilityModifierTraits stats = null; - if (ResourceParserUtils.parseBoolean(parts[18], false)) { - stats = ResourceParserUtils.parseAbilityModifierTraits(parts, 19); - } - - return new Pair(conditionTypeID, new ActorConditionType( + protected Pair parseObject(JSONObject o) throws JSONException { + final String conditionTypeID = o.getString(JsonFieldNames.ActorCondition.conditionTypeID); + ActorConditionType result = new ActorConditionType( conditionTypeID - , parts[1] - , ResourceParserUtils.parseImageID(tileLoader, parts[2]) - , Integer.parseInt(parts[3]) - , ResourceParserUtils.parseBoolean(parts[4], false) - , ResourceParserUtils.parseBoolean(parts[5], false) - , ResourceParserUtils.parseStatsModifierTraits(parts, 6) - , ResourceParserUtils.parseStatsModifierTraits(parts, 12) - , stats - )); + ,o.getString(JsonFieldNames.ActorCondition.name) + ,ResourceParserUtils.parseImageID(tileLoader, o.getString(JsonFieldNames.ActorCondition.iconID)) + ,o.getInt(JsonFieldNames.ActorCondition.category) + ,o.optInt(JsonFieldNames.ActorCondition.isStacking) > 0 + ,o.optInt(JsonFieldNames.ActorCondition.isPositive) > 0 + ,ResourceParserUtils.parseStatsModifierTraits(o.optJSONObject(JsonFieldNames.ActorCondition.roundEffect)) + ,ResourceParserUtils.parseStatsModifierTraits(o.optJSONObject(JsonFieldNames.ActorCondition.fullRoundEffect)) + ,ResourceParserUtils.parseAbilityModifierTraits(o.optJSONObject(JsonFieldNames.ActorCondition.abilityEffect)) + ); + return new Pair(conditionTypeID, result); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java index fa0d8fa54..8810b9acb 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java @@ -1,65 +1,76 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; -import java.util.ArrayList; - import com.gpl.rpg.AndorsTrail.conversation.Phrase; import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reply; import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reward; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer; -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.resource.parsers.json.JsonParserFor; import com.gpl.rpg.AndorsTrail.util.Pair; +import org.json.JSONException; +import org.json.JSONObject; -public final class ConversationListParser extends ResourceParserFor { +import java.util.ArrayList; + +public final class ConversationListParser extends JsonCollectionParserFor { - public ConversationListParser() { - super(4); - } - - private final ResourceFileTokenizer replyResourceTokenizer = new ResourceFileTokenizer(6); - private final ResourceObjectParser replyParser = new ResourceObjectParser() { + private final JsonParserFor replyParser = new JsonParserFor() { @Override - public Reply parseRow(String[] parts) { + protected Reply parseObject(JSONObject o) throws JSONException { + JSONObject requires = o.optJSONObject(JsonFieldNames.Reply.requires); + String requiresProgress = null; + String requiresItemTypeID = null; + int requiresItemQuantity = 0; + int itemRequirementType = Reply.ITEM_REQUIREMENT_TYPE_INVENTORY_REMOVE; + if (requires != null) { + requiresProgress = requires.optString(JsonFieldNames.ReplyRequires.progress); + JSONObject requiresItem = o.optJSONObject(JsonFieldNames.ReplyRequires.item); + if (requiresItem != null) { + requiresItemTypeID = requiresItem.getString(JsonFieldNames.ReplyRequiresItem.itemID); + requiresItemQuantity = requiresItem.getInt(JsonFieldNames.ReplyRequiresItem.quantity); + itemRequirementType = requiresItem.getInt(JsonFieldNames.ReplyRequiresItem.requireType); + } + } return new Reply( - parts[0] // text - , parts[1] // nextPhrase - , QuestProgress.parseQuestProgress(parts[2]) // requiresProgress - , ResourceParserUtils.parseNullableString(parts[3]) // requiresItemType - , ResourceParserUtils.parseInt(parts[4], 0) // requiresItemQuantity - , ResourceParserUtils.parseInt(parts[5], Reply.ITEM_REQUIREMENT_TYPE_INVENTORY_REMOVE) // itemRequirementType - ); + o.optString(JsonFieldNames.Reply.text) + ,o.optString(JsonFieldNames.Reply.nextPhraseID) + ,QuestProgress.parseQuestProgress(requiresProgress) + ,requiresItemTypeID + ,requiresItemQuantity + ,itemRequirementType + ); } }; - private final ResourceFileTokenizer rewardResourceTokenizer = new ResourceFileTokenizer(3); - private final ResourceObjectParser rewardParser = new ResourceObjectParser() { + private final JsonParserFor rewardParser = new JsonParserFor() { @Override - public Reward parseRow(String[] parts) { + protected Reward parseObject(JSONObject o) throws JSONException { return new Reward( - Integer.parseInt(parts[0]) // rewardType - , parts[1] // rewardID - , ResourceParserUtils.parseInt(parts[2], 0) // value - ); + o.getInt(JsonFieldNames.PhraseReward.rewardType) + ,o.getString(JsonFieldNames.PhraseReward.rewardID) + ,o.getInt(JsonFieldNames.PhraseReward.value) + ); } }; @Override - public Pair parseRow(String[] parts) { - // [id|message|rewards[rewardType|rewardID|value|]|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|requires_Type|]|]; - + protected Pair parseObject(JSONObject o) throws JSONException { + final String id = o.getString(JsonFieldNames.Phrase.phraseID); + final ArrayList replies = new ArrayList(); - replyResourceTokenizer.tokenizeArray(parts[3], replies, replyParser); + replyParser.parseRows(o.optJSONArray(JsonFieldNames.Phrase.replies), replies); final Reply[] _replies = replies.toArray(new Reply[replies.size()]); - + final ArrayList rewards = new ArrayList(); - rewardResourceTokenizer.tokenizeArray(parts[2], rewards, rewardParser); + rewardParser.parseRows(o.optJSONArray(JsonFieldNames.Phrase.rewards), rewards); Reward[] _rewards = rewards.toArray(new Reward[rewards.size()]); if (_rewards.length == 0) _rewards = null; - - return new Pair(parts[0], new Phrase( - ResourceParserUtils.parseNullableString(parts[1]) // message - , _replies // replies - , _rewards // rewards - )); + + return new Pair(id, new Phrase( + o.optString(JsonFieldNames.Phrase.message) + , _replies + , _rewards + )); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/DropListParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/DropListParser.java index f1747f9f8..341bc6091 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/DropListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/DropListParser.java @@ -6,45 +6,46 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.model.item.DropList; import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection; import com.gpl.rpg.AndorsTrail.model.item.DropList.DropItem; -import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer; -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.resource.parsers.json.JsonParserFor; import com.gpl.rpg.AndorsTrail.util.L; import com.gpl.rpg.AndorsTrail.util.Pair; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; -public final class DropListParser extends ResourceParserFor { +public final class DropListParser extends JsonCollectionParserFor { + + private final JsonParserFor dropItemParser; - private final ResourceFileTokenizer droplistItemResourceTokenizer = new ResourceFileTokenizer(4); - private final ResourceObjectParser dropItemParser; - public DropListParser(final ItemTypeCollection itemTypes) { - super(2); - this.dropItemParser = new ResourceObjectParser() { + this.dropItemParser = new JsonParserFor() { @Override - public DropItem parseRow(String[] parts) { + protected DropItem parseObject(JSONObject o) throws JSONException { return new DropItem( - itemTypes.getItemType(parts[0]) // Itemtype - , ResourceParserUtils.parseChance(parts[3]) // Chance - , ResourceParserUtils.parseQuantity(parts[1], parts[2]) // Quantity - ); + itemTypes.getItemType(o.getString(JsonFieldNames.DropItem.itemID)) + ,ResourceParserUtils.parseChance(o.getString(JsonFieldNames.DropItem.chance)) + ,ResourceParserUtils.parseQuantity(o.getJSONObject(JsonFieldNames.DropItem.quantity)) + ); } }; } @Override - public Pair parseRow(String[] parts) { - // [id|items[itemID|quantity_Min|quantity_Max|chance|]|]; - - String droplistID = parts[0]; - + protected Pair parseObject(JSONObject o) throws JSONException { + String droplistID = o.getString(JsonFieldNames.DropList.dropListID); + + JSONArray array = o.getJSONArray(JsonFieldNames.DropList.items); final ArrayList items = new ArrayList(); - droplistItemResourceTokenizer.tokenizeArray(parts[1], items, dropItemParser); - DropItem[] items_ = items.toArray(new DropItem[items.size()]); - + dropItemParser.parseRows(array, items); + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - if (items_.length <= 0) { + if (items.size() <= 0) { L.log("OPTIMIZE: Droplist \"" + droplistID + "\" has no dropped items."); } } - return new Pair(droplistID, new DropList(items_)); + + return new Pair(droplistID, new DropList(items)); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java index 5a952dc26..e14965791 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemCategoryParser.java @@ -1,25 +1,24 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.item.ItemCategory; -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 ItemCategoryParser extends ResourceParserFor { - - public ItemCategoryParser() { - super(5); - } +public final class ItemCategoryParser extends JsonCollectionParserFor { @Override - public Pair parseRow(String[] parts) { - String id = parts[0]; - final ItemCategory itemType = new ItemCategory( + protected Pair parseObject(JSONObject o) throws JSONException { + final String id = o.getString(JsonFieldNames.ItemCategory.itemCategoryID); + ItemCategory result = new ItemCategory( id - , parts[1] // displayName - , ResourceParserUtils.parseInt(parts[2], 0) // actionType - , ResourceParserUtils.parseInt(parts[3], -1) // inventorySlot - , ResourceParserUtils.parseInt(parts[4], 0) // size - ); - return new Pair(id, itemType); + ,o.getString(JsonFieldNames.ItemCategory.name) + ,o.optInt(JsonFieldNames.ItemCategory.actionType, 0) + ,o.optInt(JsonFieldNames.ItemCategory.inventorySlot, -1) + ,o.optInt(JsonFieldNames.ItemCategory.size, 0) + ); + return new Pair(id, result); } } 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 a81526b08..f0291273a 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java @@ -4,10 +4,13 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; 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.util.ConstRange; -import com.gpl.rpg.AndorsTrail.util.L; -import com.gpl.rpg.AndorsTrail.util.Range; -import com.gpl.rpg.AndorsTrail.util.Size; +import com.gpl.rpg.AndorsTrail.resource.parsers.json.JsonFieldNames; +import com.gpl.rpg.AndorsTrail.util.*; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; public final class ResourceParserUtils { @@ -155,6 +158,7 @@ public final class ResourceParserUtils { ); } } + private static final ConstRange zero_or_one = new ConstRange(1, 0); private static final ConstRange one = new ConstRange(1, 1); @@ -162,9 +166,9 @@ public final class ResourceParserUtils { 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; - else if (min.equals("1") && max.equals("1")) return one; - else if (min.equals("5") && max.equals("5")) return five; - else if (min.equals("10") && max.equals("10")) return ten; + 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); } @@ -197,4 +201,64 @@ 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; + + ConstRange boostCurrentHP = parseConstRange(o.getJSONObject(JsonFieldNames.StatsModifierTraits.increaseCurrentHP)); + ConstRange boostCurrentAP = parseConstRange(o.getJSONObject(JsonFieldNames.StatsModifierTraits.increaseCurrentAP)); + if (boostCurrentHP == null && boostCurrentAP == null) { + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { + L.log("OPTIMIZE: Tried to parseStatsModifierTraits , where hasEffect=" + o.toString() + ", but all data was empty."); + } + return null; + } else { + return new StatsModifierTraits( + o.optInt(JsonFieldNames.StatsModifierTraits.visualEffectID, StatsModifierTraits.VISUAL_EFFECT_NONE) + ,boostCurrentHP + ,boostCurrentAP + ); + } + } + + public static AbilityModifierTraits parseAbilityModifierTraits(JSONObject o) throws JSONException { + if (o == null) return null; + + ConstRange increaseAttackDamage = parseConstRange(o.optJSONObject(JsonFieldNames.AbilityModifierTraits.increaseAttackDamage)); + return new AbilityModifierTraits( + o.optInt(JsonFieldNames.AbilityModifierTraits.increaseMaxHP, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseMaxAP, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseMoveCost, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseUseItemCost, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseReequipCost, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseAttackCost, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseAttackChance, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseBlockChance, 0) + ,increaseAttackDamage.current + ,increaseAttackDamage.max + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseCriticalSkill, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.setCriticalMultiplier, 0) + ,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseDamageResistance, 0) + ); + } + + public static ConstRange parseQuantity(JSONObject obj) throws JSONException { + final int min = obj.getInt(JsonFieldNames.Range.min); + final int max = obj.getInt(JsonFieldNames.Range.max); + if (min == 0 && max == 1) return zero_or_one; + if (min == 1 && max == 1) return one; + if (min == 5 && max == 5) return five; + if (min == 10 && max == 10) return ten; + return parseConstRange(obj); + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonCollectionParserFor.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonCollectionParserFor.java new file mode 100644 index 000000000..e9ac10cd8 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonCollectionParserFor.java @@ -0,0 +1,39 @@ +package com.gpl.rpg.AndorsTrail.resource.parsers.json; + +import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; +import com.gpl.rpg.AndorsTrail.util.L; +import com.gpl.rpg.AndorsTrail.util.Pair; +import org.json.JSONArray; +import org.json.JSONException; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +public abstract class JsonCollectionParserFor extends JsonParserFor> { + public HashSet parseRows(String input, HashMap dest) { + + HashSet ids = new HashSet(); + ArrayList> objects = new ArrayList>(); + + try { + parseRows(new JSONArray(input), objects); + } catch (JSONException e) { + L.log("ERROR loading resource data: " + e.toString()); + } + + for (Pair o : objects) { + final String id = o.first; + if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { + if (id == null || id.length() <= 0) { + L.log("WARNING: Entity " + o.second.toString() + " has empty id."); + } else if (dest.containsKey(id)) { + L.log("WARNING: Entity " + id + " is duplicated."); + } + } + dest.put(id, o.second); + ids.add(id); + } + return ids; + } +} 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 new file mode 100644 index 000000000..1acd13291 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java @@ -0,0 +1,90 @@ +package com.gpl.rpg.AndorsTrail.resource.parsers.json; + +public final class JsonFieldNames { + public static final class ActorCondition { + public static final String conditionTypeID = "id"; + public static final String name = "name"; + public static final String iconID = "iconID"; + public static final String category = "category"; + public static final String isStacking = "isStacking"; + public static final String isPositive = "isPositive"; + public static final String roundEffect = "roundEffect"; + public static final String fullRoundEffect = "fullRoundEffect"; + public static final String abilityEffect = "abilityEffect"; + } + + public static final class StatsModifierTraits { + public static final String visualEffectID = "visualEffectID"; + public static final String increaseCurrentHP = "increaseCurrentHP"; + public static final String increaseCurrentAP = "increaseCurrentAP"; + } + + public static final class AbilityModifierTraits { + public static final String increaseMaxHP = "increaseMaxHP"; + public static final String increaseMaxAP = "increaseMaxAP"; + public static final String increaseMoveCost = "increaseMoveCost"; + public static final String increaseUseItemCost = "increaseUseItemCost"; + public static final String increaseReequipCost = "increaseReequipCost"; + public static final String increaseAttackCost = "increaseAttackCost"; + public static final String increaseAttackChance = "increaseAttackChance"; + public static final String increaseCriticalSkill = "increaseCriticalSkill"; + public static final String setCriticalMultiplier = "setCriticalMultiplier"; + public static final String increaseAttackDamage = "increaseAttackDamage"; + public static final String increaseBlockChance = "increaseBlockChance"; + public static final String increaseDamageResistance = "increaseDamageResistance"; + } + + public static final class ItemCategory { + public static final String itemCategoryID = "id"; + public static final String name = "name"; + public static final String actionType = "actionType"; + public static final String inventorySlot = "inventorySlot"; + public static final String size = "size"; + } + + public static final class DropList { + public static final String dropListID = "id"; + public static final String items = "items"; + } + + public static final class DropItem { + public static final String itemID = "itemID"; + public static final String quantity = "quantity"; + public static final String chance = "chance"; + } + + public static final class Range { + public static final String min = "min"; + public static final String max = "max"; + } + + public static final class Phrase { + public static final String phraseID = "id"; + public static final String message = "message"; + public static final String rewards = "rewards"; + public static final String replies = "replies"; + } + + public static final class Reply { + public static final String text = "text"; + public static final String nextPhraseID = "nextPhraseID"; + public static final String requires = "requires"; + } + + public static final class ReplyRequires { + public static final String progress = "progress"; + public static final String item = "item"; + } + + public static final class ReplyRequiresItem { + public static final String itemID = "itemID"; + public static final String quantity = "quantity"; + public static final String requireType = "requireType"; + } + + public static final class PhraseReward { + public static final String rewardType = "rewardType"; + public static final String rewardID = "rewardID"; + public static final String value = "value"; + } +} diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonParserFor.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonParserFor.java new file mode 100644 index 000000000..e6220cf12 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonParserFor.java @@ -0,0 +1,20 @@ +package com.gpl.rpg.AndorsTrail.resource.parsers.json; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +public abstract class JsonParserFor { + public void parseRows(JSONArray array, ArrayList dest) throws JSONException { + if (array == null) return; + + for (int i = 0; i < array.length(); ++i) { + JSONObject o = array.getJSONObject(i); + dest.add(parseObject(o)); + } + } + + protected abstract T parseObject(JSONObject o) throws JSONException; +}