From 020f2bd3c577f175cfd0b10c30d2eec84b5d3bb4 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 22 Jan 2025 17:47:58 -0600 Subject: [PATCH 1/8] Removed weather effects booleans, now to disable weather effects, setting the value to 0 is the way --- src/application/types.ts | 7 +++- .../chat/gameMaster/toggleFogCommand.ts | 5 ++- .../chat/gameMaster/toggleRainCommand.ts | 5 ++- src/managers/weatherManager.ts | 38 ++++++++++--------- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/application/types.ts b/src/application/types.ts index f6aa12b..9a7bdcf 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -46,8 +46,11 @@ export type AssetData = { export type WorldSettings = { date: Date - isRainEnabled: boolean - isFogEnabled: boolean + weatherState: WeatherState +} + +export type WeatherState = { + rainPercentage: number fogDensity: number } diff --git a/src/events/chat/gameMaster/toggleFogCommand.ts b/src/events/chat/gameMaster/toggleFogCommand.ts index d77e306..82df6e0 100644 --- a/src/events/chat/gameMaster/toggleFogCommand.ts +++ b/src/events/chat/gameMaster/toggleFogCommand.ts @@ -20,7 +20,10 @@ export default class ToggleFogCommand extends BaseEvent { // Check if character exists and is GM if (!(await this.isCharacterGM())) return - await WeatherManager.toggleFog() + const args = ChatService.getArgs('fog', data.message) + + await WeatherManager.toggleFog(Number(args![0])) + } catch (error: any) { this.logger.error('command error', error.message) callback(false) diff --git a/src/events/chat/gameMaster/toggleRainCommand.ts b/src/events/chat/gameMaster/toggleRainCommand.ts index 039a7f3..6675f96 100644 --- a/src/events/chat/gameMaster/toggleRainCommand.ts +++ b/src/events/chat/gameMaster/toggleRainCommand.ts @@ -20,7 +20,10 @@ export default class ToggleRainCommand extends BaseEvent { // Check if character exists and is GM if (!(await this.isCharacterGM())) return - await WeatherManager.toggleRain() + let args = ChatService.getArgs('rain', data.message) + + await WeatherManager.toggleRain(Number(args![0])) + } catch (error: any) { this.logger.error('command error', error.message) callback(false) diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index c6bb63f..e272607 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -6,9 +6,7 @@ import SocketManager from '#managers/socketManager' import WorldRepository from '#repositories/worldRepository' type WeatherState = { - isRainEnabled: boolean rainPercentage: number - isFogEnabled: boolean fogDensity: number } @@ -26,9 +24,7 @@ class WeatherManager { private intervalId: NodeJS.Timeout | null = null private weatherState: WeatherState = { - isRainEnabled: false, rainPercentage: 0, - isFogEnabled: false, fogDensity: 0 } @@ -43,13 +39,13 @@ class WeatherManager { return { ...this.weatherState } } - public async toggleRain(): Promise { - this.updateWeatherProperty('rain') + public async toggleRain(value? : number): Promise { + this.updateWeatherProperty('rain', value) await this.saveAndEmitWeather() } - public async toggleFog(): Promise { - this.updateWeatherProperty('fog') + public async toggleFog(value? : number): Promise { + this.updateWeatherProperty('fog', value) await this.saveAndEmitWeather() } @@ -63,9 +59,7 @@ class WeatherManager { const world = await worldRepository.getFirst() if (world) { this.weatherState = { - isRainEnabled: world.isRainEnabled, rainPercentage: world.rainPercentage, - isFogEnabled: world.isFogEnabled, fogDensity: world.fogDensity } } @@ -90,15 +84,25 @@ class WeatherManager { } } - private updateWeatherProperty(type: 'rain' | 'fog'): void { + private updateWeatherProperty(type: 'rain' | 'fog', value?: number): void { if (type === 'rain') { - this.weatherState.isRainEnabled = !this.weatherState.isRainEnabled - this.weatherState.rainPercentage = this.weatherState.isRainEnabled ? this.getRandomNumber(WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.min, WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.max) : 0 + if (value !== undefined) { + this.weatherState.rainPercentage = value + } + else { + this.weatherState.rainPercentage = this.weatherState.rainPercentage > 0 ? 0 : + this.weatherState.rainPercentage = this.getRandomNumber(WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.min, WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.max) + } } if (type === 'fog') { - this.weatherState.isFogEnabled = !this.weatherState.isFogEnabled - this.weatherState.fogDensity = this.weatherState.isFogEnabled ? this.getRandomNumber(WeatherManager.CONFIG.FOG_DENSITY_RANGE.min, WeatherManager.CONFIG.FOG_DENSITY_RANGE.max) : 0 + if (value !== undefined) { + this.weatherState.fogDensity = value + } + else { + this.weatherState.rainPercentage = this.weatherState.fogDensity > 0 ? 0 : + this.weatherState.fogDensity = this.getRandomNumber(WeatherManager.CONFIG.FOG_DENSITY_RANGE.min, WeatherManager.CONFIG.FOG_DENSITY_RANGE.max) + } } } @@ -119,10 +123,10 @@ class WeatherManager { if (!world) world = new World() await world - .setIsRainEnabled(this.weatherState.isRainEnabled) .setRainPercentage(this.weatherState.rainPercentage) - .setIsFogEnabled(this.weatherState.isFogEnabled) + .setIsRainEnabled(this.weatherState.rainPercentage > 0) .setFogDensity(this.weatherState.fogDensity) + .setIsFogEnabled(this.weatherState.fogDensity > 0) .save() } catch (error) { this.logError('save', error) From dae0d365d5d66295662a7d496d18d3e93d96bd85 Mon Sep 17 00:00:00 2001 From: Andrei Date: Wed, 22 Jan 2025 20:33:11 -0600 Subject: [PATCH 2/8] Changed toggle functions to set, and refactored the random weather value gen --- .../chat/gameMaster/toggleFogCommand.ts | 2 +- .../chat/gameMaster/toggleRainCommand.ts | 3 +- src/managers/weatherManager.ts | 40 +++++++++++-------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/events/chat/gameMaster/toggleFogCommand.ts b/src/events/chat/gameMaster/toggleFogCommand.ts index 82df6e0..8500e09 100644 --- a/src/events/chat/gameMaster/toggleFogCommand.ts +++ b/src/events/chat/gameMaster/toggleFogCommand.ts @@ -22,7 +22,7 @@ export default class ToggleFogCommand extends BaseEvent { const args = ChatService.getArgs('fog', data.message) - await WeatherManager.toggleFog(Number(args![0])) + await WeatherManager.setFogValue(Number(args![0])) } catch (error: any) { this.logger.error('command error', error.message) diff --git a/src/events/chat/gameMaster/toggleRainCommand.ts b/src/events/chat/gameMaster/toggleRainCommand.ts index 6675f96..e83fe3d 100644 --- a/src/events/chat/gameMaster/toggleRainCommand.ts +++ b/src/events/chat/gameMaster/toggleRainCommand.ts @@ -22,7 +22,8 @@ export default class ToggleRainCommand extends BaseEvent { let args = ChatService.getArgs('rain', data.message) - await WeatherManager.toggleRain(Number(args![0])) + //if no arguments are given, should default to random + await WeatherManager.setRainValue(Number(args![0])) } catch (error: any) { this.logger.error('command error', error.message) diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index e272607..e1f1f3b 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -39,12 +39,29 @@ class WeatherManager { return { ...this.weatherState } } - public async toggleRain(value? : number): Promise { + public randomWeatherValue(type: 'rain' | 'fog' ) { + switch (type) { + case 'rain': + return this.getRandomNumber(WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.min, WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.max) + case 'fog': + return this.getRandomNumber(WeatherManager.CONFIG.FOG_DENSITY_RANGE.min, WeatherManager.CONFIG.FOG_DENSITY_RANGE.max) + } + } + + public async setRainValue(value? : number): Promise { + if (value === undefined) { + value = this.weatherState.fogDensity > 0 ? 0 : this.randomWeatherValue('fog') + } + this.updateWeatherProperty('rain', value) await this.saveAndEmitWeather() } - public async toggleFog(value? : number): Promise { + public async setFogValue(value? : number): Promise { + if (value === undefined) { + value = this.weatherState.fogDensity > 0 ? 0 : this.randomWeatherValue('fog') + } + this.updateWeatherProperty('fog', value) await this.saveAndEmitWeather() } @@ -77,32 +94,20 @@ class WeatherManager { private updateRandomWeather(): void { if (Math.random() < WeatherManager.CONFIG.RAIN_CHANCE) { - this.updateWeatherProperty('rain') + this.updateWeatherProperty('rain', this.randomWeatherValue('rain') ) } if (Math.random() < WeatherManager.CONFIG.FOG_CHANCE) { - this.updateWeatherProperty('fog') + this.updateWeatherProperty('fog', this.randomWeatherValue('fog')) } } - private updateWeatherProperty(type: 'rain' | 'fog', value?: number): void { + private updateWeatherProperty(type: 'rain' | 'fog', value: number): void { if (type === 'rain') { - if (value !== undefined) { this.weatherState.rainPercentage = value - } - else { - this.weatherState.rainPercentage = this.weatherState.rainPercentage > 0 ? 0 : - this.weatherState.rainPercentage = this.getRandomNumber(WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.min, WeatherManager.CONFIG.RAIN_PERCENTAGE_RANGE.max) - } } if (type === 'fog') { - if (value !== undefined) { this.weatherState.fogDensity = value - } - else { - this.weatherState.rainPercentage = this.weatherState.fogDensity > 0 ? 0 : - this.weatherState.fogDensity = this.getRandomNumber(WeatherManager.CONFIG.FOG_DENSITY_RANGE.min, WeatherManager.CONFIG.FOG_DENSITY_RANGE.max) - } } } @@ -122,6 +127,7 @@ class WeatherManager { let world = await worldRepository.getFirst() if (!world) world = new World() + //left them in here because the await world .setRainPercentage(this.weatherState.rainPercentage) .setIsRainEnabled(this.weatherState.rainPercentage > 0) From d7ac70662a32c0e3fde4e0d3b031016365002bf5 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 23 Jan 2025 11:59:23 -0600 Subject: [PATCH 3/8] Accidentally put fog instead of rain --- src/managers/weatherManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index e1f1f3b..39e6157 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -50,7 +50,7 @@ class WeatherManager { public async setRainValue(value? : number): Promise { if (value === undefined) { - value = this.weatherState.fogDensity > 0 ? 0 : this.randomWeatherValue('fog') + value = this.weatherState.rainPercentage > 0 ? 0 : this.randomWeatherValue('rain') } this.updateWeatherProperty('rain', value) From edb7836e55037883a7bed00bd4d40ea152b737b9 Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 23 Jan 2025 13:42:26 -0600 Subject: [PATCH 4/8] Weather values randomized if no number is given as a command argument --- src/events/chat/gameMaster/toggleFogCommand.ts | 7 ++++++- src/events/chat/gameMaster/toggleRainCommand.ts | 8 ++++++-- src/managers/weatherManager.ts | 14 +++++++------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/events/chat/gameMaster/toggleFogCommand.ts b/src/events/chat/gameMaster/toggleFogCommand.ts index 8500e09..1d69c39 100644 --- a/src/events/chat/gameMaster/toggleFogCommand.ts +++ b/src/events/chat/gameMaster/toggleFogCommand.ts @@ -22,7 +22,12 @@ export default class ToggleFogCommand extends BaseEvent { const args = ChatService.getArgs('fog', data.message) - await WeatherManager.setFogValue(Number(args![0])) + if (args![0]) { + await WeatherManager.setFogValue(Number(args![0])) + } + else { + await WeatherManager.setFogValue(null) + } } catch (error: any) { this.logger.error('command error', error.message) diff --git a/src/events/chat/gameMaster/toggleRainCommand.ts b/src/events/chat/gameMaster/toggleRainCommand.ts index e83fe3d..0c58314 100644 --- a/src/events/chat/gameMaster/toggleRainCommand.ts +++ b/src/events/chat/gameMaster/toggleRainCommand.ts @@ -22,8 +22,12 @@ export default class ToggleRainCommand extends BaseEvent { let args = ChatService.getArgs('rain', data.message) - //if no arguments are given, should default to random - await WeatherManager.setRainValue(Number(args![0])) + if (args![0]) { + await WeatherManager.setRainValue(Number(args![0])) + } + else { + await WeatherManager.setRainValue(null) + } } catch (error: any) { this.logger.error('command error', error.message) diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index 39e6157..a245bf6 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -48,18 +48,18 @@ class WeatherManager { } } - public async setRainValue(value? : number): Promise { - if (value === undefined) { - value = this.weatherState.rainPercentage > 0 ? 0 : this.randomWeatherValue('rain') + public async setRainValue(value : number | null): Promise { + if (value === null) { + value = this.randomWeatherValue('rain') } this.updateWeatherProperty('rain', value) await this.saveAndEmitWeather() } - public async setFogValue(value? : number): Promise { - if (value === undefined) { - value = this.weatherState.fogDensity > 0 ? 0 : this.randomWeatherValue('fog') + public async setFogValue(value : number | null): Promise { + if (value === null) { + value = this.randomWeatherValue('fog') } this.updateWeatherProperty('fog', value) @@ -127,7 +127,7 @@ class WeatherManager { let world = await worldRepository.getFirst() if (!world) world = new World() - //left them in here because the + //the data model still contains the booleans await world .setRainPercentage(this.weatherState.rainPercentage) .setIsRainEnabled(this.weatherState.rainPercentage > 0) From 5c34ed7286d3300687b627ccdcb75009f929460b Mon Sep 17 00:00:00 2001 From: Andrei Date: Thu, 23 Jan 2025 13:52:32 -0600 Subject: [PATCH 5/8] Fixed error thrown when getArgs called on a command with no arguments --- src/services/chatService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/chatService.ts b/src/services/chatService.ts index 32c22b5..02a1f4c 100644 --- a/src/services/chatService.ts +++ b/src/services/chatService.ts @@ -38,7 +38,7 @@ class ChatService extends BaseService { public getArgs(command: string, message: string): string[] | undefined { if (!this.isCommand(message, command)) return - return message.split(`/${command} `)[1].split(' ') + return message.slice(`/${command} `.length).split(' ') } } From 7f4a7849154b02d81339b62d77a5c2a021008e9c Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 24 Jan 2025 23:52:30 +0100 Subject: [PATCH 6/8] Removed redundant columns --- src/entities/base/world.ts | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/entities/base/world.ts b/src/entities/base/world.ts index 50658d1..21476c1 100644 --- a/src/entities/base/world.ts +++ b/src/entities/base/world.ts @@ -6,15 +6,9 @@ export class BaseWorld extends BaseEntity { @PrimaryKey() date = new Date() - @Property() - isRainEnabled = false - @Property() rainPercentage = 0 - @Property() - isFogEnabled = false - @Property() fogDensity = 0 @@ -27,15 +21,6 @@ export class BaseWorld extends BaseEntity { return this.date } - setIsRainEnabled(isRainEnabled: boolean) { - this.isRainEnabled = isRainEnabled - return this - } - - getIsRainEnabled() { - return this.isRainEnabled - } - setRainPercentage(rainPercentage: number) { this.rainPercentage = rainPercentage return this @@ -45,15 +30,6 @@ export class BaseWorld extends BaseEntity { return this.rainPercentage } - setIsFogEnabled(isFogEnabled: boolean) { - this.isFogEnabled = isFogEnabled - return this - } - - getIsFogEnabled() { - return this.isFogEnabled - } - setFogDensity(fogDensity: number) { this.fogDensity = fogDensity return this From a0584c2bb9bb8c370bea3d8c69662d444d6a9ee3 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 24 Jan 2025 23:52:56 +0100 Subject: [PATCH 7/8] Inline checking for less written code; removed unused import --- src/events/chat/gameMaster/toggleFogCommand.ts | 10 ++-------- src/events/chat/gameMaster/toggleRainCommand.ts | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/events/chat/gameMaster/toggleFogCommand.ts b/src/events/chat/gameMaster/toggleFogCommand.ts index 1d69c39..27c2ac3 100644 --- a/src/events/chat/gameMaster/toggleFogCommand.ts +++ b/src/events/chat/gameMaster/toggleFogCommand.ts @@ -1,6 +1,5 @@ import { BaseEvent } from '#application/base/baseEvent' import WeatherManager from '#managers/weatherManager' -import CharacterRepository from '#repositories/characterRepository' import ChatService from '#services/chatService' type TypePayload = { @@ -22,13 +21,8 @@ export default class ToggleFogCommand extends BaseEvent { const args = ChatService.getArgs('fog', data.message) - if (args![0]) { - await WeatherManager.setFogValue(Number(args![0])) - } - else { - await WeatherManager.setFogValue(null) - } - + await WeatherManager.setFogValue(args![0] ? Number(args![0]) : null); + callback(true) } catch (error: any) { this.logger.error('command error', error.message) callback(false) diff --git a/src/events/chat/gameMaster/toggleRainCommand.ts b/src/events/chat/gameMaster/toggleRainCommand.ts index 0c58314..f8bc3a7 100644 --- a/src/events/chat/gameMaster/toggleRainCommand.ts +++ b/src/events/chat/gameMaster/toggleRainCommand.ts @@ -1,6 +1,5 @@ import { BaseEvent } from '#application/base/baseEvent' import WeatherManager from '#managers/weatherManager' -import CharacterRepository from '#repositories/characterRepository' import ChatService from '#services/chatService' type TypePayload = { @@ -22,13 +21,8 @@ export default class ToggleRainCommand extends BaseEvent { let args = ChatService.getArgs('rain', data.message) - if (args![0]) { - await WeatherManager.setRainValue(Number(args![0])) - } - else { - await WeatherManager.setRainValue(null) - } - + await WeatherManager.setRainValue(args![0] ? Number(args![0]) : null); + callback(true) } catch (error: any) { this.logger.error('command error', error.message) callback(false) From 8f4d4fc4827662481ff2140529d65445e010c5e6 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 24 Jan 2025 23:53:03 +0100 Subject: [PATCH 8/8] Removed unused functions --- src/managers/weatherManager.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/managers/weatherManager.ts b/src/managers/weatherManager.ts index a245bf6..e8440bc 100644 --- a/src/managers/weatherManager.ts +++ b/src/managers/weatherManager.ts @@ -66,10 +66,6 @@ class WeatherManager { await this.saveAndEmitWeather() } - public cleanup(): void { - this.intervalId && clearInterval(this.intervalId) - } - private async loadWeather(): Promise { try { const worldRepository = new WorldRepository() @@ -130,9 +126,7 @@ class WeatherManager { //the data model still contains the booleans await world .setRainPercentage(this.weatherState.rainPercentage) - .setIsRainEnabled(this.weatherState.rainPercentage > 0) .setFogDensity(this.weatherState.fogDensity) - .setIsFogEnabled(this.weatherState.fogDensity > 0) .save() } catch (error) { this.logError('save', error)