@rpgjs/server 3.3.2 → 4.0.0-beta.3

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 (152) hide show
  1. package/LICENSE +19 -0
  2. package/lib/Game/Map.d.ts +58 -5
  3. package/lib/Game/Map.js +185 -80
  4. package/lib/Game/Map.js.map +1 -1
  5. package/lib/Game/WorldMaps.d.ts +3 -2
  6. package/lib/Game/WorldMaps.js +6 -11
  7. package/lib/Game/WorldMaps.js.map +1 -1
  8. package/lib/Gui/DialogGui.d.ts +1 -1
  9. package/lib/Gui/DialogGui.js +12 -13
  10. package/lib/Gui/DialogGui.js.map +1 -1
  11. package/lib/Gui/Gui.js +2 -6
  12. package/lib/Gui/Gui.js.map +1 -1
  13. package/lib/Gui/MenuGui.js +4 -8
  14. package/lib/Gui/MenuGui.js.map +1 -1
  15. package/lib/Gui/NotificationGui.js +4 -8
  16. package/lib/Gui/NotificationGui.js.map +1 -1
  17. package/lib/Gui/ShopGui.js +4 -8
  18. package/lib/Gui/ShopGui.js.map +1 -1
  19. package/lib/Gui/index.js +6 -13
  20. package/lib/Gui/index.js.map +1 -1
  21. package/lib/Interfaces/Gui.js +1 -2
  22. package/lib/Interfaces/StateStore.js +1 -2
  23. package/lib/MatchMaker.js +28 -46
  24. package/lib/MatchMaker.js.map +1 -1
  25. package/lib/Monitor/index.js +3 -5
  26. package/lib/Monitor/index.js.map +1 -1
  27. package/lib/Player/BattleManager.js +17 -16
  28. package/lib/Player/BattleManager.js.map +1 -1
  29. package/lib/Player/ClassManager.js +6 -10
  30. package/lib/Player/ClassManager.js.map +1 -1
  31. package/lib/Player/ComponentManager.d.ts +4 -4
  32. package/lib/Player/ComponentManager.js +37 -24
  33. package/lib/Player/ComponentManager.js.map +1 -1
  34. package/lib/Player/EffectManager.js +8 -12
  35. package/lib/Player/EffectManager.js.map +1 -1
  36. package/lib/Player/ElementManager.js +5 -9
  37. package/lib/Player/ElementManager.js.map +1 -1
  38. package/lib/Player/GoldManager.js +1 -5
  39. package/lib/Player/GoldManager.js.map +1 -1
  40. package/lib/Player/GuiManager.js +17 -15
  41. package/lib/Player/GuiManager.js.map +1 -1
  42. package/lib/Player/ItemFixture.js +1 -5
  43. package/lib/Player/ItemFixture.js.map +1 -1
  44. package/lib/Player/ItemManager.d.ts +3 -3
  45. package/lib/Player/ItemManager.js +29 -31
  46. package/lib/Player/ItemManager.js.map +1 -1
  47. package/lib/Player/MoveManager.d.ts +7 -6
  48. package/lib/Player/MoveManager.js +67 -74
  49. package/lib/Player/MoveManager.js.map +1 -1
  50. package/lib/Player/ParameterManager.js +10 -14
  51. package/lib/Player/ParameterManager.js.map +1 -1
  52. package/lib/Player/Player.d.ts +7 -1
  53. package/lib/Player/Player.js +193 -191
  54. package/lib/Player/Player.js.map +1 -1
  55. package/lib/Player/SkillManager.js +18 -22
  56. package/lib/Player/SkillManager.js.map +1 -1
  57. package/lib/Player/StateManager.js +9 -13
  58. package/lib/Player/StateManager.js.map +1 -1
  59. package/lib/Player/VariableManager.js +1 -5
  60. package/lib/Player/VariableManager.js.map +1 -1
  61. package/lib/Query.d.ts +2 -1
  62. package/lib/Query.js +19 -15
  63. package/lib/Query.js.map +1 -1
  64. package/lib/RpgServer.d.ts +11 -3
  65. package/lib/RpgServer.js +1 -2
  66. package/lib/Scenes/Map.d.ts +27 -4
  67. package/lib/Scenes/Map.js +117 -122
  68. package/lib/Scenes/Map.js.map +1 -1
  69. package/lib/decorators/event.js +4 -7
  70. package/lib/decorators/event.js.map +1 -1
  71. package/lib/decorators/map.d.ts +1 -1
  72. package/lib/decorators/map.js +5 -9
  73. package/lib/decorators/map.js.map +1 -1
  74. package/lib/entry-point.js +59 -65
  75. package/lib/entry-point.js.map +1 -1
  76. package/lib/express/api.d.ts +3 -0
  77. package/lib/express/api.js +105 -0
  78. package/lib/express/api.js.map +1 -0
  79. package/lib/express/errors/NotAuthorized.d.ts +4 -0
  80. package/lib/express/errors/NotAuthorized.js +7 -0
  81. package/lib/express/errors/NotAuthorized.js.map +1 -0
  82. package/lib/express/errors/NotFound.d.ts +4 -0
  83. package/lib/express/errors/NotFound.js +7 -0
  84. package/lib/express/errors/NotFound.js.map +1 -0
  85. package/lib/express/server.js +20 -5
  86. package/lib/express/server.js.map +1 -1
  87. package/lib/index.js +15 -68
  88. package/lib/index.js.map +1 -1
  89. package/lib/logs/index.js +5 -11
  90. package/lib/logs/index.js.map +1 -1
  91. package/lib/logs/item.js +11 -15
  92. package/lib/logs/item.js.map +1 -1
  93. package/lib/logs/log.js +1 -5
  94. package/lib/logs/log.js.map +1 -1
  95. package/lib/logs/skill.js +6 -10
  96. package/lib/logs/skill.js.map +1 -1
  97. package/lib/logs/state.js +5 -9
  98. package/lib/logs/state.js.map +1 -1
  99. package/lib/models/Item.js +1 -2
  100. package/lib/presets/index.js +28 -36
  101. package/lib/presets/index.js.map +1 -1
  102. package/lib/server.d.ts +23 -2
  103. package/lib/server.js +227 -134
  104. package/lib/server.js.map +1 -1
  105. package/package.json +24 -16
  106. package/src/Game/Map.ts +513 -0
  107. package/src/Game/WorldMaps.ts +45 -0
  108. package/src/Gui/DialogGui.ts +67 -0
  109. package/src/Gui/Gui.ts +45 -0
  110. package/src/Gui/MenuGui.ts +26 -0
  111. package/src/Gui/NotificationGui.ts +10 -0
  112. package/src/Gui/ShopGui.ts +43 -0
  113. package/src/Gui/index.ts +13 -0
  114. package/src/Interfaces/Gui.ts +4 -0
  115. package/src/Interfaces/StateStore.ts +5 -0
  116. package/src/MatchMaker.ts +63 -0
  117. package/src/Monitor/index.ts +78 -0
  118. package/src/Player/BattleManager.ts +123 -0
  119. package/src/Player/ClassManager.ts +72 -0
  120. package/src/Player/ComponentManager.ts +538 -0
  121. package/src/Player/EffectManager.ts +94 -0
  122. package/src/Player/ElementManager.ts +142 -0
  123. package/src/Player/GoldManager.ts +26 -0
  124. package/src/Player/GuiManager.ts +308 -0
  125. package/src/Player/ItemFixture.ts +24 -0
  126. package/src/Player/ItemManager.ts +474 -0
  127. package/src/Player/MoveManager.ts +635 -0
  128. package/src/Player/ParameterManager.ts +468 -0
  129. package/src/Player/Player.ts +931 -0
  130. package/src/Player/SkillManager.ts +229 -0
  131. package/src/Player/StateManager.ts +230 -0
  132. package/src/Player/VariableManager.ts +55 -0
  133. package/src/Query.ts +172 -0
  134. package/src/RpgServer.ts +429 -0
  135. package/src/Scenes/Map.ts +302 -0
  136. package/src/decorators/event.ts +57 -0
  137. package/src/decorators/map.ts +223 -0
  138. package/src/entry-point.ts +102 -0
  139. package/src/express/api.ts +118 -0
  140. package/src/express/errors/NotAuthorized.ts +6 -0
  141. package/src/express/errors/NotFound.ts +6 -0
  142. package/src/express/server.ts +93 -0
  143. package/src/index.ts +28 -0
  144. package/src/logs/index.ts +11 -0
  145. package/src/logs/item.ts +31 -0
  146. package/src/logs/log.ts +3 -0
  147. package/src/logs/skill.ts +16 -0
  148. package/src/logs/state.ts +13 -0
  149. package/src/models/Item.ts +11 -0
  150. package/src/presets/index.ts +71 -0
  151. package/src/server.ts +394 -0
  152. package/tsconfig.json +27 -0
