fix: resolve durability and combat issues with stackable items
- Updated database schema to set stackable items as non-stackable. - Implemented migration script to convert existing stackable items to instances with durability. - Fixed combat logic to ensure players lose if no weapon is equipped. - Added admin commands for inventory debugging and resetting. - Enhanced item display to show durability instead of quantity. - Conducted thorough testing and validation of changes.
This commit is contained in:
113
scripts/debugInventory.ts
Normal file
113
scripts/debugInventory.ts
Normal file
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* Script de Debug: Inspeccionar inventario de usuario específico
|
||||
*
|
||||
* Verifica estado actual de items de herramientas para diagnosticar el problema
|
||||
*/
|
||||
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
const userId = process.argv[2];
|
||||
const guildId = process.argv[3];
|
||||
|
||||
if (!userId || !guildId) {
|
||||
console.error(
|
||||
"❌ Uso: npx tsx scripts/debugInventory.ts <userId> <guildId>"
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(
|
||||
`🔍 Inspeccionando inventario de usuario ${userId.slice(
|
||||
0,
|
||||
8
|
||||
)}... en guild ${guildId.slice(0, 8)}...\n`
|
||||
);
|
||||
|
||||
// Obtener todas las entradas de inventario del usuario
|
||||
const entries = await prisma.inventoryEntry.findMany({
|
||||
where: { userId, guildId },
|
||||
include: { item: true },
|
||||
});
|
||||
|
||||
console.log(`📦 Total de items: ${entries.length}\n`);
|
||||
|
||||
for (const entry of entries) {
|
||||
const item = entry.item;
|
||||
const state = entry.state as any;
|
||||
const instances = state?.instances ?? [];
|
||||
|
||||
console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
||||
console.log(`📦 Item: ${item.name} (${item.key})`);
|
||||
console.log(` Stackable: ${item.stackable}`);
|
||||
console.log(` Quantity: ${entry.quantity}`);
|
||||
console.log(` Props:`, JSON.stringify(item.props, null, 2));
|
||||
console.log(` State.instances:`, JSON.stringify(instances, null, 2));
|
||||
|
||||
if (!item.stackable && entry.quantity > 1 && instances.length === 0) {
|
||||
console.log(
|
||||
` ⚠️ PROBLEMA: Non-stackable con quantity>1 pero sin instances`
|
||||
);
|
||||
}
|
||||
|
||||
if (instances.length > 0) {
|
||||
console.log(` 📊 Resumen de instancias:`);
|
||||
instances.forEach((inst: any, idx: number) => {
|
||||
console.log(` [${idx}] Durabilidad: ${inst.durability ?? "N/A"}`);
|
||||
});
|
||||
}
|
||||
console.log("");
|
||||
}
|
||||
|
||||
// Verificar equipo
|
||||
const equipment = await prisma.playerEquipment.findUnique({
|
||||
where: { userId_guildId: { userId, guildId } },
|
||||
});
|
||||
|
||||
if (equipment) {
|
||||
console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
||||
console.log(`🧰 Equipo equipado:`);
|
||||
if (equipment.weaponItemId) {
|
||||
const weapon = await prisma.economyItem.findUnique({
|
||||
where: { id: equipment.weaponItemId },
|
||||
});
|
||||
console.log(` Arma: ${weapon?.name ?? "Desconocida"} (${weapon?.key})`);
|
||||
} else {
|
||||
console.log(` Arma: ❌ NINGUNA EQUIPADA`);
|
||||
}
|
||||
|
||||
if (equipment.armorItemId) {
|
||||
const armor = await prisma.economyItem.findUnique({
|
||||
where: { id: equipment.armorItemId },
|
||||
});
|
||||
console.log(
|
||||
` Armadura: ${armor?.name ?? "Desconocida"} (${armor?.key})`
|
||||
);
|
||||
} else {
|
||||
console.log(` Armadura: (Ninguna)`);
|
||||
}
|
||||
|
||||
if (equipment.capeItemId) {
|
||||
const cape = await prisma.economyItem.findUnique({
|
||||
where: { id: equipment.capeItemId },
|
||||
});
|
||||
console.log(` Capa: ${cape?.name ?? "Desconocida"} (${cape?.key})`);
|
||||
} else {
|
||||
console.log(` Capa: (Ninguna)`);
|
||||
}
|
||||
} else {
|
||||
console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
||||
console.log(`🧰 Equipo: ❌ Sin registro de equipo`);
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((error) => {
|
||||
console.error("❌ Error:", error);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user