forked from noxious/server
Refractored MVP for teleport
This commit is contained in:
parent
1aa3d1a208
commit
89cca1d0f8
@ -65,6 +65,7 @@ export default class CharacterMoveEvent {
|
|||||||
|
|
||||||
if (zoneEventTile) {
|
if (zoneEventTile) {
|
||||||
await this.handleZoneEventTile(zoneEventTile)
|
await this.handleZoneEventTile(zoneEventTile)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.characterMoveService.updatePosition(character, position)
|
await this.characterMoveService.updatePosition(character, position)
|
||||||
@ -85,8 +86,7 @@ export default class CharacterMoveEvent {
|
|||||||
|
|
||||||
const teleport = zoneEventTile.teleport
|
const teleport = zoneEventTile.teleport
|
||||||
if (teleport) {
|
if (teleport) {
|
||||||
await this.characterMoveService.updatePosition(character, { x: teleport.toPositionX, y: teleport.toPositionY }, teleport.toZoneId)
|
await this.zoneEventTileService.handleTeleport(this.io, this.socket, character, teleport)
|
||||||
await this.zoneEventTileService.handleTeleport(this.socket, character, teleport)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,19 @@ import { ExtendedCharacter, TSocket } from '../utilities/types'
|
|||||||
import prisma from '../utilities/prisma'
|
import prisma from '../utilities/prisma'
|
||||||
import ZoneRepository from '../repositories/zoneRepository'
|
import ZoneRepository from '../repositories/zoneRepository'
|
||||||
import ZoneManager from '../managers/zoneManager'
|
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 {
|
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
|
if (teleport.toZoneId === character.zoneId) return
|
||||||
|
|
||||||
const zone = await ZoneRepository.getById(teleport.toZoneId)
|
const zone = await ZoneRepository.getById(teleport.toZoneId)
|
||||||
if (!zone) return
|
if (!zone) return
|
||||||
|
|
||||||
|
const oldZoneId = character.zoneId
|
||||||
|
const newZoneId = teleport.toZoneId
|
||||||
|
|
||||||
character.zoneId = teleport.toZoneId
|
character.zoneId = teleport.toZoneId
|
||||||
character.positionX = teleport.toPositionX
|
character.positionX = teleport.toPositionX
|
||||||
character.positionY = teleport.toPositionY
|
character.positionY = teleport.toPositionY
|
||||||
@ -18,6 +22,11 @@ export class ZoneEventTileService {
|
|||||||
socket.leave(character.zoneId.toString())
|
socket.leave(character.zoneId.toString())
|
||||||
socket.join(teleport.toZoneId.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', {
|
socket.emit('zone:teleport', {
|
||||||
zone,
|
zone,
|
||||||
characters: ZoneManager.getCharactersInZone(zone.id)
|
characters: ZoneManager.getCharactersInZone(zone.id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user