v3.0.0: fixed a fairly seriously bug with item type discover tracking

triggering it in 'setSeen' also meant it was constantly triggered by sync behaviour, which is not what we want.
This commit is contained in:
Evan Debenham
2025-01-29 18:00:10 -05:00
parent d029c0d7d1
commit d828ee95de
17 changed files with 45 additions and 18 deletions

View File

@@ -142,7 +142,7 @@ public class Statistics {
private static final String SNEAKS = "sneakAttacks";
private static final String THROWN = "thrownAssists";
private static final String ITEM_DISCOVERIES = "item_discoveries";
private static final String ITEM_TYPES_DISCOVERED = "item_types_discovered";
private static final String SPAWNERS = "spawnersAlive";
@@ -165,7 +165,7 @@ public class Statistics {
bundle.put( ALCHEMY, itemsCrafted );
bundle.put( PIRANHAS, piranhasKilled );
bundle.put( ANKHS, ankhsUsed );
bundle.put( ITEM_DISCOVERIES, itemTypesDiscovered.toArray(new Class<?>[0]) );
bundle.put( ITEM_TYPES_DISCOVERED, itemTypesDiscovered.toArray(new Class<?>[0]) );
bundle.put( PROG_SCORE, progressScore );
bundle.put( ITEM_VAL, heldItemValue );
@@ -211,8 +211,8 @@ public class Statistics {
piranhasKilled = bundle.getInt( PIRANHAS );
ankhsUsed = bundle.getInt( ANKHS );
if (bundle.contains( ITEM_DISCOVERIES )) {
itemTypesDiscovered = new HashSet<>(Arrays.asList(bundle.getClassArray(ITEM_DISCOVERIES)));
if (bundle.contains( ITEM_TYPES_DISCOVERED )) {
itemTypesDiscovered = new HashSet<>(Arrays.asList(bundle.getClassArray(ITEM_TYPES_DISCOVERED)));
} else {
itemTypesDiscovered.clear();
}

View File

@@ -768,11 +768,6 @@ public enum Talent {
}
}
//note that IDing can happen in alchemy scene, so be careful with VFX here
public static void onItemIdentified( Hero hero, Item item ){
//currently no talents that trigger here, it wasn't a very popular trigger =(
}
public static int onAttackProc( Hero hero, Char enemy, int dmg ){
if (hero.hasTalent(Talent.PROVOKED_ANGER)

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
@@ -53,6 +54,7 @@ public class Dewdrop extends Item {
Waterskin flask = hero.belongings.getItem( Waterskin.class );
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
if (flask != null && !flask.isFull()){

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
@@ -56,6 +57,7 @@ public class EnergyCrystal extends Item {
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
Dungeon.energy += quantity;
//TODO track energy collected maybe? We do already track recipes crafted though..

View File

@@ -60,6 +60,7 @@ public class Gold extends Item {
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
Dungeon.gold += quantity;
Statistics.goldCollected += quantity;

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
@@ -231,7 +232,10 @@ public class Item implements Bundlable {
if (Dungeon.hero != null && Dungeon.hero.isAlive()) {
Badges.validateItemLevelAquired( this );
Talent.onItemCollected(Dungeon.hero, item);
if (isIdentified()) Catalog.setSeen(getClass());
if (isIdentified()) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
}
}
if (TippedDart.lostDarts > 0){
Dart d = new Dart();
@@ -258,7 +262,10 @@ public class Item implements Bundlable {
if (Dungeon.hero != null && Dungeon.hero.isAlive()) {
Badges.validateItemLevelAquired( this );
Talent.onItemCollected( Dungeon.hero, this );
if (isIdentified()) Catalog.setSeen(getClass());
if (isIdentified()){
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
}
}
items.add( this );
@@ -452,7 +459,7 @@ public class Item implements Bundlable {
if (byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(getClass());
if (!isIdentified()) Talent.onItemIdentified(Dungeon.hero, this);
Statistics.itemTypesDiscovered.add(getClass());
}
levelKnown = true;

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.armor;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
@@ -209,6 +210,7 @@ public class Armor extends EquipableItem {
if(super.collect(container)){
if (Dungeon.hero != null && Dungeon.hero.isAlive() && isIdentified() && glyph != null){
Catalog.setSeen(glyph.getClass());
Statistics.itemTypesDiscovered.add(glyph.getClass());
}
return true;
} else {
@@ -220,6 +222,7 @@ public class Armor extends EquipableItem {
public Item identify(boolean byHero) {
if (glyph != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(glyph.getClass());
Statistics.itemTypesDiscovered.add(glyph.getClass());
}
return super.identify(byHero);
}
@@ -649,6 +652,7 @@ public class Armor extends EquipableItem {
if (glyph != null && isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(glyph.getClass());
Statistics.itemTypesDiscovered.add(glyph.getClass());
}
return this;
}

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.CorrosiveGas;
@@ -489,6 +490,7 @@ public class DriedRose extends Artifact {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
DriedRose rose = hero.belongings.getItem( DriedRose.class );
if (rose == null){

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
@@ -500,6 +501,7 @@ public class TimekeepersHourglass extends Artifact {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
TimekeepersHourglass hourglass = hero.belongings.getItem( TimekeepersHourglass.class );
if (hourglass != null && !hourglass.cursed) {
hourglass.upgrade();

View File

@@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.items.keys;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
@@ -51,6 +52,7 @@ public abstract class Key extends Item {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
GameScene.pickUpJournal(this, pos);
WndJournal.last_index = 0;
Notes.add(this);

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.potions;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire;
@@ -357,6 +358,7 @@ public class Potion extends Item {
if (Dungeon.hero.isAlive()) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
}
}
}

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.rings;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.EnhancedRings;
@@ -161,6 +162,7 @@ public class Ring extends KindofMisc {
if (Dungeon.hero.isAlive()) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
}
}
}

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
@@ -220,6 +221,7 @@ public abstract class Scroll extends Item {
if (Dungeon.hero.isAlive()) {
Catalog.setSeen(getClass());
Statistics.itemTypesDiscovered.add(getClass());
}
}
}

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.Transmuting;
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
@@ -139,6 +140,7 @@ public class ScrollOfTransmutation extends InventoryScroll {
}
if (result.isIdentified()){
Catalog.setSeen(result.getClass());
Statistics.itemTypesDiscovered.add(result.getClass());
}
Transmuting.show(curUser, item, result);
curUser.sprite.emitter().start(Speck.factory(Speck.CHANGE), 0.2f, 10);

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Berserk;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
@@ -219,6 +220,7 @@ abstract public class Weapon extends KindOfWeapon {
if(super.collect(container)){
if (Dungeon.hero != null && Dungeon.hero.isAlive() && isIdentified() && enchantment != null){
Catalog.setSeen(enchantment.getClass());
Statistics.itemTypesDiscovered.add(enchantment.getClass());
}
return true;
} else {
@@ -230,6 +232,7 @@ abstract public class Weapon extends KindOfWeapon {
public Item identify(boolean byHero) {
if (enchantment != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(enchantment.getClass());
Statistics.itemTypesDiscovered.add(enchantment.getClass());
}
return super.identify(byHero);
}
@@ -410,6 +413,7 @@ abstract public class Weapon extends KindOfWeapon {
if (ench != null && isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(ench.getClass());
Statistics.itemTypesDiscovered.add(ench.getClass());
}
return this;
}

View File

@@ -22,7 +22,6 @@
package com.shatteredpixel.shatteredpixeldungeon.journal;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin;
@@ -46,13 +45,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ArcaneBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Firebomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.SmokeBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FlashBangBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FrostBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.HolyBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Noisemaker;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.RegrowthBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.FlashBangBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.ShrapnelBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.SmokeBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.WoollyBomb;
import com.shatteredpixel.shatteredpixeldungeon.items.food.Berry;
import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit;
@@ -321,7 +320,6 @@ public enum Catalog {
Journal.saveNeeded = true;
}
}
Statistics.itemTypesDiscovered.add(cls);
Badges.validateCatalogBadges();
}

View File

@@ -69,8 +69,8 @@ public class WndChooseAbility extends Window {
for (ArmorAbility ability : hero.heroClass.armorAbilities()) {
String warn;
if (Dungeon.initialVersion < 820){
warn = "_WARNING, code to track which items you have found for use in trinity was added in BETA-2.1. This run was started before that, and so some items you have encountered may not be usable with Trinity. Any items you currently hold can be made selectable by dropping and picking them back up._\n\n";
if (Dungeon.initialVersion < 821){
warn = "_WARNING, code to track which items you have found for use in trinity was added in BETA-2.2. This run was started before that, and so some items you have encountered may not be usable with Trinity. Any items you currently hold can be made selectable by dropping and picking them back up._\n\n";
} else {
warn = "";
}