@omnitronix/bonnys-fortune-game-engine 1.3.0 → 1.3.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +1 -0
- package/dist/bonnys-fortune-v1.game-engine.d.ts +32 -0
- package/dist/bonnys-fortune-v1.game-engine.js +6 -13
- package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
- package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +4 -0
- package/dist/config/game-logic-config/game-logic-config-loader.d.ts +3 -0
- package/dist/config/game-logic-config/game-logic-config.d.ts +2 -0
- package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +4 -0
- package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +4 -0
- package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +3 -0
- package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +5 -0
- package/dist/config/reel-strips-config/reel.dto.d.ts +5 -0
- package/dist/domain/game-round.types.d.ts +9 -0
- package/dist/domain/mappers/reel-strips-config.mapper.d.ts +4 -0
- package/dist/domain/reel-strip-option.d.ts +7 -0
- package/dist/domain/reel-strips-config.d.ts +9 -0
- package/dist/domain/reel.d.ts +8 -0
- package/dist/domain/types/cheat-trigger-bonus-command.d.ts +5 -0
- package/dist/domain/types/{debug-trigger-bonus-command.js → cheat-trigger-bonus-command.js} +1 -1
- package/dist/domain/types/cheat-trigger-bonus-command.js.map +1 -0
- package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +5 -0
- package/dist/domain/types/{debug-trigger-bonus-request.dto.js → cheat-trigger-bonus-request.dto.js} +1 -1
- package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +1 -0
- package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +5 -0
- package/dist/domain/types/{debug-update-bonus-meter-progress-command.js → cheat-update-bonus-meter-progress-command.js} +1 -1
- package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +1 -0
- package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +5 -0
- package/dist/domain/types/{debug-update-bonus-meter-progress-request.dto.js → cheat-update-bonus-meter-progress-request.dto.js} +1 -1
- package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +1 -0
- package/dist/domain/types/game-spin-command.d.ts +8 -0
- package/dist/domain/types/game-spin-input.dto.d.ts +8 -0
- package/dist/domain/types/game-spin-output.dto.d.ts +119 -0
- package/dist/domain/types/game-symbols.response.dto.d.ts +10 -0
- package/dist/domain/types/reel-strip-option.dto.d.ts +4 -0
- package/dist/domain/types/reel-strips-config.dto.d.ts +5 -0
- package/dist/domain/types/reel.dto.d.ts +5 -0
- package/dist/domain/types/start-bonus-round-command.d.ts +8 -0
- package/dist/domain/types/start-bonus-round-input.dto.d.ts +10 -0
- package/dist/game-engine.interface.d.ts +41 -0
- package/dist/helpers/generate-hash.d.ts +1 -0
- package/dist/helpers/number-helper.d.ts +23 -0
- package/dist/helpers/optional-boolean-mapper.d.ts +1 -0
- package/dist/helpers/uuid-helper.d.ts +3 -0
- package/dist/helpers/validation-helper.d.ts +14 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js.map +1 -1
- package/dist/logger/logger.d.ts +22 -0
- package/dist/logic/bonnys-fortune.game-logic.d.ts +32 -0
- package/dist/logic/bonnys-fortune.game-logic.js +15 -11
- package/dist/logic/bonnys-fortune.game-logic.js.map +1 -1
- package/dist/logic/bonnys-fortune.spin-generator.d.ts +19 -0
- package/dist/logic/bonnys-fortune.types.d.ts +170 -0
- package/dist/logic/bonnys-fortune.win-calculator.d.ts +10 -0
- package/dist/logic/game-logic-config.interface.d.ts +178 -0
- package/dist/logic/handlers/base-game.handler.d.ts +15 -0
- package/dist/logic/handlers/base-game.handler.js +5 -1
- package/dist/logic/handlers/base-game.handler.js.map +1 -1
- package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +13 -0
- package/dist/logic/handlers/free-spins-bonus.handler.d.ts +11 -0
- package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +11 -0
- package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +15 -0
- package/dist/rng/DummyRngClient.d.ts +18 -0
- package/dist/rng/DummyRngClient.js +1 -8
- package/dist/rng/DummyRngClient.js.map +1 -1
- package/dist/rng/rng-client.factory.d.ts +7 -0
- package/dist/rng/rng-client.factory.js.map +1 -1
- package/dist/rng/rng-client.interface.d.ts +16 -0
- package/dist/rng/rng-service.d.ts +26 -0
- package/dist/validation/abstract-game-logic-config.validator.d.ts +4 -0
- package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +129 -0
- package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +5 -0
- package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +2 -0
- package/dist/validation/game-logic-config-validation.service.d.ts +8 -0
- package/dist/validation/reel-strips-config-validation.service.d.ts +5 -0
- package/package.json +4 -3
- package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +80 -0
- package/src/bonnys-fortune-v1.game-engine.ts +285 -0
- package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +27 -0
- package/src/config/game-logic-config/game-logic-config-loader.ts +3 -0
- package/src/config/game-logic-config/game-logic-config.ts +380 -0
- package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +43 -0
- package/src/config/reel-strips-config/reel-strip-option.dto.ts +13 -0
- package/src/config/reel-strips-config/reel-strips-config-loader.ts +9 -0
- package/src/config/reel-strips-config/reel-strips-config.dto.ts +16 -0
- package/src/config/reel-strips-config/reel.dto.ts +16 -0
- package/src/config/reel-strips-config/reels-BASE.csv +52 -0
- package/src/config/reel-strips-config/reels-BONUS.csv +52 -0
- package/src/domain/game-round.types.ts +10 -0
- package/src/domain/mappers/reel-strips-config.mapper.ts +16 -0
- package/src/domain/reel-strip-option.ts +15 -0
- package/src/domain/reel-strips-config.ts +21 -0
- package/src/domain/reel.ts +17 -0
- package/src/domain/types/cheat-trigger-bonus-command.ts +5 -0
- package/src/domain/types/cheat-trigger-bonus-request.dto.ts +5 -0
- package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +6 -0
- package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +5 -0
- package/src/domain/types/game-spin-command.ts +8 -0
- package/src/domain/types/game-spin-input.dto.ts +8 -0
- package/src/domain/types/game-spin-output.dto.ts +142 -0
- package/src/domain/types/game-symbols.response.dto.ts +11 -0
- package/src/domain/types/reel-strip-option.dto.ts +13 -0
- package/src/domain/types/reel-strips-config.dto.ts +15 -0
- package/src/domain/types/reel.dto.ts +15 -0
- package/src/domain/types/start-bonus-round-command.ts +8 -0
- package/src/domain/types/start-bonus-round-input.dto.ts +10 -0
- package/src/game-engine.interface.ts +59 -0
- package/src/helpers/generate-hash.ts +5 -0
- package/src/helpers/number-helper.ts +41 -0
- package/src/helpers/optional-boolean-mapper.ts +5 -0
- package/src/helpers/uuid-helper.ts +7 -0
- package/src/helpers/validation-helper.ts +27 -0
- package/src/index.ts +3 -0
- package/src/logger/logger.ts +178 -0
- package/src/logic/bonnys-fortune.game-logic.ts +490 -0
- package/src/logic/bonnys-fortune.spin-generator.ts +277 -0
- package/src/logic/bonnys-fortune.types.ts +223 -0
- package/src/logic/bonnys-fortune.win-calculator.ts +210 -0
- package/src/logic/game-logic-config.interface.ts +174 -0
- package/src/logic/handlers/base-game.handler.ts +221 -0
- package/src/logic/handlers/collect-feature-bonus.handler.ts +301 -0
- package/src/logic/handlers/free-spins-bonus.handler.ts +119 -0
- package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +118 -0
- package/src/logic/handlers/treasure-hunt-bonus.handler.ts +232 -0
- package/src/rng/DummyRngClient.ts +108 -0
- package/src/rng/rng-client.factory.ts +27 -0
- package/src/rng/rng-client.interface.ts +38 -0
- package/src/rng/rng-service.ts +130 -0
- package/src/validation/abstract-game-logic-config.validator.ts +20 -0
- package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +371 -0
- package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +8 -0
- package/src/validation/custom-decorators/IsNestedIntArray.ts +29 -0
- package/src/validation/game-logic-config-validation.service.ts +28 -0
- package/src/validation/reel-strips-config-validation.service.ts +29 -0
- package/dist/__tests__/comprehensive.test.js +0 -741
- package/dist/__tests__/comprehensive.test.js.map +0 -1
- package/dist/domain/types/debug-trigger-bonus-command.js.map +0 -1
- package/dist/domain/types/debug-trigger-bonus-request.dto.js.map +0 -1
- package/dist/domain/types/debug-update-bonus-meter-progress-command.js.map +0 -1
- package/dist/domain/types/debug-update-bonus-meter-progress-request.dto.js.map +0 -1
package/README.md
CHANGED
|
@@ -241,19 +241,19 @@ The game engine supports 6 different command types:
|
|
|
241
241
|
|
|
242
242
|
**Returns**: Updated state
|
|
243
243
|
|
|
244
|
-
#### 5.
|
|
244
|
+
#### 5. CHEAT_TRIGGER_BONUS (Testing/Admin)
|
|
245
245
|
|
|
246
246
|
**Purpose**: Force trigger specific bonus game
|
|
247
247
|
|
|
248
|
-
**Payload**: `
|
|
248
|
+
**Payload**: `CheatTriggerBonusCommand`
|
|
249
249
|
|
|
250
250
|
**Returns**: State with pending bonus
|
|
251
251
|
|
|
252
|
-
#### 6.
|
|
252
|
+
#### 6. CHEAT_UPDATE_BONUS_METER_PROGRESS (Testing/Admin)
|
|
253
253
|
|
|
254
254
|
**Purpose**: Manually set bonus meter progress
|
|
255
255
|
|
|
256
|
-
**Payload**: `
|
|
256
|
+
**Payload**: `CheatUpdateBonusMeterProgressCommand`
|
|
257
257
|
|
|
258
258
|
**Returns**: Updated meter state
|
|
259
259
|
|
|
@@ -552,26 +552,26 @@ RNG_CLIENT_GRPC_URL=grpc://rng-prod.omnitronix.com:50051
|
|
|
552
552
|
RNG_CLIENT_POOL_SIZE=5000
|
|
553
553
|
```
|
|
554
554
|
|
|
555
|
-
### Example 4: Testing with
|
|
555
|
+
### Example 4: Testing with Cheat Commands
|
|
556
556
|
|
|
557
557
|
```typescript
|
|
558
558
|
async function testBonusGame() {
|
|
559
559
|
const gameEngine = new BonnysFortuneV1GameEngine();
|
|
560
|
-
|
|
560
|
+
|
|
561
561
|
// Initialize session
|
|
562
562
|
const initResult = await gameEngine.processCommand({}, {}, {
|
|
563
563
|
id: 'test-init',
|
|
564
564
|
type: 'INIT_SESSION_STATE',
|
|
565
565
|
payload: { betAmountThresholds: [10], defaultBetAmount: 10 }
|
|
566
566
|
});
|
|
567
|
-
|
|
567
|
+
|
|
568
568
|
// Force trigger treasure hunt bonus
|
|
569
|
-
const
|
|
569
|
+
const cheatResult = await gameEngine.processCommand(
|
|
570
570
|
initResult.publicState,
|
|
571
571
|
initResult.privateState,
|
|
572
572
|
{
|
|
573
|
-
id: 'test-
|
|
574
|
-
type: '
|
|
573
|
+
id: 'test-cheat',
|
|
574
|
+
type: 'CHEAT_TRIGGER_BONUS',
|
|
575
575
|
payload: {
|
|
576
576
|
sessionId: 'test-session',
|
|
577
577
|
bonusType: 'bonusGame1',
|
|
@@ -579,11 +579,11 @@ async function testBonusGame() {
|
|
|
579
579
|
}
|
|
580
580
|
}
|
|
581
581
|
);
|
|
582
|
-
|
|
582
|
+
|
|
583
583
|
// Now start the bonus
|
|
584
584
|
const bonusResult = await gameEngine.processCommand(
|
|
585
|
-
|
|
586
|
-
|
|
585
|
+
cheatResult.publicState,
|
|
586
|
+
cheatResult.privateState,
|
|
587
587
|
{
|
|
588
588
|
id: 'test-bonus-start',
|
|
589
589
|
type: 'START_BONUS_ROUND',
|
|
@@ -593,11 +593,11 @@ async function testBonusGame() {
|
|
|
593
593
|
betAmount: 10,
|
|
594
594
|
gameCode: 'bonnys-fortune',
|
|
595
595
|
gameVersion: '1.0.0',
|
|
596
|
-
bonusId:
|
|
596
|
+
bonusId: cheatResult.privateState.pendingBonuses[0].bonusId
|
|
597
597
|
}
|
|
598
598
|
}
|
|
599
599
|
);
|
|
600
|
-
|
|
600
|
+
|
|
601
601
|
console.log('Bonus results:', bonusResult.outcome);
|
|
602
602
|
}
|
|
603
603
|
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BonnysFortunePrivateState, BonnysFortunePublicState } from './logic/bonnys-fortune.types';
|
|
2
|
+
import { CommandProcessingResult, GameActionCommand, GameEngine, GameEngineConfig, GameEngineInfo } from './game-engine.interface';
|
|
3
|
+
import { BonnysFortuneGameLogic } from './logic/bonnys-fortune.game-logic';
|
|
4
|
+
import { GameLogicConfigLoader } from './config/game-logic-config/game-logic-config-loader';
|
|
5
|
+
import { GameLogicConfigValidationService } from './validation/game-logic-config-validation.service';
|
|
6
|
+
import { Logger } from './logger/logger';
|
|
7
|
+
import { ReelStripsConfigLoader } from './config/reel-strips-config/reel-strips-config-loader';
|
|
8
|
+
import { ReelStripsConfigMapper } from './domain/mappers/reel-strips-config.mapper';
|
|
9
|
+
import { ReelStripsConfigValidationService } from './validation/reel-strips-config-validation.service';
|
|
10
|
+
import { RngService } from './rng/rng-service';
|
|
11
|
+
export declare class BonnysFortuneV1GameEngine implements GameEngine<BonnysFortunePublicState, BonnysFortunePrivateState, any> {
|
|
12
|
+
private readonly gameCode;
|
|
13
|
+
private readonly version;
|
|
14
|
+
private readonly rtp;
|
|
15
|
+
private readonly gameType;
|
|
16
|
+
private readonly gameName;
|
|
17
|
+
private readonly provider;
|
|
18
|
+
private config;
|
|
19
|
+
private reels;
|
|
20
|
+
readonly configOutPort: GameLogicConfigLoader;
|
|
21
|
+
readonly reelsOutPort: ReelStripsConfigLoader;
|
|
22
|
+
readonly configValidator: GameLogicConfigValidationService;
|
|
23
|
+
readonly reelsValidator: ReelStripsConfigValidationService;
|
|
24
|
+
readonly reelMapper: ReelStripsConfigMapper;
|
|
25
|
+
readonly gameLogic: BonnysFortuneGameLogic;
|
|
26
|
+
readonly rngService: RngService;
|
|
27
|
+
readonly logger: Logger;
|
|
28
|
+
constructor(config?: GameEngineConfig);
|
|
29
|
+
getGameEngineInfo(): GameEngineInfo;
|
|
30
|
+
private preload;
|
|
31
|
+
processCommand(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, command: GameActionCommand): Promise<CommandProcessingResult<BonnysFortunePublicState, BonnysFortunePrivateState, any>>;
|
|
32
|
+
}
|
|
@@ -12,12 +12,10 @@ const reel_strips_config_mapper_1 = require("./domain/mappers/reel-strips-config
|
|
|
12
12
|
const reel_strips_config_validation_service_1 = require("./validation/reel-strips-config-validation.service");
|
|
13
13
|
const rng_client_factory_1 = require("./rng/rng-client.factory");
|
|
14
14
|
const rng_service_1 = require("./rng/rng-service");
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
|
-
const packageJson = require('../package.json');
|
|
17
15
|
class BonnysFortuneV1GameEngine {
|
|
18
16
|
constructor(config = {}) {
|
|
19
17
|
this.gameCode = 'bonnys-fortune';
|
|
20
|
-
this.version =
|
|
18
|
+
this.version = '1.0.0';
|
|
21
19
|
this.rtp = 96;
|
|
22
20
|
this.gameType = 'slot';
|
|
23
21
|
this.gameName = "Bonny's Fortune";
|
|
@@ -72,12 +70,7 @@ class BonnysFortuneV1GameEngine {
|
|
|
72
70
|
if (!baseReels) {
|
|
73
71
|
throw new Error('Base game reels not found');
|
|
74
72
|
}
|
|
75
|
-
|
|
76
|
-
const gameConfig = {
|
|
77
|
-
betAmountThresholds: command.payload?.betAmountThresholds ?? [0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100],
|
|
78
|
-
defaultBetAmount: command.payload?.defaultBetAmount ?? command.payload?.betStake ?? 1,
|
|
79
|
-
};
|
|
80
|
-
const result = await this.gameLogic.initSessionState(this.config, baseReels, gameConfig, command.id);
|
|
73
|
+
const result = await this.gameLogic.initSessionState(this.config, baseReels, command.payload, command.id);
|
|
81
74
|
const rngOutcome = this.rngService.getRngOutcomeForCommand(command.id);
|
|
82
75
|
this.rngService.removeCommand(command.id);
|
|
83
76
|
return {
|
|
@@ -128,9 +121,9 @@ class BonnysFortuneV1GameEngine {
|
|
|
128
121
|
rngOutcome,
|
|
129
122
|
};
|
|
130
123
|
}
|
|
131
|
-
case '
|
|
124
|
+
case 'CHEAT_TRIGGER_BONUS': {
|
|
132
125
|
const params = command.payload;
|
|
133
|
-
const result = await this.gameLogic.
|
|
126
|
+
const result = await this.gameLogic.cheatTriggerBonus(publicState, privateState, params);
|
|
134
127
|
const rngOutcome = this.rngService.getRngOutcomeForCommand(command.id);
|
|
135
128
|
this.rngService.removeCommand(command.id);
|
|
136
129
|
return {
|
|
@@ -142,9 +135,9 @@ class BonnysFortuneV1GameEngine {
|
|
|
142
135
|
rngOutcome,
|
|
143
136
|
};
|
|
144
137
|
}
|
|
145
|
-
case '
|
|
138
|
+
case 'CHEAT_UPDATE_BONUS_METER_PROGRESS': {
|
|
146
139
|
const params = command.payload;
|
|
147
|
-
const result = this.gameLogic.
|
|
140
|
+
const result = this.gameLogic.cheatUpdateBonusMeterProgress(publicState, privateState, params, this.config);
|
|
148
141
|
const rngOutcome = this.rngService.getRngOutcomeForCommand(command.id);
|
|
149
142
|
this.rngService.removeCommand(command.id);
|
|
150
143
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bonnys-fortune-v1.game-engine.js","sourceRoot":"","sources":["../src/bonnys-fortune-v1.game-engine.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"bonnys-fortune-v1.game-engine.js","sourceRoot":"","sources":["../src/bonnys-fortune-v1.game-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ReelStripsConfigLoader } from './reel-strips-config-loader';
|
|
2
|
+
export declare class FileSystemReelStripsConfigLoader implements ReelStripsConfigLoader {
|
|
3
|
+
loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
|
|
4
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReelStripOption } from './reel-strip-option';
|
|
2
|
+
export declare class Reel {
|
|
3
|
+
readonly options: ReelStripOption[];
|
|
4
|
+
constructor(options: ReelStripOption[]);
|
|
5
|
+
getOptions(): ReelStripOption[];
|
|
6
|
+
getOption(index: number): ReelStripOption;
|
|
7
|
+
get numberOfOptions(): number;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cheat-trigger-bonus-command.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-trigger-bonus-command.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cheat-trigger-bonus-request.dto.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-trigger-bonus-request.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cheat-update-bonus-meter-progress-command.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-update-bonus-meter-progress-command.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cheat-update-bonus-meter-progress-request.dto.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
export declare enum SpinType {
|
|
2
|
+
BASE_GAME_SPIN = "BASE_GAME_SPIN",
|
|
3
|
+
BONUS_GAME_1_SPIN = "BONUS_GAME_1_SPIN",
|
|
4
|
+
BONUS_GAME_2_SPIN = "BONUS_GAME_2_SPIN",
|
|
5
|
+
BONUS_GAME_3_SPIN = "BONUS_GAME_3_SPIN",
|
|
6
|
+
COLLECT_FEATURE_SPIN = "COLLECT_FEATURE_SPIN"
|
|
7
|
+
}
|
|
8
|
+
export declare enum PrizeType {
|
|
9
|
+
MULTIPLIER = "MULTIPLIER",
|
|
10
|
+
BONUS = "BONUS"
|
|
11
|
+
}
|
|
12
|
+
/** Triggered bonus */
|
|
13
|
+
export interface TriggeredBonusDto {
|
|
14
|
+
bonusId: string;
|
|
15
|
+
bonusType: string;
|
|
16
|
+
betAmount: number;
|
|
17
|
+
}
|
|
18
|
+
/** Winning line */
|
|
19
|
+
export interface WinningLineDto {
|
|
20
|
+
win: number;
|
|
21
|
+
ways: number;
|
|
22
|
+
symbol: number;
|
|
23
|
+
positions: number[][];
|
|
24
|
+
multiplier: number;
|
|
25
|
+
consecutiveReels: number;
|
|
26
|
+
}
|
|
27
|
+
/** Win result */
|
|
28
|
+
export interface WinResultDto {
|
|
29
|
+
totalWin: number;
|
|
30
|
+
winningLines: WinningLineDto[];
|
|
31
|
+
}
|
|
32
|
+
/** Bonus meter */
|
|
33
|
+
export interface BonusMeterDto {
|
|
34
|
+
progress: number;
|
|
35
|
+
symbolId: number;
|
|
36
|
+
threshold: number;
|
|
37
|
+
symbolName: string;
|
|
38
|
+
}
|
|
39
|
+
/** Public state */
|
|
40
|
+
export interface PublicStateDto {
|
|
41
|
+
bonusMeters: Record<string, BonusMeterDto>;
|
|
42
|
+
}
|
|
43
|
+
/** Base Game Spin */
|
|
44
|
+
export interface BaseGameSpinResultDto {
|
|
45
|
+
spinType: SpinType;
|
|
46
|
+
screen: number[][];
|
|
47
|
+
winResult: WinResultDto;
|
|
48
|
+
playerWinning: number;
|
|
49
|
+
nextSpinType: SpinType;
|
|
50
|
+
triggeredBonus?: TriggeredBonusDto;
|
|
51
|
+
}
|
|
52
|
+
/** Treasure Hunt (Bonus Game 1) */
|
|
53
|
+
export interface TreasureHuntSpinResultDto {
|
|
54
|
+
spinType: SpinType;
|
|
55
|
+
selection: string;
|
|
56
|
+
multiplier: number;
|
|
57
|
+
multiplierCounts: Record<string, number>;
|
|
58
|
+
winningMultiplier: number | null;
|
|
59
|
+
winningCount: number;
|
|
60
|
+
totalMultiplier: number;
|
|
61
|
+
}
|
|
62
|
+
/** Free Spin (Bonus Game 2) */
|
|
63
|
+
export interface FreeSpinResultDto {
|
|
64
|
+
spinType: SpinType;
|
|
65
|
+
screen: number[][];
|
|
66
|
+
playerWinning: number;
|
|
67
|
+
nextSpinType: SpinType;
|
|
68
|
+
multiplier: number;
|
|
69
|
+
}
|
|
70
|
+
/** Steering to the Fortune (Bonus Game 3) */
|
|
71
|
+
export interface SteeringToTheFortuneResultDto {
|
|
72
|
+
spinType: SpinType;
|
|
73
|
+
playerWinning: number;
|
|
74
|
+
nextSpinType: SpinType;
|
|
75
|
+
prizeType: PrizeType;
|
|
76
|
+
prizeValue?: number | string;
|
|
77
|
+
totalMultiplier: number;
|
|
78
|
+
triggeredBonus?: TriggeredBonusDto;
|
|
79
|
+
}
|
|
80
|
+
/** Collect Feature Spin */
|
|
81
|
+
export interface CollectFeatureSpinResultDto {
|
|
82
|
+
spinIndex?: number;
|
|
83
|
+
spinType: SpinType;
|
|
84
|
+
symbols?: string[];
|
|
85
|
+
slashed?: boolean[];
|
|
86
|
+
currentValues?: number;
|
|
87
|
+
currentMultipliers?: number;
|
|
88
|
+
totalValues?: number;
|
|
89
|
+
totalMultipliers?: number;
|
|
90
|
+
playerWinning: number;
|
|
91
|
+
totalWin?: number;
|
|
92
|
+
spinsLeft?: number;
|
|
93
|
+
nextSpinType: SpinType;
|
|
94
|
+
}
|
|
95
|
+
export interface BaseGameSpinResultWrapperDto {
|
|
96
|
+
result: BaseGameSpinResultDto;
|
|
97
|
+
}
|
|
98
|
+
export interface FreeSpinResultWrapperDto {
|
|
99
|
+
result: FreeSpinResultDto;
|
|
100
|
+
}
|
|
101
|
+
export interface TreasureHuntSpinResultWrapperDto {
|
|
102
|
+
result: TreasureHuntSpinResultDto;
|
|
103
|
+
}
|
|
104
|
+
export interface SteeringToTheFortuneResultWrapperDto {
|
|
105
|
+
result: SteeringToTheFortuneResultDto;
|
|
106
|
+
}
|
|
107
|
+
export interface CollectFeatureSpinResultWrapperDto {
|
|
108
|
+
result: CollectFeatureSpinResultDto;
|
|
109
|
+
}
|
|
110
|
+
/** Game Spin Output DTO */
|
|
111
|
+
export interface GameSpinOutputDto {
|
|
112
|
+
sessionId: string;
|
|
113
|
+
balance: number;
|
|
114
|
+
betAmount: number;
|
|
115
|
+
balanceBeforeSpin: number;
|
|
116
|
+
outcome: BaseGameSpinResultWrapperDto;
|
|
117
|
+
publicState: PublicStateDto;
|
|
118
|
+
lastSpin: BaseGameSpinResultWrapperDto | FreeSpinResultWrapperDto | TreasureHuntSpinResultWrapperDto | SteeringToTheFortuneResultWrapperDto | CollectFeatureSpinResultWrapperDto | null;
|
|
119
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { RngClientConfig } from '@omnitronix/rng-client-core';
|
|
2
|
+
export type GameEngineMetricsHandlers = RngClientConfig['metrics']['handlers'];
|
|
3
|
+
export interface GameEngineConfig {
|
|
4
|
+
metrics?: {
|
|
5
|
+
handlers: GameEngineMetricsHandlers;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface GameEngineInfo {
|
|
9
|
+
gameCode: string;
|
|
10
|
+
version: string;
|
|
11
|
+
rtp: number;
|
|
12
|
+
gameType: string;
|
|
13
|
+
gameName: string;
|
|
14
|
+
provider: string;
|
|
15
|
+
}
|
|
16
|
+
export interface RngOutcomeRecord {
|
|
17
|
+
result: number;
|
|
18
|
+
seed: number;
|
|
19
|
+
min: number;
|
|
20
|
+
max: number;
|
|
21
|
+
}
|
|
22
|
+
export type RngOutcome = {
|
|
23
|
+
[actionId: string]: RngOutcomeRecord;
|
|
24
|
+
};
|
|
25
|
+
export interface CommandProcessingResult<TPublicState = any, TPrivateState = any, TOutcome = any> {
|
|
26
|
+
success: boolean;
|
|
27
|
+
publicState: TPublicState;
|
|
28
|
+
privateState: TPrivateState;
|
|
29
|
+
outcome?: TOutcome;
|
|
30
|
+
message?: string;
|
|
31
|
+
rngOutcome?: RngOutcome;
|
|
32
|
+
}
|
|
33
|
+
export interface GameActionCommand<TPayload = any> {
|
|
34
|
+
id: string;
|
|
35
|
+
type: string;
|
|
36
|
+
payload?: TPayload;
|
|
37
|
+
}
|
|
38
|
+
export interface GameEngine<TPublicState = any, TPrivateState = any, TOutcome = any> {
|
|
39
|
+
processCommand(publicState: TPublicState, privateState: TPrivateState, command: GameActionCommand): Promise<CommandProcessingResult<TPublicState, TPrivateState, TOutcome>>;
|
|
40
|
+
getGameEngineInfo(): GameEngineInfo;
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const generateHash: (input: string) => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare class NumberHelper {
|
|
2
|
+
/**
|
|
3
|
+
* Safely formats a number to the specified decimal places,
|
|
4
|
+
* minimizing floating-point issues.
|
|
5
|
+
*/
|
|
6
|
+
static toFixedNumber(value: number, decimals: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* Safely adds two numbers and formats result.
|
|
9
|
+
*/
|
|
10
|
+
static safeSum(a: number, b: number, decimals: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Safely multiplies two numbers and formats result.
|
|
13
|
+
*/
|
|
14
|
+
static safeMultiply(a: number, b: number, decimals: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* Clamps a number between min and max.
|
|
17
|
+
*/
|
|
18
|
+
static clamp(value: number, min: number, max: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Safely divides two numbers.
|
|
21
|
+
*/
|
|
22
|
+
static safeDivide(a: number, b: number, decimals: number): number;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const optionalBooleanMapper: Map<string, boolean>;
|