From 3d00ae6544933bed8d2b3619adc1ab0fa12e09ea Mon Sep 17 00:00:00 2001 From: Gonk Date: Mon, 11 Nov 2019 22:20:09 +0100 Subject: [PATCH] wearRemove requirement wear and wearRemove behave similar and wear now also requires the value property. adjusted dialogues with missing value property --- .../res/raw/conversationlist_graveyard1.json | 4 +++- .../controller/ConversationController.java | 15 ++++++++++----- .../AndorsTrail/controller/ItemController.java | 17 +++++++++++++++++ .../AndorsTrail/controller/MapController.java | 4 ++-- .../rpg/AndorsTrail/model/item/Inventory.java | 9 --------- .../AndorsTrail/model/script/Requirement.java | 5 +++-- 6 files changed, 35 insertions(+), 19 deletions(-) diff --git a/AndorsTrail/res/raw/conversationlist_graveyard1.json b/AndorsTrail/res/raw/conversationlist_graveyard1.json index 36f319dae..6cfa25e2e 100644 --- a/AndorsTrail/res/raw/conversationlist_graveyard1.json +++ b/AndorsTrail/res/raw/conversationlist_graveyard1.json @@ -249,7 +249,8 @@ "requires":[ { "requireType":"wear", - "requireID":"lifetaker" + "requireID":"lifetaker", + "value":1 } ] }, @@ -266,6 +267,7 @@ { "requireType":"wear", "requireID":"lifetaker", + "value":1, "negate":true } ] diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 5834be335..df1e66b7e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -241,11 +241,11 @@ public final class ConversationController { result.actorConditions.add(e); } - private static void applyReplyEffect(final WorldContext world, final Reply reply) { + private static void applyReplyEffect(final WorldContext world, final Reply reply, ControllerContext controllers) { if (!reply.hasRequirements()) return; for (Requirement requirement : reply.requires) { - requirementFulfilled(world, requirement); + requirementFulfilled(world, requirement, controllers); } } @@ -270,6 +270,7 @@ public final class ConversationController { result = player.isLatestQuestProgress(requirement.requireID, requirement.value); break; case wear: + case wearRemove: result = player.inventory.isWearing(requirement.requireID, requirement.value); break; case inventoryKeep: @@ -313,7 +314,7 @@ public final class ConversationController { return requirement.negate ? !result : result; } - public static void requirementFulfilled(WorldContext world, Requirement requirement) { + public static void requirementFulfilled(WorldContext world, Requirement requirement, ControllerContext controllers) { Player p = world.model.player; switch (requirement.requireType) { case inventoryRemove: @@ -323,6 +324,10 @@ public final class ConversationController { } else { p.inventory.removeItem(requirement.requireID, requirement.value); } + break; + case wearRemove: + controllers.itemController.removeEquippedItem(requirement.requireID, requirement.value); + break; } } @@ -354,7 +359,7 @@ public final class ConversationController { public String getCurrentPhraseID() { return currentPhraseID; } public void playerSelectedReply(final Resources res, Reply r) { - applyReplyEffect(world, r); + applyReplyEffect(world, r, controllers); proceedToPhrase(res, r.nextPhrase, true, true); } @@ -411,7 +416,7 @@ public final class ConversationController { if (currentPhrase.message == null) { for (Reply r : currentPhrase.replies) { if (!canSelectReply(world, r)) continue; - applyReplyEffect(world, r); + applyReplyEffect(world, r, controllers); proceedToPhrase(res, r.nextPhrase, applyScriptEffects, displayPhraseMessage); return; } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index 77090476c..c8b1330d0 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -383,4 +383,21 @@ public final class ItemController { } } + public int removeEquippedItem(String itemTypeID, int count) { + int removed = 0; + final Player player = world.model.player; + for (Inventory.WearSlot slot : Inventory.WearSlot.values()) { + ItemType type = player.inventory.getItemTypeInWearSlot(slot); + if (type != null && type.id.equals(itemTypeID)) { + player.inventory.setItemTypeInWearSlot(slot, null); + controllers.actorStatsController.removeConditionsFromUnequippedItem(player, type); + controllers.actorStatsController.recalculatePlayerStats(player); + removed++; + if (removed >= count) { + break; + } + } + } + return removed; + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MapController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MapController.java index 2ddeb1a09..5ef650da2 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MapController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MapController.java @@ -156,7 +156,7 @@ public final class MapController { public boolean canEnterKeyArea(MapObject area) { if (ConversationController.canFulfillRequirement(world, area.enteringRequirement)) { - ConversationController.requirementFulfilled(world, area.enteringRequirement); + ConversationController.requirementFulfilled(world, area.enteringRequirement, controllers); return true; } worldEventListeners.onPlayerSteppedOnKeyArea(area); @@ -187,7 +187,7 @@ public final class MapController { for(ReplaceableMapSection replacement : tileMap.replacements) { if (replacement.isApplied) continue; if (!satisfiesCondition(replacement)) continue; - else ConversationController.requirementFulfilled(world, replacement.requirement); + else ConversationController.requirementFulfilled(world, replacement.requirement, controllers); tileMap.applyReplacement(replacement); for (ReplaceableMapSection impactedReplacement : tileMap.replacements) { if (impactedReplacement.isApplied && impactedReplacement.replacementArea.intersects(replacement.replacementArea)) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java index 535156460..43d719456 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java @@ -56,16 +56,7 @@ public final class Inventory extends ItemContainer { wear[slot.ordinal()] = type; } - public boolean isWearing(String itemTypeID) { - for(int i = 0; i < NUM_WORN_SLOTS; ++i) { - if (wear[i] == null) continue; - if (wear[i].id.equals(itemTypeID)) return true; - } - return false; - } - public boolean isWearing(String itemTypeID, int minNumber) { - if (minNumber == 0) return isWearing(itemTypeID); for(int i = 0; i < NUM_WORN_SLOTS; ++i) { if (wear[i] == null) continue; if (wear[i].id.equals(itemTypeID)) minNumber--; 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 d12f71ec1..ecfac904d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/script/Requirement.java @@ -19,6 +19,7 @@ public final class Requirement { ,hasActorCondition ,factionScore ,random + ,wearRemove } public final RequirementType requireType; @@ -67,6 +68,8 @@ public final class Requirement { return requireID != null; case inventoryKeep: case inventoryRemove: + case wear: + case wearRemove: case usedItem: return requireID != null && value >= 0; case killedMonster: @@ -82,8 +85,6 @@ public final class Requirement { return chance != null; case timerElapsed: return requireID != null && value >= 0; - case wear: - return requireID != null; default: return false; }