mirror of
https://github.com/AndorsTrailRelease/andors-trail.git
synced 2026-02-13 21:28:10 +01:00
Add more requirement types to phrase replies: "killed monster" & "skill level"
This commit is contained in:
@@ -133,28 +133,33 @@ public final class ConversationController {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean canSelectReply(final Player player, final Reply reply) {
|
||||
private static boolean canSelectReply(final WorldContext world, final Reply reply) {
|
||||
if (!reply.hasRequirements()) return true;
|
||||
|
||||
for (Requirement requirement : reply.requires) {
|
||||
if (!playerSatisfiesRequirement(player, requirement)) return false;
|
||||
if (!playerSatisfiesRequirement(world, requirement)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean playerSatisfiesRequirement(final Player player, final Requirement requirement) {
|
||||
private static boolean playerSatisfiesRequirement(final WorldContext world, final Requirement requirement) {
|
||||
Player player = world.model.player;
|
||||
switch (requirement.requireType) {
|
||||
case Phrase.Requirement.REQUIREMENT_TYPE_QUEST_PROGRESS:
|
||||
case Requirement.REQUIREMENT_TYPE_QUEST_PROGRESS:
|
||||
return player.hasExactQuestProgress(requirement.requireID, requirement.value);
|
||||
case Phrase.Requirement.REQUIREMENT_TYPE_WEAR_KEEP:
|
||||
case Requirement.REQUIREMENT_TYPE_WEAR_KEEP:
|
||||
return player.inventory.isWearing(requirement.requireID);
|
||||
case Phrase.Requirement.REQUIREMENT_TYPE_INVENTORY_KEEP:
|
||||
case Phrase.Requirement.REQUIREMENT_TYPE_INVENTORY_REMOVE:
|
||||
case Requirement.REQUIREMENT_TYPE_INVENTORY_KEEP:
|
||||
case Requirement.REQUIREMENT_TYPE_INVENTORY_REMOVE:
|
||||
if (ItemTypeCollection.isGoldItemType(requirement.requireID)) {
|
||||
return player.inventory.gold >= requirement.value;
|
||||
} else {
|
||||
return player.inventory.hasItem(requirement.requireID, requirement.value);
|
||||
}
|
||||
case Requirement.REQUIREMENT_TYPE_SKILL_LEVEL:
|
||||
return player.getSkillLevel(Integer.parseInt(requirement.requireID)) >= requirement.value;
|
||||
case Requirement.REQUIREMENT_TYPE_KILLED_MONSTER:
|
||||
return world.model.statistics.getNumberOfKillsForMonsterType(requirement.requireID) >= requirement.value;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
@@ -241,7 +246,7 @@ public final class ConversationController {
|
||||
|
||||
if (currentPhrase.message == null) {
|
||||
for (Reply r : currentPhrase.replies) {
|
||||
if (!canSelectReply(player, r)) continue;
|
||||
if (!canSelectReply(world, r)) continue;
|
||||
applyReplyEffect(player, r);
|
||||
proceedToPhrase(r.nextPhrase);
|
||||
return;
|
||||
@@ -273,7 +278,7 @@ public final class ConversationController {
|
||||
}
|
||||
|
||||
for (Reply r : currentPhrase.replies) {
|
||||
if (!canSelectReply(player, r)) continue;
|
||||
if (!canSelectReply(world, r)) continue;
|
||||
listener.onConversationHasReply(r, getDisplayMessage(r, player));
|
||||
}
|
||||
}
|
||||
@@ -288,7 +293,7 @@ public final class ConversationController {
|
||||
if (currentPhrase.replies.length != 1) return false;
|
||||
final Reply singleReply = currentPhrase.replies[0];
|
||||
if (!singleReply.text.equals(ConversationCollection.REPLY_NEXT)) return false;
|
||||
if (!canSelectReply(player, singleReply)) return false;
|
||||
if (!canSelectReply(world, singleReply)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ public final class Phrase {
|
||||
public static final int REQUIREMENT_TYPE_INVENTORY_REMOVE = 1; // Player must have item(s) in inventory. Items will be removed when selecting reply.
|
||||
public static final int REQUIREMENT_TYPE_INVENTORY_KEEP = 2; // Player must have item(s) in inventory. Items will NOT be removed when selecting reply.
|
||||
public static final int REQUIREMENT_TYPE_WEAR_KEEP = 3; // Player must be wearing item(s). Items will NOT be removed when selecting reply.
|
||||
public static final int REQUIREMENT_TYPE_SKILL_LEVEL = 4; // Player needs to have a specific skill equal to or above a certain level
|
||||
public static final int REQUIREMENT_TYPE_KILLED_MONSTER = 5;
|
||||
|
||||
public final int requireType;
|
||||
public final String requireID;
|
||||
|
||||
@@ -45,6 +45,12 @@ public final class GameStatistics {
|
||||
return spentGold;
|
||||
}
|
||||
|
||||
public int getNumberOfKillsForMonsterType(String monsterTypeID) {
|
||||
Integer v = killedMonsters.get(monsterTypeID);
|
||||
if (v == null) return 0;
|
||||
return v;
|
||||
}
|
||||
|
||||
public String getTop5MostCommonlyKilledMonsters(WorldContext world, Resources res) {
|
||||
if (killedMonsters.isEmpty()) return null;
|
||||
List<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(killedMonsters.entrySet());
|
||||
|
||||
@@ -143,6 +143,8 @@
|
||||
<option value="1">Inventory & item will be removed</option>
|
||||
<option value="2">Inventory</option>
|
||||
<option value="3">Worn equipment</option>
|
||||
<option value="4">Skill level</option>
|
||||
<option value="5">Killed monster</option>
|
||||
</select>
|
||||
</td>
|
||||
<td><input type="text" size="30" ng-model="require.requireID" id="requireID" class="at-input-id"/></td>
|
||||
|
||||
Reference in New Issue
Block a user