1
0
forked from noxious/server

Refractored MVP for teleport

This commit is contained in:
Dennis Postma 2024-08-26 21:56:10 +02:00
parent 1aa3d1a208
commit 89cca1d0f8
2 changed files with 13 additions and 4 deletions

View File

@ -65,6 +65,7 @@ export default class CharacterMoveEvent {
if (zoneEventTile) {
await this.handleZoneEventTile(zoneEventTile)
break
}
await this.characterMoveService.updatePosition(character, position)
@ -85,8 +86,7 @@ export default class CharacterMoveEvent {
const teleport = zoneEventTile.teleport
if (teleport) {
await this.characterMoveService.updatePosition(character, { x: teleport.toPositionX, y: teleport.toPositionY }, teleport.toZoneId)
await this.zoneEventTileService.handleTeleport(this.socket, character, teleport)
await this.zoneEventTileService.handleTeleport(this.io, this.socket, character, teleport)
return
}
}

View File

@ -2,15 +2,19 @@ import { ExtendedCharacter, TSocket } from '../utilities/types'
import prisma from '../utilities/prisma'
import ZoneRepository from '../repositories/zoneRepository'
import ZoneManager from '../managers/zoneManager'
import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
import { Character, ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
import { Server } from 'socket.io'
export class ZoneEventTileService {
public async handleTeleport(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
const zone = await ZoneRepository.getById(teleport.toZoneId)
if (!zone) return
const oldZoneId = character.zoneId
const newZoneId = teleport.toZoneId
character.zoneId = teleport.toZoneId
character.positionX = teleport.toPositionX
character.positionY = teleport.toPositionY
@ -18,6 +22,11 @@ export class ZoneEventTileService {
socket.leave(character.zoneId.toString())
socket.join(teleport.toZoneId.toString())
io.to(oldZoneId.toString()).emit('zone:character:leave', character);
io.to(newZoneId.toString()).emit('zone:character:join', character);
ZoneManager.removeCharacterFromZone(oldZoneId, character as Character);
ZoneManager.addCharacterToZone(newZoneId, character as Character);
socket.emit('zone:teleport', {
zone,
characters: ZoneManager.getCharactersInZone(zone.id)