48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
const inventoryManager = require("../../game/InventoryManager");
|
|
const sessionManager = require("../../game/SessionManager");
|
|
|
|
module.exports = (io, socket) => {
|
|
const userId = socket.user?.id;
|
|
if (!userId) return;
|
|
|
|
socket.on("player:get_inventory", async () => {
|
|
const items = await inventoryManager.getInventory(userId);
|
|
socket.emit("player:inventory_data", items);
|
|
});
|
|
|
|
socket.on("player:get_equipment", async () => {
|
|
const equipment = await inventoryManager.getEquipment(userId);
|
|
socket.emit("player:equipment_data", equipment);
|
|
});
|
|
|
|
socket.on("player:equip_item", async ({ itemId, slot }) => {
|
|
try {
|
|
const itemInfo = await inventoryManager.equipItem(userId, itemId, slot);
|
|
sessionManager.updateEquipment(socket.id, slot, itemId);
|
|
socket.emit("player:item_equipped", { slot, itemId });
|
|
socket.broadcast.emit("player:visible_changed", {
|
|
playerId: userId,
|
|
slot,
|
|
texturePath: itemInfo.texture,
|
|
});
|
|
} catch (err) {
|
|
socket.emit("error", { message: err.message });
|
|
}
|
|
});
|
|
|
|
socket.on("player:unequip_item", async ({ slot }) => {
|
|
try {
|
|
await inventoryManager.unequipItem(userId, slot);
|
|
sessionManager.updateEquipment(socket.id, slot, null);
|
|
socket.emit("player:item_unequipped", { slot });
|
|
socket.broadcast.emit("player:visible_changed", {
|
|
playerId: userId,
|
|
slot,
|
|
texturePath: null,
|
|
});
|
|
} catch (err) {
|
|
socket.emit("error", { message: "UNEQUIP_FAILED" });
|
|
}
|
|
});
|
|
};
|