From 890a4bdb88036f62841906ea2c3b9b780f57d84e Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 13 Jun 2024 23:02:32 +0200 Subject: [PATCH] Added logics for saving zone updates --- .env.example | 7 +++- src/app/events/GmZoneEditorZoneRequest.ts | 12 ++---- src/app/events/GmZoneEditorZoneSave.ts | 49 +++++++++++++++++++++++ src/app/repositories/ZoneRepository.ts | 19 +++++++++ src/app/utilities/Config.ts | 4 ++ 5 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 src/app/events/GmZoneEditorZoneSave.ts diff --git a/.env.example b/.env.example index dcb1420..478a495 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,9 @@ ENV=development PORT=4000 DATABASE_URL="mysql://root@localhost:3306/nq" -JWT_SECRET="secret" \ No newline at end of file +JWT_SECRET="secret" + +# Default character create values +DEFAULT_CHARACTER_ZONE="0" +DEFAULT_CHARACTER_POS_X="0" +DEFAULT_CHARACTER_POS_Y="0" \ No newline at end of file diff --git a/src/app/events/GmZoneEditorZoneRequest.ts b/src/app/events/GmZoneEditorZoneRequest.ts index afff97a..267ad41 100644 --- a/src/app/events/GmZoneEditorZoneRequest.ts +++ b/src/app/events/GmZoneEditorZoneRequest.ts @@ -9,13 +9,13 @@ interface IZoneLoad { } /** - * Handle character zone request event + * Handle game master zone request event * @param socket * @param io */ export default function (socket: TSocket, io: Server) { socket.on('gm:zone_editor:zone:request', async (data: IZoneLoad) => { - console.log(`---GM ${socket.character?.id} has requested zone in zone editor.`); + console.log(`---GM ${socket.character?.id} has requested zone via zone editor.`); if (!data.zoneId) { console.log(`---Zone id not provided.`); @@ -29,11 +29,7 @@ export default function (socket: TSocket, io: Server) { return; } - socket.join(zone.id.toString()); - - // send over zone and characters to socket - socket.emit('gm:zone_editor:zone:load', { - zone: zone - }); + // send over zone to game master + socket.emit('gm:zone_editor:zone:load', zone); }); } \ No newline at end of file diff --git a/src/app/events/GmZoneEditorZoneSave.ts b/src/app/events/GmZoneEditorZoneSave.ts new file mode 100644 index 0000000..05e1b9c --- /dev/null +++ b/src/app/events/GmZoneEditorZoneSave.ts @@ -0,0 +1,49 @@ +import { Server } from "socket.io"; +import {TSocket} from "../utilities/Types"; +import ZoneRepository from "../repositories/ZoneRepository"; +import ZoneManager from "../ZoneManager"; +import {Character, Zone} from "@prisma/client"; + +interface IZoneLoad { + zoneId: number; + name: string; + width: number; + height: number; + tiles: number[][]; +} + +/** + * Handle game master zone save event + * @param socket + * @param io + */ +export default function (socket: TSocket, io: Server) { + socket.on('gm:zone_editor:zone:save', async (data: IZoneLoad) => { + console.log(`---GM ${socket.character?.id} has saved zone via zone editor.`); + + if (!data.zoneId) { + console.log(`---Zone id not provided.`); + return; + } + + let zone = await ZoneRepository.getById(data.zoneId); + + if (!zone) { + console.log(`---Zone not found.`); + return; + } + + await ZoneRepository.update( + data.zoneId, + data.name, + data.width, + data.height, + data.tiles + ); + + zone = await ZoneRepository.getById(data.zoneId); + + // send over zone and characters to socket + socket.emit('gm:zone_editor:zone:load', zone); + }); +} \ No newline at end of file diff --git a/src/app/repositories/ZoneRepository.ts b/src/app/repositories/ZoneRepository.ts index d18e585..b906f4d 100644 --- a/src/app/repositories/ZoneRepository.ts +++ b/src/app/repositories/ZoneRepository.ts @@ -48,6 +48,25 @@ class ZoneRepository { throw new Error(`Failed to create zone: ${error.message}`); } } + + async update(id: number, name: string, width: number, height: number, tiles: any): Promise { + try { + return await prisma.zone.update({ + where: { + id: id + }, + data: { + name: name, + width: width, + height: height, + tiles: tiles + } + }); + } catch (error: any) { + // Handle error + throw new Error(`Failed to update zone: ${error.message}`); + } + } } export default new ZoneRepository; \ No newline at end of file diff --git a/src/app/utilities/Config.ts b/src/app/utilities/Config.ts index 7a1a906..498e168 100644 --- a/src/app/utilities/Config.ts +++ b/src/app/utilities/Config.ts @@ -8,6 +8,10 @@ class config static HOST: string = process.env.HOST || "0.0.0.0"; static PORT: number = process.env.PORT ? parseInt(process.env.PORT) : 6969; static JWT_SECRET: string = process.env.JWT_SECRET || "secret"; + + static DEFAULT_CHARACTER_ZONE: number = parseInt(process.env.DEFAULT_CHARACTER_ZONE || "1"); + static DEFAULT_CHARACTER_X: number = parseInt(process.env.DEFAULT_CHARACTER_POS_X || "0"); + static DEFAULT_CHARACTER_Y: number = parseInt(process.env.DEFAULT_CHARACTER_POS_Y || "0"); } export default config; \ No newline at end of file