Updated several events to new event format

This commit is contained in:
2024-09-22 00:46:17 +02:00
parent 50d13af5d6
commit 81428ea0c2
9 changed files with 298 additions and 203 deletions

View File

@ -4,7 +4,7 @@ import ZoneRepository from '../../../repositories/zoneRepository'
import { Zone, ZoneEventTileType, ZoneObject } from '@prisma/client'
import prisma from '../../../utilities/prisma'
import zoneManager from '../../../managers/zoneManager'
import characterRepository from '../../../repositories/characterRepository'
import CharacterRepository from '../../../repositories/characterRepository'
import { gameMasterLogger } from '../../../utilities/logger'
interface IPayload {
@ -27,40 +27,49 @@ interface IPayload {
zoneObjects: ZoneObject[]
}
/**
* Handle game master zone update event
* @param socket
* @param io
*/
export default function (io: Server, socket: TSocket) {
socket.on('gm:zone_editor:zone:update', async (data: IPayload, callback: (response: Zone) => void) => {
const character = await characterRepository.getById(socket.characterId as number)
if (!character) return
export default class ZoneUpdateEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
if (character.role !== 'gm') {
gameMasterLogger.info(`User ${character.id} tried to update zone but is not a game master.`)
return
}
gameMasterLogger.info(`User ${character.id} has updated zone via zone editor.`)
if (!data.zoneId) {
gameMasterLogger.info(`User ${character.id} tried to update zone but did not provide a zone id.`)
return
}
public listen(): void {
this.socket.on('gm:zone_editor:zone:update', this.handleZoneUpdate.bind(this))
}
private async handleZoneUpdate(data: IPayload, callback: (response: Zone | null) => void): Promise<void> {
try {
const character = await CharacterRepository.getById(this.socket.characterId as number)
if (!character) {
gameMasterLogger.error('gm:zone_editor:zone:update error', 'Character not found')
callback(null)
return
}
if (character.role !== 'gm') {
gameMasterLogger.info(`User ${character.id} tried to update zone but is not a game master.`)
callback(null)
return
}
gameMasterLogger.info(`User ${character.id} has updated zone via zone editor.`)
if (!data.zoneId) {
gameMasterLogger.info(`User ${character.id} tried to update zone but did not provide a zone id.`)
callback(null)
return
}
let zone = await ZoneRepository.getById(data.zoneId)
if (!zone) {
gameMasterLogger.info(`User ${character.id} tried to update zone ${data.zoneId} but it does not exist.`)
callback(null)
return
}
await prisma.zone.update({
where: {
id: data.zoneId
},
where: { id: data.zoneId },
data: {
name: data.name,
width: data.width,
@ -68,32 +77,26 @@ export default function (io: Server, socket: TSocket) {
tiles: data.tiles,
pvp: data.pvp,
zoneEventTiles: {
deleteMany: {
zoneId: data.zoneId // Ensure only event tiles related to the zone are deleted
},
// Save new zone event tiles
deleteMany: { zoneId: data.zoneId },
create: data.zoneEventTiles.map((zoneEventTile) => ({
type: zoneEventTile.type,
positionX: zoneEventTile.positionX,
positionY: zoneEventTile.positionY,
...(zoneEventTile.type === 'TELEPORT' && zoneEventTile.teleport
? {
teleport: {
create: {
toZoneId: zoneEventTile.teleport.toZoneId,
toPositionX: zoneEventTile.teleport.toPositionX,
toPositionY: zoneEventTile.teleport.toPositionY
}
teleport: {
create: {
toZoneId: zoneEventTile.teleport.toZoneId,
toPositionX: zoneEventTile.teleport.toPositionX,
toPositionY: zoneEventTile.teleport.toPositionY
}
}
}
: {})
}))
},
zoneObjects: {
deleteMany: {
zoneId: data.zoneId // Ensure only objects related to the zone are deleted
},
// Save new zone objects
deleteMany: { zoneId: data.zoneId },
create: data.zoneObjects.map((zoneObject) => ({
objectId: zoneObject.objectId,
depth: zoneObject.depth,
@ -107,7 +110,8 @@ export default function (io: Server, socket: TSocket) {
zone = await ZoneRepository.getById(data.zoneId)
if (!zone) {
gameMasterLogger.info(`User ${character.id} tried to update zone ${data.zoneId} but it does not exist.`)
gameMasterLogger.info(`User ${character.id} tried to update zone ${data.zoneId} but it does not exist after update.`)
callback(null)
return
}
@ -116,7 +120,8 @@ export default function (io: Server, socket: TSocket) {
zoneManager.unloadZone(data.zoneId)
await zoneManager.loadZone(zone)
} catch (error: any) {
gameMasterLogger.error(`Error updating zone: ${error.message}`)
gameMasterLogger.error('gm:zone_editor:zone:update error', error.message)
callback(null)
}
})
}
}
}