@omnitronix/bonnys-fortune-game-engine 1.2.0 → 1.2.2
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/dist/__tests__/comprehensive.test.js +741 -0
- package/dist/__tests__/comprehensive.test.js.map +1 -0
- package/dist/bonnys-fortune-v1.game-engine.js +12 -7
- package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
- package/dist/domain/types/{cheat-trigger-bonus-command.js → debug-trigger-bonus-command.js} +1 -1
- package/dist/domain/types/debug-trigger-bonus-command.js.map +1 -0
- package/dist/domain/types/{cheat-trigger-bonus-request.dto.js → debug-trigger-bonus-request.dto.js} +1 -1
- package/dist/domain/types/debug-trigger-bonus-request.dto.js.map +1 -0
- package/dist/domain/types/{cheat-update-bonus-meter-progress-command.js → debug-update-bonus-meter-progress-command.js} +1 -1
- package/dist/domain/types/debug-update-bonus-meter-progress-command.js.map +1 -0
- package/dist/domain/types/{cheat-update-bonus-meter-progress-request.dto.js → debug-update-bonus-meter-progress-request.dto.js} +1 -1
- package/dist/domain/types/debug-update-bonus-meter-progress-request.dto.js.map +1 -0
- package/dist/logic/bonnys-fortune.game-logic.js +4 -2
- package/dist/logic/bonnys-fortune.game-logic.js.map +1 -1
- package/dist/rng/DummyRngClient.js +8 -1
- package/dist/rng/DummyRngClient.js.map +1 -1
- package/dist/rng/rng-client.factory.js +1 -2
- package/dist/rng/rng-client.factory.js.map +1 -1
- package/package.json +3 -4
- package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +0 -1
- package/dist/bonnys-fortune-v1.game-engine.d.ts +0 -32
- package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +0 -4
- package/dist/config/game-logic-config/game-logic-config-loader.d.ts +0 -3
- package/dist/config/game-logic-config/game-logic-config.d.ts +0 -2
- package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +0 -4
- package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +0 -4
- package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +0 -3
- package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +0 -5
- package/dist/config/reel-strips-config/reel.dto.d.ts +0 -5
- package/dist/domain/game-round.types.d.ts +0 -9
- package/dist/domain/mappers/reel-strips-config.mapper.d.ts +0 -4
- package/dist/domain/reel-strip-option.d.ts +0 -7
- package/dist/domain/reel-strips-config.d.ts +0 -9
- package/dist/domain/reel.d.ts +0 -8
- package/dist/domain/types/cheat-trigger-bonus-command.d.ts +0 -5
- package/dist/domain/types/cheat-trigger-bonus-command.js.map +0 -1
- package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +0 -5
- package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +0 -1
- package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +0 -5
- package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +0 -1
- package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +0 -5
- package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +0 -1
- package/dist/domain/types/game-spin-command.d.ts +0 -8
- package/dist/domain/types/game-spin-input.dto.d.ts +0 -8
- package/dist/domain/types/game-spin-output.dto.d.ts +0 -119
- package/dist/domain/types/game-symbols.response.dto.d.ts +0 -10
- package/dist/domain/types/reel-strip-option.dto.d.ts +0 -4
- package/dist/domain/types/reel-strips-config.dto.d.ts +0 -5
- package/dist/domain/types/reel.dto.d.ts +0 -5
- package/dist/domain/types/start-bonus-round-command.d.ts +0 -8
- package/dist/domain/types/start-bonus-round-input.dto.d.ts +0 -10
- package/dist/game-engine.interface.d.ts +0 -41
- package/dist/helpers/generate-hash.d.ts +0 -1
- package/dist/helpers/number-helper.d.ts +0 -23
- package/dist/helpers/optional-boolean-mapper.d.ts +0 -1
- package/dist/helpers/uuid-helper.d.ts +0 -3
- package/dist/helpers/validation-helper.d.ts +0 -14
- package/dist/index.d.ts +0 -2
- package/dist/logger/logger.d.ts +0 -22
- package/dist/logic/bonnys-fortune.game-logic.d.ts +0 -32
- package/dist/logic/bonnys-fortune.spin-generator.d.ts +0 -19
- package/dist/logic/bonnys-fortune.types.d.ts +0 -170
- package/dist/logic/bonnys-fortune.win-calculator.d.ts +0 -10
- package/dist/logic/game-logic-config.interface.d.ts +0 -178
- package/dist/logic/handlers/base-game.handler.d.ts +0 -15
- package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +0 -13
- package/dist/logic/handlers/free-spins-bonus.handler.d.ts +0 -11
- package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +0 -11
- package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +0 -15
- package/dist/rng/DummyRngClient.d.ts +0 -18
- package/dist/rng/rng-client.factory.d.ts +0 -7
- package/dist/rng/rng-client.interface.d.ts +0 -16
- package/dist/rng/rng-service.d.ts +0 -26
- package/dist/validation/abstract-game-logic-config.validator.d.ts +0 -4
- package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +0 -129
- package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +0 -5
- package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +0 -2
- package/dist/validation/game-logic-config-validation.service.d.ts +0 -8
- package/dist/validation/reel-strips-config-validation.service.d.ts +0 -5
- package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +0 -80
- package/src/bonnys-fortune-v1.game-engine.ts +0 -285
- package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +0 -27
- package/src/config/game-logic-config/game-logic-config-loader.ts +0 -3
- package/src/config/game-logic-config/game-logic-config.ts +0 -380
- package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +0 -43
- package/src/config/reel-strips-config/reel-strip-option.dto.ts +0 -13
- package/src/config/reel-strips-config/reel-strips-config-loader.ts +0 -9
- package/src/config/reel-strips-config/reel-strips-config.dto.ts +0 -16
- package/src/config/reel-strips-config/reel.dto.ts +0 -16
- package/src/config/reel-strips-config/reels-BASE.csv +0 -52
- package/src/config/reel-strips-config/reels-BONUS.csv +0 -52
- package/src/domain/game-round.types.ts +0 -10
- package/src/domain/mappers/reel-strips-config.mapper.ts +0 -16
- package/src/domain/reel-strip-option.ts +0 -15
- package/src/domain/reel-strips-config.ts +0 -21
- package/src/domain/reel.ts +0 -17
- package/src/domain/types/cheat-trigger-bonus-command.ts +0 -5
- package/src/domain/types/cheat-trigger-bonus-request.dto.ts +0 -5
- package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +0 -6
- package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +0 -5
- package/src/domain/types/game-spin-command.ts +0 -8
- package/src/domain/types/game-spin-input.dto.ts +0 -8
- package/src/domain/types/game-spin-output.dto.ts +0 -142
- package/src/domain/types/game-symbols.response.dto.ts +0 -11
- package/src/domain/types/reel-strip-option.dto.ts +0 -13
- package/src/domain/types/reel-strips-config.dto.ts +0 -15
- package/src/domain/types/reel.dto.ts +0 -15
- package/src/domain/types/start-bonus-round-command.ts +0 -8
- package/src/domain/types/start-bonus-round-input.dto.ts +0 -10
- package/src/game-engine.interface.ts +0 -59
- package/src/helpers/generate-hash.ts +0 -5
- package/src/helpers/number-helper.ts +0 -41
- package/src/helpers/optional-boolean-mapper.ts +0 -5
- package/src/helpers/uuid-helper.ts +0 -7
- package/src/helpers/validation-helper.ts +0 -27
- package/src/index.ts +0 -3
- package/src/logger/logger.ts +0 -178
- package/src/logic/bonnys-fortune.game-logic.ts +0 -480
- package/src/logic/bonnys-fortune.spin-generator.ts +0 -277
- package/src/logic/bonnys-fortune.types.ts +0 -223
- package/src/logic/bonnys-fortune.win-calculator.ts +0 -210
- package/src/logic/game-logic-config.interface.ts +0 -174
- package/src/logic/handlers/base-game.handler.ts +0 -213
- package/src/logic/handlers/collect-feature-bonus.handler.ts +0 -301
- package/src/logic/handlers/free-spins-bonus.handler.ts +0 -119
- package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +0 -118
- package/src/logic/handlers/treasure-hunt-bonus.handler.ts +0 -232
- package/src/rng/DummyRngClient.ts +0 -108
- package/src/rng/rng-client.factory.ts +0 -27
- package/src/rng/rng-client.interface.ts +0 -38
- package/src/rng/rng-service.ts +0 -130
- package/src/validation/abstract-game-logic-config.validator.ts +0 -20
- package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +0 -371
- package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +0 -8
- package/src/validation/custom-decorators/IsNestedIntArray.ts +0 -29
- package/src/validation/game-logic-config-validation.service.ts +0 -28
- package/src/validation/reel-strips-config-validation.service.ts +0 -29
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { BonnysFortunePrivateState, BonnysFortunePublicState } from './bonnys-fortune.types';
|
|
2
|
-
export interface BonnysFortuneGameLogicConfigInterface {
|
|
3
|
-
baseGame: BonnysFortuneGameLogicConfigBaseGame;
|
|
4
|
-
bonusGames: BonusGamesConfig;
|
|
5
|
-
scatterGame: ScatterGameWrapper;
|
|
6
|
-
}
|
|
7
|
-
export interface BonnysFortuneSessionStateInterface {
|
|
8
|
-
publicState: BonnysFortunePublicState;
|
|
9
|
-
privateState: BonnysFortunePrivateState;
|
|
10
|
-
}
|
|
11
|
-
export interface BonnysFortuneGameLogicConfigBaseGame {
|
|
12
|
-
symbolMultipliers: SymbolMultiplier[];
|
|
13
|
-
symbolDefinitions: SymbolDefinitions;
|
|
14
|
-
baseGameConfig: BaseGameConfig;
|
|
15
|
-
paidHSymbolWeights: Record<string, number>;
|
|
16
|
-
paidHSymbolReelWeights: Record<string, [number, number]>;
|
|
17
|
-
paidScatterReelWeights: Record<string, [number, number]>;
|
|
18
|
-
bonusGameMeters: Record<BonusGameId, BonusGameMeter>;
|
|
19
|
-
}
|
|
20
|
-
export type BonusGameId = 'bonusGame1' | 'bonusGame2' | 'bonusGame3';
|
|
21
|
-
export interface SymbolMultiplier {
|
|
22
|
-
symbolId: number;
|
|
23
|
-
name: string;
|
|
24
|
-
multipliers: Record<'x3' | 'x4' | 'x5', number>;
|
|
25
|
-
isWild: boolean;
|
|
26
|
-
isScatter: boolean;
|
|
27
|
-
}
|
|
28
|
-
export interface SymbolDefinitions {
|
|
29
|
-
baseSymbols: {
|
|
30
|
-
minIndex: number;
|
|
31
|
-
maxIndex: number;
|
|
32
|
-
};
|
|
33
|
-
specialSymbols: Record<string, number>;
|
|
34
|
-
collectFeatureSymbols: {
|
|
35
|
-
multipliers: Record<string, number>;
|
|
36
|
-
values: Record<string, number>;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export interface BaseGameConfig {
|
|
40
|
-
layout: {
|
|
41
|
-
rows: number;
|
|
42
|
-
reels: number;
|
|
43
|
-
};
|
|
44
|
-
winConfig: {
|
|
45
|
-
minLength: number;
|
|
46
|
-
maxLength: number;
|
|
47
|
-
};
|
|
48
|
-
baseBet: number;
|
|
49
|
-
reelsOptions: {
|
|
50
|
-
numberOfOptions: number;
|
|
51
|
-
optionWeights: number[];
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
export interface BonusGameMeter {
|
|
55
|
-
symbol: string;
|
|
56
|
-
min: number;
|
|
57
|
-
max: number;
|
|
58
|
-
percentageLevels: {
|
|
59
|
-
level1: {
|
|
60
|
-
min: number;
|
|
61
|
-
max: number;
|
|
62
|
-
value: number;
|
|
63
|
-
};
|
|
64
|
-
level2: {
|
|
65
|
-
min: number;
|
|
66
|
-
max: number;
|
|
67
|
-
value: number;
|
|
68
|
-
};
|
|
69
|
-
level3: {
|
|
70
|
-
min: number;
|
|
71
|
-
max: number;
|
|
72
|
-
value: number;
|
|
73
|
-
};
|
|
74
|
-
level4: {
|
|
75
|
-
min: number;
|
|
76
|
-
max: number;
|
|
77
|
-
value: number;
|
|
78
|
-
};
|
|
79
|
-
level5: {
|
|
80
|
-
min: number;
|
|
81
|
-
max: number;
|
|
82
|
-
value: number;
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
export interface BonusGamesConfig {
|
|
87
|
-
bonusGame1: TreasureHuntBonusGameConfig;
|
|
88
|
-
bonusGame2: FreeSpinBonusGameConfig;
|
|
89
|
-
bonusGame3: SteeringToTheFortuneBonusGameConfig;
|
|
90
|
-
}
|
|
91
|
-
export interface TreasureHuntBonusGameConfig {
|
|
92
|
-
type: 'treasure_hunt';
|
|
93
|
-
potMeter: BonusGameId;
|
|
94
|
-
config: TreasureHuntBonusConfig;
|
|
95
|
-
}
|
|
96
|
-
export interface TreasureHuntBonusConfig {
|
|
97
|
-
symbolsCount: number;
|
|
98
|
-
stepsCount: number;
|
|
99
|
-
jackpotMultipliers: {
|
|
100
|
-
mini: number;
|
|
101
|
-
minor: number;
|
|
102
|
-
major: number;
|
|
103
|
-
grand: number;
|
|
104
|
-
};
|
|
105
|
-
jackpotStartCounts: {
|
|
106
|
-
mini: number;
|
|
107
|
-
minor: number;
|
|
108
|
-
major: number;
|
|
109
|
-
grand: number;
|
|
110
|
-
};
|
|
111
|
-
jackpotScreenCounts: {
|
|
112
|
-
mini: number;
|
|
113
|
-
minor: number;
|
|
114
|
-
major: number;
|
|
115
|
-
grand: number;
|
|
116
|
-
};
|
|
117
|
-
winningWeights: {
|
|
118
|
-
none: number;
|
|
119
|
-
mini: number;
|
|
120
|
-
minor: number;
|
|
121
|
-
major: number;
|
|
122
|
-
grand: number;
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
export interface FreeSpinBonusGameConfig {
|
|
126
|
-
type: 'free_spins';
|
|
127
|
-
potMeter: BonusGameId;
|
|
128
|
-
config: {
|
|
129
|
-
spinTypes: SpinTypeConfig[];
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
export interface SpinTypeConfig {
|
|
133
|
-
layout: {
|
|
134
|
-
rows: number;
|
|
135
|
-
reels: number;
|
|
136
|
-
};
|
|
137
|
-
spins: number;
|
|
138
|
-
multiplier: number;
|
|
139
|
-
weight: number;
|
|
140
|
-
reelsOptionsWeights: number[];
|
|
141
|
-
}
|
|
142
|
-
export interface SteeringToTheFortuneBonusGameConfig {
|
|
143
|
-
type: 'steering_to_the_fortune';
|
|
144
|
-
potMeter: BonusGameId;
|
|
145
|
-
config: SteeringToTheFortuneConfig;
|
|
146
|
-
}
|
|
147
|
-
export interface SteeringToTheFortuneConfig {
|
|
148
|
-
wheelResults: {
|
|
149
|
-
type: 'MULTIPLIER' | 'BONUS';
|
|
150
|
-
value?: number;
|
|
151
|
-
bonusType?: BonusGameId | 'collectFeature';
|
|
152
|
-
weight: number;
|
|
153
|
-
}[];
|
|
154
|
-
}
|
|
155
|
-
export interface ScatterGameWrapper {
|
|
156
|
-
config: ScatterGameConfig;
|
|
157
|
-
}
|
|
158
|
-
export interface ScatterGameConfig {
|
|
159
|
-
scatterMinNumber: number;
|
|
160
|
-
scatterSpins: number;
|
|
161
|
-
scatterCheckpoints: ScatterCheckpoint[];
|
|
162
|
-
scatterSymbols: ScatterSymbol[];
|
|
163
|
-
scatterSymbolSpins: WeightOnly[];
|
|
164
|
-
scatterSymbolSlash: WeightOnly[];
|
|
165
|
-
}
|
|
166
|
-
export interface ScatterCheckpoint {
|
|
167
|
-
spin: number;
|
|
168
|
-
multiMinValue: number;
|
|
169
|
-
valueMinValue: number;
|
|
170
|
-
}
|
|
171
|
-
export interface ScatterSymbol {
|
|
172
|
-
symbolId: string;
|
|
173
|
-
value: number;
|
|
174
|
-
weight: number;
|
|
175
|
-
}
|
|
176
|
-
export interface WeightOnly {
|
|
177
|
-
weight: number;
|
|
178
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { BonnysFortuneBaseGameSpinResult, BonnysFortunePrivateState, BonnysFortunePublicState, SpinResultResponse, SpinType } from '../bonnys-fortune.types';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
|
|
3
|
-
import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
|
|
4
|
-
import { ReelStripsConfig } from '../../domain/reel-strips-config';
|
|
5
|
-
import { RngService } from '../../rng/rng-service';
|
|
6
|
-
export declare class BaseGameHandler {
|
|
7
|
-
private readonly rngService;
|
|
8
|
-
constructor(rngService: RngService);
|
|
9
|
-
handleSpin(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<SpinResultResponse<BonnysFortuneBaseGameSpinResult>>;
|
|
10
|
-
private updateBonusMeters;
|
|
11
|
-
private findTriggeredBonus;
|
|
12
|
-
private getMeterLevel;
|
|
13
|
-
private getBetStake;
|
|
14
|
-
}
|
|
15
|
-
export declare function getSpinTypeForBonus(bonusType: string): SpinType;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, CollectFeatureSpinResult } from '../bonnys-fortune.types';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
|
|
3
|
-
import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
|
|
4
|
-
import { RngService } from '../../rng/rng-service';
|
|
5
|
-
export declare class CollectFeatureBonusHandler {
|
|
6
|
-
private rngService;
|
|
7
|
-
constructor(rngService: RngService);
|
|
8
|
-
generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<CollectFeatureSpinResult>>;
|
|
9
|
-
private executeSingleSpin;
|
|
10
|
-
private weightedPick;
|
|
11
|
-
private weightedPickSymbol;
|
|
12
|
-
private getBetStake;
|
|
13
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, FreeSpinResult } from '../bonnys-fortune.types';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
|
|
3
|
-
import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
|
|
4
|
-
import { ReelStripsConfig } from '../../domain/reel-strips-config';
|
|
5
|
-
import { RngService } from '../../rng/rng-service';
|
|
6
|
-
export declare class FreeSpinsBonusHandler {
|
|
7
|
-
private rngService;
|
|
8
|
-
constructor(rngService: RngService);
|
|
9
|
-
generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<BonusRoundResult<FreeSpinResult>>;
|
|
10
|
-
private getBetStake;
|
|
11
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, SteeringToTheFortuneResult } from '../bonnys-fortune.types';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
|
|
3
|
-
import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
|
|
4
|
-
import { RngService } from '../../rng/rng-service';
|
|
5
|
-
export declare class SteeringToTheFortuneBonusHandler {
|
|
6
|
-
private rngService;
|
|
7
|
-
constructor(rngService: RngService);
|
|
8
|
-
generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<SteeringToTheFortuneResult>>;
|
|
9
|
-
private weightedDraw;
|
|
10
|
-
private getBetStake;
|
|
11
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, TreasureHuntSpinResult } from '../bonnys-fortune.types';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
|
|
3
|
-
import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
|
|
4
|
-
import { RngService } from '../../rng/rng-service';
|
|
5
|
-
export declare class TreasureHuntBonusHandler {
|
|
6
|
-
private rngService;
|
|
7
|
-
constructor(rngService: RngService);
|
|
8
|
-
generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<TreasureHuntSpinResult>>;
|
|
9
|
-
private getBetStake;
|
|
10
|
-
private drawWinningSymbol;
|
|
11
|
-
private fillRemainingSteps;
|
|
12
|
-
private weightedDraw;
|
|
13
|
-
private randomPositions;
|
|
14
|
-
private extractBonusConfig;
|
|
15
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { RngBatchResponse, RngSingleResponse } from '@omnitronix/rng-client-core/dist/http/http-client.types';
|
|
2
|
-
import { IRngClient } from './rng-client.interface';
|
|
3
|
-
export declare class DummyRngClient implements IRngClient {
|
|
4
|
-
constructor();
|
|
5
|
-
getSingleNumber(min: number, max: number, _seed?: number): Promise<{
|
|
6
|
-
value: number;
|
|
7
|
-
seed: number;
|
|
8
|
-
}>;
|
|
9
|
-
getBatchNumbers(min: number, max: number, count: number, _seed?: number): Promise<number[]>;
|
|
10
|
-
getBatchNumbersWithSeeds(min: number, max: number, count: number, _seed?: number): Promise<{
|
|
11
|
-
value: number;
|
|
12
|
-
seed: number;
|
|
13
|
-
}[]>;
|
|
14
|
-
getSingleFloat(_seed?: number): Promise<RngSingleResponse>;
|
|
15
|
-
getBatchFloats(count: number, _seed?: number): Promise<RngBatchResponse>;
|
|
16
|
-
getRandomNumber(min: number, max: number, _seed?: number): Promise<RngSingleResponse>;
|
|
17
|
-
getRandomFloat(_seed?: number): Promise<RngSingleResponse>;
|
|
18
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { RngBatchResponse, RngSingleResponse } from '@omnitronix/rng-client-core/dist/http/http-client.types';
|
|
2
|
-
export interface IRngClient {
|
|
3
|
-
getSingleNumber(min: number, max: number, seed?: number): Promise<{
|
|
4
|
-
value: number;
|
|
5
|
-
seed: number;
|
|
6
|
-
}>;
|
|
7
|
-
getBatchNumbers(min: number, max: number, count: number, seed?: number): Promise<number[]>;
|
|
8
|
-
getBatchNumbersWithSeeds(min: number, max: number, count: number, seed?: number): Promise<{
|
|
9
|
-
value: number;
|
|
10
|
-
seed: number;
|
|
11
|
-
}[]>;
|
|
12
|
-
getSingleFloat(seed?: number): Promise<RngSingleResponse>;
|
|
13
|
-
getBatchFloats(count: number, seed?: number): Promise<RngBatchResponse>;
|
|
14
|
-
getRandomNumber(min: number, max: number, seed?: number): Promise<RngSingleResponse>;
|
|
15
|
-
getRandomFloat(seed?: number): Promise<RngSingleResponse>;
|
|
16
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { RngOutcome } from '../game-engine.interface';
|
|
2
|
-
import { IRngClient } from './rng-client.interface';
|
|
3
|
-
export declare class RngService {
|
|
4
|
-
private readonly rngClient;
|
|
5
|
-
private rngOutcomes;
|
|
6
|
-
constructor(rngClient: IRngClient);
|
|
7
|
-
registerCommand(commandId: string): void;
|
|
8
|
-
getSingleNumber(min: number, max: number, commandId: string, actionId: string): Promise<{
|
|
9
|
-
value: number;
|
|
10
|
-
seed: number;
|
|
11
|
-
}>;
|
|
12
|
-
getBatchNumbers(min: number, max: number, count: number, commandId: string, actionId: string): Promise<{
|
|
13
|
-
value: number;
|
|
14
|
-
seed: number;
|
|
15
|
-
}[]>;
|
|
16
|
-
private getSeedForCommand;
|
|
17
|
-
private storeSeedForCommand;
|
|
18
|
-
getRngOutcomeForCommand(commandId: string): RngOutcome;
|
|
19
|
-
getAllRngOutcome(): {
|
|
20
|
-
[commandId: string]: RngOutcome;
|
|
21
|
-
};
|
|
22
|
-
removeCommand(commandId: string): void;
|
|
23
|
-
clearAllRngOutcome(): void;
|
|
24
|
-
hasCommandRngOutcome(commandId: string): boolean;
|
|
25
|
-
getRngOutcomeCountForCommand(commandId: string): number;
|
|
26
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
export declare class SymbolMultipliersDto {
|
|
2
|
-
symbolId: number;
|
|
3
|
-
name: string;
|
|
4
|
-
multipliers: Record<'x3' | 'x4' | 'x5', number>;
|
|
5
|
-
isWild: boolean;
|
|
6
|
-
isScatter: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare class CollectFeatureSymbolsDto {
|
|
9
|
-
multipliers: Record<string, number>;
|
|
10
|
-
values: Record<string, number>;
|
|
11
|
-
}
|
|
12
|
-
export declare class SymbolRangeDto {
|
|
13
|
-
minIndex: number;
|
|
14
|
-
maxIndex: number;
|
|
15
|
-
}
|
|
16
|
-
export declare class SymbolDefinitionsDto {
|
|
17
|
-
baseSymbols: SymbolRangeDto;
|
|
18
|
-
specialSymbols: Record<string, number>;
|
|
19
|
-
collectFeatureSymbols: CollectFeatureSymbolsDto;
|
|
20
|
-
}
|
|
21
|
-
export declare class LayoutDto {
|
|
22
|
-
rows: number;
|
|
23
|
-
reels: number;
|
|
24
|
-
}
|
|
25
|
-
export declare class WinConfigDto {
|
|
26
|
-
minLength: number;
|
|
27
|
-
maxLength: number;
|
|
28
|
-
}
|
|
29
|
-
export declare class ReelsOptionsDto {
|
|
30
|
-
numberOfOptions: number;
|
|
31
|
-
optionWeights: number[];
|
|
32
|
-
}
|
|
33
|
-
export declare class BaseGameConfigDto {
|
|
34
|
-
layout: LayoutDto;
|
|
35
|
-
winConfig: WinConfigDto;
|
|
36
|
-
baseBet: number;
|
|
37
|
-
reelsOptions: ReelsOptionsDto;
|
|
38
|
-
}
|
|
39
|
-
export declare class BonusGameMeterDto {
|
|
40
|
-
symbol: string;
|
|
41
|
-
min: number;
|
|
42
|
-
max: number;
|
|
43
|
-
}
|
|
44
|
-
export declare class BaseGameDto {
|
|
45
|
-
symbolMultipliers: SymbolMultipliersDto[];
|
|
46
|
-
symbolDefinitions: SymbolDefinitionsDto;
|
|
47
|
-
baseGameConfig: BaseGameConfigDto;
|
|
48
|
-
paidHSymbolWeights: Record<string, number>;
|
|
49
|
-
paidHSymbolReelWeights: Record<string, [number, number]>;
|
|
50
|
-
paidScatterReelWeights: Record<string, [number, number]>;
|
|
51
|
-
bonusGameMeters: Record<string, BonusGameMeterDto>;
|
|
52
|
-
}
|
|
53
|
-
export declare class TreasureHuntBonusConfigDto {
|
|
54
|
-
symbolsCount: number;
|
|
55
|
-
stepsCount: number;
|
|
56
|
-
jackpotMultipliers: Record<'mini' | 'minor' | 'major' | 'grand', number>;
|
|
57
|
-
jackpotStartCounts: Record<'mini' | 'minor' | 'major' | 'grand', number>;
|
|
58
|
-
jackpotScreenCounts: Record<'mini' | 'minor' | 'major' | 'grand', number>;
|
|
59
|
-
winningWeights: Record<'none' | 'mini' | 'minor' | 'major' | 'grand', number>;
|
|
60
|
-
}
|
|
61
|
-
export declare class BonusGameEvaluationConfigDto {
|
|
62
|
-
defaultConfig: string;
|
|
63
|
-
alternativeConfigs?: string[];
|
|
64
|
-
selectionWeights?: Record<string, number>;
|
|
65
|
-
}
|
|
66
|
-
export declare class BaseBonusGameDto {
|
|
67
|
-
type: string;
|
|
68
|
-
potMeter: string;
|
|
69
|
-
evaluationConfig: BonusGameEvaluationConfigDto;
|
|
70
|
-
}
|
|
71
|
-
export declare class TreasureHuntBonusGameDto extends BaseBonusGameDto {
|
|
72
|
-
config: TreasureHuntBonusConfigDto;
|
|
73
|
-
}
|
|
74
|
-
export declare class FreeSpinTypeDto {
|
|
75
|
-
layout: LayoutDto;
|
|
76
|
-
spins: number;
|
|
77
|
-
multiplier: number;
|
|
78
|
-
weight: number;
|
|
79
|
-
reelsOptionsWeights: number[];
|
|
80
|
-
}
|
|
81
|
-
export declare class FreeSpinBonusConfigDto {
|
|
82
|
-
spinTypes: FreeSpinTypeDto[];
|
|
83
|
-
}
|
|
84
|
-
export declare class FreeSpinBonusGameDto extends BaseBonusGameDto {
|
|
85
|
-
config: FreeSpinBonusConfigDto;
|
|
86
|
-
}
|
|
87
|
-
export declare class SteeringToTheFortuneWheelResultDto {
|
|
88
|
-
type: 'MULTIPLIER' | 'BONUS';
|
|
89
|
-
value?: number;
|
|
90
|
-
bonusType?: string;
|
|
91
|
-
weight: number;
|
|
92
|
-
}
|
|
93
|
-
export declare class SteeringToTheFortuneBonusConfigDto {
|
|
94
|
-
wheelResults: SteeringToTheFortuneWheelResultDto[];
|
|
95
|
-
}
|
|
96
|
-
export declare class SteeringToTheFortuneBonusGameDto extends BaseBonusGameDto {
|
|
97
|
-
config: SteeringToTheFortuneBonusConfigDto;
|
|
98
|
-
}
|
|
99
|
-
export declare class BonusGamesDto {
|
|
100
|
-
bonusGame1?: TreasureHuntBonusGameDto;
|
|
101
|
-
bonusGame2?: FreeSpinBonusGameDto;
|
|
102
|
-
bonusGame3?: SteeringToTheFortuneBonusGameDto;
|
|
103
|
-
}
|
|
104
|
-
export declare class ScatterSymbolDto {
|
|
105
|
-
symbolId: string;
|
|
106
|
-
value: number;
|
|
107
|
-
weight: number;
|
|
108
|
-
}
|
|
109
|
-
export declare class ScatterCheckpointDto {
|
|
110
|
-
spin: number;
|
|
111
|
-
multiMinValue: number;
|
|
112
|
-
valueMinValue: number;
|
|
113
|
-
}
|
|
114
|
-
export declare class ScatterGameConfigDto {
|
|
115
|
-
scatterMinNumber: number;
|
|
116
|
-
scatterSpins: number;
|
|
117
|
-
scatterCheckpoints: ScatterCheckpointDto[];
|
|
118
|
-
scatterSymbols: ScatterSymbolDto[];
|
|
119
|
-
scatterSymbolSpins: Record<string, number>[];
|
|
120
|
-
scatterSymbolSlash: Record<string, number>[];
|
|
121
|
-
}
|
|
122
|
-
export declare class ScatterGameConfigWrapperDto {
|
|
123
|
-
config: ScatterGameConfigDto;
|
|
124
|
-
}
|
|
125
|
-
export declare class BonnysFortuneGameLogicConfigDto {
|
|
126
|
-
baseGame: BaseGameDto;
|
|
127
|
-
bonusGames: BonusGamesDto;
|
|
128
|
-
scatterGame: ScatterGameConfigWrapperDto;
|
|
129
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { AbstractGameLogicConfigValidator } from '../abstract-game-logic-config.validator';
|
|
2
|
-
import { BonnysFortuneGameLogicConfigDto } from './bonnys-fortune-config.dto';
|
|
3
|
-
export declare class BonnysFortuneGameLogicConfigValidator extends AbstractGameLogicConfigValidator<BonnysFortuneGameLogicConfigDto> {
|
|
4
|
-
protected getDtoClass(): new () => BonnysFortuneGameLogicConfigDto;
|
|
5
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface GameLogicConfigValidatorInterface<T = any> {
|
|
2
|
-
validate(config: unknown): Promise<T>;
|
|
3
|
-
}
|
|
4
|
-
export declare class GameLogicConfigValidationService {
|
|
5
|
-
private validators;
|
|
6
|
-
register<T>(gameId: string, validator: GameLogicConfigValidatorInterface<T>): void;
|
|
7
|
-
validate<T extends object>(gameId: string, config: unknown): Promise<T>;
|
|
8
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { BonnysFortuneV1GameEngine } from '../bonnys-fortune-v1.game-engine';
|
|
2
|
-
import { GameSpinCommand } from '../domain/types/game-spin-command';
|
|
3
|
-
import { SpinType } from '../domain/types/game-spin-output.dto';
|
|
4
|
-
|
|
5
|
-
describe('BonnysFortuneV1GameEngine', () => {
|
|
6
|
-
let gameEngine: BonnysFortuneV1GameEngine;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
gameEngine = new BonnysFortuneV1GameEngine();
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('should initialize the game engine and return info', async () => {
|
|
13
|
-
const info = gameEngine.getGameEngineInfo();
|
|
14
|
-
expect(info.gameCode).toBe('bonnys-fortune');
|
|
15
|
-
expect(info.version).toBe('1.0.0');
|
|
16
|
-
expect(info.rtp).toBe(96);
|
|
17
|
-
expect(info.gameType).toBe('slot');
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('should process a spin command successfully', async () => {
|
|
21
|
-
const initialPublicState = {
|
|
22
|
-
currentBetAmount: 1,
|
|
23
|
-
bonusMeters: {},
|
|
24
|
-
};
|
|
25
|
-
const initialPrivateState = {
|
|
26
|
-
nextSpinType: SpinType.BASE_GAME_SPIN,
|
|
27
|
-
pendingBonuses: [],
|
|
28
|
-
bonusMetersByAmount: {
|
|
29
|
-
1: {
|
|
30
|
-
bonusGame1: {
|
|
31
|
-
symbolName: 'H1',
|
|
32
|
-
symbolId: 0,
|
|
33
|
-
threshold: 25,
|
|
34
|
-
progress: 0,
|
|
35
|
-
level: 1,
|
|
36
|
-
},
|
|
37
|
-
bonusGame2: {
|
|
38
|
-
symbolName: 'H2',
|
|
39
|
-
symbolId: 1,
|
|
40
|
-
threshold: 25,
|
|
41
|
-
progress: 0,
|
|
42
|
-
level: 1,
|
|
43
|
-
},
|
|
44
|
-
bonusGame3: {
|
|
45
|
-
symbolName: 'H3',
|
|
46
|
-
symbolId: 2,
|
|
47
|
-
threshold: 25,
|
|
48
|
-
progress: 0,
|
|
49
|
-
level: 1,
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const spinCommand = {
|
|
56
|
-
id: 'test-command-123',
|
|
57
|
-
type: 'SPIN',
|
|
58
|
-
payload: {
|
|
59
|
-
sessionId: 'test-session-123',
|
|
60
|
-
betAmount: 1,
|
|
61
|
-
gameCode: 'bonnys-fortune',
|
|
62
|
-
gameVersion: '1.0.0',
|
|
63
|
-
lines: 10,
|
|
64
|
-
creditsPerLine: 1,
|
|
65
|
-
} as GameSpinCommand,
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const result = await gameEngine.processCommand(
|
|
69
|
-
initialPublicState,
|
|
70
|
-
initialPrivateState,
|
|
71
|
-
spinCommand,
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
expect(result).toBeDefined();
|
|
75
|
-
expect(result.success).toBe(true);
|
|
76
|
-
expect(result.outcome).toBeDefined();
|
|
77
|
-
expect(result.publicState).toBeDefined();
|
|
78
|
-
expect(result.privateState).toBeDefined();
|
|
79
|
-
});
|
|
80
|
-
});
|