@rpgjs/server 4.3.0 → 5.0.0-alpha.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 (219) hide show
  1. package/{lib → dist}/Gui/DialogGui.d.ts +1 -2
  2. package/{lib → dist}/Gui/Gui.d.ts +1 -2
  3. package/dist/Player/BattleManager.d.ts +22 -0
  4. package/dist/Player/ClassManager.d.ts +18 -0
  5. package/dist/Player/Event.d.ts +0 -0
  6. package/dist/Player/ItemManager.d.ts +17 -0
  7. package/dist/Player/MoveManager.d.ts +177 -0
  8. package/dist/Player/ParameterManager.d.ts +42 -0
  9. package/dist/Player/Player.d.ts +73 -0
  10. package/dist/Player/SkillManager.d.ts +23 -0
  11. package/dist/Player/StateManager.d.ts +39 -0
  12. package/{lib → dist}/RpgServer.d.ts +32 -15
  13. package/dist/RpgServerEngine.d.ts +5 -0
  14. package/dist/core/context.d.ts +2 -0
  15. package/dist/core/inject.d.ts +5 -0
  16. package/dist/core/setup.d.ts +6 -0
  17. package/dist/index.d.ts +9 -0
  18. package/dist/index.js +29673 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/module.d.ts +2 -0
  21. package/dist/rooms/lobby.d.ts +6 -0
  22. package/dist/rooms/map.d.ts +110 -0
  23. package/package.json +15 -37
  24. package/src/Gui/DialogGui.ts +3 -4
  25. package/src/Gui/Gui.ts +4 -6
  26. package/src/Player/BattleManager.ts +108 -99
  27. package/src/Player/ClassManager.ts +47 -46
  28. package/src/Player/ComponentManager.ts +26 -535
  29. package/src/Player/EffectManager.ts +44 -59
  30. package/src/Player/ElementManager.ts +70 -72
  31. package/src/Player/Event.ts +0 -0
  32. package/src/Player/GoldManager.ts +24 -6
  33. package/src/Player/GuiManager.ts +106 -97
  34. package/src/Player/ItemFixture.ts +22 -17
  35. package/src/Player/ItemManager.ts +234 -225
  36. package/src/Player/MoveManager.ts +1047 -457
  37. package/src/Player/ParameterManager.ts +59 -37
  38. package/src/Player/Player.ts +272 -1058
  39. package/src/Player/SkillManager.ts +146 -137
  40. package/src/Player/StateManager.ts +124 -98
  41. package/src/Player/VariableManager.ts +23 -3
  42. package/src/RpgServer.ts +36 -12
  43. package/src/RpgServerEngine.ts +7 -0
  44. package/src/core/context.ts +3 -0
  45. package/src/core/inject.ts +17 -0
  46. package/src/core/setup.ts +20 -0
  47. package/src/index.ts +9 -31
  48. package/src/module.ts +32 -0
  49. package/src/presets/index.ts +1 -3
  50. package/src/rooms/lobby.ts +24 -0
  51. package/src/rooms/map.ts +311 -0
  52. package/tsconfig.json +26 -23
  53. package/vite.config.ts +21 -0
  54. package/CHANGELOG.md +0 -174
  55. package/LICENSE +0 -19
  56. package/browser/manifest.json +0 -7
  57. package/browser/rpg.server.js +0 -22379
  58. package/browser/rpg.server.umd.cjs +0 -22410
  59. package/lib/Game/EventManager.d.ts +0 -54
  60. package/lib/Game/EventManager.js +0 -107
  61. package/lib/Game/EventManager.js.map +0 -1
  62. package/lib/Game/Map.d.ts +0 -191
  63. package/lib/Game/Map.js +0 -419
  64. package/lib/Game/Map.js.map +0 -1
  65. package/lib/Game/WorldMaps.d.ts +0 -17
  66. package/lib/Game/WorldMaps.js +0 -28
  67. package/lib/Game/WorldMaps.js.map +0 -1
  68. package/lib/Gui/DialogGui.js +0 -57
  69. package/lib/Gui/DialogGui.js.map +0 -1
  70. package/lib/Gui/Gui.js +0 -37
  71. package/lib/Gui/Gui.js.map +0 -1
  72. package/lib/Gui/MenuGui.js +0 -23
  73. package/lib/Gui/MenuGui.js.map +0 -1
  74. package/lib/Gui/NotificationGui.js +0 -8
  75. package/lib/Gui/NotificationGui.js.map +0 -1
  76. package/lib/Gui/ShopGui.js +0 -40
  77. package/lib/Gui/ShopGui.js.map +0 -1
  78. package/lib/Gui/index.js +0 -7
  79. package/lib/Gui/index.js.map +0 -1
  80. package/lib/Interfaces/Gui.d.ts +0 -4
  81. package/lib/Interfaces/Gui.js +0 -2
  82. package/lib/Interfaces/Gui.js.map +0 -1
  83. package/lib/Interfaces/StateStore.d.ts +0 -5
  84. package/lib/Interfaces/StateStore.js +0 -2
  85. package/lib/Interfaces/StateStore.js.map +0 -1
  86. package/lib/MatchMaker.d.ts +0 -24
  87. package/lib/MatchMaker.js +0 -42
  88. package/lib/MatchMaker.js.map +0 -1
  89. package/lib/Monitor/index.d.ts +0 -17
  90. package/lib/Monitor/index.js +0 -72
  91. package/lib/Monitor/index.js.map +0 -1
  92. package/lib/Player/BattleManager.d.ts +0 -36
  93. package/lib/Player/BattleManager.js +0 -101
  94. package/lib/Player/BattleManager.js.map +0 -1
  95. package/lib/Player/ClassManager.d.ts +0 -47
  96. package/lib/Player/ClassManager.js +0 -65
  97. package/lib/Player/ClassManager.js.map +0 -1
  98. package/lib/Player/ComponentManager.d.ts +0 -397
  99. package/lib/Player/ComponentManager.js +0 -505
  100. package/lib/Player/ComponentManager.js.map +0 -1
  101. package/lib/Player/EffectManager.d.ts +0 -46
  102. package/lib/Player/EffectManager.js +0 -75
  103. package/lib/Player/EffectManager.js.map +0 -1
  104. package/lib/Player/ElementManager.d.ts +0 -108
  105. package/lib/Player/ElementManager.js +0 -120
  106. package/lib/Player/ElementManager.js.map +0 -1
  107. package/lib/Player/GoldManager.d.ts +0 -17
  108. package/lib/Player/GoldManager.js +0 -27
  109. package/lib/Player/GoldManager.js.map +0 -1
  110. package/lib/Player/GuiManager.d.ts +0 -247
  111. package/lib/Player/GuiManager.js +0 -291
  112. package/lib/Player/GuiManager.js.map +0 -1
  113. package/lib/Player/ItemFixture.d.ts +0 -7
  114. package/lib/Player/ItemFixture.js +0 -19
  115. package/lib/Player/ItemFixture.js.map +0 -1
  116. package/lib/Player/ItemManager.d.ts +0 -331
  117. package/lib/Player/ItemManager.js +0 -475
  118. package/lib/Player/ItemManager.js.map +0 -1
  119. package/lib/Player/MoveManager.d.ts +0 -333
  120. package/lib/Player/MoveManager.js +0 -450
  121. package/lib/Player/MoveManager.js.map +0 -1
  122. package/lib/Player/ParameterManager.d.ts +0 -316
  123. package/lib/Player/ParameterManager.js +0 -408
  124. package/lib/Player/ParameterManager.js.map +0 -1
  125. package/lib/Player/Player.d.ts +0 -828
  126. package/lib/Player/Player.js +0 -927
  127. package/lib/Player/Player.js.map +0 -1
  128. package/lib/Player/SkillManager.d.ts +0 -163
  129. package/lib/Player/SkillManager.js +0 -223
  130. package/lib/Player/SkillManager.js.map +0 -1
  131. package/lib/Player/StateManager.d.ts +0 -185
  132. package/lib/Player/StateManager.js +0 -228
  133. package/lib/Player/StateManager.js.map +0 -1
  134. package/lib/Player/VariableManager.d.ts +0 -46
  135. package/lib/Player/VariableManager.js +0 -52
  136. package/lib/Player/VariableManager.js.map +0 -1
  137. package/lib/Query.d.ts +0 -127
  138. package/lib/Query.js +0 -159
  139. package/lib/Query.js.map +0 -1
  140. package/lib/RpgServer.js +0 -2
  141. package/lib/RpgServer.js.map +0 -1
  142. package/lib/Scenes/Map.d.ts +0 -136
  143. package/lib/Scenes/Map.js +0 -273
  144. package/lib/Scenes/Map.js.map +0 -1
  145. package/lib/decorators/event.d.ts +0 -43
  146. package/lib/decorators/event.js +0 -13
  147. package/lib/decorators/event.js.map +0 -1
  148. package/lib/decorators/map.d.ts +0 -178
  149. package/lib/decorators/map.js +0 -43
  150. package/lib/decorators/map.js.map +0 -1
  151. package/lib/entry-point.d.ts +0 -34
  152. package/lib/entry-point.js +0 -70
  153. package/lib/entry-point.js.map +0 -1
  154. package/lib/express/api.d.ts +0 -3
  155. package/lib/express/api.js +0 -105
  156. package/lib/express/api.js.map +0 -1
  157. package/lib/express/errors/NotAuthorized.d.ts +0 -4
  158. package/lib/express/errors/NotAuthorized.js +0 -7
  159. package/lib/express/errors/NotAuthorized.js.map +0 -1
  160. package/lib/express/errors/NotFound.d.ts +0 -4
  161. package/lib/express/errors/NotFound.js +0 -7
  162. package/lib/express/errors/NotFound.js.map +0 -1
  163. package/lib/express/server.d.ts +0 -18
  164. package/lib/express/server.js +0 -70
  165. package/lib/express/server.js.map +0 -1
  166. package/lib/index.d.ts +0 -20
  167. package/lib/index.js +0 -19
  168. package/lib/index.js.map +0 -1
  169. package/lib/inject.d.ts +0 -22
  170. package/lib/inject.js +0 -29
  171. package/lib/inject.js.map +0 -1
  172. package/lib/logs/index.js +0 -6
  173. package/lib/logs/index.js.map +0 -1
  174. package/lib/logs/item.js +0 -34
  175. package/lib/logs/item.js.map +0 -1
  176. package/lib/logs/log.js +0 -7
  177. package/lib/logs/log.js.map +0 -1
  178. package/lib/logs/skill.js +0 -19
  179. package/lib/logs/skill.js.map +0 -1
  180. package/lib/logs/state.js +0 -13
  181. package/lib/logs/state.js.map +0 -1
  182. package/lib/models/Item.d.ts +0 -10
  183. package/lib/models/Item.js +0 -2
  184. package/lib/models/Item.js.map +0 -1
  185. package/lib/presets/index.js +0 -65
  186. package/lib/presets/index.js.map +0 -1
  187. package/lib/server.d.ts +0 -137
  188. package/lib/server.js +0 -443
  189. package/lib/server.js.map +0 -1
  190. package/rpg.toml +0 -14
  191. package/src/Game/EventManager.ts +0 -125
  192. package/src/Game/Map.ts +0 -500
  193. package/src/Game/WorldMaps.ts +0 -45
  194. package/src/Interfaces/Gui.ts +0 -4
  195. package/src/Interfaces/StateStore.ts +0 -5
  196. package/src/MatchMaker.ts +0 -65
  197. package/src/Monitor/index.ts +0 -78
  198. package/src/Query.ts +0 -172
  199. package/src/Scenes/Map.ts +0 -310
  200. package/src/decorators/event.ts +0 -58
  201. package/src/decorators/map.ts +0 -226
  202. package/src/entry-point.ts +0 -111
  203. package/src/express/api.ts +0 -118
  204. package/src/express/errors/NotAuthorized.ts +0 -6
  205. package/src/express/errors/NotFound.ts +0 -6
  206. package/src/express/server.ts +0 -94
  207. package/src/inject.ts +0 -33
  208. package/src/models/Item.ts +0 -11
  209. package/src/server.ts +0 -459
  210. /package/{lib → dist}/Gui/MenuGui.d.ts +0 -0
  211. /package/{lib → dist}/Gui/NotificationGui.d.ts +0 -0
  212. /package/{lib → dist}/Gui/ShopGui.d.ts +0 -0
  213. /package/{lib → dist}/Gui/index.d.ts +0 -0
  214. /package/{lib → dist}/logs/index.d.ts +0 -0
  215. /package/{lib → dist}/logs/item.d.ts +0 -0
  216. /package/{lib → dist}/logs/log.d.ts +0 -0
  217. /package/{lib → dist}/logs/skill.d.ts +0 -0
  218. /package/{lib → dist}/logs/state.d.ts +0 -0
  219. /package/{lib → dist}/presets/index.d.ts +0 -0
