@@ -594,6 +588,46 @@
return this.modalDetails.items.reduce((s, i) => s + (i.crafteosPosibles || 0), 0);
},
+ snapshotCristalesUsed() {
+ const items = this.modalDetails?.items || [];
+ return new Set(items.map(i => i.grado));
+ },
+
+ snapshotOreUsed() {
+ const items = this.modalDetails?.items || [];
+ const used = new Set();
+ for (const item of items) {
+ if (item.tipo === 'Soulshot') used.add('soulOre');
+ else if (item.tipo === 'Spiritshot' || item.tipo === 'Blessed Spiritshot') used.add('spiritOre');
+ }
+ return used;
+ },
+
+ snapshotVentaUsed() {
+ const items = this.modalDetails?.items || [];
+ return new Set(items.map(i => i.tipo + '-' + i.grado));
+ },
+
+ filteredSnapshotCristales() {
+ const used = this.snapshotCristalesUsed();
+ const all = this.snapshotCristales();
+ return Object.entries(all).filter(([grado]) => used.has(grado));
+ },
+
+ filteredSnapshotOres() {
+ const used = this.snapshotOreUsed();
+ const result = [];
+ if (used.has('soulOre')) result.push({ key: 'soulOre', label: 'Soul Ore', precio: this.snapshotOre('soulOre') });
+ if (used.has('spiritOre')) result.push({ key: 'spiritOre', label: 'Spirit Ore', precio: this.snapshotOre('spiritOre') });
+ return result;
+ },
+
+ filteredSnapshotVenta() {
+ const used = this.snapshotVentaUsed();
+ const all = this.snapshotVenta();
+ return Object.entries(all).filter(([key]) => used.has(key));
+ },
+
snapshotCristales() {
if (!this.modalDetails?.snapshot?.insumos?.cristales) return {};
return this.modalDetails.snapshot.insumos.cristales;