Fixes for teleporting between zones

This commit is contained in:
2024-09-07 22:28:36 +02:00
parent 22bf43b14d
commit 358aa795e4
5 changed files with 81 additions and 28 deletions

View File

@ -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)

View File

@ -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) {

View File

@ -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> {