1
0
forked from noxious/server

Map event tile improvements

This commit is contained in:
2025-01-05 06:22:22 +01:00
parent 57b21f1499
commit d7982493e1
23 changed files with 198 additions and 115 deletions

View File

@ -1,7 +1,7 @@
import { UUID } from '#application/types'
import { BaseEvent } from '#application/base/baseEvent'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
import { CharacterGender, CharacterRace } from '#application/enums'
import { UUID } from '#application/types'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
import SpriteRepository from '#repositories/spriteRepository'
type Payload = {
@ -19,7 +19,6 @@ export default class CharacterTypeUpdateEvent extends BaseEvent {
}
private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> {
try {
if (!(await this.isCharacterGM())) return
@ -31,13 +30,7 @@ export default class CharacterTypeUpdateEvent extends BaseEvent {
const sprite = await spriteRepository.getById(data.spriteId)
if (!sprite) return callback(false)
await characterType
.setName(data.name)
.setGender(data.gender)
.setRace(data.race)
.setIsSelectable(data.isSelectable)
.setSprite(sprite)
.save()
await characterType.setName(data.name).setGender(data.gender).setRace(data.race).setIsSelectable(data.isSelectable).setSprite(sprite).save()
return callback(true)
} catch (error) {

View File

@ -1,7 +1,7 @@
import { BaseEvent } from '#application/base/baseEvent'
import ItemRepository from '#repositories/itemRepository'
import { ItemType, ItemRarity } from '#application/enums'
import { UUID } from '#application/types'
import ItemRepository from '#repositories/itemRepository'
import SpriteRepository from '#repositories/spriteRepository'
type Payload = {
@ -20,7 +20,6 @@ export default class ItemUpdateEvent extends BaseEvent {
}
private async handleEvent(data: Payload, callback: (success: boolean) => void): Promise<void> {
try {
if (!(await this.isCharacterGM())) return
@ -32,14 +31,7 @@ export default class ItemUpdateEvent extends BaseEvent {
const sprite = await spriteRepository.getById(data.spriteId)
if (!sprite) return callback(false)
await item
.setName(data.name)
.setDescription(data.description)
.setItemType(data.itemType)
.setStackable(data.stackable)
.setRarity(data.rarity)
.setSprite(sprite)
.save()
await item.setName(data.name).setDescription(data.description).setItemType(data.itemType).setStackable(data.stackable).setRarity(data.rarity).setSprite(sprite).save()
return callback(true)
} catch (error) {

View File

@ -1,6 +1,5 @@
import { Sprite } from '@prisma/client'
import { BaseEvent } from '#application/base/baseEvent'
import { Sprite } from '#entities/sprite'
import SpriteRepository from '#repositories/spriteRepository'
interface IPayload {}

View File

@ -21,7 +21,7 @@ interface IPayload {
positionX: number
positionY: number
teleport?: {
toMapId: UUID
toMap: Map
toPositionX: number
toPositionY: number
toRotation: number
@ -32,6 +32,7 @@ interface IPayload {
}
export default class MapUpdateEvent extends BaseEvent {
private readonly populateOptions = ['mapEventTiles', 'placedMapObjects', 'mapEffects'];
public listen(): void {
this.socket.on('gm:map:update', this.handleEvent.bind(this))
}
@ -48,7 +49,7 @@ export default class MapUpdateEvent extends BaseEvent {
return callback(null)
}
let mapRepository = new MapRepository()
const mapRepository = new MapRepository()
let map = await mapRepository.getById(data.mapId)
if (!map) {
@ -57,7 +58,7 @@ export default class MapUpdateEvent extends BaseEvent {
}
// @ts-ignore
await mapRepository.getEntityManager().populate(map, ['*'])
await mapRepository.getEntityManager().populate(map, this.populateOptions)
// Validation logic remains the same
if (data.tiles.length > data.height) {
@ -83,7 +84,7 @@ export default class MapUpdateEvent extends BaseEvent {
if (tile.teleport) {
const teleport = new MapEventTileTeleport()
.setToMap((await mapRepository.getById(tile.teleport.toMapId))!)
.setToMap((await mapRepository.getById(tile.teleport.toMap.id))!)
.setToPositionX(tile.teleport.toPositionX)
.setToPositionY(tile.teleport.toPositionY)
.setToRotation(tile.teleport.toRotation)
@ -91,7 +92,7 @@ export default class MapUpdateEvent extends BaseEvent {
mapEventTile.setTeleport(teleport)
}
// map.mapEventTiles.add(mapEventTile)
map.mapEventTiles.add(mapEventTile)
}
// Create and add new map objects
@ -103,26 +104,27 @@ export default class MapUpdateEvent extends BaseEvent {
.setPositionX(object.positionX)
.setPositionY(object.positionY)
.setMap(map)
map.placedMapObjects.add(mapObject)
}
// Create and add new map effects
for (const effect of data.mapEffects) {
const mapEffect = new MapEffect().setEffect(effect.effect).setStrength(effect.strength).setMap(map)
// map.mapEffects.add(mapEffect)
map.mapEffects.add(mapEffect)
}
console.log(map.getPlacedMapObjects().count())
// Update map properties
// map.setEntityManager(mapRepository.getEntityManager())
await map.setName(data.name).setWidth(data.width).setHeight(data.height).setTiles(data.tiles).setPvp(data.pvp).setUpdatedAt(new Date()).save()
// Reload map from database to get fresh data
mapRepository = new MapRepository()
map = await mapRepository.getById(data.mapId)
// @ts-ignore
await mapRepository.getEntityManager().populate(map!, ['*'])
await mapRepository.getEntityManager().populate(map!, this.populateOptions)
if (!map) {
this.logger.info(`User ${character!.getId()} tried to update map ${data.mapId} but it does not exist after update.`)
@ -135,7 +137,7 @@ export default class MapUpdateEvent extends BaseEvent {
return callback(map)
} catch (error: any) {
this.logger.error(`gm:mapObject:update error: ${error instanceof Error ? error.message : String(error)}`)
this.emitError(`gm:map:update error: ${error instanceof Error ? error.message + error.stack : String(error)}`)
return callback(null)
}
}