format & lint

This commit is contained in:
Dennis Postma 2025-01-01 04:48:30 +01:00
parent 495e9f192e
commit 9c28b10383
12 changed files with 48 additions and 55 deletions

View File

@ -58,10 +58,10 @@ export default class CharacterConnectEvent extends BaseEvent {
callback({ character }) callback({ character })
// wait 300 ms, @TODO: Find a better way to do this // wait 300 ms, @TODO: Find a better way to do this
await new Promise(resolve => setTimeout(resolve, 100)) await new Promise((resolve) => setTimeout(resolve, 100))
await TeleportService.teleportCharacter(character.id, { await TeleportService.teleportCharacter(character.id, {
targetZoneId: character.zone!.id, targetZoneId: character.zone.id,
targetX: character.positionX, targetX: character.positionX,
targetY: character.positionY, targetY: character.positionY,
rotation: character.rotation, rotation: character.rotation,

View File

@ -40,11 +40,7 @@ export default class CharacterCreateEvent extends BaseEvent {
const zone = await ZoneRepository.getFirst() const zone = await ZoneRepository.getFirst()
const newCharacter = new Character() const newCharacter = new Character()
await newCharacter await newCharacter.setName(data.name).setUser(user).setZone(zone!).save()
.setName(data.name)
.setUser(user)
.setZone(zone!)
.save()
if (!newCharacter) { if (!newCharacter) {
return this.socket.emit('notification', { message: 'Failed to create character. Please try again (later).' }) return this.socket.emit('notification', { message: 'Failed to create character. Please try again (later).' })

View File

@ -26,7 +26,7 @@ export default class ChatMessageEvent extends BaseEvent {
const character = zoneCharacter.character const character = zoneCharacter.character
const zone = await ZoneRepository.getById(character.zone?.id!) const zone = await ZoneRepository.getById(character.zone.id)
if (!zone) { if (!zone) {
this.logger.error('chat:message error', 'Zone not found') this.logger.error('chat:message error', 'Zone not found')
return callback(false) return callback(false)

View File

@ -29,7 +29,7 @@ export default class CharacterMove extends BaseEvent {
const path = await this.characterService.calculatePath(zoneCharacter.character, positionX, positionY) const path = await this.characterService.calculatePath(zoneCharacter.character, positionX, positionY)
if (!path) { if (!path) {
this.io.in(zoneCharacter.character.zone!.id.toString()).emit('zone:character:moveError', 'No valid path found') this.io.in(zoneCharacter.character.zone.id.toString()).emit('zone:character:moveError', 'No valid path found')
return return
} }
@ -50,7 +50,7 @@ export default class CharacterMove extends BaseEvent {
const [start, end] = [path[i], path[i + 1]] const [start, end] = [path[i], path[i + 1]]
character.rotation = CharacterService.calculateRotation(start.x, start.y, end.x, end.y) character.rotation = CharacterService.calculateRotation(start.x, start.y, end.x, end.y)
const zoneEventTile = await zoneEventTileRepository.getEventTileByZoneIdAndPosition(character.zone!.id, Math.floor(end.x), Math.floor(end.y)) const zoneEventTile = await zoneEventTileRepository.getEventTileByZoneIdAndPosition(character.zone.id, Math.floor(end.x), Math.floor(end.y))
if (zoneEventTile?.type === 'BLOCK') break if (zoneEventTile?.type === 'BLOCK') break
if (zoneEventTile?.type === 'TELEPORT' && zoneEventTile.teleport) { if (zoneEventTile?.type === 'TELEPORT' && zoneEventTile.teleport) {
@ -63,7 +63,7 @@ export default class CharacterMove extends BaseEvent {
character.positionY = end.y character.positionY = end.y
// Then emit with the same properties // Then emit with the same properties
this.io.in(character.zone!.id.toString()).emit('zone:character:move', { this.io.in(character.zone.id.toString()).emit('zone:character:move', {
id: character.id, id: character.id,
positionX: character.positionX, positionX: character.positionX,
positionY: character.positionY, positionY: character.positionY,
@ -93,7 +93,7 @@ export default class CharacterMove extends BaseEvent {
private finalizeMovement(zoneCharacter: ZoneCharacter): void { private finalizeMovement(zoneCharacter: ZoneCharacter): void {
zoneCharacter.isMoving = false zoneCharacter.isMoving = false
this.io.in(zoneCharacter.character.zone!.id.toString()).emit('zone:character:move', { this.io.in(zoneCharacter.character.zone.id.toString()).emit('zone:character:move', {
id: zoneCharacter.character.id, id: zoneCharacter.character.id,
positionX: zoneCharacter.character.positionX, positionX: zoneCharacter.character.positionX,
positionY: zoneCharacter.character.positionY, positionY: zoneCharacter.character.positionY,

View File

@ -1,13 +1,14 @@
import { Server as SocketServer } from 'socket.io'
import fs from 'fs' import fs from 'fs'
import { pathToFileURL } from 'url'
import { Server as HTTPServer } from 'http' import { Server as HTTPServer } from 'http'
import { Application } from 'express' import { pathToFileURL } from 'url'
import { Application } from 'express'
import { Server as SocketServer } from 'socket.io'
import config from '#application/config'
import Logger, { LoggerType } from '#application/logger' import Logger, { LoggerType } from '#application/logger'
import { getAppPath } from '#application/storage' import { getAppPath } from '#application/storage'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import config from '#application/config'
import { Authentication } from '#middleware/authentication' import { Authentication } from '#middleware/authentication'
class SocketManager { class SocketManager {
@ -105,17 +106,19 @@ class SocketManager {
* Emit event to specific room * Emit event to specific room
*/ */
public emitToRoom(room: string, event: string, ...args: any[]): void { public emitToRoom(room: string, event: string, ...args: any[]): void {
this.getIO().to(room).emit(event, ...args) this.getIO()
.to(room)
.emit(event, ...args)
} }
public getSocketByUserId(userId: number): TSocket | undefined { public getSocketByUserId(userId: number): TSocket | undefined {
const sockets = Array.from(this.getIO().sockets.sockets.values()); const sockets = Array.from(this.getIO().sockets.sockets.values())
return sockets.find((socket: TSocket) => socket.userId === userId); return sockets.find((socket: TSocket) => socket.userId === userId)
} }
public getSocketByCharacterId(characterId: number): TSocket | undefined { public getSocketByCharacterId(characterId: number): TSocket | undefined {
const sockets = Array.from(this.getIO().sockets.sockets.values()); const sockets = Array.from(this.getIO().sockets.sockets.values())
return sockets.find((socket: TSocket) => socket.characterId === characterId); return sockets.find((socket: TSocket) => socket.characterId === characterId)
} }
} }

View File

@ -1,7 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import TeleportService from '#services/teleportService'
import ZoneManager from '#managers/zoneManager'
import SocketManager from '#managers/socketManager' import SocketManager from '#managers/socketManager'
import ZoneManager from '#managers/zoneManager'
import TeleportService from '#services/teleportService'
class ZoneCharacter { class ZoneCharacter {
public readonly character: Character public readonly character: Character
@ -13,12 +16,7 @@ class ZoneCharacter {
} }
public async savePosition() { public async savePosition() {
await this.character await this.character.setPositionX(this.character.positionX).setPositionY(this.character.positionY).setRotation(this.character.rotation).setZone(this.character.zone).update()
.setPositionX(this.character.positionX)
.setPositionY(this.character.positionY)
.setRotation(this.character.rotation)
.setZone(this.character.zone)
.update()
} }
public async teleport(zoneId: number, targetX: number, targetY: number): Promise<void> { public async teleport(zoneId: number, targetX: number, targetY: number): Promise<void> {
@ -29,7 +27,7 @@ class ZoneCharacter {
}) })
} }
public async disconnect(socket: Socket, io: Server): Promise<void> { public async disconnect(socket: TSocket, io: Server): Promise<void> {
try { try {
// Stop any movement and save final position // Stop any movement and save final position
this.isMoving = false this.isMoving = false

View File

@ -1,6 +1,7 @@
import { createServer as httpServer, Server as HTTPServer } from 'http' import { createServer as httpServer, Server as HTTPServer } from 'http'
import express, { Application } from 'express'
import cors from 'cors' import cors from 'cors'
import express, { Application } from 'express'
import config from '#application/config' import config from '#application/config'
import Database from '#application/database' import Database from '#application/database'
@ -47,7 +48,6 @@ export class Server {
ZoneManager.boot(), ZoneManager.boot(),
ConsoleManager.boot() ConsoleManager.boot()
]) ])
} catch (error: any) { } catch (error: any) {
this.logger.error(`Server failed to start: ${error.message}`) this.logger.error(`Server failed to start: ${error.message}`)
process.exit(1) process.exit(1)

View File

@ -2,10 +2,10 @@ import { BaseService } from '#application/base/baseService'
import config from '#application/config' import config from '#application/config'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import SocketManager from '#managers/socketManager'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
import ZoneRepository from '#repositories/zoneRepository' import ZoneRepository from '#repositories/zoneRepository'
import SocketManager from '#managers/socketManager'
type Position = { x: number; y: number } type Position = { x: number; y: number }
export type Node = Position & { parent?: Node; g: number; h: number; f: number } export type Node = Position & { parent?: Node; g: number; h: number; f: number }
@ -24,7 +24,7 @@ class CharacterService extends BaseService {
] ]
public async calculatePath(character: Character, targetX: number, targetY: number): Promise<Position[] | null> { public async calculatePath(character: Character, targetX: number, targetY: number): Promise<Position[] | null> {
const zone = ZoneManager.getZoneById(character.zone!.id) const zone = ZoneManager.getZoneById(character.zone.id)
const grid = await zone?.getGrid() const grid = await zone?.getGrid()
if (!grid?.length) { if (!grid?.length) {

View File

@ -1,7 +1,7 @@
import { Character } from '#entities/character'
import ZoneManager from '#managers/zoneManager'
import SocketManager from '#managers/socketManager'
import Logger, { LoggerType } from '#application/logger' import Logger, { LoggerType } from '#application/logger'
import { Character } from '#entities/character'
import SocketManager from '#managers/socketManager'
import ZoneManager from '#managers/zoneManager'
import ZoneCharacter from '#models/zoneCharacter' import ZoneCharacter from '#models/zoneCharacter'
interface TeleportOptions { interface TeleportOptions {
@ -35,7 +35,8 @@ class TeleportService {
const existingCharacter = !isInitialJoin && ZoneManager.getCharacterById(characterId) const existingCharacter = !isInitialJoin && ZoneManager.getCharacterById(characterId)
const zoneCharacter = isInitialJoin const zoneCharacter = isInitialJoin
? new ZoneCharacter(character!) ? new ZoneCharacter(character!)
: existingCharacter || (() => { : existingCharacter ||
(() => {
this.logger.error(`Teleport failed - Character ${characterId} not found in ZoneManager`) this.logger.error(`Teleport failed - Character ${characterId} not found in ZoneManager`)
return null return null
})() })()
@ -54,12 +55,7 @@ class TeleportService {
} }
// Update character position and zone // Update character position and zone
await zoneCharacter.character await zoneCharacter.character.setPositionX(targetX).setPositionY(targetY).setRotation(rotation).setZone(targetZone.getZone()).update()
.setPositionX(targetX)
.setPositionY(targetY)
.setRotation(rotation)
.setZone(targetZone.getZone())
.update()
// Join new zone // Join new zone
socket.join(targetZoneId.toString()) socket.join(targetZoneId.toString())

View File

@ -7,7 +7,7 @@ import ZoneManager from '#managers/zoneManager'
class ZoneEventTileService extends BaseService { class ZoneEventTileService extends BaseService {
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {
if (teleport.toZone.id === character.zone!.id) return if (teleport.toZone.id === character.zone.id) return
const loadedZone = ZoneManager.getZoneById(teleport.toZone.id) const loadedZone = ZoneManager.getZoneById(teleport.toZone.id)
if (!loadedZone) { if (!loadedZone) {
@ -17,7 +17,7 @@ class ZoneEventTileService extends BaseService {
const zone = loadedZone.getZone() const zone = loadedZone.getZone()
const oldZoneId = character.zone!.id const oldZoneId = character.zone.id
const newZoneId = teleport.toZone.id const newZoneId = teleport.toZone.id
character.isMoving = false character.isMoving = false