From 707940aa14f29afd800d3a4465293d776b1b7b11 Mon Sep 17 00:00:00 2001 From: Zukero Date: Tue, 22 Oct 2013 23:10:24 +0200 Subject: [PATCH 1/2] Added requirement negation capability : - Use "requireNegation" property in Tiled map object - Checkbox for require.negate added in Content Editor --- .../controller/ConversationController.java | 36 ++++++++++++------- .../model/map/TMXMapTranslator.java | 5 ++- .../AndorsTrail/model/script/Requirement.java | 5 ++- .../parsers/ConversationListParser.java | 1 + .../resource/parsers/json/JsonFieldNames.java | 1 + AndorsTrailEdit/partials/edit_dialogue.html | 33 +++++++++++++++++ 6 files changed, 67 insertions(+), 14 deletions(-) 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 JsonCollectionParserForStage: +
+ +
@@ -217,6 +220,9 @@
+
+ +
@@ -227,6 +233,9 @@
+
+ +
@@ -237,6 +246,9 @@
+
+ +
@@ -247,6 +259,9 @@
+
+ +
@@ -257,6 +272,9 @@
+
+ +
@@ -267,6 +285,9 @@
+
+ +
@@ -277,6 +298,9 @@
+
+ +
@@ -287,18 +311,27 @@
+
+ +
+
+ +
+
+ +
From c06dba6b7d58ad76848c0a2d5368914ad22f9525 Mon Sep 17 00:00:00 2001 From: Zukero Date: Wed, 23 Oct 2013 18:08:09 +0200 Subject: [PATCH 2/2] Factorized the checkbox definition in content editor. --- AndorsTrailEdit/partials/edit_dialogue.html | 36 ++------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/AndorsTrailEdit/partials/edit_dialogue.html b/AndorsTrailEdit/partials/edit_dialogue.html index 2ece248c4..d247bda1a 100644 --- a/AndorsTrailEdit/partials/edit_dialogue.html +++ b/AndorsTrailEdit/partials/edit_dialogue.html @@ -198,6 +198,9 @@ +
+ +
@@ -207,9 +210,6 @@
-
- -
@@ -220,9 +220,6 @@
-
- -
@@ -233,9 +230,6 @@
-
- -
@@ -246,9 +240,6 @@
-
- -
@@ -259,9 +250,6 @@
-
- -
@@ -272,9 +260,6 @@
-
- -
@@ -285,9 +270,6 @@
-
- -
@@ -298,9 +280,6 @@
-
- -
@@ -311,27 +290,18 @@
-
- -
-
- -
-
- -