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 { 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() | ||||
|  | ||||
|   | ||||
| @@ -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] | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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[] = [] | ||||
| } | ||||
| @@ -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 { 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) | ||||
|     }); | ||||
| } | ||||
							
								
								
									
										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 { 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!"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user