diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 393321225..80753c12e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -149,35 +149,47 @@ public final class ConversationController { public static boolean canFulfillRequirement(WorldContext world, Requirement requirement) { Player player = world.model.player; GameStatistics stats = world.model.statistics; + boolean result = false; switch (requirement.requireType) { case questProgress: - return player.hasExactQuestProgress(requirement.requireID, requirement.value); + result = player.hasExactQuestProgress(requirement.requireID, requirement.value); + break; case questLatestProgress: - return player.isLatestQuestProgress(requirement.requireID, requirement.value); + result = player.isLatestQuestProgress(requirement.requireID, requirement.value); + break; case wear: - return player.inventory.isWearing(requirement.requireID, requirement.value); + result = player.inventory.isWearing(requirement.requireID, requirement.value); + break; case inventoryKeep: case inventoryRemove: if (ItemTypeCollection.isGoldItemType(requirement.requireID)) { - return player.inventory.gold >= requirement.value; + result = player.inventory.gold >= requirement.value; } else { - return player.inventory.hasItem(requirement.requireID, requirement.value); + result = player.inventory.hasItem(requirement.requireID, requirement.value); } + break; case skillLevel: - return player.getSkillLevel(SkillCollection.SkillID.valueOf(requirement.requireID)) >= requirement.value; + result = player.getSkillLevel(SkillCollection.SkillID.valueOf(requirement.requireID)) >= requirement.value; + break; case killedMonster: - return stats.getNumberOfKillsForMonsterType(requirement.requireID) >= requirement.value; + result = stats.getNumberOfKillsForMonsterType(requirement.requireID) >= requirement.value; + break; case timerElapsed: - return world.model.worldData.hasTimerElapsed(requirement.requireID, requirement.value); + result = world.model.worldData.hasTimerElapsed(requirement.requireID, requirement.value); + break; case usedItem: - return stats.getNumberOfTimesItemHasBeenUsed(requirement.requireID) >= requirement.value; + result = stats.getNumberOfTimesItemHasBeenUsed(requirement.requireID) >= requirement.value; + break; case spentGold: - return stats.getSpentGold() >= requirement.value; + result = stats.getSpentGold() >= requirement.value; + break; case consumedBonemeals: - return stats.getNumberOfUsedBonemealPotions() >= requirement.value; + result = stats.getNumberOfUsedBonemealPotions() >= requirement.value; + break; default: - return true; + result = true; } + return requirement.negate ? !result : result; } public static void requirementFulfilled(WorldContext world, Requirement requirement) { 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 c5b9a335b..5e5666396 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -121,6 +121,7 @@ public final class TMXMapTranslator { String requireId = null; int requireValue = 0; String phraseID = ""; + boolean requireNegation = false; for (TMXProperty p : object.properties) { if (p.name.equalsIgnoreCase("phrase")) { phraseID = p.value; @@ -130,11 +131,13 @@ public final class TMXMapTranslator { requireId = p.value; } else if (p.name.equalsIgnoreCase("requireValue")) { requireValue = Integer.parseInt(p.value); + } else if (p.name.equalsIgnoreCase("requireNegation")) { + requireNegation = Boolean.parseBoolean(p.value); } else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { L.log("OPTIMIZE: Map " + m.name + ", key " + object.name + "@" + topLeft.toString() + " has unrecognized property \"" + p.name + "\"."); } } - mapObjects.add(MapObject.createKeyArea(position, phraseID, new Requirement(requireType, requireId, requireValue), group.name)); + mapObjects.add(MapObject.createKeyArea(position, phraseID, new Requirement(requireType, requireId, requireValue, requireNegation), group.name)); } else if (object.type.equals("rest")) { mapObjects.add(MapObject.createRestArea(position, object.name, group.name)); } else if (object.type.equals("container")) { 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 0e656d34a..07372ed90 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -18,11 +18,13 @@ public final class Requirement { public final RequirementType requireType; public final String requireID; public final int value; + public final boolean negate; - public Requirement(RequirementType requireType, String requireID, int value) { + public Requirement(RequirementType requireType, String requireID, int value, boolean negate) { this.requireType = requireType; this.requireID = requireID; this.value = value; + this.negate = negate; } public String toString() { @@ -30,6 +32,7 @@ public final class Requirement { buf.append("--"); buf.append(requireID); buf.append("--"); + if (negate) buf.append("!"); buf.append(value); return buf.toString(); } 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 fe177012b..6a78b2f2f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ConversationListParser.java @@ -25,6 +25,7 @@ public final class ConversationListParser extends JsonCollectionParserForBonemeals consumed (greater or equals) +
+ +