From 9ab74c881de3b118d4560c4702ba1f2e0eb5119e Mon Sep 17 00:00:00 2001 From: Gonk Date: Mon, 28 Sep 2020 21:19:51 +0200 Subject: [PATCH] Queststeps in the quest log are now sorted in chronological order. Until now they were sorted by step id. --- .../fragment/HeroinfoActivity_Quests.java | 18 ++++++--- .../rpg/AndorsTrail/model/actor/Player.java | 38 ++++++++++++++----- 2 files changed, 41 insertions(+), 15 deletions(-) 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 c88057814..6aa4ec935 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 @@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.activity.fragment; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -21,6 +22,7 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.quest.Quest; import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry; +import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress; import com.gpl.rpg.AndorsTrail.view.SpinnerEmulator; public final class HeroinfoActivity_Quests extends Fragment { @@ -144,12 +146,16 @@ public final class HeroinfoActivity_Quests extends Fragment { 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); + for(Integer progress : player.getQuestProgress(q.questID)) { + for(QuestLogEntry e : q.stages) { + if (e.progress == progress.intValue()) { + if (e.logtext.length() > 0) { + item = new HashMap(); + item.put(mn_logText, e.logtext); + logItemList.add(item); + } + continue; + } } } childList.add(logItemList); 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 603977973..275fb3908 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -9,6 +9,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; import java.util.Map.Entry; import java.util.UUID; @@ -47,13 +49,15 @@ public final class Player extends Actor { public int totalExperience; public final Range weaponDamage = new Range(); - private final LinkedHashMap > questProgress = new LinkedHashMap >(); + private final LinkedHashMap> questProgress = new LinkedHashMap >(); private String spawnMap; private String spawnPlace; private final HashMap alignments = new HashMap(); public String id = UUID.randomUUID().toString(); public long savedVersion = 1; // the version get's increased for cheat detection everytime a player with limited saves is saved + + // Unequipped stats public static final class PlayerBaseTraits { public int iconID; @@ -157,9 +161,13 @@ public final class Player extends Actor { } return true; } + public Integer[] getQuestProgress(String questID) { + if (!questProgress.containsKey(questID)) return new Integer[] {}; + return questProgress.get(questID).toArray(new Integer[questProgress.get(questID).size()]); + } public boolean addQuestProgress(QuestProgress progress) { if (hasExactQuestProgress(progress.questID, progress.progress)) return false; - if (!questProgress.containsKey(progress.questID)) questProgress.put(progress.questID, new HashSet()); + if (!questProgress.containsKey(progress.questID)) questProgress.put(progress.questID, new LinkedHashSet()); questProgress.get(progress.questID).add(progress.progress); return true; //Progress was added. } @@ -353,22 +361,34 @@ public final class Player extends Actor { this.spawnPlace = src.readUTF(); if (fileversion > 13) { - LinkedHashMap > questProgress = new LinkedHashMap >(); + LinkedHashMap > questProgress = new LinkedHashMap >(); final int numQuests = src.readInt(); for(int i = 0; i < numQuests; ++i) { final String questID = src.readUTF(); - questProgress.put(questID, new HashSet()); + questProgress.put(questID, new LinkedHashSet()); final int numProgress = src.readInt(); - for(int j = 0; j < numProgress; ++j) { - int progress = src.readInt(); - questProgress.get(questID).add(progress); + + // queststeps are randomly sorted until 56 so sort it by ID + if (fileversion < 56) { + List steps = new ArrayList(); + for (int j = 0; j < numProgress; ++j) { + int progress = src.readInt(); + steps.add(progress); + } + Collections.sort(steps); + questProgress.get(questID).addAll(steps); + } else { + for (int j = 0; j < numProgress; ++j) { + int progress = src.readInt(); + 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); + final LinkedHashSet questSteps = questProgress.get(q.questID); if (questSteps != null) { this.questProgress.put(q.questID, questSteps); } @@ -440,7 +460,7 @@ public final class Player extends Actor { dest.writeUTF(spawnMap); dest.writeUTF(spawnPlace); dest.writeInt(questProgress.size()); - for(Entry > e : questProgress.entrySet()) { + for(Entry > e : questProgress.entrySet()) { dest.writeUTF(e.getKey()); dest.writeInt(e.getValue().size()); for(int progress : e.getValue()) {