diff --git a/Account/_emitLogin.ts b/Account/_emitLogin.ts new file mode 100644 index 0000000..5dd0e26 --- /dev/null +++ b/Account/_emitLogin.ts @@ -0,0 +1,21 @@ +import { loginResponse } from "../Classes/loginResponse"; +import { playerData } from "../Classes/playerData"; +import { userData } from "../Classes/userData"; + +export function emitLogin(socket, user : userData | null, player:playerData, registered:boolean = false){ + if(user != null){ + socket.emit("account/login", JSON.stringify(new loginResponse(true, user, player))); + socket.user = user + socket.player = player + if(registered){ + console.log(`User ${(user as userData).login} registerd and logged in`); + } + else{ + console.log(`User ${(user as userData).login} logged in`); + } + } + else{ + socket.emit("account/login", JSON.stringify(new loginResponse(false, null, null))); + console.log("Login Failed"); + } +} \ No newline at end of file diff --git a/Account/_login.ts b/Account/_login.ts new file mode 100644 index 0000000..ab5f586 --- /dev/null +++ b/Account/_login.ts @@ -0,0 +1,21 @@ +import { userData } from "../Classes/userData"; +import { players } from "../Player/players"; +import { emitLogin } from "./_emitLogin"; +import { users } from "./users"; + +export function login(socket, data){ + let buff = Buffer.from(data, 'base64'); + let json : userData = JSON.parse(buff.toString('utf-8')); + if (!json.login || !json.password) return + + let result = users.readUser(json.login, json.password); + let player = null + if(result != null){ + player = players.readPlayer(result.id) + if(player == null){ + player = players.createPlayer(result.id) + } + } + + emitLogin(socket, result, player); +} \ No newline at end of file diff --git a/Account/_register.ts b/Account/_register.ts new file mode 100644 index 0000000..ae5aaf0 --- /dev/null +++ b/Account/_register.ts @@ -0,0 +1,18 @@ +import { userData } from "../Classes/userData"; +import { players } from "../Player/players"; +import { emitLogin } from "./_emitLogin"; +import { users } from "./users"; + +export function register(socket, data){ + let buff = Buffer.from(data, 'base64'); + let json : userData = JSON.parse(buff.toString('utf-8')); + if (!json.login || !json.password) return + + let result = users.createUser(json.login, json.password); + let player = null + if(result != null){ + player = players.createPlayer(result.id) + } + + emitLogin(socket, result, player); +} \ No newline at end of file diff --git a/Account/accountSocket.ts b/Account/accountSocket.ts index 5bef066..5c60ea6 100644 --- a/Account/accountSocket.ts +++ b/Account/accountSocket.ts @@ -1,56 +1,12 @@ -import { loginResponse } from "../Classes/loginResponse"; -import { playerData } from "../Classes/playerData"; -import { userData } from "../Classes/userData"; -import { users } from "./users"; -import { players } from "../Player/players"; +import { register } from "./_register"; +import { login } from "./_login"; export function registerAccountCallbacks(socket){ - function emitLogin(user : userData | null, player:playerData, registered:boolean = false){ - if(user != null){ - socket.emit("account/login", JSON.stringify(new loginResponse(true, user, player))); - socket.user = user - socket.player = player - if(registered){ - console.log(`User ${(user as userData).login} registerd and logged in`); - } - else{ - console.log(`User ${(user as userData).login} logged in`); - } - } - else{ - socket.emit("account/login", JSON.stringify(new loginResponse(false, null, null))); - console.log("Login Failed"); - } - } - socket.on('account/register', (data) => { - let buff = Buffer.from(data, 'base64'); - let json : userData = JSON.parse(buff.toString('utf-8')); - if (!json.login || !json.password) return - - let result = users.createUser(json.login, json.password); - let player = null - if(result != null){ - player = players.createPlayer(result.id) - } - - emitLogin(result, player); + register(socket, data) }); socket.on('account/login', (data) => { - let buff = Buffer.from(data, 'base64'); - let json : userData = JSON.parse(buff.toString('utf-8')); - if (!json.login || !json.password) return - - let result = users.readUser(json.login, json.password); - let player = null - if(result != null){ - player = players.readPlayer(result.id) - if(player == null){ - player = players.createPlayer(result.id) - } - } - - emitLogin(result, player); + login(socket, data) }); } \ No newline at end of file diff --git a/Items/_delete1.ts b/Items/_delete1.ts new file mode 100644 index 0000000..6cbabb8 --- /dev/null +++ b/Items/_delete1.ts @@ -0,0 +1,15 @@ +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 new file mode 100644 index 0000000..91ce378 --- /dev/null +++ b/Items/_deleteMany.ts @@ -0,0 +1,22 @@ +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 new file mode 100644 index 0000000..2b0fe3e --- /dev/null +++ b/Items/_pickup.ts @@ -0,0 +1,70 @@ +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 new file mode 100644 index 0000000..615b4a0 --- /dev/null +++ b/Items/_request.ts @@ -0,0 +1,16 @@ +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/itemSocket.ts b/Items/itemSocket.ts index b3aa73d..056d48e 100644 --- a/Items/itemSocket.ts +++ b/Items/itemSocket.ts @@ -1,122 +1,22 @@ -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"; +import { delete1 } from "./_delete1"; +import { deleteMany } from "./_deleteMany"; +import { pickup } from "./_pickup"; +import { request } from "./_request"; 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") - } - } + pickup(socket, data) }); 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) + delete1(socket, data) }); 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; - } - }) + deleteMany(socket, data) }); 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)) + request(socket, data) }); } \ No newline at end of file diff --git a/Level/_projectile.ts b/Level/_projectile.ts new file mode 100644 index 0000000..c00a6f1 --- /dev/null +++ b/Level/_projectile.ts @@ -0,0 +1,10 @@ +import { game } from "../game"; + +export function projectile(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + //let data1 = JSON.parse(); + + game.socketIO.emit('level/projectile', buff.toString('utf-8')) +} \ No newline at end of file diff --git a/Level/_update.ts b/Level/_update.ts new file mode 100644 index 0000000..45e23ab --- /dev/null +++ b/Level/_update.ts @@ -0,0 +1,26 @@ +import { levelState } from "../Classes/levelState"; +import { game } from "../game"; + +export function update(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + let rawJson = JSON.parse(buff.toString('utf-8')); + let data1 : levelState = rawJson; + + let room = game.lobbyState.rooms.find(l=>l.id == data1.id) + if (room == null){ + room = new levelState() + room.id = data1.id + game.lobbyState.rooms.push(room) + } + + let player = socket.player + player.room = rawJson.player.room + player.rigidbody = rawJson.player.rigidbody + //only in non-host player + //player.damageInfo = rawJson.player.damageInfo + + room.enemies = data1.enemies + room.objects = data1.objects +} \ No newline at end of file diff --git a/Level/levelSocket.ts b/Level/levelSocket.ts index d2e7e64..3745ffe 100644 --- a/Level/levelSocket.ts +++ b/Level/levelSocket.ts @@ -1,37 +1,12 @@ -import { levelState } from "../Classes/levelState"; -import { game } from "../game"; +import { projectile } from "./_projectile"; +import { update } from "./_update"; export function registerLevelCallbacks(socket){ socket.on('level/update', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - let rawJson = JSON.parse(buff.toString('utf-8')); - let data1 : levelState = rawJson; - - let room = game.lobbyState.rooms.find(l=>l.id == data1.id) - if (room == null){ - room = new levelState() - room.id = data1.id - game.lobbyState.rooms.push(room) - } - - let player = socket.player - player.room = rawJson.player.room - player.rigidbody = rawJson.player.rigidbody - //only in non-host player - //player.damageInfo = rawJson.player.damageInfo - - room.enemies = data1.enemies - room.objects = data1.objects + update(socket, data) }); socket.on('level/projectile', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - //let data1 = JSON.parse(); - - game.socketIO.emit('level/projectile', buff.toString('utf-8')) + projectile(socket, data) }); } \ No newline at end of file diff --git a/Lobby/_loadoutChanged.ts b/Lobby/_loadoutChanged.ts new file mode 100644 index 0000000..dbd81b6 --- /dev/null +++ b/Lobby/_loadoutChanged.ts @@ -0,0 +1,16 @@ +import { playerData } from "../Classes/playerData"; +import { game } from "../game"; + +export function loadoutChanged(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + let data1 : playerData = JSON.parse(buff.toString('utf-8')); + + let player : playerData = socket.player + player.inventory.weapon = data1.inventory.weapon + player.inventory.equipment = data1.inventory.equipment + player.validateEquipment() + + game.socketIO.emit("lobby/loadoutChanged", JSON.stringify(player)) +} \ No newline at end of file diff --git a/Lobby/_message.ts b/Lobby/_message.ts new file mode 100644 index 0000000..b9d3aed --- /dev/null +++ b/Lobby/_message.ts @@ -0,0 +1,12 @@ +import { lobbyMessage } from "../Classes/lobbyMessage"; +import { game } from "../game"; + +export function message(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + let data1 : lobbyMessage = JSON.parse(buff.toString('utf-8')); + data1.timestamp = new Date().toLocaleString(); + + game.addMessage(data1) +} \ No newline at end of file diff --git a/Lobby/_playerJoin.ts b/Lobby/_playerJoin.ts new file mode 100644 index 0000000..aa0662c --- /dev/null +++ b/Lobby/_playerJoin.ts @@ -0,0 +1,21 @@ +import { lobbyMessage } from "../Classes/lobbyMessage"; +import { lobbyState } from "../Classes/lobbyState"; +import { playerData } from "../Classes/playerData"; +import { userData } from "../Classes/userData"; +import { game } from "../game"; + +export function playerJoin(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + let data1 : playerData = JSON.parse(buff.toString('utf-8')); + + socket.player.characterId = data1.characterId + game.lobbyState.addUser(socket.user, socket.player) + + let newLobbyState : lobbyState = Object.assign({}, game.lobbyState); + newLobbyState.users = newLobbyState.users.map(u=> userData.makeSafe(u)) + + game.socketIO.emit("lobby/playerJoin", JSON.stringify(newLobbyState)) + game.addMessage(new lobbyMessage(socket.user.login + " joined")) +} \ No newline at end of file diff --git a/Lobby/_playerUpdate.ts b/Lobby/_playerUpdate.ts new file mode 100644 index 0000000..d392569 --- /dev/null +++ b/Lobby/_playerUpdate.ts @@ -0,0 +1,18 @@ +import { playerData } from "../Classes/playerData"; + +export function playerUpdate(socket, data){ + if(!socket.hasOwnProperty("user")) return; + + let buff = Buffer.from(data, 'base64'); + let data1 : playerData = JSON.parse(buff.toString('utf-8')); + + let player : playerData = socket.player + if(player == null){ + console.log("Error! Player not spawned!") + } + else{ + player.room = data1.room + player.rigidbody = data1.rigidbody + player.damageInfo = player.damageInfo.concat(data1.damageInfo) + } +} \ No newline at end of file diff --git a/Lobby/lobbySocket.ts b/Lobby/lobbySocket.ts index 7dc5ec0..363134f 100644 --- a/Lobby/lobbySocket.ts +++ b/Lobby/lobbySocket.ts @@ -1,65 +1,22 @@ -import { lobbyMessage } from "../Classes/lobbyMessage"; -import { lobbyState } from "../Classes/lobbyState"; -import { playerData } from "../Classes/playerData" -import { playerInventory } from "../Classes/playerInventory"; -import { userData } from "../Classes/userData"; -import { game } from "../game"; +import { loadoutChanged } from "./_loadoutChanged"; +import { message } from "./_message"; +import { playerJoin } from "./_playerJoin"; +import { playerUpdate } from "./_playerUpdate"; export function registerLobbyCallbacks(socket){ socket.on('lobby/playerJoin', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - let data1 : playerData = JSON.parse(buff.toString('utf-8')); - - socket.player.characterId = data1.characterId - game.lobbyState.addUser(socket.user, socket.player) - - let newLobbyState : lobbyState = Object.assign({}, game.lobbyState); - newLobbyState.users = newLobbyState.users.map(u=> userData.makeSafe(u)) - - game.socketIO.emit("lobby/playerJoin", JSON.stringify(newLobbyState)) - game.addMessage(new lobbyMessage(socket.user.login + " joined")) + playerJoin(socket, data) }); socket.on('lobby/playerUpdate', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - let data1 : playerData = JSON.parse(buff.toString('utf-8')); - - let player : playerData = socket.player - if(player == null){ - console.log("Error! Player not spawned!") - } - else{ - player.room = data1.room - player.rigidbody = data1.rigidbody - player.damageInfo = player.damageInfo.concat(data1.damageInfo) - } + playerUpdate(socket, data) }); socket.on('lobby/loadoutChanged', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - let data1 : playerData = JSON.parse(buff.toString('utf-8')); - - let player : playerData = socket.player - player.inventory.weapon = data1.inventory.weapon - player.inventory.equipment = data1.inventory.equipment - player.validateEquipment() - - game.socketIO.emit("lobby/loadoutChanged", JSON.stringify(player)) + loadoutChanged(socket, data) }); socket.on('lobby/message', (data) => { - if(!socket.hasOwnProperty("user")) return; - - let buff = Buffer.from(data, 'base64'); - let data1 : lobbyMessage = JSON.parse(buff.toString('utf-8')); - data1.timestamp = new Date().toLocaleString(); - - game.addMessage(data1) + message(socket, data) }); } \ No newline at end of file