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" "license": "BSD-3-Clause"
}, },
"node_modules/bullmq": { "node_modules/bullmq": {
"version": "5.26.1", "version": "5.26.2",
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.26.1.tgz", "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.26.2.tgz",
"integrity": "sha512-XuxCGFlC1PQ2i1JHQiB9dqkqKQILMwQpU7ipi+cT/dzJaoXVcS0/IByUz6SsZ3xyOQY3twPt6G7J2d5GrsJuEA==", "integrity": "sha512-UdHBrJoRkpXoF8b/FVEkuRBnaUZoA7+qHQNyTx1n2oNVZ4iWxqGqss+M9xAwXOpBmSNvOSlaBdHpf+5QJTU8GQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"cron-parser": "^4.6.0", "cron-parser": "^4.6.0",

View File

@ -1,16 +1,21 @@
import { ExtendedCharacter, TSocket } from '../utilities/types' import { ExtendedCharacter, TSocket } from '../utilities/types'
import prisma from '../utilities/prisma' import prisma from '../utilities/prisma'
import ZoneRepository from '../repositories/zoneRepository'
import { ZoneEventTileTeleport } from '@prisma/client' import { ZoneEventTileTeleport } from '@prisma/client'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import ZoneManager from '../managers/zoneManager' import ZoneManager from '../managers/zoneManager'
import { gameLogger } from '../utilities/logger'
export class ZoneEventTileService { export class ZoneEventTileService {
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {
if (teleport.toZoneId === character.zoneId) return if (teleport.toZoneId === character.zoneId) return
const zone = await ZoneRepository.getById(teleport.toZoneId) const loadedZone = ZoneManager.getZoneById(teleport.toZoneId)
if (!zone) return if (!loadedZone) {
gameLogger.error('zone:character:join error', 'Loaded zone not found')
return
}
const zone = loadedZone.getZone()
const oldZoneId = character.zoneId const oldZoneId = character.zoneId
const newZoneId = teleport.toZoneId const newZoneId = teleport.toZoneId
@ -33,6 +38,10 @@ export class ZoneEventTileService {
character.positionY = teleport.toPositionY character.positionY = teleport.toPositionY
character.isMoving = false character.isMoving = false
// Remove and add character to new zone
await loadedZone.removeCharacter(character.id)
loadedZone.addCharacter(character)
// Emit events // Emit events
io.to(oldZoneId.toString()).emit('zone:character:leave', character.id) io.to(oldZoneId.toString()).emit('zone:character:leave', character.id)
io.to(newZoneId.toString()).emit('zone:character:join', character) io.to(newZoneId.toString()).emit('zone:character:join', character)
@ -44,7 +53,7 @@ export class ZoneEventTileService {
// Send teleport information to the client // Send teleport information to the client
socket.emit('zone:character:teleport', { socket.emit('zone:character:teleport', {
zone, zone,
characters: ZoneManager.getZoneById(zone.id)?.getCharactersInZone() characters: loadedZone.getCharactersInZone()
}) })
} }
} }

View File

@ -43,8 +43,6 @@ export default class ZoneLeaveEvent {
return return
} }
console.log('awee')
this.socket.leave(zone.id.toString()) this.socket.leave(zone.id.toString())
// let other clients know of character leaving // let other clients know of character leaving