@omnitronix/bonnys-fortune-game-engine 1.1.0 → 1.2.0
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__/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 +2 -2
- 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/cheat-trigger-bonus-request.dto.d.ts +5 -0
- package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +5 -0
- package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +5 -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/logger/logger.d.ts +22 -0
- package/dist/logic/bonnys-fortune.game-logic.d.ts +32 -0
- 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/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 -11
- 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 +2 -1
- 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 +480 -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 +213 -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
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
export interface WinLine {
|
|
2
|
+
symbol: number;
|
|
3
|
+
consecutiveReels: number;
|
|
4
|
+
ways: number;
|
|
5
|
+
multiplier: number;
|
|
6
|
+
win: number;
|
|
7
|
+
positions: [number, number][];
|
|
8
|
+
}
|
|
9
|
+
export interface MeterState {
|
|
10
|
+
symbolName: string;
|
|
11
|
+
symbolId: number;
|
|
12
|
+
threshold: number;
|
|
13
|
+
progress: number;
|
|
14
|
+
level: number;
|
|
15
|
+
}
|
|
16
|
+
export type MetersState = Record<string, MeterState>;
|
|
17
|
+
export interface BonnysFortunePublicState {
|
|
18
|
+
currentBetAmount: number;
|
|
19
|
+
bonusMeters: MetersState;
|
|
20
|
+
}
|
|
21
|
+
export interface BonnysFortunePrivateState {
|
|
22
|
+
screen?: number[][];
|
|
23
|
+
nextSpinType: SpinType;
|
|
24
|
+
pendingBonuses: BonusTrigger[];
|
|
25
|
+
activeBonus?: BonusTrigger;
|
|
26
|
+
bonusMetersByAmount: Record<number, MetersState>;
|
|
27
|
+
}
|
|
28
|
+
export interface BonusTrigger {
|
|
29
|
+
bonusId: string;
|
|
30
|
+
bonusType: string;
|
|
31
|
+
betAmount: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SpinResult {
|
|
34
|
+
spinType: string;
|
|
35
|
+
playerWinning: number;
|
|
36
|
+
nextSpinType: SpinType | string;
|
|
37
|
+
}
|
|
38
|
+
export interface SpinResultResponse<T extends SpinResult> {
|
|
39
|
+
result: T;
|
|
40
|
+
publicState: BonnysFortunePublicState;
|
|
41
|
+
privateState: BonnysFortunePrivateState;
|
|
42
|
+
}
|
|
43
|
+
export interface BonnysFortuneBaseGameSpinResult extends SpinResult {
|
|
44
|
+
spinType: SpinType.BASE_GAME_SPIN;
|
|
45
|
+
screen: number[][];
|
|
46
|
+
winResult: {
|
|
47
|
+
totalWin: number;
|
|
48
|
+
winningLines: WinLine[];
|
|
49
|
+
};
|
|
50
|
+
triggeredBonus?: BonusTrigger;
|
|
51
|
+
}
|
|
52
|
+
export interface TreasureHuntSpinResult extends SpinResult {
|
|
53
|
+
spinType: SpinType;
|
|
54
|
+
selection: string;
|
|
55
|
+
multiplier: number;
|
|
56
|
+
multiplierCounts: Record<string, number>;
|
|
57
|
+
winningMultiplier: number | null;
|
|
58
|
+
winningCount: number;
|
|
59
|
+
totalMultiplier: number;
|
|
60
|
+
}
|
|
61
|
+
export interface FreeSpinResult {
|
|
62
|
+
spinType: SpinType.BONUS_GAME_2_SPIN;
|
|
63
|
+
screen: number[][];
|
|
64
|
+
winResult: {
|
|
65
|
+
totalWin: number;
|
|
66
|
+
winningLines: WinLine[];
|
|
67
|
+
};
|
|
68
|
+
playerWinning: number;
|
|
69
|
+
nextSpinType: SpinType;
|
|
70
|
+
multiplier: number;
|
|
71
|
+
}
|
|
72
|
+
export interface SteeringToTheFortuneResult {
|
|
73
|
+
spinType: SpinType;
|
|
74
|
+
playerWinning: number;
|
|
75
|
+
nextSpinType: SpinType;
|
|
76
|
+
prizeType: string;
|
|
77
|
+
prizeValue: number | string;
|
|
78
|
+
totalMultiplier: number;
|
|
79
|
+
triggeredBonus?: BonusTrigger;
|
|
80
|
+
}
|
|
81
|
+
export interface CollectFeatureSpinResult {
|
|
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 BonusRoundResult<TSpin extends SpinResult> {
|
|
96
|
+
results: SpinResultResponse<TSpin>[];
|
|
97
|
+
publicState: BonnysFortunePublicState;
|
|
98
|
+
privateState: BonnysFortunePrivateState;
|
|
99
|
+
}
|
|
100
|
+
export interface BonusRoundResultWithActiveBonus<TSpin extends SpinResult> extends BonusRoundResult<TSpin> {
|
|
101
|
+
activeBonus: BonusTrigger;
|
|
102
|
+
}
|
|
103
|
+
export type BonnysFortuneGameLogicSpinResult = SpinResultResponse<BonnysFortuneBaseGameSpinResult> | SpinResultResponse<FreeSpinResult> | SpinResultResponse<TreasureHuntSpinResult> | SpinResultResponse<SteeringToTheFortuneResult> | SpinResultResponse<CollectFeatureSpinResult>;
|
|
104
|
+
export type BonnysFortuneBonusGameLogicSpinResult = BonusRoundResult<FreeSpinResult> | BonusRoundResult<TreasureHuntSpinResult> | BonusRoundResult<SteeringToTheFortuneResult> | BonusRoundResult<CollectFeatureSpinResult>;
|
|
105
|
+
export type StartBonusRoundResult = BonusRoundResultWithActiveBonus<FreeSpinResult> | BonusRoundResultWithActiveBonus<TreasureHuntSpinResult> | BonusRoundResultWithActiveBonus<SteeringToTheFortuneResult> | BonusRoundResultWithActiveBonus<CollectFeatureSpinResult>;
|
|
106
|
+
export declare enum SpinType {
|
|
107
|
+
BASE_GAME_SPIN = "BASE_GAME_SPIN",
|
|
108
|
+
BONUS_GAME_1_SPIN = "BONUS_GAME_1_SPIN",
|
|
109
|
+
BONUS_GAME_2_SPIN = "BONUS_GAME_2_SPIN",
|
|
110
|
+
BONUS_GAME_3_SPIN = "BONUS_GAME_3_SPIN",
|
|
111
|
+
COLLECT_FEATURE_SPIN = "COLLECT_FEATURE_SPIN"
|
|
112
|
+
}
|
|
113
|
+
export declare enum PrizeType {
|
|
114
|
+
MULTIPLIER = "MULTIPLIER",
|
|
115
|
+
BONUS = "BONUS"
|
|
116
|
+
}
|
|
117
|
+
export interface ExtractedConfigData {
|
|
118
|
+
baseMin: number;
|
|
119
|
+
baseMax: number;
|
|
120
|
+
WILD: number;
|
|
121
|
+
reels: number;
|
|
122
|
+
rows: number;
|
|
123
|
+
minLength: number;
|
|
124
|
+
maxLength: number;
|
|
125
|
+
multipliers: Map<number, Record<string, number>>;
|
|
126
|
+
}
|
|
127
|
+
export type SymbolsCountMatrix = number[][];
|
|
128
|
+
export type SymbolPositionsMatrix = boolean[][][];
|
|
129
|
+
export interface SymbolAnalysisResult {
|
|
130
|
+
symbolsCount: SymbolsCountMatrix;
|
|
131
|
+
symbolPositions: SymbolPositionsMatrix;
|
|
132
|
+
}
|
|
133
|
+
export interface FindWinningLinesParams {
|
|
134
|
+
symbolsCount: SymbolsCountMatrix;
|
|
135
|
+
symbolPositions: SymbolPositionsMatrix;
|
|
136
|
+
configData: ExtractedConfigData;
|
|
137
|
+
betStake: number;
|
|
138
|
+
currentMultiplier: number;
|
|
139
|
+
}
|
|
140
|
+
export interface CalculateWinsResult {
|
|
141
|
+
totalWin: number;
|
|
142
|
+
winningLines: WinLine[];
|
|
143
|
+
}
|
|
144
|
+
export interface CheatTriggerBonusOutcome {
|
|
145
|
+
triggeredBonus: BonusTrigger;
|
|
146
|
+
}
|
|
147
|
+
export interface CheatUpdateBonusMeterProgressOutcome {
|
|
148
|
+
updatedMeter: MeterState;
|
|
149
|
+
}
|
|
150
|
+
export interface CheatTriggerBonusResult {
|
|
151
|
+
publicState: BonnysFortunePublicState;
|
|
152
|
+
privateState: BonnysFortunePrivateState;
|
|
153
|
+
outcome: CheatTriggerBonusOutcome;
|
|
154
|
+
}
|
|
155
|
+
export interface CheatUpdateBonusMeterProgressResult {
|
|
156
|
+
publicState: BonnysFortunePublicState;
|
|
157
|
+
privateState: BonnysFortunePrivateState;
|
|
158
|
+
outcome: CheatUpdateBonusMeterProgressOutcome;
|
|
159
|
+
}
|
|
160
|
+
export interface GetSymbolsOutcome {
|
|
161
|
+
symbolId: number;
|
|
162
|
+
name: string;
|
|
163
|
+
multipliers: Record<'x3' | 'x4' | 'x5', number>;
|
|
164
|
+
isWild: boolean | undefined;
|
|
165
|
+
isScatter: boolean | undefined;
|
|
166
|
+
}
|
|
167
|
+
export interface GetSymbolsResult {
|
|
168
|
+
symbols: GetSymbolsOutcome[];
|
|
169
|
+
}
|
|
170
|
+
export type BonnysFortuneOutcome = BonnysFortuneGameLogicSpinResult | BonnysFortuneBonusGameLogicSpinResult | SymbolsCountMatrix | CheatTriggerBonusOutcome | CheatUpdateBonusMeterProgressOutcome | GetSymbolsOutcome | null;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CalculateWinsResult, SpinType } from './bonnys-fortune.types';
|
|
2
|
+
import { BonnysFortuneGameLogicConfigInterface } from './game-logic-config.interface';
|
|
3
|
+
export declare class BonnysFortuneWinCalculator {
|
|
4
|
+
static calculateWins(screen: number[][], config: BonnysFortuneGameLogicConfigInterface, betStake: number, currentMultiplier: number, spinType: SpinType, spinTypeIndex?: number): CalculateWinsResult;
|
|
5
|
+
private static isEligibleSpin;
|
|
6
|
+
private static buildConfigData;
|
|
7
|
+
private static analyzeScreenSymbols;
|
|
8
|
+
private static markWildPositions;
|
|
9
|
+
private static findWinningLines;
|
|
10
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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;
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
}
|
|
@@ -3,16 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DummyRngClient = void 0;
|
|
4
4
|
class DummyRngClient {
|
|
5
5
|
constructor() { }
|
|
6
|
-
|
|
7
|
-
getSingleNumber(min, max, seed) {
|
|
6
|
+
getSingleNumber(min, max, _seed) {
|
|
8
7
|
const randomValue = Math.random();
|
|
9
8
|
const result = Math.floor(randomValue * (max - min + 1)) + min;
|
|
10
9
|
return Promise.resolve({ value: result, seed: 0 });
|
|
11
10
|
}
|
|
12
|
-
getRingBuffersStats() {
|
|
13
|
-
return Promise.resolve(undefined);
|
|
14
|
-
}
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
16
11
|
getBatchNumbers(min, max, count, _seed) {
|
|
17
12
|
const results = [];
|
|
18
13
|
for (let i = 0; i < count; i++) {
|
|
@@ -22,7 +17,6 @@ class DummyRngClient {
|
|
|
22
17
|
}
|
|
23
18
|
return Promise.resolve(results);
|
|
24
19
|
}
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
26
20
|
getBatchNumbersWithSeeds(min, max, count, _seed) {
|
|
27
21
|
const results = [];
|
|
28
22
|
for (let i = 0; i < count; i++) {
|
|
@@ -32,7 +26,6 @@ class DummyRngClient {
|
|
|
32
26
|
}
|
|
33
27
|
return Promise.resolve(results.map((result) => ({ value: result, seed: 0 })));
|
|
34
28
|
}
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
36
29
|
getSingleFloat(_seed) {
|
|
37
30
|
const result = Math.random();
|
|
38
31
|
return Promise.resolve({
|
|
@@ -44,7 +37,6 @@ class DummyRngClient {
|
|
|
44
37
|
createdAt: new Date().toISOString(),
|
|
45
38
|
});
|
|
46
39
|
}
|
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
48
40
|
getBatchFloats(count, _seed) {
|
|
49
41
|
const result = [];
|
|
50
42
|
for (let i = 0; i < count; i++) {
|
|
@@ -59,7 +51,6 @@ class DummyRngClient {
|
|
|
59
51
|
createdAt: new Date().toISOString(),
|
|
60
52
|
});
|
|
61
53
|
}
|
|
62
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
63
54
|
getRandomNumber(min, max, _seed) {
|
|
64
55
|
const randomValue = Math.random();
|
|
65
56
|
const result = Math.floor(randomValue * (max - min + 1)) + min;
|
|
@@ -72,7 +63,6 @@ class DummyRngClient {
|
|
|
72
63
|
createdAt: new Date().toISOString(),
|
|
73
64
|
});
|
|
74
65
|
}
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
76
66
|
getRandomFloat(_seed) {
|
|
77
67
|
const result = Math.random();
|
|
78
68
|
return Promise.resolve({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DummyRngClient.js","sourceRoot":"","sources":["../../src/rng/DummyRngClient.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"DummyRngClient.js","sourceRoot":"","sources":["../../src/rng/DummyRngClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ exports.RngClientFactory = void 0;
|
|
|
4
4
|
const rng_client_core_1 = require("@omnitronix/rng-client-core");
|
|
5
5
|
const DummyRngClient_1 = require("./DummyRngClient");
|
|
6
6
|
class RngClientFactory {
|
|
7
|
-
static create() {
|
|
7
|
+
static create(config = {}) {
|
|
8
8
|
const mode = process.env.RNG_CLIENT_MODE || 'external';
|
|
9
9
|
console.log('RNG_CLIENT_MODE', mode);
|
|
10
10
|
if (mode === 'local') {
|
|
@@ -15,6 +15,7 @@ class RngClientFactory {
|
|
|
15
15
|
grpcUrl: process.env.RNG_CLIENT_GRPC_URL,
|
|
16
16
|
clientMethod: process.env.RNG_CLIENT_METHOD,
|
|
17
17
|
poolingSize: parseInt(process.env.RNG_CLIENT_POOL_SIZE || '2000'),
|
|
18
|
+
metrics: config.metrics,
|
|
18
19
|
};
|
|
19
20
|
return new rng_client_core_1.RngClient(rngClientConfig);
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client.factory.js","sourceRoot":"","sources":["../../src/rng/rng-client.factory.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"rng-client.factory.js","sourceRoot":"","sources":["../../src/rng/rng-client.factory.ts"],"names":[],"mappings":";;;AAAA,iEAAyE;AAEzE,qDAAkD;AAGlD,MAAa,gBAAgB;IAC3B,MAAM,CAAC,MAAM,CACX,SAAmD,EAAE;QAErD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAErC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,IAAI,+BAAc,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,eAAe,GAAoB;YACvC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACrC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;YACxC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAoC;YAC9D,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC;YACjE,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;QAEF,OAAO,IAAI,2BAAS,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;CACF;AArBD,4CAqBC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
}
|