mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-02-23 15:38:29 +01:00
Merge pull request #9 from Zukero/requirements_negation
Added requirement negation capability :
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ public final class ConversationListParser extends JsonCollectionParserFor<Phrase
|
||||
Requirement.RequirementType.valueOf(o.getString(JsonFieldNames.ReplyRequires.requireType))
|
||||
,o.getString(JsonFieldNames.ReplyRequires.requireID)
|
||||
,o.optInt(JsonFieldNames.ReplyRequires.value, 0)
|
||||
,o.optBoolean(JsonFieldNames.ReplyRequires.negate, false)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -76,6 +76,7 @@ public final class JsonFieldNames {
|
||||
public static final String requireType = "requireType";
|
||||
public static final String requireID = "requireID";
|
||||
public static final String value = "value";
|
||||
public static final String negate = "negate";
|
||||
}
|
||||
|
||||
public static final class PhraseReward {
|
||||
|
||||
@@ -198,6 +198,9 @@
|
||||
<option value="consumedBonemeals">Bonemeals consumed (greater or equals)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="filedWithLabel">
|
||||
<label class="checkbox"><input type="checkbox" id="requirenegation" ng-model="require.negate" />Negate this requirement</label>
|
||||
</div>
|
||||
<div ng-show="require.requireType=='questProgress'">
|
||||
<div class="fieldWithLabel">
|
||||
<label for="requireID" >Quest ID:</label>
|
||||
|
||||
Reference in New Issue
Block a user