From 324be2768cc9e15ab7b991d8302f387be8187df5 Mon Sep 17 00:00:00 2001 From: guru_meditation_no42 Date: Wed, 7 Apr 2021 22:30:08 -0700 Subject: [PATCH 1/3] Track and report monster kills by name instead of id --- .../controller/CombatController.java | 2 +- .../rpg/AndorsTrail/model/GameStatistics.java | 30 ++++++++++++++----- .../rpg/AndorsTrail/model/actor/Monster.java | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index e991454af..f3a2213b6 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -238,7 +238,7 @@ public final class CombatController implements VisualEffectCompletedCallback { controllers.actorStatsController.addActorAP(player, player.getSkillLevel(SkillCollection.SkillID.cleave) * SkillCollection.PER_SKILLPOINT_INCREASE_CLEAVE_AP); controllers.actorStatsController.addActorHealth(player, player.getSkillLevel(SkillCollection.SkillID.eater) * SkillCollection.PER_SKILLPOINT_INCREASE_EATER_HEALTH); - world.model.statistics.addMonsterKill(killedMonster.getMonsterTypeID()); + world.model.statistics.addMonsterKill(killedMonster.monsterType); controllers.actorStatsController.addExperience(loot.exp); world.model.combatLog.append(controllers.getResources().getString(R.string.dialog_monsterloot_gainedexp, loot.exp)); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java index 515eb2fa0..df1c0efde 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java @@ -15,6 +15,7 @@ import android.content.res.Resources; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; @@ -24,6 +25,7 @@ public final class GameStatistics { private int deaths = 0; private final HashMap killedMonsters = new HashMap(); private final HashMap usedItems = new HashMap(); + private final HashMap killedMonstersByName = new HashMap(); private int spentGold = 0; private boolean unlimitedSaves = true; private int startLives = -1; // -1 --> unlimited @@ -33,10 +35,14 @@ public final class GameStatistics { this.startLives = startLives; } - public void addMonsterKill(String monsterTypeID) { - if (!killedMonsters.containsKey(monsterTypeID)) killedMonsters.put(monsterTypeID, 1); - else killedMonsters.put(monsterTypeID, killedMonsters.get(monsterTypeID) + 1); + public void addMonsterKill(MonsterType monsterType) { + // Track monster kills by type ID, for savegame file + killedMonsters.put(monsterType.id, killedMonsters.getOrDefault((monsterType.id), 0) + 1); + + // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) + killedMonstersByName.put(monsterType.name, killedMonstersByName.getOrDefault(monsterType.name, 0) + 1); } + public void addPlayerDeath(int lostExp) { ++deaths; } @@ -73,17 +79,21 @@ public final class GameStatistics { return v; } + public int getNumberOfKillsForMonsterName(String monsterName) { + Integer v = killedMonstersByName.get(monsterName); + if (v == null) return 0; + return v; + } + public String getTop5MostCommonlyKilledMonsters(WorldContext world, Resources res) { if (killedMonsters.isEmpty()) return null; - List> entries = new ArrayList>(killedMonsters.entrySet()); + List> entries = new ArrayList>(killedMonstersByName.entrySet()); Collections.sort(entries, descendingValueComparator); StringBuilder sb = new StringBuilder(100); int i = 0; for (Entry e : entries) { if (i++ >= 5) break; - MonsterType t = world.monsterTypes.getMonsterType(e.getKey()); - if (t == null) continue; - sb.append(res.getString(R.string.heroinfo_gamestats_name_and_qty, t.name, e.getValue())).append('\n'); + sb.append(res.getString(R.string.heroinfo_gamestats_name_and_qty, e.getKey(), e.getValue())).append('\n'); } return sb.toString(); } @@ -173,7 +183,13 @@ public final class GameStatistics { id = type.id; } this.killedMonsters.put(id, value); + + // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) + MonsterType t = world.monsterTypes.getMonsterType(id); + + if (t != null) killedMonstersByName.put(t.name, killedMonstersByName.getOrDefault(t.name, 0) + value); } + if (fileversion <= 17) return; final int numItems = src.readInt(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java index 0b65faa20..063394013 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java @@ -26,7 +26,7 @@ public final class Monster extends Actor { private boolean forceAggressive = false; private ItemContainer shopItems = null; - private final MonsterType monsterType; + public final MonsterType monsterType; public final MonsterSpawnArea area; public Monster(MonsterType monsterType, MonsterSpawnArea area) { From 0f32f09b0d255bb61cc195b1bcf2662de6610e7a Mon Sep 17 00:00:00 2001 From: guru_meditation_no42 Date: Thu, 8 Apr 2021 09:32:50 -0700 Subject: [PATCH 2/3] Track and report monster kills by name instead of id --- .../rpg/AndorsTrail/model/GameStatistics.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java index df1c0efde..938a949e9 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java @@ -15,7 +15,6 @@ import android.content.res.Resources; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.WorldContext; -import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; @@ -23,9 +22,9 @@ import com.gpl.rpg.AndorsTrail.model.quest.Quest; public final class GameStatistics { private int deaths = 0; - private final HashMap killedMonsters = new HashMap(); - private final HashMap usedItems = new HashMap(); + private final HashMap killedMonstersByTypeID = new HashMap(); private final HashMap killedMonstersByName = new HashMap(); + private final HashMap usedItems = new HashMap(); private int spentGold = 0; private boolean unlimitedSaves = true; private int startLives = -1; // -1 --> unlimited @@ -37,7 +36,7 @@ public final class GameStatistics { public void addMonsterKill(MonsterType monsterType) { // Track monster kills by type ID, for savegame file - killedMonsters.put(monsterType.id, killedMonsters.getOrDefault((monsterType.id), 0) + 1); + killedMonstersByTypeID.put(monsterType.id, killedMonstersByTypeID.getOrDefault((monsterType.id), 0) + 1); // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) killedMonstersByName.put(monsterType.name, killedMonstersByName.getOrDefault(monsterType.name, 0) + 1); @@ -74,7 +73,7 @@ public final class GameStatistics { public boolean isDead() { return !hasUnlimitedLives() && getLivesLeft() < 1; } public int getNumberOfKillsForMonsterType(String monsterTypeID) { - Integer v = killedMonsters.get(monsterTypeID); + Integer v = killedMonstersByTypeID.get(monsterTypeID); if (v == null) return 0; return v; } @@ -86,7 +85,7 @@ public final class GameStatistics { } public String getTop5MostCommonlyKilledMonsters(WorldContext world, Resources res) { - if (killedMonsters.isEmpty()) return null; + if (killedMonstersByTypeID.isEmpty()) return null; List> entries = new ArrayList>(killedMonstersByName.entrySet()); Collections.sort(entries, descendingValueComparator); StringBuilder sb = new StringBuilder(100); @@ -99,9 +98,9 @@ public final class GameStatistics { } public String getMostPowerfulKilledMonster(WorldContext world) { - if (killedMonsters.isEmpty()) return null; - HashMap expPerMonsterType = new HashMap(killedMonsters.size()); - for (String monsterTypeID : killedMonsters.keySet()) { + if (killedMonstersByTypeID.isEmpty()) return null; + HashMap expPerMonsterType = new HashMap(killedMonstersByTypeID.size()); + for (String monsterTypeID : killedMonstersByTypeID.keySet()) { MonsterType t = world.monsterTypes.getMonsterType(monsterTypeID); expPerMonsterType.put(monsterTypeID, t != null ? t.exp : 0); } @@ -157,7 +156,7 @@ public final class GameStatistics { public int getNumberOfKilledMonsters() { int result = 0; - for (int v : killedMonsters.values()) result += v; + for (int v : killedMonstersByTypeID.values()) result += v; return result; } @@ -182,7 +181,7 @@ public final class GameStatistics { if (type == null) continue; id = type.id; } - this.killedMonsters.put(id, value); + this.killedMonstersByTypeID.put(id, value); // Also track by name, for statistics display (multiple IDs w/same name don't matter to player) MonsterType t = world.monsterTypes.getMonsterType(id); @@ -208,7 +207,7 @@ public final class GameStatistics { public void writeToParcel(DataOutputStream dest) throws IOException { dest.writeInt(deaths); - Set > set = killedMonsters.entrySet(); + Set > set = killedMonstersByTypeID.entrySet(); dest.writeInt(set.size()); for (Entry e : set) { dest.writeUTF(e.getKey()); From 737736dca286a978f8be424dac3bf2c4240e51e3 Mon Sep 17 00:00:00 2001 From: guru_meditation_no42 Date: Thu, 8 Apr 2021 10:25:19 -0700 Subject: [PATCH 3/3] Track and report monster kills by name instead of id --- .../src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java index 938a949e9..29fe694f5 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/GameStatistics.java @@ -78,12 +78,12 @@ public final class GameStatistics { return v; } - public int getNumberOfKillsForMonsterName(String monsterName) { + /*public int getNumberOfKillsForMonsterName(String monsterName) { Integer v = killedMonstersByName.get(monsterName); if (v == null) return 0; return v; } - +*/ public String getTop5MostCommonlyKilledMonsters(WorldContext world, Resources res) { if (killedMonstersByTypeID.isEmpty()) return null; List> entries = new ArrayList>(killedMonstersByName.entrySet());