mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-01-22 03:19:12 +01:00
wearRemove requirement
wear and wearRemove behave similar and wear now also requires the value property. adjusted dialogues with missing value property
This commit is contained in:
@@ -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
|
||||
}
|
||||
]
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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--;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user