44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { BaseEvent } from '#application/base/baseEvent'
|
|
import { CharacterGender } from '#application/enums'
|
|
import { UUID } from '#application/types'
|
|
import CharacterHairRepository from '#repositories/characterHairRepository'
|
|
import characterRepository from '#repositories/characterRepository'
|
|
import SpriteRepository from '#repositories/spriteRepository'
|
|
|
|
type Payload = {
|
|
id: number
|
|
name: string
|
|
gender: CharacterGender
|
|
isSelectable: boolean
|
|
spriteId: UUID
|
|
}
|
|
|
|
export default class CharacterHairUpdateEvent extends BaseEvent {
|
|
public listen(): void {
|
|
this.socket.on('gm:characterHair:update', this.handleEvent.bind(this))
|
|
}
|
|
|
|
private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> {
|
|
const character = await characterRepository.getById(this.socket.characterId as number)
|
|
if (!character) return callback(false)
|
|
|
|
if (character.role !== 'gm') {
|
|
return callback(false)
|
|
}
|
|
|
|
try {
|
|
const sprite = await SpriteRepository.getById(data.spriteId)
|
|
const characterHair = await CharacterHairRepository.getById(data.id)
|
|
|
|
if (characterHair) {
|
|
await characterHair.setName(data.name).setGender(data.gender).setIsSelectable(data.isSelectable).setSprite(sprite!).update()
|
|
}
|
|
|
|
return callback(true)
|
|
} catch (error) {
|
|
this.logger.error(`Error updating character hair: ${error instanceof Error ? error.message : String(error)}`)
|
|
return callback(false)
|
|
}
|
|
}
|
|
}
|