format & lint
This commit is contained in:
parent
495e9f192e
commit
9c28b10383
@ -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,
|
||||||
|
@ -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).' })
|
||||||
|
@ -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)
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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) {
|
||||||
|
@ -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())
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user