From 26405433a87d7486f8632143808249d999ab9b50 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 12 Feb 2025 12:41:33 +0100 Subject: [PATCH] Walk fixes --- .prettierrc.json | 2 +- package-lock.json | 82 ++++++++++++++-------------- src/commands/init.ts | 9 ++- src/events/chat/message.ts | 8 --- src/server.ts | 11 +++- src/services/characterMoveService.ts | 67 +++++++++++++++-------- 6 files changed, 103 insertions(+), 76 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index 09fbd9e..5ab4c9a 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -3,7 +3,7 @@ "semi": false, "tabWidth": 2, "singleQuote": true, - "printWidth": 300, + "printWidth": 200, "trailingComma": "none", "plugins": ["@ianvs/prettier-plugin-sort-imports"], "importOrderParserPlugins": ["typescript", "jsx", "decorators-legacy", "classProperties"], diff --git a/package-lock.json b/package-lock.json index 15711b4..1e23ab8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1052,14 +1052,14 @@ } }, "node_modules/@mikro-orm/cli": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.5.tgz", - "integrity": "sha512-Ujmpy6ZFs//2TYzi0Q1tzmrOjq+SwtkT7Iv1RUsniaF21N6R71qhQnSHdkJgVuaGGE5a6Qyp52mDWSwW4qb9EQ==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.6.tgz", + "integrity": "sha512-sTMoDSJrnHZBT+ZAG40OeZwR9zRTYHtaaub9OoMM2CrxfI1KeiNqL/XFB4LaM5SVRAbnoEFpMJwQ8KS+5NcN9w==", "license": "MIT", "dependencies": { "@jercle/yargonaut": "1.1.5", - "@mikro-orm/core": "6.4.5", - "@mikro-orm/knex": "6.4.5", + "@mikro-orm/core": "6.4.6", + "@mikro-orm/knex": "6.4.6", "fs-extra": "11.3.0", "tsconfig-paths": "4.2.0", "yargs": "17.7.2" @@ -1073,9 +1073,9 @@ } }, "node_modules/@mikro-orm/core": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.5.tgz", - "integrity": "sha512-9/CZ5oSbf4P1oBZA2HHKzuxh5yYKDNUZZq/RvJmzMdJDgV8fpTt26po/7J6UytABqZp9yXj1jXc+Kqv73vGGOA==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.6.tgz", + "integrity": "sha512-xVm/ALG/3vTMgh6SrvojJ6jjMa0s2hNzWN0triDB16BaNdLwWE4aAaAe+3CuoMFqJAArSOUISTEjExbzELB1ZA==", "license": "MIT", "dependencies": { "dataloader": "2.2.3", @@ -1083,7 +1083,7 @@ "esprima": "4.0.1", "fs-extra": "11.3.0", "globby": "11.1.0", - "mikro-orm": "6.4.5", + "mikro-orm": "6.4.6", "reflect-metadata": "0.2.2" }, "engines": { @@ -1094,9 +1094,9 @@ } }, "node_modules/@mikro-orm/knex": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.5.tgz", - "integrity": "sha512-5D4NGD9bxmROUf8MVhR4mmZjzQtuM/Sg+eOnfOPzVaIkvuQItE4zR0Bg7gRr1XSgZ/OcJ/6q2ZoXH1HxSjykkw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.6.tgz", + "integrity": "sha512-o6t67tFH/GuPZCCEtKbTTL8HDXNgB2ITjButCTZLwteL0qI9yE/f7K6K+dEUKW+hAL3KRvc2BQeumvCVWFeISg==", "license": "MIT", "dependencies": { "fs-extra": "11.3.0", @@ -1125,12 +1125,12 @@ } }, "node_modules/@mikro-orm/mariadb": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/mariadb/-/mariadb-6.4.5.tgz", - "integrity": "sha512-fXyMZ5x1MIkQ+N7TyLgc5SjECpXRF+g0G6dvyYexdyoAo80RWPKksoZzRBrEDDbmMg8eEtpkqJ4bm29szuJijA==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/mariadb/-/mariadb-6.4.6.tgz", + "integrity": "sha512-n6pOf69heOsbrggqYcf9SeF9hUdkw0FbzuUAcI72jWuyNRyzNR1UATblD+vRJnwt8JDWwakjINU/bduZbcEwPw==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.4.5", + "@mikro-orm/knex": "6.4.6", "mariadb": "3.4.0" }, "engines": { @@ -1141,12 +1141,12 @@ } }, "node_modules/@mikro-orm/migrations": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.4.5.tgz", - "integrity": "sha512-cMvBLJGVXNT4iUsgjtMi3wtU9I3AtrI+JF68VFUc6tGkHgt3SS2rfrAw5MNAQaa47NXo9OfUWda4/MbRlV0VjA==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.4.6.tgz", + "integrity": "sha512-i0/H07g1jQS0tKVSTSkHhrmuDEHxDD3/IzkiObezTgGlD5tqN7acaSr8RDJ3DgICb8MHUDVMLwxeGy8igDB4ag==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.4.5", + "@mikro-orm/knex": "6.4.6", "fs-extra": "11.3.0", "umzug": "3.8.2" }, @@ -1158,12 +1158,12 @@ } }, "node_modules/@mikro-orm/mysql": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.4.5.tgz", - "integrity": "sha512-DAVroZqmXyAgIUXdiTCSRC3wG00FxE8FTi6YqcI0tE5SptJxc2t87lloRoU0oqzrwwKrlIDuBQ8le/opeiogkQ==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.4.6.tgz", + "integrity": "sha512-KVP9Wif9MX/RrroVgYQQUrXe9SALBQLfB9CbuJlUB7MnEcZtDi5JNX7z5kghToz0aBrTtOgsr93G1bCoM0SJkg==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.4.5", + "@mikro-orm/knex": "6.4.6", "mysql2": "3.12.0" }, "engines": { @@ -1174,13 +1174,13 @@ } }, "node_modules/@mikro-orm/reflection": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.5.tgz", - "integrity": "sha512-2yXbwAEKRmsJ0+Yt/6lAG+NCRgHdSOGTlzWmLvow+PfCUjSubfUM6rlowBchOAH+7swmsUFmHeeKWV6YG2SeMg==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.6.tgz", + "integrity": "sha512-7mL7HFVnaOOhDNgLjjndWyeJUtOl2wKn0spSqB8uRjS4XtwNEGVZNkW5YD1t/x7TJ99wUhe+oRDiySciiJSeBQ==", "license": "MIT", "dependencies": { "globby": "11.1.0", - "ts-morph": "25.0.0" + "ts-morph": "25.0.1" }, "engines": { "node": ">= 18.12.0" @@ -1354,9 +1354,9 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.6.tgz", - "integrity": "sha512-4nMUy4h0u5PGXVG71kEA9uYI3l8GjVqewoHOFONiM6fuqS51ORdaJZ5ZXB2VZEGUyfg1TOTSy88MF2cdAy+lqA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.15.0.tgz", + "integrity": "sha512-vXQPRQ+vJJn4GVqxkwRe+UGgzNxdV8xuJZY2zem46Y0p3tlahucH9/hPmLGj2i9dQnUBFiRnoM9/KW7PYw8F4Q==", "license": "MIT", "dependencies": { "@rushstack/node-core-library": "5.11.0", @@ -1387,12 +1387,12 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.23.4", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.4.tgz", - "integrity": "sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A==", + "version": "4.23.5", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.5.tgz", + "integrity": "sha512-jg70HfoK44KfSP3MTiL5rxsZH7X1ktX3cZs9Sl8eDu1/LxJSbPsh0MOFRC710lIuYYSgxWjI5AjbCBAl7u3RxA==", "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.14.6", + "@rushstack/terminal": "0.15.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -3446,9 +3446,9 @@ } }, "node_modules/mikro-orm": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.5.tgz", - "integrity": "sha512-CFQf87MG4c1N3J/3ELtmwFKXHBzp62o/da7dt43V9cGXygBs65KSk3EBCAdyd5VYNtu/09mt/rztanQSWNWzog==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.6.tgz", + "integrity": "sha512-Lr3uFK06O/4F/AtQAsuYD6QH7DgmUooSVFVGf1y02IuiKVFKOMJ4iKimkRMyoA+ykKhgYIp8WiaEqbWJVuz4Vw==", "license": "MIT", "engines": { "node": ">= 18.12.0" @@ -4675,9 +4675,9 @@ } }, "node_modules/ts-morph": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.0.tgz", - "integrity": "sha512-ERPTUVO5qF8cEGJgAejGOsCVlbk8d0SDyiJsucKQT5XgqoZslv0Qml+gnui6Yy6o+uQqw5SestyW2HvlVtT/Sg==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.1.tgz", + "integrity": "sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ==", "license": "MIT", "dependencies": { "@ts-morph/common": "~0.26.0", diff --git a/src/commands/init.ts b/src/commands/init.ts index fc0495e..f20212a 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -270,7 +270,14 @@ export default class InitCommand extends BaseCommand { .save() const characterType = new CharacterType() - await characterType.setId('75b70c78-17f0-44c0-a4fa-15043cb95be0').setName('New character type').setGender(CharacterGender.MALE).setRace(CharacterRace.HUMAN).setIsSelectable(true).setSprite(characterSprite).save() + await characterType + .setId('75b70c78-17f0-44c0-a4fa-15043cb95be0') + .setName('New character type') + .setGender(CharacterGender.MALE) + .setRace(CharacterRace.HUMAN) + .setIsSelectable(true) + .setSprite(characterSprite) + .save() } private async createCharacterHair(): Promise { diff --git a/src/events/chat/message.ts b/src/events/chat/message.ts index addb4c5..2cd55a5 100644 --- a/src/events/chat/message.ts +++ b/src/events/chat/message.ts @@ -1,7 +1,6 @@ import { BaseEvent } from '@/application/base/baseEvent' import { SocketEvent } from '@/application/enums' import MapManager from '@/managers/mapManager' -import MapRepository from '@/repositories/mapRepository' import ChatService from '@/services/chatService' type TypePayload = { @@ -25,13 +24,6 @@ export default class ChatMessageEvent extends BaseEvent { const character = mapCharacter.character - const mapRepository = new MapRepository() - const map = await mapRepository.getById(character.map.id) - if (!map) { - this.logger.error('chat:message error', 'Map not found') - return callback(false) - } - if (await ChatService.sendMapMessage(character.getId(), data.message)) { return callback(true) } diff --git a/src/server.ts b/src/server.ts index cbf031f..e3c5f2a 100644 --- a/src/server.ts +++ b/src/server.ts @@ -19,7 +19,16 @@ export class Server { await Database.initialize() // Initialize managers - await Promise.all([HttpManager.boot(HttpManager.getAppInstance()), SocketManager.boot(HttpManager.getAppInstance(), HttpManager.getServerInstance()), QueueManager.boot(), UserManager.boot(), MapManager.boot(), DateManager.boot(), WeatherManager.boot(), ConsoleManager.boot()]) + await Promise.all([ + HttpManager.boot(HttpManager.getAppInstance()), + SocketManager.boot(HttpManager.getAppInstance(), HttpManager.getServerInstance()), + QueueManager.boot(), + UserManager.boot(), + MapManager.boot(), + DateManager.boot(), + WeatherManager.boot(), + ConsoleManager.boot() + ]) } catch (error: any) { console.error(error) this.logger.error(`Server failed to start: ${error.message}`) diff --git a/src/services/characterMoveService.ts b/src/services/characterMoveService.ts index 2f1186d..3d15d42 100644 --- a/src/services/characterMoveService.ts +++ b/src/services/characterMoveService.ts @@ -118,35 +118,42 @@ class CharacterMoveService extends BaseService { private findPath(start: Position, end: Position, grid: number[][]): Node[] { const openList = new PriorityQueue((a, b) => a.f - b.f) - openList.enqueue({ ...start, g: 0, h: 0, f: 0 }) const closedSet = new Set() + const getKey = (p: Position) => `${p.positionX},${p.positionY}` - while (openList.length > 0) { - const current = openList.dequeue() - if (!current) break + openList.enqueue({ ...start, g: 0, h: 0, f: 0 }) - if (current.positionX === end.positionX && current.positionY === end.positionY) { - return this.reconstructPath(current) + try { + while (openList.length > 0) { + const current = openList.dequeue() + if (!current) break + + if (current.positionX === end.positionX && current.positionY === end.positionY) { + return this.reconstructPath(current) + } + + closedSet.add(getKey(current)) + + const neighbors = this.getValidNeighbors(current, grid, end) + + for (const neighbor of neighbors) { + if (closedSet.has(getKey(neighbor))) continue + + const g = current.g + this.getDistance(current, neighbor) + const h = this.getDistance(neighbor, end) + const f = g + h + + const node: Node = {...neighbor, g, h, f, parent: current} + openList.enqueue(node) + } } - closedSet.add(getKey(current)) - - const neighbors = this.getValidNeighbors(current, grid, end) - - for (const neighbor of neighbors) { - if (closedSet.has(getKey(neighbor))) continue - - const g = current.g + this.getDistance(current, neighbor) - const h = this.getDistance(neighbor, end) - const f = g + h - - const node: Node = { ...neighbor, g, h, f, parent: current } - openList.enqueue(node) - } + return [] // No path found + } finally { + while(openList.length > 0) openList.dequeue() + closedSet.clear() } - - return [] // No path found } private getValidNeighbors(current: Position, grid: number[][], end: Position): Position[] { @@ -159,7 +166,13 @@ class CharacterMoveService extends BaseService { } private isValidPosition(pos: Position, grid: number[][], end: Position): boolean { - return pos.positionX >= 0 && pos.positionY >= 0 && pos.positionX < grid[0]!.length && pos.positionY < grid.length && (grid[pos.positionY]![pos.positionX] === 0 || (pos.positionX === end.positionX && pos.positionY === end.positionY)) + return ( + pos.positionX >= 0 && + pos.positionY >= 0 && + pos.positionX < grid[0]!.length && + pos.positionY < grid.length && + (grid[pos.positionY]![pos.positionX] === 0 || (pos.positionX === end.positionX && pos.positionY === end.positionY)) + ) } private getDistance(a: Position, b: Position): number { @@ -179,7 +192,13 @@ class CharacterMoveService extends BaseService { return path } - public validateMovementDistance(currentX: number, currentY: number, lastKnownPosition: { x: number; y: number } | null, stepDelay: number, isMoving: boolean): { isValid: boolean; maxAllowedDistance: number; actualDistance: number } { + public validateMovementDistance( + currentX: number, + currentY: number, + lastKnownPosition: { x: number; y: number } | null, + stepDelay: number, + isMoving: boolean + ): { isValid: boolean; maxAllowedDistance: number; actualDistance: number } { if (!lastKnownPosition || !isMoving) { return { isValid: true, maxAllowedDistance: 0, actualDistance: 0 } }