From 4e2eedda49c93ee838f9b602adb33eb4799aeb82 Mon Sep 17 00:00:00 2001 From: Katboi01 Date: Thu, 2 Nov 2023 17:12:24 +0100 Subject: [PATCH] Inventory system changes --- Classes/Incoming/inventoryChange.ts | 12 +++++ Classes/itemData.ts | 19 ++++++++ Classes/playerData.ts | 16 +------ Classes/playerInventory.ts | 2 +- Items/_delete1.ts | 15 ------- Items/_deleteMany.ts | 22 --------- Items/_pickup.ts | 70 ----------------------------- Items/_request.ts | 16 ------- Items/_updateInventory.ts | 49 ++++++++++++++++++++ Items/itemSocket.ts | 21 ++------- Quest/_update.ts | 7 +++ Quest/questSocket.ts | 7 +++ index.ts | 4 -- 13 files changed, 100 insertions(+), 160 deletions(-) create mode 100644 Classes/Incoming/inventoryChange.ts delete mode 100644 Items/_delete1.ts delete mode 100644 Items/_deleteMany.ts delete mode 100644 Items/_pickup.ts delete mode 100644 Items/_request.ts create mode 100644 Items/_updateInventory.ts create mode 100644 Quest/_update.ts create mode 100644 Quest/questSocket.ts diff --git a/Classes/Incoming/inventoryChange.ts b/Classes/Incoming/inventoryChange.ts new file mode 100644 index 0000000..660016d --- /dev/null +++ b/Classes/Incoming/inventoryChange.ts @@ -0,0 +1,12 @@ +import { Stat } from "../itemData" + +export class inventoryChange{ + id : number + name : string + rarity : number + change : number + templateId: number + operation : number + equipment : number[] + stats : Stat[] = [] +} \ No newline at end of file diff --git a/Classes/itemData.ts b/Classes/itemData.ts index 0c79ad0..a5cce6d 100644 --- a/Classes/itemData.ts +++ b/Classes/itemData.ts @@ -1,4 +1,5 @@ import { game } from "../game" +import { inventoryChange } from "./Incoming/inventoryChange" export class itemData{ name : string @@ -20,6 +21,24 @@ export class itemData{ return item } + static fromChange(change : inventoryChange){ + let item = new itemData() + + item.id = change.id + item.name = change.name + if(change.hasOwnProperty("stats")){ + item.stats = change.stats + } + else{ + item.stats = [] + } + item.count = change.change + item.rarity = change.rarity + item.templateId = change.templateId + + return item + } + static copy(data : itemData){ let item = new itemData() diff --git a/Classes/playerData.ts b/Classes/playerData.ts index d0f0c3d..03eece2 100644 --- a/Classes/playerData.ts +++ b/Classes/playerData.ts @@ -43,20 +43,8 @@ export class playerData{ } validateEquipment(){ - if(this.inventory.weapon != -1){ - if(this.getItemById(this.inventory.weapon) == null){ - this.inventory.weapon == -1; - } - } - if(this.inventory.equipment[0] != -1){ - if(this.getItemById(this.inventory.equipment[0]) == null){ - this.inventory.equipment[0] == -1; - } - } - if(this.inventory.equipment[1] != -1){ - if(this.getItemById(this.inventory.equipment[1]) == null){ - this.inventory.equipment[1] == -1; - } + if(this.inventory.equipment.length < 3){ + this.inventory.equipment = [-1, -1, -1] } } diff --git a/Classes/playerInventory.ts b/Classes/playerInventory.ts index 839a909..0951a2d 100644 --- a/Classes/playerInventory.ts +++ b/Classes/playerInventory.ts @@ -2,6 +2,6 @@ import { itemData } from "./itemData"; export class playerInventory{ weapon : number = -1 - equipment : number[] = [-1,-1] + equipment : number[] = [-1,-1,-1] items : itemData[] = [] } \ No newline at end of file diff --git a/Items/_delete1.ts b/Items/_delete1.ts deleted file mode 100644 index 6cbabb8..0000000 --- a/Items/_delete1.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { playerData } from "../Classes/playerData"; - -export function delete1(socket, 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) -} \ No newline at end of file diff --git a/Items/_deleteMany.ts b/Items/_deleteMany.ts deleted file mode 100644 index 91ce378..0000000 --- a/Items/_deleteMany.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { inventoryItemTransaction } from "../Classes/inventoryItemTransaction"; -import { playerData } from "../Classes/playerData"; - -export function deleteMany(socket, 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; - } - }) -} \ No newline at end of file diff --git a/Items/_pickup.ts b/Items/_pickup.ts deleted file mode 100644 index 2b0fe3e..0000000 --- a/Items/_pickup.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { itemData } from "../Classes/itemData"; -import { lobbyMessage } from "../Classes/lobbyMessage"; -import { playerData } from "../Classes/playerData"; -import { game } from "../game"; - -export function pickup(socket, 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") - } - } -} \ No newline at end of file diff --git a/Items/_request.ts b/Items/_request.ts deleted file mode 100644 index 615b4a0..0000000 --- a/Items/_request.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { itemGenerated } from "../Classes/itemGenerated"; -import { itemRequest } from "../Classes/itemRequest"; -import { generateItemByType } from "./itemGeneration"; - -export function request(socket, 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)) -} \ No newline at end of file diff --git a/Items/_updateInventory.ts b/Items/_updateInventory.ts new file mode 100644 index 0000000..c4db6ce --- /dev/null +++ b/Items/_updateInventory.ts @@ -0,0 +1,49 @@ +import { inventoryChange } from "../Classes/Incoming/inventoryChange"; +import { itemData } from "../Classes/itemData"; +import { playerData } from "../Classes/playerData"; + +export function updateInventory(socket, data){ + if(!socket.hasOwnProperty("player")) return; + + let buff = Buffer.from(data, 'base64'); + let data1 : inventoryChange[] = JSON.parse(buff.toString('utf-8')); + + let player : playerData = socket.player + let inventory = player.inventory + + data1.forEach(change=>{ + switch(change.operation){ + case 0: //None + break; + case 1: //ItemAdd + { + let item = itemData.fromChange(change) + inventory.items.push(item) + break; + } + case 2: //ItemAddToStack + { + let itemStack = inventory.items.find(i=>i.id == change.id) + itemStack.count += change.change + break; + } + case 3: //ItemRemove + { + let itemStack = inventory.items.findIndex(i=>i.id == change.id) + inventory.items.splice(itemStack, 1) + break; + } + case 4: //ItemRemoveFromStack + { + let itemStack = inventory.items.find(i=>i.id == change.id) + itemStack.count -= change.change + break; + } + case 5: //EquipmentChange + { + inventory.equipment = change.equipment + break; + } + } + }) +} \ No newline at end of file diff --git a/Items/itemSocket.ts b/Items/itemSocket.ts index 056d48e..a8e6613 100644 --- a/Items/itemSocket.ts +++ b/Items/itemSocket.ts @@ -1,22 +1,7 @@ -import { delete1 } from "./_delete1"; -import { deleteMany } from "./_deleteMany"; -import { pickup } from "./_pickup"; -import { request } from "./_request"; +import { updateInventory } from "./_updateInventory"; export function registerItemCallbacks(socket){ - socket.on('item/pickup', (data) => { - pickup(socket, data) - }); - - socket.on('item/delete', (data) => { - delete1(socket, data) - }); - - socket.on('item/deleteMany', (data) => { - deleteMany(socket, data) - }); - - socket.on('item/request', (data) => { - request(socket, data) + socket.on('item/updateInventory', (data) => { + updateInventory(socket, data) }); } \ No newline at end of file diff --git a/Quest/_update.ts b/Quest/_update.ts new file mode 100644 index 0000000..5e1a127 --- /dev/null +++ b/Quest/_update.ts @@ -0,0 +1,7 @@ +export function update(socket, data){ + if(!socket.hasOwnProperty("player")) return; + + let buff = Buffer.from(data, 'base64'); + //let data1 : levelUpdateHost = JSON.parse(buff.toString('utf-8')); + //let player : playerData = socket.player +} \ No newline at end of file diff --git a/Quest/questSocket.ts b/Quest/questSocket.ts new file mode 100644 index 0000000..d21c6cf --- /dev/null +++ b/Quest/questSocket.ts @@ -0,0 +1,7 @@ +import { update } from "./_update"; + +export function registerQuestCallbacks(socket){ + socket.on('quest/update', (data) => { + update(socket, data) + }); +} \ No newline at end of file diff --git a/index.ts b/index.ts index cc918f2..e482dee 100644 --- a/index.ts +++ b/index.ts @@ -1,13 +1,10 @@ import { game } from "./game"; import { users } from "./Account/users"; -import { loadItems } from "./Items/items"; import { players } from "./Player/players"; import { registerItemCallbacks } from "./Items/itemSocket"; import { registerLobbyCallbacks } from "./Lobby/lobbySocket"; import { registerAccountCallbacks } from "./Account/accountSocket"; import { registerLevelCallbacks } from "./Level/levelSocket"; -import { physicsObject } from "./Classes/physicsObject"; -import { enemyData } from "./Classes/enemyData"; const express = require("express"); const app = express(); @@ -27,7 +24,6 @@ const io = require("socket.io")(server, { users.loadUsers(); players.loadPlayers(); -loadItems() io.on('connection', (socket) => { console.log("Got connection!");