Implemented ZoneManager logics in teleport to make sure chars. are removed / added correctly
This commit is contained in:
parent
3185c478a6
commit
27f8bc8784
6
package-lock.json
generated
6
package-lock.json
generated
@ -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",
|
||||
|
@ -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()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user