forked from noxious/server
format & lint
This commit is contained in:
parent
495e9f192e
commit
9c28b10383
@ -58,10 +58,10 @@ export default class CharacterConnectEvent extends BaseEvent {
|
||||
callback({ character })
|
||||
|
||||
// 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, {
|
||||
targetZoneId: character.zone!.id,
|
||||
targetZoneId: character.zone.id,
|
||||
targetX: character.positionX,
|
||||
targetY: character.positionY,
|
||||
rotation: character.rotation,
|
||||
|
@ -40,11 +40,7 @@ export default class CharacterCreateEvent extends BaseEvent {
|
||||
const zone = await ZoneRepository.getFirst()
|
||||
|
||||
const newCharacter = new Character()
|
||||
await newCharacter
|
||||
.setName(data.name)
|
||||
.setUser(user)
|
||||
.setZone(zone!)
|
||||
.save()
|
||||
await newCharacter.setName(data.name).setUser(user).setZone(zone!).save()
|
||||
|
||||
if (!newCharacter) {
|
||||
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 zone = await ZoneRepository.getById(character.zone?.id!)
|
||||
const zone = await ZoneRepository.getById(character.zone.id)
|
||||
if (!zone) {
|
||||
this.logger.error('chat:message error', 'Zone not found')
|
||||
return callback(false)
|
||||
|
@ -29,7 +29,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
|
||||
const path = await this.characterService.calculatePath(zoneCharacter.character, positionX, positionY)
|
||||
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
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
const [start, end] = [path[i], path[i + 1]]
|
||||
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 === 'TELEPORT' && zoneEventTile.teleport) {
|
||||
@ -63,7 +63,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
character.positionY = end.y
|
||||
|
||||
// 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,
|
||||
positionX: character.positionX,
|
||||
positionY: character.positionY,
|
||||
@ -93,7 +93,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
|
||||
private finalizeMovement(zoneCharacter: ZoneCharacter): void {
|
||||
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,
|
||||
positionX: zoneCharacter.character.positionX,
|
||||
positionY: zoneCharacter.character.positionY,
|
||||
|
@ -1,13 +1,14 @@
|
||||
import { Server as SocketServer } from 'socket.io'
|
||||
import fs from 'fs'
|
||||
import { pathToFileURL } from 'url'
|
||||
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 { getAppPath } from '#application/storage'
|
||||
import { TSocket } from '#application/types'
|
||||
import config from '#application/config'
|
||||
import { Authentication } from '#middleware/authentication'
|
||||
|
||||
class SocketManager {
|
||||
@ -105,17 +106,19 @@ class SocketManager {
|
||||
* Emit event to specific room
|
||||
*/
|
||||
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 {
|
||||
const sockets = Array.from(this.getIO().sockets.sockets.values());
|
||||
return sockets.find((socket: TSocket) => socket.userId === userId);
|
||||
const sockets = Array.from(this.getIO().sockets.sockets.values())
|
||||
return sockets.find((socket: TSocket) => socket.userId === userId)
|
||||
}
|
||||
|
||||
public getSocketByCharacterId(characterId: number): TSocket | undefined {
|
||||
const sockets = Array.from(this.getIO().sockets.sockets.values());
|
||||
return sockets.find((socket: TSocket) => socket.characterId === characterId);
|
||||
const sockets = Array.from(this.getIO().sockets.sockets.values())
|
||||
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 TeleportService from '#services/teleportService'
|
||||
import ZoneManager from '#managers/zoneManager'
|
||||
import SocketManager from '#managers/socketManager'
|
||||
import ZoneManager from '#managers/zoneManager'
|
||||
import TeleportService from '#services/teleportService'
|
||||
|
||||
class ZoneCharacter {
|
||||
public readonly character: Character
|
||||
@ -13,12 +16,7 @@ class ZoneCharacter {
|
||||
}
|
||||
|
||||
public async savePosition() {
|
||||
await this.character
|
||||
.setPositionX(this.character.positionX)
|
||||
.setPositionY(this.character.positionY)
|
||||
.setRotation(this.character.rotation)
|
||||
.setZone(this.character.zone)
|
||||
.update()
|
||||
await this.character.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> {
|
||||
@ -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 {
|
||||
// Stop any movement and save final position
|
||||
this.isMoving = false
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { createServer as httpServer, Server as HTTPServer } from 'http'
|
||||
import express, { Application } from 'express'
|
||||
|
||||
import cors from 'cors'
|
||||
import express, { Application } from 'express'
|
||||
|
||||
import config from '#application/config'
|
||||
import Database from '#application/database'
|
||||
@ -47,7 +48,6 @@ export class Server {
|
||||
ZoneManager.boot(),
|
||||
ConsoleManager.boot()
|
||||
])
|
||||
|
||||
} catch (error: any) {
|
||||
this.logger.error(`Server failed to start: ${error.message}`)
|
||||
process.exit(1)
|
||||
|
@ -2,10 +2,10 @@ import { BaseService } from '#application/base/baseService'
|
||||
import config from '#application/config'
|
||||
import { Character } from '#entities/character'
|
||||
import { Zone } from '#entities/zone'
|
||||
import SocketManager from '#managers/socketManager'
|
||||
import ZoneManager from '#managers/zoneManager'
|
||||
import CharacterRepository from '#repositories/characterRepository'
|
||||
import ZoneRepository from '#repositories/zoneRepository'
|
||||
import SocketManager from '#managers/socketManager'
|
||||
|
||||
type Position = { x: number; y: 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> {
|
||||
const zone = ZoneManager.getZoneById(character.zone!.id)
|
||||
const zone = ZoneManager.getZoneById(character.zone.id)
|
||||
const grid = await zone?.getGrid()
|
||||
|
||||
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 { Character } from '#entities/character'
|
||||
import SocketManager from '#managers/socketManager'
|
||||
import ZoneManager from '#managers/zoneManager'
|
||||
import ZoneCharacter from '#models/zoneCharacter'
|
||||
|
||||
interface TeleportOptions {
|
||||
@ -35,10 +35,11 @@ class TeleportService {
|
||||
const existingCharacter = !isInitialJoin && ZoneManager.getCharacterById(characterId)
|
||||
const zoneCharacter = isInitialJoin
|
||||
? new ZoneCharacter(character!)
|
||||
: existingCharacter || (() => {
|
||||
this.logger.error(`Teleport failed - Character ${characterId} not found in ZoneManager`)
|
||||
return null
|
||||
})()
|
||||
: existingCharacter ||
|
||||
(() => {
|
||||
this.logger.error(`Teleport failed - Character ${characterId} not found in ZoneManager`)
|
||||
return null
|
||||
})()
|
||||
|
||||
if (!zoneCharacter) return false
|
||||
|
||||
@ -54,12 +55,7 @@ class TeleportService {
|
||||
}
|
||||
|
||||
// Update character position and zone
|
||||
await zoneCharacter.character
|
||||
.setPositionX(targetX)
|
||||
.setPositionY(targetY)
|
||||
.setRotation(rotation)
|
||||
.setZone(targetZone.getZone())
|
||||
.update()
|
||||
await zoneCharacter.character.setPositionX(targetX).setPositionY(targetY).setRotation(rotation).setZone(targetZone.getZone()).update()
|
||||
|
||||
// Join new zone
|
||||
socket.join(targetZoneId.toString())
|
||||
|
@ -7,7 +7,7 @@ import ZoneManager from '#managers/zoneManager'
|
||||
|
||||
class ZoneEventTileService extends BaseService {
|
||||
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)
|
||||
if (!loadedZone) {
|
||||
@ -17,7 +17,7 @@ class ZoneEventTileService extends BaseService {
|
||||
|
||||
const zone = loadedZone.getZone()
|
||||
|
||||
const oldZoneId = character.zone!.id
|
||||
const oldZoneId = character.zone.id
|
||||
const newZoneId = teleport.toZone.id
|
||||
|
||||
character.isMoving = false
|
||||
|
Loading…
x
Reference in New Issue
Block a user