You've already forked KF-MMO-Server
							
							Inventory system changes
This commit is contained in:
		
							
								
								
									
										12
									
								
								Classes/Incoming/inventoryChange.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Classes/Incoming/inventoryChange.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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[] = [] | ||||||
|  | } | ||||||
| @@ -1,4 +1,5 @@ | |||||||
| import { game } from "../game" | import { game } from "../game" | ||||||
|  | import { inventoryChange } from "./Incoming/inventoryChange" | ||||||
|  |  | ||||||
| export class itemData{ | export class itemData{ | ||||||
|     name        : string |     name        : string | ||||||
| @@ -20,6 +21,24 @@ export class itemData{ | |||||||
|         return item |         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){ |     static copy(data : itemData){ | ||||||
|         let item = new itemData() |         let item = new itemData() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -43,20 +43,8 @@ export class playerData{ | |||||||
|     } |     } | ||||||
|      |      | ||||||
|     validateEquipment(){ |     validateEquipment(){ | ||||||
|         if(this.inventory.weapon != -1){ |         if(this.inventory.equipment.length < 3){ | ||||||
|             if(this.getItemById(this.inventory.weapon) == null){ |             this.inventory.equipment = [-1, -1, -1] | ||||||
|                 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; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,6 +2,6 @@ import { itemData } from "./itemData"; | |||||||
|  |  | ||||||
| export class playerInventory{ | export class playerInventory{ | ||||||
|     weapon : number = -1 |     weapon : number = -1 | ||||||
|     equipment : number[] = [-1,-1] |     equipment : number[] = [-1,-1,-1] | ||||||
|     items : itemData[] = [] |     items : itemData[] = [] | ||||||
| } | } | ||||||
| @@ -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) |  | ||||||
| } |  | ||||||
| @@ -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; |  | ||||||
|         } |  | ||||||
|     }) |  | ||||||
| } |  | ||||||
| @@ -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 += "<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)) |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             console.log("ERROR ERROR ITEM ERROR") |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -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)) |  | ||||||
| } |  | ||||||
							
								
								
									
										49
									
								
								Items/_updateInventory.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Items/_updateInventory.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|  | } | ||||||
| @@ -1,22 +1,7 @@ | |||||||
| import { delete1 } from "./_delete1"; | import { updateInventory } from "./_updateInventory"; | ||||||
| import { deleteMany } from "./_deleteMany"; |  | ||||||
| import { pickup } from "./_pickup"; |  | ||||||
| import { request } from "./_request"; |  | ||||||
|  |  | ||||||
| export function registerItemCallbacks(socket){ | export function registerItemCallbacks(socket){ | ||||||
|     socket.on('item/pickup', (data) => { |     socket.on('item/updateInventory', (data) => { | ||||||
|         pickup(socket, data) |         updateInventory(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) |  | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
							
								
								
									
										7
									
								
								Quest/_update.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Quest/_update.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								Quest/questSocket.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Quest/questSocket.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | import { update } from "./_update"; | ||||||
|  |  | ||||||
|  | export function registerQuestCallbacks(socket){ | ||||||
|  |     socket.on('quest/update', (data) => { | ||||||
|  |         update(socket, data) | ||||||
|  |     }); | ||||||
|  | } | ||||||
							
								
								
									
										4
									
								
								index.ts
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								index.ts
									
									
									
									
									
								
							| @@ -1,13 +1,10 @@ | |||||||
| import { game } from "./game"; | import { game } from "./game"; | ||||||
| import { users } from "./Account/users"; | import { users } from "./Account/users"; | ||||||
| import { loadItems } from "./Items/items"; |  | ||||||
| import { players } from "./Player/players"; | import { players } from "./Player/players"; | ||||||
| import { registerItemCallbacks } from "./Items/itemSocket"; | import { registerItemCallbacks } from "./Items/itemSocket"; | ||||||
| import { registerLobbyCallbacks } from "./Lobby/lobbySocket"; | import { registerLobbyCallbacks } from "./Lobby/lobbySocket"; | ||||||
| import { registerAccountCallbacks } from "./Account/accountSocket"; | import { registerAccountCallbacks } from "./Account/accountSocket"; | ||||||
| import { registerLevelCallbacks } from "./Level/levelSocket"; | import { registerLevelCallbacks } from "./Level/levelSocket"; | ||||||
| import { physicsObject } from "./Classes/physicsObject"; |  | ||||||
| import { enemyData } from "./Classes/enemyData"; |  | ||||||
|  |  | ||||||
| const express = require("express"); | const express = require("express"); | ||||||
| const app = express(); | const app = express(); | ||||||
| @@ -27,7 +24,6 @@ const io = require("socket.io")(server, { | |||||||
|  |  | ||||||
| users.loadUsers(); | users.loadUsers(); | ||||||
| players.loadPlayers(); | players.loadPlayers(); | ||||||
| loadItems() |  | ||||||
|  |  | ||||||
| io.on('connection', (socket) => { | io.on('connection', (socket) => { | ||||||
| 	console.log("Got connection!"); | 	console.log("Got connection!"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user