1
0
forked from noxious/server

Implemented ZoneManager logics in teleport to make sure chars. are removed / added correctly

This commit is contained in:
Dennis Postma 2024-11-16 23:12:37 +01:00
parent 3185c478a6
commit 27f8bc8784
3 changed files with 16 additions and 9 deletions

6
package-lock.json generated
View File

@ -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",

View File

@ -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<void> {
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()
})
}
}

View File

@ -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