@@ -0,0 +1,429 @@
1
+ import { ModuleType, RpgShape, Direction, Control } from '@rpgjs/common'
2
+ import { RpgClassEvent, RpgEvent, RpgPlayer } from './Player/Player'
3
+ import { RpgMap } from './Game/Map'
4
+ import { RpgServerEngine } from './server'
5
+ import { MapOptions } from './decorators/map'
6
+ import { RpgClassMap } from './Scenes/Map'
7
+ import { TiledMap } from '@rpgjs/tiled'
8
+ import { WorldMap } from './Game/WorldMaps'
9
+ import { MatchMakerOption, RpgMatchMaker } from './MatchMaker'
10
+ import { IStoreState } from './Interfaces/StateStore'
11
+
12
+ export interface RpgServerEngineHooks {
13
+ /**
14
+ * When the server starts
15
+ *
16
+ * @prop { (engine: RpgServerEngine) => any } [onStart]
17
+ * @memberof RpgServerEngineHooks
18
+ */
19
+ onStart?: (server: RpgServerEngine) => any
20
+
21
+ /**
22
+ * At each server frame. Normally represents 60FPS
23
+ *
24
+ * @prop { (engine: RpgServerEngine) => any } [onStep]
25
+ * @memberof RpgServerEngineHooks
26
+ */
27
+ onStep?: (server: RpgServerEngine) => any
28
+ }
29
+
30
+ export interface RpgPlayerHooks {
31
+ /**
32
+ * Set custom properties on the player. Several interests:
33
+ * 1. The property is shared with the client
34
+ * 2. If you save with `player.save()`, the property will be saved to be reloaded later
35
+ * 3. If you use horizontal scaling, the property will be kept in memory if the player changes the map and this map is on another server
36
+ *
37
+ * Example:
38
+ *
39
+ * ```ts
40
+ * import { RpgPlayerHooks } from '@rpgjs/server'
41
+ *
42
+ * declare module '@rpgjs/server' {
43
+ * export interface RpgPlayer {
44
+ * nbWood: number
45
+ * }
46
+ * }
47
+ *
48
+ * export const player: RpgPlayerHooks = {
49
+ * props: {
50
+ * nbWood: Number
51
+ * }
52
+ * }
53
+ * ```
54
+ *
55
+ * This is a simple example. Let's say that the player can have a number of harvested woods, then
56
+ * 1. you must specify the type for Typescript
57
+ * 2. Add the property in props
58
+ *
59
+ * You can also set up with this object:
60
+ *
61
+ * ```
62
+ * {
63
+ $default: <any> (undefined by default),
64
+ $syncWithClient: <boolean> (true by default),
65
+ $permanent: <boolean> (true by default)
66
+ }
67
+ ```
68
+ *
69
+ * - Indicate if the property should be shared with the client
70
+ *
71
+ * Example:
72
+ *
73
+ * ```ts
74
+ * export const player: RpgPlayerHooks = {
75
+ * props: {
76
+ * secretProp: {
77
+ * $syncWithClient: false
78
+ * }
79
+ * }
80
+ * }
81
+ * ```
82
+ *
83
+ * - Indicate if the property should be registered in a database. If the data is just temporary to use on the current map:
84
+ *
85
+ * ```ts
86
+ * export const player: RpgPlayerHooks = {
87
+ * props: {
88
+ * tmpProp: {
89
+ * $permanent: false
90
+ * }
91
+ * }
92
+ * }
93
+ * ```
94
+ *
95
+ * @prop {object} [props]
96
+ * @since 3.0.0-beta.9
97
+ * @memberof RpgPlayerHooks
98
+ */
99
+ props?: {
100
+ [key: string]: any
101
+ }
102
+
103
+ /**
104
+ * When the player joins the map
105
+ *
106
+ * @prop { (player: RpgPlayer, map: RpgMap) => any } [onJoinMap]
107
+ * @memberof RpgPlayerHooks
108
+ */
109
+ onJoinMap?: (player: RpgPlayer, map: RpgMap) => any
110
+
111
+ /**
112
+ * When the player is connected to the server
113
+ *
114
+ * @prop { (player: RpgPlayer) => any } [onConnected]
115
+ * @memberof RpgPlayerHooks
116
+ */
117
+ onConnected?: (player: RpgPlayer) => any
118
+
119
+ /**
120
+ * When the player presses a key on the client side
121
+ *
122
+ * @prop { (player: RpgPlayer, data: { input: Direction | Control | string, moving: boolean }) => any } [onInput]
123
+ * @memberof RpgPlayerHooks
124
+ */
125
+ onInput?: (player: RpgPlayer, data: { input: Direction | Control | string, moving: boolean }) => any
126
+
127
+ /**
128
+ * When the player leaves the map
129
+ *
130
+ * @prop { (player: RpgPlayer, map: RpgMap) => any } [onLeaveMap]
131
+ * @memberof RpgPlayerHooks
132
+ */
133
+ onLeaveMap?: (player: RpgPlayer, map: RpgMap) => any
134
+
135
+ /**
136
+ * When the player increases one level
137
+ *
138
+ * @prop { (player: RpgPlayer, nbLevel: number) => any } [onLevelUp]
139
+ * @stability 1
140
+ * @memberof RpgPlayerHooks
141
+ */
142
+ onLevelUp?: (player: RpgPlayer, nbLevel: number) => any
143
+
144
+ /**
145
+ * When the player's HP drops to 0
146
+ *
147
+ * @prop { (player: RpgPlayer) => any } [onDead]
148
+ * @stability 1
149
+ * @memberof RpgPlayerHooks
150
+ */
151
+ onDead?: (player: RpgPlayer) => any,
152
+
153
+ /**
154
+ * When the player leaves the server
155
+ *
156
+ * @prop { (player: RpgPlayer) => any } [onDisconnected]
157
+ * @memberof RpgPlayerHooks
158
+ */
159
+ onDisconnected?: (player: RpgPlayer) => any
160
+
161
+ /**
162
+ * When the player enters the shape
163
+ *
164
+ * @prop { (player: RpgPlayer, shape: RpgShape) => any } [onInShape]
165
+ * 3.0.0-beta.3
166
+ * @memberof RpgPlayerHooks
167
+ */
168
+ onInShape?: (player: RpgPlayer, shape: RpgShape) => any
169
+
170
+ /**
171
+ * When the player leaves the shape
172
+ *
173
+ * @prop { (player: RpgPlayer, shape: RpgShape) => any } [onOutShape]
174
+ * 3.0.0-beta.3
175
+ * @memberof RpgPlayerHooks
176
+ */
177
+ onOutShape?: (player: RpgPlayer, shape: RpgShape) => any
178
+
179
+ /**
180
+ * When the x, y positions change
181
+ *
182
+ * @prop { (player: RpgPlayer) => any } [onMove]
183
+ * @since 3.0.0-beta.4
184
+ * @memberof RpgPlayerHooks
185
+ */
186
+ onMove?: (player: RpgPlayer) => any
187
+
188
+ /**
189
+ * Allow or not the player to switch maps. `nexMap` parameter is the retrieved RpgMap class and not the instance
190
+ *
191
+ * @prop { (player: RpgPlayer, nextMap: RpgClassMap<RpgMap>) => boolean | Promise<boolean> } [canChangeMap]
192
+ * @since 3.0.0-beta.8
193
+ * @memberof RpgPlayerHooks
194
+ */
195
+ canChangeMap?: (player: RpgPlayer, nextMap: RpgClassMap<RpgMap>) => boolean | Promise<boolean>
196
+ }
197
+
198
+ export interface RpgServer {
199
+
200
+ /**
201
+ * Adding sub-modules
202
+ *
203
+ * @prop { { client: null | Function, server: null | Function }[]} [imports]
204
+ * @memberof RpgServer
205
+ */
206
+ imports?: ModuleType[]
207
+
208
+ /**
209
+ * Object containing the hooks concerning the engine
210
+ *
211
+ * ```ts
212
+ * import { RpgServerEngine, RpgServerEngineHooks, RpgModule, RpgClient } from '@rpgjs/server'
213
+ *
214
+ * const engine: RpgEngineHooks = {
215
+ * onStart(server: RpgServerEngine) {
216
+ * console.log('server is started')
217
+ * }
218
+ * }
219
+ *
220
+ * @RpgModule<RpgServer>({
221
+ * engine
222
+ * })
223
+ * class RpgServerModule {}
224
+ * ```
225
+ *
226
+ * @prop {RpgServerEngineHooks} [engine]
227
+ * @memberof RpgServer
228
+ */
229
+ engine?: RpgServerEngineHooks
230
+
231
+ /**
232
+ * Give the `player` object hooks. Each time a player connects, an instance of `RpgPlayer` is created.
233
+ *
234
+ * ```ts
235
+ * import { RpgPlayer, RpgServer, RpgPlayerHooks, RpgModule } from '@rpgjs/server'
236
+ *
237
+ * const player: RpgPlayerHooks = {
238
+ * onConnected(player: RpgPlayer) {
239
+ *
240
+ * }
241
+ * }
242
+ *
243
+ * @RpgModule<RpgServer>({
244
+ * player
245
+ * })
246
+ * class RpgServerEngine { }
247
+ * ```
248
+ *
249
+ * @prop {RpgClassPlayer<RpgPlayer>} [player]
250
+ * @memberof RpgServer
251
+ * */
252
+ player?: RpgPlayerHooks,
253
+
254
+ /**
255
+ * References all data in the server. it is mainly used to retrieve data according to their identifier
256
+ *
257
+ * ```ts
258
+ * import { RpgServer, RpgModule } from '@rpgjs/server'
259
+ * import { Potion } from 'my-database/items/potion'
260
+ *
261
+ * @RpgModule<RpgServer>({
262
+ * database: {
263
+ * Potion
264
+ * }
265
+ * })
266
+ * class RpgServerEngine { }
267
+ * ```
268
+ *
269
+ * @prop { { [dataName]: data } } [database]
270
+ * @memberof RpgServer
271
+ * */
272
+ database?: object | any[],
273
+
274
+ /**
275
+ * Array of all maps. Each element is an `RpgMap` class
276
+ *
277
+ * ```ts
278
+ * import { RpgMap, MapData, RpgServer, RpgModule } from '@rpgjs/server'
279
+ *
280
+ * @MapData({
281
+ * id: 'town',
282
+ * file: require('./tmx/mymap.tmx'),
283
+ * name: 'Town'
284
+ * })
285
+ * class TownMap extends RpgMap { }
286
+ *
287
+ * @RpgModule<RpgServer>({
288
+ * maps: [
289
+ * TownMap
290
+ * ]
291
+ * })
292
+ * class RpgServerEngine { }
293
+ * ```
294
+ *
295
+ * It is possible to just give the object as well
296
+ *
297
+ * ```ts
298
+ * @RpgModule<RpgServer>({
299
+ * maps: [
300
+ * {
301
+ * id: 'town',
302
+ * file: require('./tmx/mymap.tmx'),
303
+ * name: 'Town'
304
+ * }
305
+ * ]
306
+ * })
307
+ * class RpgServerEngine { }
308
+ * ```
309
+ *
310
+ * Since version 3.0.0-beta.8, you can just pass the path to the file. The identifier will then be the name of the file
311
+ *
312
+ * ```ts
313
+ * @RpgModule<RpgServer>({
314
+ * maps: [
315
+ * require('./tmx/mymap.tmx') // id is "mymap"
316
+ * ]
317
+ * })
318
+ * class RpgServerEngine { }
319
+ * ```
320
+ *
321
+ * @prop {RpgClassMap<RpgMap>[]} [maps]
322
+ * @memberof RpgServer
323
+ * */
324
+ maps?: RpgClassMap<RpgMap>[] | MapOptions[] | string[] | TiledMap[],
325
+
326
+ /**
327
+ * Array of all events. Each element is an `RpgEvent` class
328
+ * Events can be used by placing a shape with the name of the event on Tiled Map Editor
329
+ *
330
+ * @prop {RpgClassEvent<RpgEvent>[]} [events]
331
+ * @since 4.0.0
332
+ * @memberof RpgServer
333
+ */
334
+ events?: RpgClassEvent<RpgEvent>[]
335
+
336
+ /**
337
+ * Loads the content of a `.world` file from Tiled Map Editor into the map scene
338
+ *
339
+ * > Note, that if the map already exists (i.e. you have already defined an RpgMap), the world will retrieve the already existing map. Otherwise it will create a new map
340
+ *
341
+ * @prop {object[]} [worldMaps]
342
+ * object is
343
+ * ```ts
344
+ * {
345
+ * id?: string
346
+ * maps: {
347
+ * id?: string
348
+ * properties?: object
349
+ * fileName: string;
350
+ height: number;
351
+ width: number;
352
+ x: number;
353
+ y: number;
354
+ * }[],
355
+ onlyShowAdjacentMaps: boolean, // only for Tiled Map Editor
356
+ type: 'world' // only for Tiled Map Editor
357
+ * }
358
+ * ```
359
+ * @since 3.0.0-beta.8
360
+ * @example
361
+ * ```ts
362
+ * import myworld from 'myworld.world'
363
+ *
364
+ * @RpgModule<RpgServer>({
365
+ * worldMaps: [
366
+ * myworld
367
+ * ]
368
+ * })
369
+ * class RpgServerEngine { }
370
+ * ```
371
+ * @memberof RpgServer
372
+ */
373
+ worldMaps?: WorldMap[]
374
+
375
+
376
+ /**
377
+ * Combat formula used in the method player.applyDamage(). There are already formulas in the RPGJS engine but you can customize them
378
+ *
379
+ * ```ts
380
+ * damageFormulas: {
381
+ * damageSkill: (a, b, skill) => number,
382
+ * damagePhysic: (a, b) => number,
383
+ *
384
+ * // damage: the damages calculated from the previous formulas
385
+ * damageCritical: (damage, a, b) => number
386
+ * coefficientElementsa : (a, b, bDef) => number
387
+ * }
388
+ * ```
389
+ *
390
+ * `a` represents the attacker's parameters
391
+ * `b` represents the defender's parameters
392
+ *
393
+ * Example:
394
+ *
395
+ * ```ts
396
+ * import { RpgModule, RpgServer, Presets } from '@rpgjs/server'
397
+ *
398
+ * const { ATK, PDEF } = Presets
399
+ *
400
+ * @RpgModule<RpgServer>({
401
+ * damageFormulas: {
402
+ * damagePhysic(a, b) {
403
+ * let damage = a[ATK] - b[PDEF]
404
+ * if (damage < 0) damage = 0
405
+ * return damage
406
+ * }
407
+ * }
408
+ * })
409
+ * class RpgServerEngine { }
410
+ * ```
411
+ * @prop {object} damageFormulas
412
+ * @memberof RpgServer
413
+ * */
414
+ damageFormulas?: {
415
+ damageSkill?: (a, b, skill) => number,
416
+ damagePhysic?: (a, b) => number,
417
+ damageCritical?: (damage, a, b) => number
418
+ coefficientElements?: (a, b, bDef) => number
419
+ }
420
+
421
+ scalability?: {
422
+ matchMaker: MatchMakerOption,
423
+ stateStore: IStoreState
424
+ hooks: {
425
+ onConnected(store: IStoreState, matchMaker: RpgMatchMaker, player: RpgPlayer): Promise<boolean> | boolean
426
+ doChangeServer(store: IStoreState, matchMaker: RpgMatchMaker, player: RpgPlayer): Promise<boolean> | boolean
427
+ }
428
+ }
429
+ }