@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,468 @@
1
+ import { Utils } from '@rpgjs/common'
2
+ import { RpgPlayer } from './Player'
3
+
4
+ import {
5
+ MAXHP,
6
+ MAXSP,
7
+ } from '../presets'
8
+
9
+ const {
10
+ isString
11
+ } = Utils
12
+
13
+ export class ParameterManager {
14
+
15
+ private _paramsModifier: {
16
+ [key: string]: {
17
+ value?: number,
18
+ rate?: number
19
+ }
20
+ } = {}
21
+
22
+ private _parameters: Map<string, {
23
+ start: number,
24
+ end: number
25
+ }>
26
+
27
+ private _hp = 0
28
+ private _sp = 0
29
+ private _exp: number = 0
30
+ private _level: number = 0
31
+
32
+ /**
33
+ * ```ts
34
+ * player.initialLevel = 5
35
+ * ```
36
+ *
37
+ * @title Set initial level
38
+ * @prop {number} player.initialLevel
39
+ * @default 1
40
+ * @memberof ParameterManager
41
+ * */
42
+ public initialLevel:number = 1
43
+
44
+ /**
45
+ * ```ts
46
+ * player.finalLevel = 50
47
+ * ```
48
+ *
49
+ * @title Set final level
50
+ * @prop {number} player.finalLevel
51
+ * @default 99
52
+ * @memberof ParameterManager
53
+ * */
54
+ public finalLevel:number = 99
55
+
56
+ /**
57
+ * With Object-based syntax, you can use following options:
58
+ * - `basis: number`
59
+ * - `extra: number`
60
+ * - `accelerationA: number`
61
+ * - `accelerationB: number`
62
+ * @title Change Experience Curve
63
+ * @prop {object} player.expCurve
64
+ * @default
65
+ * ```ts
66
+ * {
67
+ * basis: 30,
68
+ * extra: 20,
69
+ * accelerationA: 30,
70
+ * accelerationB: 30
71
+ * }
72
+ * ```
73
+ * @memberof ParameterManager
74
+ * */
75
+ public expCurve: {
76
+ basis: number,
77
+ extra: number,
78
+ accelerationA: number
79
+ accelerationB: number
80
+ }
81
+
82
+ /**
83
+ * Changes the health points
84
+ * - Cannot exceed the MaxHP parameter
85
+ * - Cannot have a negative value
86
+ * - If the value is 0, a hook named `onDead()` is called in the RpgPlayer class.
87
+ *
88
+ * ```ts
89
+ * player.hp = 100
90
+ * ```
91
+ * @title Change HP
92
+ * @prop {number} player.hp
93
+ * @default MaxHPValue
94
+ * @memberof ParameterManager
95
+ * */
96
+ set hp(val: number) {
97
+ if (val > this.param[MAXHP]) {
98
+ val = this.param[MAXHP]
99
+ }
100
+ else if (val <= 0) {
101
+ this['_triggerHook']('onDead')
102
+ val = 0
103
+ }
104
+ this._hp = val
105
+ }
106
+
107
+ get hp(): number {
108
+ return this._hp
109
+ }
110
+
111
+ /**
112
+ * Changes the skill points
113
+ * - Cannot exceed the MaxSP parameter
114
+ * - Cannot have a negative value
115
+ *
116
+ * ```ts
117
+ * player.sp = 200
118
+ * ```
119
+ * @title Change SP
120
+ * @prop {number} player.sp
121
+ * @default MaxSPValue
122
+ * @memberof ParameterManager
123
+ * */
124
+ set sp(val: number) {
125
+ if (val > this.param[MAXSP]) {
126
+ val = this.param[MAXSP]
127
+ }
128
+ this._sp = val
129
+ }
130
+
131
+ get sp(): number {
132
+ return this._sp
133
+ }
134
+
135
+ /**
136
+ * Changing the player's experience.
137
+ * ```ts
138
+ * player.exp += 100
139
+ * ```
140
+ *
141
+ * Levels are based on the experience curve.
142
+ *
143
+ * ```ts
144
+ * console.log(player.level) // 1
145
+ * console.log(player.expForNextlevel) // 150
146
+ * player.exp += 160
147
+ * console.log(player.level) // 2
148
+ * ```
149
+ *
150
+ * @title Change Experience
151
+ * @prop {number} player.exp
152
+ * @default 0
153
+ * @memberof ParameterManager
154
+ * */
155
+ set exp(val: number) {
156
+ this._exp = val
157
+ const lastLevel = this.level
158
+ while (this.expForNextlevel < this._exp) {
159
+ this.level += 1
160
+ }
161
+ //const hasNewLevel = player.level - lastLevel
162
+ }
163
+
164
+ get exp(): number {
165
+ return this._exp
166
+ }
167
+
168
+ /**
169
+ * Changing the player's level.
170
+ *
171
+ * ```ts
172
+ * player.level += 1
173
+ * ```
174
+ *
175
+ * The level will be between the initial level given by the `initialLevel` and final level given by `finalLevel`
176
+ *
177
+ * ```ts
178
+ * player.finalLevel = 50
179
+ * player.level = 60
180
+ * console.log(player.level) // 50
181
+ * ```
182
+ *
183
+ * @title Change Level
184
+ * @prop {number} player.level
185
+ * @default 1
186
+ * @memberof ParameterManager
187
+ * */
188
+ set level(val: number) {
189
+ const lastLevel = this._level
190
+ if (this.finalLevel && this._level > this.finalLevel) {
191
+ val = this.finalLevel
192
+ }
193
+ if (this._class) {
194
+ for (let i = this._level ; i <= val; i++) {
195
+ for (let skill of this._class.skillsToLearn) {
196
+ if (skill.level == i) {
197
+ this['learnSkill'](skill.skill)
198
+ }
199
+ }
200
+ }
201
+ }
202
+ const hasNewLevel = val - lastLevel
203
+ if (hasNewLevel > 0) this['_triggerHook']('onLevelUp', hasNewLevel)
204
+ this._level = val
205
+ }
206
+
207
+ get level(): number {
208
+ return this._level
209
+ }
210
+
211
+ /**
212
+ * ```ts
213
+ * console.log(player.expForNextlevel) // 150
214
+ * ```
215
+ * @title Experience for next level ?
216
+ * @prop {number} player.expForNextlevel
217
+ * @readonly
218
+ * @memberof ParameterManager
219
+ * */
220
+ get expForNextlevel(): number {
221
+ return this._expForLevel(this.level + 1)
222
+ }
223
+
224
+ /**
225
+ * Read the value of a parameter. Put the name of the parameter.
226
+ *
227
+ * ```ts
228
+ * import { Presets } from '@rpgjs/server'
229
+ *
230
+ * const { MAXHP } = Presets
231
+ *
232
+ * console.log(player.param[MAXHP])
233
+ * ```
234
+ *
235
+ * > Possible to use the `player.getParamValue(name)` method instead
236
+ * @title Get Param Value
237
+ * @prop {object} player.param
238
+ * @readonly
239
+ * @memberof ParameterManager
240
+ * */
241
+ get param() {
242
+ const obj = {}
243
+ this._parameters.forEach((val, name) => {
244
+ obj[name] = this.getParamValue(name)
245
+ })
246
+ return obj
247
+ }
248
+
249
+ get paramsModifier() {
250
+ const params = {}
251
+ const paramsAvg = {}
252
+ const changeParam = (paramsModifier) => {
253
+ for (let key in paramsModifier) {
254
+ const { rate, value } = paramsModifier[key]
255
+ if (!params[key]) params[key] = { rate: 0, value: 0 }
256
+ if (!paramsAvg[key]) paramsAvg[key] = 0
257
+ if (value) params[key].value += value
258
+ if (rate !== undefined) params[key].rate += rate
259
+ paramsAvg[key]++
260
+ }
261
+ }
262
+ const getModifier = (prop) => {
263
+ if (!isString(prop)) {
264
+ changeParam(prop)
265
+ return
266
+ }
267
+ for (let el of this[prop]) {
268
+ if (!el.paramsModifier) continue
269
+ changeParam(el.paramsModifier)
270
+ }
271
+ }
272
+ getModifier(this._paramsModifier)
273
+ getModifier('states')
274
+ getModifier('equipments')
275
+ for (let key in params) {
276
+ params[key].rate /= paramsAvg[key]
277
+ }
278
+ return params
279
+ }
280
+
281
+ /**
282
+ * Changes the values of some parameters
283
+ *
284
+ * > It is important that these parameters have been created beforehand with the `addParameter()` method.
285
+ * > By default, the following settings have been created:
286
+ * - maxhp
287
+ * - maxsp
288
+ * - str
289
+ * - int
290
+ * - dex
291
+ * - agi
292
+ *
293
+ * **Object Key**
294
+ *
295
+ * The key of the object is the name of the parameter
296
+ *
297
+ * > The good practice is to retrieve the name coming from a constant
298
+ *
299
+ * **Object Value**
300
+ *
301
+ * The value of the key is an object containing:
302
+ * ```
303
+ * {
304
+ * value: number,
305
+ * rate: number
306
+ * }
307
+ * ```
308
+ *
309
+ * - value: Adds a number to the parameter
310
+ * - rate: Adds a rate to the parameter
311
+ *
312
+ * > Note that you can put both (value and rate)
313
+ *
314
+ * In the case of a state or the equipment of a weapon or armor, the parameters will be changed but if the state disappears or the armor/weapon is de-equipped, then the parameters will return to the initial state.
315
+ *
316
+ * @prop {Object} [paramsModifier]
317
+ * @example
318
+ *
319
+ * ```ts
320
+ * import { Presets } from '@rpgjs/server'
321
+ *
322
+ * const { MAXHP } = Presets
323
+ *
324
+ * player.paramsModifier = {
325
+ * [MAXHP]: {
326
+ * value: 100
327
+ * }
328
+ * }
329
+ * ```
330
+ *
331
+ * 1. Player has 741 MaxHp
332
+ * 2. After changing the parameter, he will have 841 MaxHp
333
+ *
334
+ * @title Set Parameters Modifier
335
+ * @prop {number} paramsModifier
336
+ * @memberof ParameterManager
337
+ * */
338
+ set paramsModifier(val: {
339
+ [key: string]: {
340
+ value?: number,
341
+ rate?: number
342
+ }
343
+ }) {
344
+ this._paramsModifier = val
345
+ }
346
+
347
+ get parameters() {
348
+ return this._parameters
349
+ }
350
+
351
+ set parameters(val) {
352
+ this._parameters = val
353
+ }
354
+
355
+ private _expForLevel(level: number): number {
356
+ const {
357
+ basis,
358
+ extra,
359
+ accelerationA,
360
+ accelerationB
361
+ } = this.expCurve
362
+ return Math.round(basis * (Math.pow(level - 1, 0.9 + accelerationA / 250)) * level * (level + 1) / (6 + Math.pow(level, 2) / 50 / accelerationB) + (level - 1) * extra)
363
+ }
364
+
365
+ private getParam(name: string) {
366
+ const features = this._parameters.get(name)
367
+ if (!features) {
368
+ throw `Parameter ${name} not exists. Please use addParameter() before`
369
+ }
370
+ return features
371
+ }
372
+
373
+ getParamValue(name: string): number {
374
+ const features = this.getParam(name)
375
+ let curveVal = Math.floor((features.end - features.start) * ((this.level-1) / (this.finalLevel - this.initialLevel))) + features.start
376
+ const modifier = this.paramsModifier[name]
377
+ if (modifier) {
378
+ if (modifier.rate) curveVal *= modifier.rate
379
+ if (modifier.value) curveVal += modifier.value
380
+ }
381
+ return curveVal
382
+ }
383
+
384
+ /**
385
+ * Give a new parameter. Give a start value and an end value.
386
+ * 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`.
387
+ *
388
+ * ```ts
389
+ * const SPEED = 'speed'
390
+ *
391
+ * player.addParameter(SPEED, {
392
+ * start: 10,
393
+ * end: 100
394
+ * })
395
+ *
396
+ * player.param[SPEED] // 10
397
+ * player.level += 5
398
+ * player.param[SPEED] // 14
399
+ * ```
400
+ *
401
+ * @title Add custom parameters
402
+ * @method player.addParameter(name,curve)
403
+ * @param {name} name
404
+ * @param {object} curve Scheme of the object: { start: number, end: number }
405
+ * @returns {void}
406
+ * @memberof ParameterManager
407
+ * */
408
+ addParameter(name: string, { start, end }: { start: number, end: number }): void {
409
+ this._parameters.set(name, {
410
+ start,
411
+ end
412
+ })
413
+ }
414
+
415
+ /**
416
+ * Gives back in percentage of health points to skill points
417
+ *
418
+ * ```ts
419
+ * import { Presets } from '@rpgjs/server'
420
+ *
421
+ * const { MAXHP } = Presets
422
+ *
423
+ * console.log(player.param[MAXHP]) // 800
424
+ * player.hp = 100
425
+ * player.recovery({ hp: 0.5 }) // = 800 * 0.5
426
+ * console.log(player.hp) // 400
427
+ * ```
428
+ *
429
+ * @title Recovery HP and/or SP
430
+ * @method player.recovery(params)
431
+ * @param {object} params Scheme of the object: { hp: number, sp: number }. The values of the numbers must be in 0 and 1
432
+ * @returns {void}
433
+ * @memberof ParameterManager
434
+ * */
435
+ recovery({ hp, sp }: { hp?: number, sp?: number }) {
436
+ if (hp) this.hp = this.param[MAXHP] * hp
437
+ if (sp) this.sp = this.param[MAXSP] * sp
438
+ }
439
+
440
+ /**
441
+ * restores all HP and SP
442
+ *
443
+ * ```ts
444
+ * import { Presets } from '@rpgjs/server'
445
+ *
446
+ * const { MAXHP, MAXSP } = Presets
447
+ *
448
+ * console.log(player.param[MAXHP], player.param[MAXSP]) // 800, 230
449
+ * player.hp = 100
450
+ * player.sp = 0
451
+ * player.allRecovery()
452
+ * console.log(player.hp, player.sp) // 800, 230
453
+ * ```
454
+ *
455
+ * @title All Recovery
456
+ * @method player.allRecovery()
457
+ * @returns {void}
458
+ * @memberof ParameterManager
459
+ * */
460
+ allRecovery(): void {
461
+ this.recovery({ hp: 1, sp: 1 })
462
+ }
463
+ }
464
+
465
+ export interface ParameterManager {
466
+ _class,
467
+ $schema
468
+ }