import { itemData } from "../Classes/itemData"; import { itemGenerated } from "../Classes/itemGenerated"; import { generateItemByType } from "./itemGeneration"; import { itemRequest } from "../Classes/itemRequest"; import { lobbyMessage } from "../Classes/lobbyMessage"; import { game } from "../game"; import { playerData } from "../Classes/playerData"; import { inventoryItemTransaction } from "../Classes/inventoryItemTransaction"; export function registerItemCallbacks(socket){ socket.on('item/pickup', (data) => { if(!socket.hasOwnProperty("user")) return; let buff = Buffer.from(data, 'base64'); let data1 : itemData = JSON.parse(buff.toString('utf-8')); let player : playerData = socket.player if(player != null){ let inventory = player.inventory let template = game.getItemTemplate(data1.templateId) let items = inventory.items.filter(i=>i.templateId == data1.templateId) let totalAdded = 0 if(data1.count > template.maxCount) { console.log("ERROR ERROR ITEM ERROR") return; } items.forEach(item=>{ var maxAmount = Math.min(template.maxCount - item.count, data1.count - totalAdded); if (maxAmount > 0) { item.count += maxAmount; totalAdded += maxAmount; } }) if(totalAdded < data1.count) { let maxAmount = data1.count - totalAdded let itemCopy = itemData.copy(data1); itemCopy.count = maxAmount; totalAdded += maxAmount; inventory.items.push(itemCopy); } if (totalAdded == data1.count) { if(data1.rarity >= 75){ let message = socket.user.login + " picked up " if(data1.rarity >= 95){ message += "" + data1.name + " (epic)" } else if(data1.rarity >= 75){ message += "" + data1.name + " (rare)" } else if(data1.rarity >= 60){ message += "" + data1.name + " (uncommon)" } else message += data1.name; game.addMessage(new lobbyMessage(message)) } } else { console.log("ERROR ERROR ITEM ERROR") } } }); socket.on('item/delete', (data) => { if(!socket.hasOwnProperty("user")) return; let buff = Buffer.from(data, 'base64'); let data1 = Number(buff.toString('utf-8')); let player : playerData = socket.player let item = player.inventory.items.findIndex(i=>i.id == data1); if(item == -1){ console.log("Error! Item " + item + " not found!") } player.inventory.items.splice(item, 1) }); socket.on('item/deleteMany', (data) => { if(!socket.hasOwnProperty("user")) return; let buff = Buffer.from(data, 'base64'); let data1 : inventoryItemTransaction[] = JSON.parse(buff.toString('utf-8')); let player : playerData = socket.player data1.forEach(t=>{ switch(t.type){ case 0: player.inventory.items.find(i=>i.id == t.itemId).count += t.amount; break; case 2: let item = player.inventory.items.findIndex(i=>i.id == t.itemId); player.inventory.items.splice(item, 1) break; } }) }); socket.on('item/request', (data) => { if(!socket.hasOwnProperty("user")) return; let buff = Buffer.from(data, 'base64'); let data1 : itemRequest = JSON.parse(buff.toString('utf-8')); let response = new itemGenerated() response.instanceId = data1.instanceId response.item = generateItemByType(data1.itemType) socket.emit("item/generated", JSON.stringify(response)) }); }