forked from noxious/server
Implemented ZoneManager logics in teleport to make sure chars. are removed / added correctly
This commit is contained in:
@ -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()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user