Added models to store extra data in RAM
This commit is contained in:
@ -7,13 +7,13 @@ import { Server } from 'socket.io'
|
||||
|
||||
export class ZoneEventTileService {
|
||||
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);
|
||||
if (!zone) return;
|
||||
const zone = await ZoneRepository.getById(teleport.toZoneId)
|
||||
if (!zone) return
|
||||
|
||||
const oldZoneId = character.zoneId;
|
||||
const newZoneId = teleport.toZoneId;
|
||||
const oldZoneId = character.zoneId
|
||||
const newZoneId = teleport.toZoneId
|
||||
|
||||
// Update character in database
|
||||
await prisma.character.update({
|
||||
@ -23,28 +23,28 @@ export class ZoneEventTileService {
|
||||
positionX: teleport.toPositionX,
|
||||
positionY: teleport.toPositionY
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
// Update local character object
|
||||
character.zoneId = newZoneId;
|
||||
character.positionX = teleport.toPositionX;
|
||||
character.positionY = teleport.toPositionY;
|
||||
character.zoneId = newZoneId
|
||||
character.positionX = teleport.toPositionX
|
||||
character.positionY = teleport.toPositionY
|
||||
|
||||
// Atomic operation in ZoneManager
|
||||
await ZoneManager.moveCharacterBetweenZones(oldZoneId, newZoneId, character as Character);
|
||||
await ZoneManager.moveCharacterBetweenZones(oldZoneId, newZoneId, character as Character)
|
||||
|
||||
// Emit events
|
||||
io.to(oldZoneId.toString()).emit('zone:character:leave', character.id);
|
||||
io.to(newZoneId.toString()).emit('zone:character:join', character);
|
||||
io.to(oldZoneId.toString()).emit('zone:character:leave', character.id)
|
||||
io.to(newZoneId.toString()).emit('zone:character:join', character)
|
||||
|
||||
// Update socket rooms
|
||||
socket.leave(oldZoneId.toString());
|
||||
socket.join(newZoneId.toString());
|
||||
socket.leave(oldZoneId.toString())
|
||||
socket.join(newZoneId.toString())
|
||||
|
||||
// Send teleport information to the client
|
||||
socket.emit('zone:teleport', {
|
||||
zone,
|
||||
characters: ZoneManager.getCharactersInZone(zone.id)
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user