Fixes for teleporting between zones
This commit is contained in:
@ -20,7 +20,7 @@ interface IResponse {
|
||||
* @param io
|
||||
*/
|
||||
export default function (socket: TSocket, io: Server) {
|
||||
socket.on('zone:characterJoin', async (data: IPayload, callback: (response: IResponse) => void) => {
|
||||
socket.on('zone:character:join', async (data: IPayload, callback: (response: IResponse) => void) => {
|
||||
try {
|
||||
console.log(`---User ${socket.character?.id} has requested zone.`)
|
||||
|
||||
@ -46,7 +46,7 @@ export default function (socket: TSocket, io: Server) {
|
||||
socket.join(zone.id.toString())
|
||||
|
||||
// let other clients know of new character
|
||||
io.to(zone.id.toString()).emit('zone:characterJoin', socket.character)
|
||||
io.to(zone.id.toString()).emit('zone:character:join', socket.character)
|
||||
|
||||
// add character to zone manager
|
||||
ZoneManager.addCharacterToZone(zone.id, socket.character as Character)
|
||||
|
@ -10,7 +10,7 @@ import { Character, Zone } from '@prisma/client'
|
||||
* @param io
|
||||
*/
|
||||
export default function (socket: TSocket, io: Server) {
|
||||
socket.on('zone:characterLeave', async () => {
|
||||
socket.on('zone:character:leave', async () => {
|
||||
console.log(`---Socket ${socket.character?.id} has leaved zone.`)
|
||||
|
||||
if (!socket.character) {
|
||||
|
@ -9,7 +9,7 @@ import Rotation from '../../utilities/character/rotation'
|
||||
import logger from '../../utilities/logger'
|
||||
|
||||
type ZoneEventTileWithTeleport = ZoneEventTile & {
|
||||
teleport: ZoneEventTileTeleport | null
|
||||
teleport: ZoneEventTileTeleport
|
||||
}
|
||||
|
||||
export default class CharacterMoveEvent {
|
||||
@ -62,25 +62,36 @@ export default class CharacterMoveEvent {
|
||||
const zoneEventTile = await prisma.zoneEventTile.findFirst({
|
||||
where: {
|
||||
zoneId: character.zoneId,
|
||||
type: 'TELEPORT',
|
||||
positionX: Math.floor(end.x),
|
||||
positionY: Math.floor(end.y)
|
||||
},
|
||||
include: { teleport: true }
|
||||
}) as ZoneEventTileWithTeleport | null
|
||||
}
|
||||
});
|
||||
|
||||
if (zoneEventTile) {
|
||||
await this.handleZoneEventTile(zoneEventTile)
|
||||
break
|
||||
if (zoneEventTile.type === 'BLOCK') {
|
||||
break;
|
||||
}
|
||||
|
||||
if (zoneEventTile.type === 'TELEPORT') {
|
||||
const teleportTile = await prisma.zoneEventTile.findFirst({
|
||||
where: { id: zoneEventTile.id },
|
||||
include: { teleport: true }
|
||||
}) as ZoneEventTileWithTeleport;
|
||||
|
||||
if (teleportTile) {
|
||||
await this.handleZoneEventTile(teleportTile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await this.characterMoveService.updatePosition(character, end)
|
||||
this.io.in(character.zoneId.toString()).emit('character:move', character)
|
||||
await this.characterMoveService.updatePosition(character, end);
|
||||
this.io.in(character.zoneId.toString()).emit('character:move', character);
|
||||
|
||||
await this.characterMoveService.applyMovementDelay()
|
||||
await this.characterMoveService.applyMovementDelay();
|
||||
}
|
||||
|
||||
this.finalizeMovement(character)
|
||||
this.finalizeMovement(character);
|
||||
}
|
||||
|
||||
private async handleZoneEventTile(zoneEventTile: ZoneEventTileWithTeleport): Promise<void> {
|
||||
|
Reference in New Issue
Block a user