diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java index ab5f40ea4..c88057814 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Quests.java @@ -116,43 +116,43 @@ public final class HeroinfoActivity_Quests extends Fragment { groupList.clear(); childList.clear(); - for (Quest q : world.quests.getAllQuests()) { + for (String questProgressID : player.getAllQuestProgressIDs()) { + Quest q = world.quests.getQuest(questProgressID); + if (q == null) continue; // This should not happen if (!q.showInLog) continue; // Do not show - if (player.hasAnyQuestProgress(q.questID)) { - boolean isCompleted = q.isCompleted(player); + boolean isCompleted = q.isCompleted(player); - int v = world.model.uiSelections.selectedQuestFilter; - if (v == 0) { // Active quests - if (isCompleted) continue; - } else if (v == 1) { // All quests - // Always show. - } else if (v == 2) { // Completed quests - if (!isCompleted) continue; - } - - int statusResId; - if (isCompleted) { - statusResId = R.string.questlog_queststatus_completed; - } else { - statusResId = R.string.questlog_queststatus_inprogress; - } - - Map item = new HashMap(); - item.put(mn_questName, q.name); - item.put(mn_questStatus, getString(R.string.questlog_queststatus, getString(statusResId))); - groupList.add(item); - - List> logItemList = new ArrayList>(); - for (QuestLogEntry e : q.stages) { - if (e.logtext.length() <= 0) continue; // Do not show if displaytext is empty. - if (player.hasExactQuestProgress(q.questID, e.progress)) { - item = new HashMap(); - item.put(mn_logText, e.logtext); - logItemList.add(item); - } - } - childList.add(logItemList); + int v = world.model.uiSelections.selectedQuestFilter; + if (v == 0) { // Active quests + if (isCompleted) continue; + } else if (v == 1) { // All quests + // Always show. + } else if (v == 2) { // Completed quests + if (!isCompleted) continue; } + + int statusResId; + if (isCompleted) { + statusResId = R.string.questlog_queststatus_completed; + } else { + statusResId = R.string.questlog_queststatus_inprogress; + } + + Map item = new HashMap(); + item.put(mn_questName, q.name); + item.put(mn_questStatus, getString(R.string.questlog_queststatus, getString(statusResId))); + groupList.add(item); + + List> logItemList = new ArrayList>(); + for (QuestLogEntry e : q.stages) { + if (e.logtext.length() <= 0) continue; // Do not show if displaytext is empty. + if (player.hasExactQuestProgress(q.questID, e.progress)) { + item = new HashMap(); + item.put(mn_logText, e.logtext); + logItemList.add(item); + } + } + childList.add(logItemList); } questlog_contents_adapter.notifyDataSetChanged(); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java index b798322d6..104b74615 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -3,8 +3,12 @@ package com.gpl.rpg.AndorsTrail.model.actor; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.UUID; @@ -19,6 +23,7 @@ import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection; import com.gpl.rpg.AndorsTrail.model.item.DropListCollection; import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.Loot; +import com.gpl.rpg.AndorsTrail.model.quest.Quest; import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.savegames.LegacySavegameFormatReaderForPlayer; import com.gpl.rpg.AndorsTrail.util.Coord; @@ -42,7 +47,7 @@ public final class Player extends Actor { public int totalExperience; public final Range weaponDamage = new Range(); - private final HashMap > questProgress = new HashMap >(); + private final LinkedHashMap > questProgress = new LinkedHashMap >(); private String spawnMap; private String spawnPlace; private final HashMap alignments = new HashMap(); @@ -141,6 +146,9 @@ public final class Player extends Actor { public boolean hasAnyQuestProgress(String questID) { return questProgress.containsKey(questID); } + public Collection getAllQuestProgressIDs() { + return new ArrayList<>(this.questProgress.keySet()); + } public boolean isLatestQuestProgress(String questID, int progress) { if (!questProgress.containsKey(questID)) return false; if (!questProgress.get(questID).contains(progress)) return false; @@ -345,16 +353,30 @@ public final class Player extends Actor { this.spawnPlace = src.readUTF(); if (fileversion > 13) { + LinkedHashMap > questProgress = new LinkedHashMap >(); final int numQuests = src.readInt(); for(int i = 0; i < numQuests; ++i) { final String questID = src.readUTF(); - this.questProgress.put(questID, new HashSet()); + questProgress.put(questID, new HashSet()); final int numProgress = src.readInt(); for(int j = 0; j < numProgress; ++j) { int progress = src.readInt(); - this.questProgress.get(questID).add(progress); + questProgress.get(questID).add(progress); } } + + // questprogress is randomly sorted until 52 so sort it by quest order + if (fileversion < 52) { + for (Quest q : world.quests.getAllQuests()) { + final HashSet questSteps = questProgress.get(q.questID); + if (questSteps != null) { + this.questProgress.put(q.questID, questSteps); + } + } + } else { + this.questProgress.putAll(questProgress); + } + } this.availableSkillIncreases = 0; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/Quest.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/Quest.java index bbc9a4571..5c651deec 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/Quest.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/quest/Quest.java @@ -47,11 +47,6 @@ public final class Quest implements Comparable { @Override public int compareTo(Quest q) { - - int comp = name.compareTo(q.name); - if (comp == 0) { - comp = sortOrder - q.sortOrder; - } - return comp; + return sortOrder - q.sortOrder; } }