Added models to store extra data in RAM

This commit is contained in:
2024-09-09 18:31:12 +02:00
parent 32b390bb20
commit 636aa6cc55
11 changed files with 116 additions and 190 deletions

View File

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