@@ -1,145 +1,143 @@
1
- import { Utils } from '@rpgjs/common'
2
- import { RpgPlayer } from './Player';
3
- import { ItemFixture } from './ItemFixture';
4
- import { ItemInstance } from '@rpgjs/database';
1
+ import { arrayUniq, RpgCommonPlayer } from "@rpgjs/common";
2
+ import { Constructor } from "@rpgjs/common";
3
+ import { RpgPlayer } from "./Player";
5
4
 
6
- const {
7
- arrayUniq,
8
- applyMixins
9
- } = Utils
5
+ export function WithElementManager<TBase extends Constructor<RpgCommonPlayer>>(
6
+ Base: TBase
7
+ ) {
8
+ return class extends Base implements IWithElementManager {
9
+ _elementsEfficiency: { rate: number; element: any }[] = [];
10
10
 
11
- export class ElementManager extends ItemFixture {
12
- _elementsEfficiency: { rate: number, element: any }[]
13
-
14
- /**
11
+ /**
15
12
  * Recovers the player's elements defense on inventory. This list is generated from the `elementsDefense` property defined on the weapons or armors equipped.
16
13
  * If several items have the same element, only the highest rate will be taken into account.
17
- *
14
+ *
18
15
  * ```ts
19
16
  * import { Armor } from '@rpgjs/server'
20
- *
17
+ *
21
18
  * enum Elements {
22
19
  * Fire = 'fire'
23
20
  * }
24
- *
21
+ *
25
22
  * @Armor({
26
23
  * name: 'Shield',
27
24
  * elementsDefense: [{ rate: 1, element: Elements.Fire }]
28
25
  * })
29
26
  * class Shield {}
30
- *
27
+ *
31
28
  * @Armor({
32
29
  * name: 'FireShield',
33
30
  * elementsDefense: [{ rate: 0.5, element: Elements.Fire }]
34
31
  * })
35
32
  * class FireShield {}
36
- *
33
+ *
37
34
  * player.addItem(Shield)
38
35
  * player.addItem(FireShield)
39
36
  * player.equip(Shield)
40
37
  * player.equip(FireShield)
41
- *
38
+ *
42
39
  * console.log(player.elementsDefense) // [{ rate: 1, element: 'fire' }]
43
- * ```
40
+ * ```
44
41
  * @title Get Elements Defense
45
42
  * @prop {Array<{ rate: number, element: Element}>} player.elementsDefense
46
43
  * @readonly
47
44
  * @memberof ElementManager
48
45
  * */
49
- get elementsDefense(): { rate: number, element: any }[] {
50
- return this.getFeature('elementsDefense', 'element')
46
+ get elementsDefense(): { rate: number; element: any }[] {
47
+ return this.getFeature("elementsDefense", "element");
51
48
  }
52
49
 
53
- /**
54
- * Set or retrieves all the elements where the player is vulnerable or not.
55
- *
50
+ /**
51
+ * Set or retrieves all the elements where the player is vulnerable or not.
52
+ *
56
53
  * ```ts
57
54
  * import { Class } from '@rpgjs/server'
58
- *
55
+ *
59
56
  * enum Elements {
60
57
  * Fire = 'fire',
61
58
  * Ice = 'ice'
62
59
  * }
63
- *
60
+ *
64
61
  * @Class({
65
62
  * name: 'Fighter',
66
63
  * elementsEfficiency: [{ rate: 1, element: Elements.Fire }]
67
64
  * })
68
65
  * class Hero {}
69
- *
66
+ *
70
67
  * player.setClass(Hero)
71
- *
68
+ *
72
69
  * console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }]
73
- *
70
+ *
74
71
  * player.elementsEfficiency = [{ rate: 2, element: Elements.Ice }]
75
- *
72
+ *
76
73
  * console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }, { rate: 2, element: 'ice' }]
77
- * ```
74
+ * ```
78
75
  * @title Set/Get Elements Efficiency
79
76
  * @prop {Array<{ rate: number, element: Element}>} player.elementsEfficiency
80
77
  * @memberof ElementManager
81
78
  * */
82
- get elementsEfficiency(): { rate: number, element: any }[] {
83
- if (this._class) {
84
- return <any>[...this._elementsEfficiency, ...this._class.elementsEfficiency]
85
- }
86
- return this._elementsEfficiency
79
+ get elementsEfficiency(): { rate: number; element: any }[] {
80
+ if (this._class) {
81
+ return <any>[
82
+ ...this._elementsEfficiency,
83
+ ...(this._class()?.elementsEfficiency || []),
84
+ ];
85
+ }
86
+ return this._elementsEfficiency;
87
87
  }
88
88
 
89
89
  set elementsEfficiency(val) {
90
- this._elementsEfficiency = val
90
+ this._elementsEfficiency = val;
91
91
  }
92
92
 
93
- /**
93
+ /**
94
94
  * Retrieves a array of elements assigned to the player and the elements of the weapons / armor equipped
95
- *
95
+ *
96
96
  * ```ts
97
97
  * console.log(player.elements)
98
- * ```
98
+ * ```
99
99
  * @title Get Elements
100
100
  * @prop {Array<Element>} player.elements
101
101
  * @readonly
102
102
  * @memberof ElementManager
103
103
  * */
104
104
  get elements(): {
105
- rate: number,
106
- element: string
105
+ rate: number;
106
+ element: string;
107
107
  }[] {
108
- let elements: any = []
109
- for (let item of this.equipments) {
110
- if (item.elements) {
111
- elements = [...elements, ...item.elements]
112
- }
108
+ let elements: any = [];
109
+ for (let item of this.equipments()) {
110
+ if (item.elements) {
111
+ elements = [...elements, ...item.elements];
113
112
  }
114
- return arrayUniq(elements)
113
+ }
114
+ return arrayUniq(elements);
115
115
  }
116
116
 
117
117
  coefficientElements(otherPlayer: RpgPlayer): number {
118
- const atkPlayerElements: any = otherPlayer.elements
119
- const playerElements: any = this.elementsEfficiency
120
- let coefficient = 1
118
+ const atkPlayerElements: any = otherPlayer.elements;
119
+ const playerElements: any = this.elementsEfficiency;
120
+ let coefficient = 1;
121
121
 
122
- for (let atkElement of atkPlayerElements) {
123
- const elementPlayer = playerElements.find(el => el.element == atkElement.element)
124
- const elementPlayerDef = this.elementsDefense.find(el => el.element == atkElement.element)
125
- if (!elementPlayer) continue
126
- const fn = this.getFormulas('coefficientElements')
127
- if (!fn) {
128
- return coefficient
129
- }
130
- coefficient += fn(atkElement, elementPlayer, elementPlayerDef || { rate: 0 })
122
+ for (let atkElement of atkPlayerElements) {
123
+ const elementPlayer = playerElements.find(
124
+ (el) => el.element == atkElement.element
125
+ );
126
+ const elementPlayerDef = this.elementsDefense.find(
127
+ (el) => el.element == atkElement.element
128
+ );
129
+ if (!elementPlayer) continue;
130
+ const fn = this.getFormulas("coefficientElements");
131
+ if (!fn) {
132
+ return coefficient;
131
133
  }
132
- return coefficient
134
+ coefficient += fn(
135
+ atkElement,
136
+ elementPlayer,
137
+ elementPlayerDef || { rate: 0 }
138
+ );
139
+ }
140
+ return coefficient;
133
141
  }
142
+ };
134
143
  }
135
-
136
- export interface ElementManager{
137
- equipments: ItemInstance[]
138
- getFormulas: (name: string) => any,
139
- _class: any
140
- }
141
-
142
-
143
- applyMixins(ElementManager, [ItemFixture])
144
-
145
- export interface ElementManager extends ItemFixture { }
File without changes
@@ -1,7 +1,24 @@
1
- export class GoldManager {
2
- private _gold: number = 0
1
+ import { type Constructor } from "@rpgjs/common";
2
+ import { RpgCommonPlayer } from "@rpgjs/common";
3
3
 
4
- /**
4
+ /**
5
+ * Interface defining what MoveManager adds to a class
6
+ */
7
+ export interface IGoldManager {
8
+
9
+ }
10
+
11
+ /**
12
+ * Move Manager mixin
13
+ *
14
+ * Adds methods to manage player gold
15
+ *
16
+ * @param Base - The base class to extend
17
+ * @returns A new class with gold management capabilities
18
+ */
19
+ export function WithGoldManager<TBase extends Constructor<RpgCommonPlayer>>(Base: TBase) {
20
+ return class extends Base implements IGoldManager {
21
+ /**
5
22
  * You can change the game money
6
23
  *
7
24
  * ```ts
@@ -17,10 +34,11 @@ export class GoldManager {
17
34
  if (val < 0) {
18
35
  val = 0
19
36
  }
20
- this._gold = val
37
+ this._gold.set(val)
21
38
  }
22
39
 
23
40
  get gold(): number {
24
- return this._gold
41
+ return this._gold()
25
42
  }
26
- }
43
+ };
44
+ }
@@ -1,140 +1,149 @@
1
- import { Utils } from '@rpgjs/common'
2
- import { RpgPlayer } from './Player'
3
- import { Gui, DialogGui, MenuGui, ShopGui, NotificationGui } from '../Gui'
4
- import { DialogOptions, Choice } from '../Gui/DialogGui'
1
+ import { RpgPlayer } from "./Player";
2
+ import { Gui, DialogGui, MenuGui, ShopGui, NotificationGui } from "../Gui";
3
+ import { DialogOptions, Choice } from "../Gui/DialogGui";
4
+ import { Constructor, RpgCommonPlayer } from "@rpgjs/common";
5
5
 
6
- export class GuiManager {
6
+ export interface IGuiManager {
7
+ emit: any;
8
+ removeGui: (guiId: string, data?: any) => void;
9
+ }
7
10
 
8
- _gui: { [id: string]: Gui }
11
+ export function WithGuiManager<TBase extends Constructor<RpgCommonPlayer>>(
12
+ Base: TBase
13
+ ) {
14
+ return class extends Base implements IGuiManager {
15
+ _gui: { [id: string]: Gui } = {};
9
16
 
10
17
  /**
11
18
  * Show a text. This is a graphical interface already built. Opens the GUI named `rpg-dialog`
12
- *
19
+ *
13
20
  * ```ts
14
21
  * player.showText('Hello World')
15
22
  * ```
16
- *
23
+ *
17
24
  * The method returns a promise. It is resolved when the dialog box is closed.
18
- *
25
+ *
19
26
  * ```ts
20
27
  * await player.showText('Hello World')
21
28
  * // dialog box is closed, then ...
22
29
  * ```
23
- *
30
+ *
24
31
  * **Option: position**
25
- *
32
+ *
26
33
  * You can define how the dialog box is displayed:
27
34
  * - top
28
35
  * - middle
29
36
  * - bottom
30
- *
37
+ *
31
38
  * (bottom by default)
32
- *
39
+ *
33
40
  * ```ts
34
41
  * player.showText('Hello World', {
35
42
  * position: 'top'
36
43
  * })
37
44
  * ```
38
- *
45
+ *
39
46
  * **Option: fullWidth**
40
- *
47
+ *
41
48
  * `boolean` (true by default)
42
- *
49
+ *
43
50
  * Indicate that the dialog box will take the full width of the screen.
44
- *
51
+ *
45
52
  * ```ts
46
53
  * player.showText('Hello World', {
47
54
  * fullWidth: true
48
55
  * })
49
56
  * ```
50
- *
57
+ *
51
58
  * **Option: autoClose**
52
- *
59
+ *
53
60
  * `boolean` (false by default)
54
- *
61
+ *
55
62
  * If false, the user will have to press Enter to close the dialog box.
56
- *
63
+ *
57
64
  * ```ts
58
65
  * player.showText('Hello World', {
59
66
  * autoClose: true
60
67
  * })
61
68
  * ```
62
- *
69
+ *
63
70
  * **Option: typewriterEffect**
64
- *
71
+ *
65
72
  * `boolean` (true by default)
66
- *
73
+ *
67
74
  * Performs a typewriter effect
68
- *
75
+ *
69
76
  * ```ts
70
77
  * player.showText('Hello World', {
71
78
  * typewriterEffect: false
72
79
  * })
73
80
  * ```
74
- *
81
+ *
75
82
  * **Option: talkWith**
76
- *
83
+ *
77
84
  * `RpgPlayer` (nothing by default)
78
- *
85
+ *
79
86
  * If you specify the event or another player, the other player will stop his or her movement and look in the player's direction.
80
- *
87
+ *
81
88
  * ```ts
82
89
  * // Code in an event
83
90
  * player.showText('Hello World', {
84
91
  * talkWith: this
85
92
  * })
86
93
  * ```
87
- *
88
- * @title Show Text
94
+ *
95
+ * @title Show Text
89
96
  * @method player.showText(text,options)
90
- * @param {string} text
97
+ * @param {string} text
91
98
  * @param {object} [options] the different options, see usage below
92
99
  * @returns {Promise}
93
100
  * @memberof GuiManager
94
101
  */
95
102
  showText(msg: string, options: DialogOptions = {}): Promise<any> {
96
- const gui = new DialogGui(<any>this)
97
- this._gui[gui.id] = gui
98
- return gui.openDialog(msg, options)
103
+ const gui = new DialogGui(<any>this);
104
+ this._gui[gui.id] = gui;
105
+ return gui.openDialog(msg, options);
99
106
  }
100
107
 
101
108
  /**
102
109
  * Shows a dialog box with a choice. Opens the GUI named `rpg-dialog`
103
- *
110
+ *
104
111
  * ```ts
105
112
  * const choice = await player.showChoices('What color do you prefer?', [
106
113
  * { text: 'Black', value: 'black' },
107
114
  * { text: 'Rather the blue', value: 'blue' },
108
115
  * { text: 'I don\'t have a preference!', value: 'none' }
109
116
  * ])
110
- *
117
+ *
111
118
  * // If the player selects the first
112
119
  * console.log(choice) // { text: 'Black', value: 'black' }
113
120
  * ```
114
- *
115
- * @title Show Choices
121
+ *
122
+ * @title Show Choices
116
123
  * @method player.showChoices(text,choices)
117
- * @param {string} text
124
+ * @param {string} text
118
125
  * @param {Array<{ text: string, value: any }>} choices
119
126
  * @param {object} [options] Same options as the openDialog method
120
127
  * @returns {Promise<Choice | null>}
121
128
  * @memberof GuiManager
122
129
  */
123
- showChoices(msg: string, choices: Choice[], options?: DialogOptions): Promise<Choice | null> {
124
- return this
125
- .showText(msg, {
126
- choices,
127
- ...options
128
- })
129
- .then((indexSelected: number) => {
130
- if (!choices[indexSelected]) return null
131
- return choices[indexSelected]
132
- })
130
+ showChoices(
131
+ msg: string,
132
+ choices: Choice[],
133
+ options?: DialogOptions
134
+ ): Promise<Choice | null> {
135
+ return this.showText(msg, {
136
+ choices,
137
+ ...options,
138
+ }).then((indexSelected: number) => {
139
+ if (!choices[indexSelected]) return null;
140
+ return choices[indexSelected];
141
+ });
133
142
  }
134
143
 
135
144
  /**
136
145
  * Displays a notification . Opens the GUI named `rpg-notification`
137
- *
146
+ *
138
147
  * @title Displays a notification
139
148
  * @method player.showNotification()
140
149
  * @param {string} message - The message to display in the notification
@@ -145,42 +154,45 @@ export class GuiManager {
145
154
  * @returns {void}
146
155
  * @memberof GuiManager
147
156
  */
148
- showNotification(message: string, options: { time?: number, icon?: string, sound?: string } = {}): Promise<any> {
149
- const gui = new NotificationGui(<any>this)
150
- this._gui[gui.id] = gui
151
- const data = {
152
- message,
153
- ...options
154
- }
155
- return gui.open(data)
157
+ showNotification(
158
+ message: string,
159
+ options: { time?: number; icon?: string; sound?: string } = {}
160
+ ): Promise<any> {
161
+ const gui = new NotificationGui(<any>this);
162
+ this._gui[gui.id] = gui;
163
+ const data = {
164
+ message,
165
+ ...options,
166
+ };
167
+ return gui.open(data);
156
168
  }
157
169
 
158
170
  /**
159
171
  * Calls main menu. Opens the GUI named `rpg-main-menu`
160
- *
172
+ *
161
173
  * @title Call Main Menu
162
174
  * @method player.callMainMenu()
163
175
  * @returns {void}
164
176
  * @memberof GuiManager
165
177
  */
166
178
  callMainMenu() {
167
- const gui = new MenuGui(<any>this)
168
- this._gui[gui.id] = gui
169
- return gui.open()
179
+ const gui = new MenuGui(<any>this);
180
+ this._gui[gui.id] = gui;
181
+ return gui.open();
170
182
  }
171
183
 
172
184
  /**
173
185
  * Calls shop menu. Opens the GUI named `rpg-shop`
174
- *
186
+ *
175
187
  * @title Call Shop Menu
176
188
  * @method player.callShop()
177
189
  * @returns {void}
178
190
  * @memberof GuiManager
179
191
  */
180
192
  callShop(items: any[]) {
181
- const gui = new ShopGui(<any>this)
182
- this._gui[gui.id] = gui
183
- return gui.open(items)
193
+ const gui = new ShopGui(<any>this);
194
+ this._gui[gui.id] = gui;
195
+ return gui.open(items);
184
196
  }
185
197
 
186
198
  /**
@@ -219,44 +231,44 @@ export class GuiManager {
219
231
  * @memberof GuiManager
220
232
  */
221
233
  gui(guiId: string) {
222
- const gui = new Gui(guiId, <any>this)
223
- this._gui[guiId] = gui
224
- return gui
234
+ const gui = new Gui(guiId, <any>this);
235
+ this._gui[guiId] = gui;
236
+ return gui;
225
237
  }
226
238
 
227
239
  /**
228
240
  * Closes the GUI and removes it from memory
229
- *
241
+ *
230
242
  * @title Close custom GUI
231
243
  * @method player.removeGui(guiId,data)
232
244
  * @param {string} guiId
233
- * @param {object} [data] Passing data if you close the GUI
245
+ * @param {object} [data] Passing data if you close the GUI
234
246
  * @returns {Gui}
235
247
  * @memberof GuiManager
236
248
  */
237
249
  removeGui(guiId: string, data?: any) {
238
- if (this._gui[guiId]) {
239
- this._gui[guiId].close(data)
240
- delete this._gui[guiId]
241
- }
250
+ if (this._gui[guiId]) {
251
+ this._gui[guiId].close(data);
252
+ delete this._gui[guiId];
253
+ }
242
254
  }
243
255
 
244
256
  private _attachedGui(players: RpgPlayer[] | RpgPlayer, display: boolean) {
245
- if (!Utils.isArray(players)) {
246
- players = [players] as RpgPlayer[]
247
- }
248
- this.emit('gui.tooltip', {
249
- players: (players as RpgPlayer[]).map(player => player.id),
250
- display
251
- })
257
+ if (!Array.isArray(players)) {
258
+ players = [players] as RpgPlayer[];
259
+ }
260
+ this.emit("gui.tooltip", {
261
+ players: (players as RpgPlayer[]).map((player) => player.id),
262
+ display,
263
+ });
252
264
  }
253
265
 
254
- /**
266
+ /**
255
267
  * Display the GUI attached to the players
256
- *
257
- * If you don't specify the players as parameters, it will display the GUI of the instance
268
+ *
269
+ * If you don't specify the players as parameters, it will display the GUI of the instance
258
270
  * But you can specify which GUIs to display by specifying the players as the first parameter
259
- *
271
+ *
260
272
  * @title View to GUI attached
261
273
  * @method player.showAttachedGui(players?)
262
274
  * @param {RpgPlayer[] | RpgPlayer} [players] The GUIs attached to the players to display
@@ -274,13 +286,13 @@ export class GuiManager {
274
286
  * @memberof GuiManager
275
287
  * */
276
288
  showAttachedGui(players?: RpgPlayer[] | RpgPlayer) {
277
- const _players = players || this
278
- this._attachedGui(_players as RpgPlayer[], true)
289
+ const _players = players || this;
290
+ this._attachedGui(_players as RpgPlayer[], true);
279
291
  }
280
292
 
281
- /**
293
+ /**
282
294
  * Hide the GUI attached to the players
283
- *
295
+ *
284
296
  * @title Hide to GUI attached
285
297
  * @method player.hideAttachedGui(players?)
286
298
  * @param {RpgPlayer[] | RpgPlayer} [players] The GUIs attached to the players to hide
@@ -298,11 +310,8 @@ export class GuiManager {
298
310
  * @memberof GuiManager
299
311
  * */
300
312
  hideAttachedGui(players?: RpgPlayer[] | RpgPlayer) {
301
- const _players = players || this
302
- this._attachedGui(_players as RpgPlayer[], false)
313
+ const _players = players || this;
314
+ this._attachedGui(_players as RpgPlayer[], false);
303
315
  }
316
+ };
304
317
  }
305
-
306
- export interface GuiManager {
307
- emit: any
308
- }
@@ -1,24 +1,29 @@
1
- import { ItemInstance } from "@rpgjs/database"
1
+ import { ItemInstance } from "@rpgjs/database";
2
+ import { RpgCommonPlayer, type Constructor } from "@rpgjs/common";
3
+ export class ItemFixture {}
2
4
 
3
- export class ItemFixture {
5
+ export function WithItemFixture<TBase extends Constructor<RpgCommonPlayer>>(
6
+ Base: TBase
7
+ ) {
8
+ return class extends Base implements IItemFixture {
4
9
  protected getFeature(name, prop): any {
5
- const array = {}
6
- for (let item of this.equipments) {
7
- if (item[name]) {
8
- for (let feature of item[name]) {
9
- const { rate } = feature
10
- const instance = feature[prop]
11
- const cache = array[instance.id]
12
- if (cache && cache.rate >= rate) continue
13
- array[instance.id] = feature
14
- }
15
- }
10
+ const array = {};
11
+ for (let item of this.equipments()) {
12
+ if (item[name]) {
13
+ for (let feature of item[name]) {
14
+ const { rate } = feature;
15
+ const instance = feature[prop];
16
+ const cache = array[instance.id];
17
+ if (cache && cache.rate >= rate) continue;
18
+ array[instance.id] = feature;
19
+ }
16
20
  }
17
- return Object.values(array)
21
+ }
22
+ return Object.values(array);
18
23
  }
24
+ };
19
25
  }
20
26
 
21
-
22
- export interface ItemFixture{
23
- equipments: ItemInstance[]
27
+ export interface ItemFixture {
28
+ equipments: ItemInstance[];
24
29
  }