@rpgjs/server 5.0.0-alpha.4 → 5.0.0-alpha.41

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.
Files changed (101) hide show
  1. package/dist/Gui/DialogGui.d.ts +5 -0
  2. package/dist/Gui/GameoverGui.d.ts +23 -0
  3. package/dist/Gui/Gui.d.ts +6 -0
  4. package/dist/Gui/MenuGui.d.ts +22 -3
  5. package/dist/Gui/NotificationGui.d.ts +1 -2
  6. package/dist/Gui/SaveLoadGui.d.ts +13 -0
  7. package/dist/Gui/ShopGui.d.ts +28 -3
  8. package/dist/Gui/TitleGui.d.ts +23 -0
  9. package/dist/Gui/index.d.ts +10 -1
  10. package/dist/Player/BattleManager.d.ts +34 -12
  11. package/dist/Player/ClassManager.d.ts +46 -13
  12. package/dist/Player/ComponentManager.d.ts +123 -0
  13. package/dist/Player/Components.d.ts +345 -0
  14. package/dist/Player/EffectManager.d.ts +86 -0
  15. package/dist/Player/ElementManager.d.ts +104 -0
  16. package/dist/Player/GoldManager.d.ts +22 -0
  17. package/dist/Player/GuiManager.d.ts +259 -0
  18. package/dist/Player/ItemFixture.d.ts +6 -0
  19. package/dist/Player/ItemManager.d.ts +450 -9
  20. package/dist/Player/MoveManager.d.ts +324 -69
  21. package/dist/Player/ParameterManager.d.ts +344 -14
  22. package/dist/Player/Player.d.ts +460 -8
  23. package/dist/Player/SkillManager.d.ts +197 -15
  24. package/dist/Player/StateManager.d.ts +89 -25
  25. package/dist/Player/VariableManager.d.ts +74 -0
  26. package/dist/RpgServer.d.ts +502 -64
  27. package/dist/RpgServerEngine.d.ts +2 -1
  28. package/dist/decorators/event.d.ts +46 -0
  29. package/dist/decorators/map.d.ts +287 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.js +21653 -20900
  32. package/dist/index.js.map +1 -1
  33. package/dist/logs/log.d.ts +2 -3
  34. package/dist/module.d.ts +43 -1
  35. package/dist/presets/index.d.ts +0 -9
  36. package/dist/rooms/BaseRoom.d.ts +132 -0
  37. package/dist/rooms/lobby.d.ts +10 -2
  38. package/dist/rooms/map.d.ts +1236 -17
  39. package/dist/services/save.d.ts +43 -0
  40. package/dist/storage/index.d.ts +1 -0
  41. package/dist/storage/localStorage.d.ts +23 -0
  42. package/package.json +14 -10
  43. package/src/Gui/DialogGui.ts +19 -4
  44. package/src/Gui/GameoverGui.ts +39 -0
  45. package/src/Gui/Gui.ts +23 -1
  46. package/src/Gui/MenuGui.ts +155 -6
  47. package/src/Gui/NotificationGui.ts +1 -2
  48. package/src/Gui/SaveLoadGui.ts +60 -0
  49. package/src/Gui/ShopGui.ts +146 -16
  50. package/src/Gui/TitleGui.ts +39 -0
  51. package/src/Gui/index.ts +15 -2
  52. package/src/Player/BattleManager.ts +91 -49
  53. package/src/Player/ClassManager.ts +118 -50
  54. package/src/Player/ComponentManager.ts +425 -19
  55. package/src/Player/Components.ts +380 -0
  56. package/src/Player/EffectManager.ts +81 -44
  57. package/src/Player/ElementManager.ts +109 -86
  58. package/src/Player/GoldManager.ts +32 -35
  59. package/src/Player/GuiManager.ts +308 -150
  60. package/src/Player/ItemFixture.ts +4 -5
  61. package/src/Player/ItemManager.ts +774 -355
  62. package/src/Player/MoveManager.ts +1544 -774
  63. package/src/Player/ParameterManager.ts +546 -104
  64. package/src/Player/Player.ts +1163 -88
  65. package/src/Player/SkillManager.ts +520 -195
  66. package/src/Player/StateManager.ts +170 -182
  67. package/src/Player/VariableManager.ts +101 -63
  68. package/src/RpgServer.ts +525 -63
  69. package/src/core/context.ts +1 -0
  70. package/src/decorators/event.ts +61 -0
  71. package/src/decorators/map.ts +327 -0
  72. package/src/index.ts +11 -1
  73. package/src/logs/log.ts +10 -3
  74. package/src/module.ts +126 -3
  75. package/src/presets/index.ts +1 -10
  76. package/src/rooms/BaseRoom.ts +232 -0
  77. package/src/rooms/lobby.ts +25 -7
  78. package/src/rooms/map.ts +2502 -194
  79. package/src/services/save.ts +147 -0
  80. package/src/storage/index.ts +1 -0
  81. package/src/storage/localStorage.ts +76 -0
  82. package/tests/battle.spec.ts +375 -0
  83. package/tests/change-map.spec.ts +72 -0
  84. package/tests/class.spec.ts +274 -0
  85. package/tests/effect.spec.ts +219 -0
  86. package/tests/element.spec.ts +221 -0
  87. package/tests/event.spec.ts +80 -0
  88. package/tests/gold.spec.ts +99 -0
  89. package/tests/item.spec.ts +609 -0
  90. package/tests/module.spec.ts +38 -0
  91. package/tests/move.spec.ts +601 -0
  92. package/tests/player-param.spec.ts +28 -0
  93. package/tests/prediction-reconciliation.spec.ts +182 -0
  94. package/tests/random-move.spec.ts +65 -0
  95. package/tests/skill.spec.ts +658 -0
  96. package/tests/state.spec.ts +467 -0
  97. package/tests/variable.spec.ts +185 -0
  98. package/tests/world-maps.spec.ts +896 -0
  99. package/vite.config.ts +16 -0
  100. package/dist/Player/Event.d.ts +0 -0
  101. package/src/Player/Event.ts +0 -0
