2023-09-16 05:42:42 +08:00
|
|
|
import { itemData } from "../Classes/itemData";
|
|
|
|
import { itemGenerated } from "../Classes/itemGenerated";
|
2023-09-18 18:33:06 +08:00
|
|
|
import { generateItemByType } from "./itemGeneration";
|
2023-09-16 05:42:42 +08:00
|
|
|
import { itemRequest } from "../Classes/itemRequest";
|
|
|
|
import { lobbyMessage } from "../Classes/lobbyMessage";
|
|
|
|
import { game } from "../game";
|
|
|
|
import { playerData } from "../Classes/playerData";
|
|
|
|
|
|
|
|
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'));
|
|
|
|
|
2023-09-16 17:24:44 +08:00
|
|
|
let player : playerData = socket.player
|
2023-09-16 05:42:42 +08:00
|
|
|
if(player != null){
|
2023-09-18 18:33:06 +08:00
|
|
|
|
|
|
|
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;
|
2023-09-16 05:42:42 +08:00
|
|
|
}
|
2023-09-18 18:33:06 +08:00
|
|
|
|
|
|
|
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);
|
2023-09-16 05:42:42 +08:00
|
|
|
}
|
2023-09-18 18:33:06 +08:00
|
|
|
|
|
|
|
if (totalAdded == data1.count)
|
|
|
|
{
|
|
|
|
if(data1.rarity >= 75){
|
|
|
|
let message = socket.user.login + " picked up "
|
|
|
|
if(data1.rarity >= 95){
|
|
|
|
message += "<color=purple>" + data1.name + "</color> (epic)"
|
|
|
|
}
|
|
|
|
else if(data1.rarity >= 75){
|
|
|
|
message += "<color=red>" + data1.name + "</color> (rare)"
|
|
|
|
}
|
|
|
|
else if(data1.rarity >= 60){
|
|
|
|
message += "<color=yellow>" + data1.name + "</color> (uncommon)"
|
|
|
|
}
|
|
|
|
else
|
|
|
|
message += data1.name;
|
|
|
|
|
|
|
|
game.addMessage(new lobbyMessage(message))
|
|
|
|
}
|
2023-09-16 05:42:42 +08:00
|
|
|
}
|
|
|
|
else
|
2023-09-18 18:33:06 +08:00
|
|
|
{
|
|
|
|
console.log("ERROR ERROR ITEM ERROR")
|
|
|
|
}
|
2023-09-16 05:42:42 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.on('item/delete', (data) => {
|
|
|
|
if(!socket.hasOwnProperty("user")) return;
|
|
|
|
|
|
|
|
let buff = Buffer.from(data, 'base64');
|
|
|
|
let data1 = Number(buff.toString('utf-8'));
|
|
|
|
|
2023-09-18 18:33:06 +08:00
|
|
|
let player : playerData = socket.player
|
2023-09-16 05:42:42 +08:00
|
|
|
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/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
|
2023-09-18 18:33:06 +08:00
|
|
|
response.item = generateItemByType(data1.itemType)
|
2023-09-16 05:42:42 +08:00
|
|
|
|
|
|
|
socket.emit("item/generated", JSON.stringify(response))
|
|
|
|
});
|
|
|
|
}
|