From dec6b36699ded944b22f5ff76a103289efbc0d13 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 28 Sep 2024 02:52:16 +0200 Subject: [PATCH] #143 : Fix switching back to zone from zoneEditor --- src/socketEvents/character/connect.ts | 3 +-- src/socketEvents/zone/characterJoin.ts | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/socketEvents/character/connect.ts b/src/socketEvents/character/connect.ts index 429efac..a14a92b 100644 --- a/src/socketEvents/character/connect.ts +++ b/src/socketEvents/character/connect.ts @@ -22,9 +22,8 @@ export default class CharacterConnectEvent { try { const character = await CharacterRepository.getByUserAndId(this.socket?.user?.id as number, data.character_id) if (!character) return - this.socket.characterId = character.id - CharacterManager.initCharacter(character as ExtendedCharacter) + this.socket.characterId = character.id this.socket.emit('character:connect', character) } catch (error: any) { console.log('character:connect error', error) diff --git a/src/socketEvents/zone/characterJoin.ts b/src/socketEvents/zone/characterJoin.ts index fb35c3c..24b1d14 100644 --- a/src/socketEvents/zone/characterJoin.ts +++ b/src/socketEvents/zone/characterJoin.ts @@ -1,9 +1,10 @@ import { Server } from 'socket.io' -import { TSocket } from '../../utilities/types' +import { ExtendedCharacter, TSocket } from '../../utilities/types' import ZoneRepository from '../../repositories/zoneRepository' import { Character, Zone } from '@prisma/client' import CharacterManager from '../../managers/characterManager' import { gameLogger } from '../../utilities/logger' +import CharacterRepository from '../../repositories/characterRepository' interface IResponse { zone: Zone @@ -22,10 +23,16 @@ export default class CharacterJoinEvent { private async handleCharacterJoin(callback: (response: IResponse) => void): Promise { try { - if (!this.socket.characterId) return + if (!this.socket.characterId) { + gameLogger.error('zone:character:join error', 'Zone requested but no character id set') + return + } - const character = CharacterManager.getCharacterFromSocket(this.socket) - if (!character) return + const character = await CharacterRepository.getById(this.socket.characterId as number) + if (!character) { + gameLogger.error('zone:character:join error', 'Character not found') + return + } const zone = await ZoneRepository.getById(character.zoneId) if (!zone) { @@ -33,10 +40,7 @@ export default class CharacterJoinEvent { return } - if (character.zoneId) { - this.socket.leave(character.zoneId.toString()) - this.io.to(character.zoneId.toString()).emit('zone:character:leave', character) - } + CharacterManager.initCharacter(character as ExtendedCharacter) this.socket.join(zone.id.toString())