From 27f8bc878447dad99893c5c46664ace0402682c9 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 16 Nov 2024 23:12:37 +0100 Subject: [PATCH] Implemented ZoneManager logics in teleport to make sure chars. are removed / added correctly --- package-lock.json | 6 +++--- src/services/zoneEventTileService.ts | 17 +++++++++++++---- src/socketEvents/zone/characterLeave.ts | 2 -- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b429bf..dbaa90f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -949,9 +949,9 @@ "license": "BSD-3-Clause" }, "node_modules/bullmq": { - "version": "5.26.1", - "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.26.1.tgz", - "integrity": "sha512-XuxCGFlC1PQ2i1JHQiB9dqkqKQILMwQpU7ipi+cT/dzJaoXVcS0/IByUz6SsZ3xyOQY3twPt6G7J2d5GrsJuEA==", + "version": "5.26.2", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.26.2.tgz", + "integrity": "sha512-UdHBrJoRkpXoF8b/FVEkuRBnaUZoA7+qHQNyTx1n2oNVZ4iWxqGqss+M9xAwXOpBmSNvOSlaBdHpf+5QJTU8GQ==", "license": "MIT", "dependencies": { "cron-parser": "^4.6.0", diff --git a/src/services/zoneEventTileService.ts b/src/services/zoneEventTileService.ts index 89eca78..4b8d991 100644 --- a/src/services/zoneEventTileService.ts +++ b/src/services/zoneEventTileService.ts @@ -1,16 +1,21 @@ import { ExtendedCharacter, TSocket } from '../utilities/types' import prisma from '../utilities/prisma' -import ZoneRepository from '../repositories/zoneRepository' import { ZoneEventTileTeleport } from '@prisma/client' import { Server } from 'socket.io' import ZoneManager from '../managers/zoneManager' +import { gameLogger } from '../utilities/logger' export class ZoneEventTileService { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise { if (teleport.toZoneId === character.zoneId) return - const zone = await ZoneRepository.getById(teleport.toZoneId) - if (!zone) return + const loadedZone = ZoneManager.getZoneById(teleport.toZoneId) + if (!loadedZone) { + gameLogger.error('zone:character:join error', 'Loaded zone not found') + return + } + + const zone = loadedZone.getZone() const oldZoneId = character.zoneId const newZoneId = teleport.toZoneId @@ -33,6 +38,10 @@ export class ZoneEventTileService { character.positionY = teleport.toPositionY character.isMoving = false + // Remove and add character to new zone + await loadedZone.removeCharacter(character.id) + loadedZone.addCharacter(character) + // Emit events io.to(oldZoneId.toString()).emit('zone:character:leave', character.id) io.to(newZoneId.toString()).emit('zone:character:join', character) @@ -44,7 +53,7 @@ export class ZoneEventTileService { // Send teleport information to the client socket.emit('zone:character:teleport', { zone, - characters: ZoneManager.getZoneById(zone.id)?.getCharactersInZone() + characters: loadedZone.getCharactersInZone() }) } } diff --git a/src/socketEvents/zone/characterLeave.ts b/src/socketEvents/zone/characterLeave.ts index 89802be..d7e1c09 100644 --- a/src/socketEvents/zone/characterLeave.ts +++ b/src/socketEvents/zone/characterLeave.ts @@ -43,8 +43,6 @@ export default class ZoneLeaveEvent { return } - console.log('awee') - this.socket.leave(zone.id.toString()) // let other clients know of character leaving