@@ -1,42 +1,372 @@
1
- import { Constructor, RpgCommonPlayer } from '@rpgjs/common';
2
- export interface IWithParameterManager {
3
- parameters: Map<string, any>;
1
+ import { PlayerCtor } from '../../../common/src';
2
+ export type ExpCurve = {
3
+ basis: number;
4
+ extra: number;
5
+ accelerationA: number;
6
+ accelerationB: number;
7
+ };
8
+ /**
9
+ * Interface for Parameter Manager functionality
10
+ *
11
+ * Provides comprehensive parameter management including health points (HP), skill points (SP),
12
+ * experience and level progression, custom parameters, and parameter modifiers.
13
+ */
14
+ export interface IParameterManager {
15
+ /**
16
+ * ```ts
17
+ * player.initialLevel = 5
18
+ * ```
19
+ *
20
+ * @title Set initial level
21
+ * @prop {number} player.initialLevel
22
+ * @default 1
23
+ * @memberof ParameterManager
24
+ * */
25
+ initialLevel: number;
26
+ /**
27
+ * ```ts
28
+ * player.finalLevel = 50
29
+ * ```
30
+ *
31
+ * @title Set final level
32
+ * @prop {number} player.finalLevel
33
+ * @default 99
34
+ * @memberof ParameterManager
35
+ * */
36
+ finalLevel: number;
37
+ /**
38
+ * With Object-based syntax, you can use following options:
39
+ * - `basis: number`
40
+ * - `extra: number`
41
+ * - `accelerationA: number`
42
+ * - `accelerationB: number`
43
+ * @title Change Experience Curve
44
+ * @prop {object} player.expCurve
45
+ * @default
46
+ * ```ts
47
+ * {
48
+ * basis: 30,
49
+ * extra: 20,
50
+ * accelerationA: 30,
51
+ * accelerationB: 30
52
+ * }
53
+ * ```
54
+ * @memberof ParameterManager
55
+ * */
56
+ expCurve: ExpCurve;
57
+ /**
58
+ * Changes the health points
59
+ * - Cannot exceed the MaxHP parameter
60
+ * - Cannot have a negative value
61
+ * - If the value is 0, a hook named `onDead()` is called in the RpgPlayer class.
62
+ *
63
+ * ```ts
64
+ * player.hp = 100
65
+ * ```
66
+ * @title Change HP
67
+ * @prop {number} player.hp
68
+ * @default MaxHPValue
69
+ * @memberof ParameterManager
70
+ * */
4
71
  hp: number;
72
+ /**
73
+ * Changes the skill points
74
+ * - Cannot exceed the MaxSP parameter
75
+ * - Cannot have a negative value
76
+ *
77
+ * ```ts
78
+ * player.sp = 200
79
+ * ```
80
+ * @title Change SP
81
+ * @prop {number} player.sp
82
+ * @default MaxSPValue
83
+ * @memberof ParameterManager
84
+ * */
5
85
  sp: number;
86
+ /**
87
+ * Changing the player's experience.
88
+ * ```ts
89
+ * player.exp += 100
90
+ * ```
91
+ *
92
+ * Levels are based on the experience curve.
93
+ *
94
+ * ```ts
95
+ * console.log(player.level) // 1
96
+ * console.log(player.expForNextlevel) // 150
97
+ * player.exp += 160
98
+ * console.log(player.level) // 2
99
+ * ```
100
+ *
101
+ * @title Change Experience
102
+ * @prop {number} player.exp
103
+ * @default 0
104
+ * @memberof ParameterManager
105
+ * */
6
106
  exp: number;
107
+ /**
108
+ * Changing the player's level.
109
+ *
110
+ * ```ts
111
+ * player.level += 1
112
+ * ```
113
+ *
114
+ * The level will be between the initial level given by the `initialLevel` and final level given by `finalLevel`
115
+ *
116
+ * ```ts
117
+ * player.finalLevel = 50
118
+ * player.level = 60
119
+ * console.log(player.level) // 50
120
+ * ```
121
+ *
122
+ * @title Change Level
123
+ * @prop {number} player.level
124
+ * @default 1
125
+ * @memberof ParameterManager
126
+ * */
7
127
  level: number;
8
- expForNextlevel: number;
9
- param: {
128
+ /**
129
+ * ```ts
130
+ * console.log(player.expForNextlevel) // 150
131
+ * ```
132
+ * @title Experience for next level ?
133
+ * @prop {number} player.expForNextlevel
134
+ * @readonly
135
+ * @memberof ParameterManager
136
+ * */
137
+ readonly expForNextlevel: number;
138
+ /**
139
+ * Read the value of a parameter. Put the name of the parameter.
140
+ *
141
+ * ```ts
142
+ * import { Presets } from '@rpgjs/server'
143
+ *
144
+ * const { MAXHP } = Presets
145
+ *
146
+ * console.log(player.param[MAXHP])
147
+ * ```
148
+ *
149
+ * > Possible to use the `player.getParamValue(name)` method instead
150
+ * @title Get Param Value
151
+ * @prop {object} player.param
152
+ * @readonly
153
+ * @memberof ParameterManager
154
+ * */
155
+ readonly param: {
10
156
  [key: string]: number;
11
157
  };
158
+ /**
159
+ * Direct parameter modifiers (reactive signal)
160
+ *
161
+ * > It is important that these parameters have been created beforehand with the `addParameter()` method.
162
+ * > By default, the following settings have been created:
163
+ * - maxhp
164
+ * - maxsp
165
+ * - str
166
+ * - int
167
+ * - dex
168
+ * - agi
169
+ *
170
+ * **Object Key**
171
+ *
172
+ * The key of the object is the name of the parameter
173
+ *
174
+ * > The good practice is to retrieve the name coming from a constant
175
+ *
176
+ * **Object Value**
177
+ *
178
+ * The value of the key is an object containing:
179
+ * ```
180
+ * {
181
+ * value: number,
182
+ * rate: number
183
+ * }
184
+ * ```
185
+ *
186
+ * - value: Adds a number to the parameter
187
+ * - rate: Adds a rate to the parameter
188
+ *
189
+ * > Note that you can put both (value and rate)
190
+ *
191
+ * This property uses reactive signals - changes automatically trigger parameter recalculation.
192
+ * The final parameter values in `param` include aggregated modifiers from equipment, states, etc.
193
+ *
194
+ * @prop {Object} [paramsModifier]
195
+ * @example
196
+ *
197
+ * ```ts
198
+ * import { Presets } from '@rpgjs/server'
199
+ *
200
+ * const { MAXHP } = Presets
201
+ *
202
+ * // Set direct modifiers (reactive)
203
+ * player.paramsModifier = {
204
+ * [MAXHP]: {
205
+ * value: 100
206
+ * }
207
+ * }
208
+ *
209
+ * // Parameters automatically recalculate
210
+ * console.log(player.param[MAXHP]); // Updated value
211
+ * ```
212
+ *
213
+ * @title Set Parameters Modifier
214
+ * @prop {object} paramsModifier
215
+ * @memberof ParameterManager
216
+ * */
12
217
  paramsModifier: {
13
218
  [key: string]: {
14
219
  value?: number;
15
220
  rate?: number;
16
221
  };
17
222
  };
223
+ /**
224
+ * Get or set the parameters object
225
+ *
226
+ * @prop {object} parameters
227
+ * @memberof ParameterManager
228
+ */
229
+ parameters: {
230
+ [key: string]: {
231
+ start: number;
232
+ end: number;
233
+ };
234
+ };
235
+ /**
236
+ * Get the value of a specific parameter by name
237
+ *
238
+ * @deprecated Use `player.param[name]` instead for better reactivity
239
+ * @param name - The name of the parameter to get
240
+ * @returns The calculated parameter value
241
+ *
242
+ * @example
243
+ * ```ts
244
+ * import { Presets } from '@rpgjs/server'
245
+ *
246
+ * const { MAXHP } = Presets
247
+ *
248
+ * // Preferred way (reactive)
249
+ * const maxHp = player.param[MAXHP];
250
+ *
251
+ * // Legacy way (still works)
252
+ * const maxHp = player.getParamValue(MAXHP);
253
+ * ```
254
+ */
255
+ getParamValue(name: string): number;
256
+ /**
257
+ * Give a new parameter. Give a start value and an end value.
258
+ * The start value will be set to the level set at `player.initialLevel` and the end value will be linked to the level set at `player.finalLevel`.
259
+ *
260
+ * ```ts
261
+ * const SPEED = 'speed'
262
+ *
263
+ * player.addParameter(SPEED, {
264
+ * start: 10,
265
+ * end: 100
266
+ * })
267
+ *
268
+ * player.param[SPEED] // 10
269
+ * player.level += 5
270
+ * player.param[SPEED] // 14
271
+ * ```
272
+ *
273
+ * @title Add custom parameters
274
+ * @method player.addParameter(name,curve)
275
+ * @param {string} name - The name of the parameter
276
+ * @param {object} curve - Scheme of the object: { start: number, end: number }
277
+ * @returns {void}
278
+ * @memberof ParameterManager
279
+ * */
280
+ addParameter(name: string, curve: {
281
+ start: number;
282
+ end: number;
283
+ }): void;
284
+ /**
285
+ * Gives back in percentage of health points to skill points
286
+ *
287
+ * ```ts
288
+ * import { Presets } from '@rpgjs/server'
289
+ *
290
+ * const { MAXHP } = Presets
291
+ *
292
+ * console.log(player.param[MAXHP]) // 800
293
+ * player.hp = 100
294
+ * player.recovery({ hp: 0.5 }) // = 800 * 0.5
295
+ * console.log(player.hp) // 400
296
+ * ```
297
+ *
298
+ * @title Recovery HP and/or SP
299
+ * @method player.recovery(params)
300
+ * @param {object} params - Scheme of the object: { hp: number, sp: number }. The values of the numbers must be in 0 and 1
301
+ * @returns {void}
302
+ * @memberof ParameterManager
303
+ * */
304
+ recovery(params: {
305
+ hp?: number;
306
+ sp?: number;
307
+ }): void;
308
+ /**
309
+ * restores all HP and SP
310
+ *
311
+ * ```ts
312
+ * import { Presets } from '@rpgjs/server'
313
+ *
314
+ * const { MAXHP, MAXSP } = Presets
315
+ *
316
+ * console.log(player.param[MAXHP], player.param[MAXSP]) // 800, 230
317
+ * player.hp = 100
318
+ * player.sp = 0
319
+ * player.allRecovery()
320
+ * console.log(player.hp, player.sp) // 800, 230
321
+ * ```
322
+ *
323
+ * @title All Recovery
324
+ * @method player.allRecovery()
325
+ * @returns {void}
326
+ * @memberof ParameterManager
327
+ * */
328
+ allRecovery(): void;
18
329
  }
19
330
  /**
20
- * Mixin that adds parameter management functionality to a player class.
331
+ * Parameter Manager Mixin with Reactive Signals
21
332
  *
22
- * This mixin provides comprehensive parameter management including:
23
- * - Health Points (HP) and Skill Points (SP) management
24
- * - Experience and level progression system
25
- * - Custom parameter creation and modification
26
- * - Parameter modifiers for temporary stat changes
333
+ * Provides comprehensive parameter management functionality using reactive signals from `@signe/reactive`.
334
+ * This mixin handles health points (HP), skill points (SP), experience and level progression,
335
+ * custom parameters, and parameter modifiers with automatic reactivity.
336
+ *
337
+ * **Key Features:**
338
+ * - ✨ **Reactive Parameters**: All parameters automatically recalculate when level or modifiers change
339
+ * - 🚀 **Performance Optimized**: Uses computed signals to avoid unnecessary recalculations
340
+ * - 🔄 **Real-time Updates**: Changes propagate automatically throughout the system
341
+ * - 🎯 **Type Safe**: Full TypeScript support with proper type inference
27
342
  *
28
343
  * @template TBase - The base class constructor type
29
- * @param Base - The base class to extend
30
- * @returns A new class that extends the base with parameter management capabilities
344
+ * @param Base - The base class to extend with parameter management
345
+ * @returns Extended class with reactive parameter management methods
31
346
  *
32
347
  * @example
33
348
  * ```ts
34
349
  * class MyPlayer extends WithParameterManager(BasePlayer) {
35
350
  * constructor() {
36
351
  * super();
352
+ *
353
+ * // Add custom parameters
37
354
  * this.addParameter('strength', { start: 10, end: 100 });
355
+ * this.addParameter('magic', { start: 5, end: 80 });
38
356
  * }
39
357
  * }
358
+ *
359
+ * const player = new MyPlayer();
360
+ *
361
+ * // Reactive parameter updates
362
+ * player.level = 5;
363
+ * console.log(player.param.strength); // Automatically calculated for level 5
364
+ *
365
+ * // Reactive modifiers
366
+ * player.paramsModifier = {
367
+ * [MAXHP]: { value: 100, rate: 1.2 }
368
+ * };
369
+ * console.log(player.param[MAXHP]); // Automatically includes modifiers
40
370
  * ```
41
371
  */
42
- export declare function WithParameterManager<TBase extends Constructor<RpgCommonPlayer>>(Base: TBase): TBase & Constructor<IWithParameterManager>;
372
+ export declare function WithParameterManager<TBase extends PlayerCtor>(Base: TBase): TBase;