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