diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 9d57477df..5834be335 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -295,6 +295,9 @@ public final class ConversationController { case spentGold: result = stats.getSpentGold() >= requirement.value; break; + case random: + result = Constants.rollResult(requirement.chance); + break; case consumedBonemeals: result = stats.getNumberOfUsedBonemealPotions() >= requirement.value; break; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java index 133ee1a61..1b9f50b1d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -27,7 +27,9 @@ import com.gpl.rpg.AndorsTrail.model.map.TMXMapFileParser.TMXProperty; import com.gpl.rpg.AndorsTrail.model.map.TMXMapFileParser.TMXTileSet; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.model.script.Requirement; +import com.gpl.rpg.AndorsTrail.resource.parsers.ResourceParserUtils; import com.gpl.rpg.AndorsTrail.resource.tiles.TileCache; +import com.gpl.rpg.AndorsTrail.util.ConstRange; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.CoordRect; import com.gpl.rpg.AndorsTrail.util.L; @@ -227,6 +229,7 @@ public final class TMXMapTranslator { String requireId = null; int requireValue = 0; boolean requireNegation = false; + ConstRange requireChance = null; for (TMXProperty p : object.properties) { if (p.name.equalsIgnoreCase("requireType")) { try { @@ -246,7 +249,13 @@ public final class TMXMapTranslator { } } if (requireType == null) return null; - return new Requirement(requireType, requireId, requireValue, requireNegation); + if (requireType == Requirement.RequirementType.random) + { + requireChance = ResourceParserUtils.parseChance(requireId); + requireId = null; + } + + return new Requirement(requireType, requireId, requireValue, requireNegation, requireChance); } private static CoordRect getTMXObjectPosition(TMXObject object, TMXMap m) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java index bcd2b65d7..d12f71ec1 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -1,6 +1,7 @@ package com.gpl.rpg.AndorsTrail.model.script; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; +import com.gpl.rpg.AndorsTrail.util.ConstRange; public final class Requirement { public static enum RequirementType { @@ -17,30 +18,35 @@ public final class Requirement { ,consumedBonemeals ,hasActorCondition ,factionScore + ,random } public final RequirementType requireType; public final String requireID; public final int value; public final boolean negate; + public final ConstRange chance; public Requirement( RequirementType requireType , String requireID , int value , boolean negate + , ConstRange chance ) { this.requireType = requireType; this.requireID = requireID; this.value = value; this.negate = negate; + this.chance = chance; } - + public Requirement(QuestProgress qp) { this.requireType = RequirementType.questProgress; this.requireID = qp.questID; this.value = qp.progress; this.negate = false; + this.chance = null; } public String toString() { @@ -52,32 +58,34 @@ public final class Requirement { buf.append(value); return buf.toString(); } - + public boolean isValid() { switch (this.requireType) { - case consumedBonemeals: - return value >= 0; - case hasActorCondition: - return requireID != null; - case inventoryKeep: - case inventoryRemove: - case usedItem: - return requireID != null && value >= 0; - case killedMonster: - return requireID != null && value >= 0; - case questLatestProgress: - case questProgress: - return requireID != null && value >= 0; - case skillLevel: - return requireID != null && value >= 0; - case spentGold: - return value >= 0; - case timerElapsed: - return requireID != null && value >= 0; - case wear: - return requireID != null; - default: - return false; + case consumedBonemeals: + return value >= 0; + case hasActorCondition: + return requireID != null; + case inventoryKeep: + case inventoryRemove: + case usedItem: + return requireID != null && value >= 0; + case killedMonster: + return requireID != null && value >= 0; + case questLatestProgress: + case questProgress: + return requireID != null && value >= 0; + case skillLevel: + return requireID != null && value >= 0; + case spentGold: + return value >= 0; + case random: + return chance != null; + case timerElapsed: + return requireID != null && value >= 0; + case wear: + return requireID != null; + default: + return false; } } } 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 aef8b1c0f..215c984b2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java @@ -22,11 +22,14 @@ public final class ConversationListParser extends JsonCollectionParserFor requirementParser = new JsonArrayParserFor(Requirement.class) { @Override protected Requirement parseObject(JSONObject o) throws JSONException { + Requirement.RequirementType type = Requirement.RequirementType.valueOf(o.getString(JsonFieldNames.ReplyRequires.requireType)); + String requireID = o.getString(JsonFieldNames.ReplyRequires.requireID); return new Requirement( - Requirement.RequirementType.valueOf(o.getString(JsonFieldNames.ReplyRequires.requireType)) - ,o.getString(JsonFieldNames.ReplyRequires.requireID) + type + ,type == Requirement.RequirementType.random ? null : requireID ,o.optInt(JsonFieldNames.ReplyRequires.value, 0) ,o.optBoolean(JsonFieldNames.ReplyRequires.negate, false) + ,type == Requirement.RequirementType.random ? ResourceParserUtils.parseChance(requireID) : null ); } };