@rpgjs/server 5.0.0-alpha.9 → 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 (114) 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 +95 -32
  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 +87 -4
  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 -29711
  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 +394 -32
  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 +125 -14
  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
@@ -30,102 +30,16 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
30
30
  return class extends Base {
31
31
  _elementsEfficiency: { rate: number; element: any }[] = [];
32
32
 
33
- /**
34
- * Recovers the player's elements defense on inventory. This list is generated from the `elementsDefense` property defined on the weapons or armors equipped.
35
- * If several items have the same element, only the highest rate will be taken into account.
36
- *
37
- * Gets the defensive capabilities against various elements from equipped items.
38
- * The system automatically consolidates multiple defensive items, keeping only
39
- * the highest protection rate for each element type. This provides a comprehensive
40
- * view of the player's elemental resistances from all equipped gear.
41
- *
42
- * @returns Array of element defense objects with rate and element properties
43
- *
44
- * @example
45
- * ```ts
46
- * import { Armor } from '@rpgjs/server'
47
- *
48
- * enum Elements {
49
- * Fire = 'fire'
50
- * }
51
- *
52
- * @Armor({
53
- * name: 'Shield',
54
- * elementsDefense: [{ rate: 1, element: Elements.Fire }]
55
- * })
56
- * class Shield {}
57
- *
58
- * @Armor({
59
- * name: 'FireShield',
60
- * elementsDefense: [{ rate: 0.5, element: Elements.Fire }]
61
- * })
62
- * class FireShield {}
63
- *
64
- * player.addItem(Shield)
65
- * player.addItem(FireShield)
66
- * player.equip(Shield)
67
- * player.equip(FireShield)
68
- *
69
- * console.log(player.elementsDefense) // [{ rate: 1, element: 'fire' }]
70
- *
71
- * // Check specific element defense
72
- * const fireDefense = player.elementsDefense.find(def => def.element === 'fire');
73
- * if (fireDefense) {
74
- * console.log(`Fire defense rate: ${fireDefense.rate}`);
75
- * }
76
- * ```
77
- */
78
33
  get elementsDefense(): { rate: number; element: any }[] {
79
34
  return (this as any).getFeature("elementsDefense", "element");
80
35
  }
81
36
 
82
- /**
83
- * Set or retrieves all the elements where the player is vulnerable or not.
84
- *
85
- * Manages the player's elemental efficiency modifiers, which determine how
86
- * effective different elements are against this player. Values greater than 1
87
- * indicate vulnerability, while values less than 1 indicate resistance.
88
- * This combines both class-based efficiency and player-specific modifiers.
89
- *
90
- * @returns Array of element efficiency objects with rate and element properties
91
- *
92
- * @example
93
- * ```ts
94
- * import { Class } from '@rpgjs/server'
95
- *
96
- * enum Elements {
97
- * Fire = 'fire',
98
- * Ice = 'ice'
99
- * }
100
- *
101
- * @Class({
102
- * name: 'Fighter',
103
- * elementsEfficiency: [{ rate: 1, element: Elements.Fire }]
104
- * })
105
- * class Hero {}
106
- *
107
- * player.setClass(Hero)
108
- *
109
- * console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }]
110
- *
111
- * player.elementsEfficiency = [{ rate: 2, element: Elements.Ice }]
112
- *
113
- * console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }, { rate: 2, element: 'ice' }]
114
- *
115
- * // Check for vulnerabilities
116
- * const vulnerabilities = player.elementsEfficiency.filter(eff => eff.rate > 1);
117
- * console.log('Vulnerable to:', vulnerabilities.map(v => v.element));
118
- *
119
- * // Check for resistances
120
- * const resistances = player.elementsEfficiency.filter(eff => eff.rate < 1);
121
- * console.log('Resistant to:', resistances.map(r => r.element));
122
- * ```
123
- */
124
37
  get elementsEfficiency(): { rate: number; element: any }[] {
125
38
  if (this._class()) {
39
+ const classData = this._class() as any;
126
40
  return <any>[
127
41
  ...this._elementsEfficiency,
128
- ...(this._class()?.elementsEfficiency || []),
42
+ ...(classData?.elementsEfficiency || []),
129
43
  ];
130
44
  }
131
45
  return this._elementsEfficiency;
@@ -135,33 +49,6 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
135
49
  this._elementsEfficiency = val;
136
50
  }
137
51
 
138
- /**
139
- * Retrieves a array of elements assigned to the player and the elements of the weapons / armor equipped
140
- *
141
- * Gets all offensive elements available to the player from equipped weapons and armor.
142
- * This determines what elemental damage types the player can deal in combat.
143
- * The system automatically combines elements from all equipped items and removes duplicates.
144
- *
145
- * @returns Array of element objects with rate and element properties for offensive capabilities
146
- *
147
- * @example
148
- * ```ts
149
- * // Get all offensive elements
150
- * console.log(player.elements); // [{ rate: 1.5, element: 'fire' }, { rate: 1.2, element: 'ice' }]
151
- *
152
- * // Check if player can deal fire damage
153
- * const hasFireElement = player.elements.some(el => el.element === 'fire');
154
- * if (hasFireElement) {
155
- * console.log('Player can deal fire damage');
156
- * }
157
- *
158
- * // Get strongest element
159
- * const strongestElement = player.elements.reduce((max, current) =>
160
- * current.rate > max.rate ? current : max
161
- * );
162
- * console.log(`Strongest element: ${strongestElement.element} (${strongestElement.rate})`);
163
- * ```
164
- */
165
52
  get elements(): {
166
53
  rate: number;
167
54
  element: string;
@@ -175,40 +62,6 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
175
62
  return arrayUniq(elements);
176
63
  }
177
64
 
178
- /**
179
- * Calculate elemental damage coefficient against another player
180
- *
181
- * Determines the damage multiplier when this player attacks another player,
182
- * taking into account the attacker's offensive elements, the defender's
183
- * elemental efficiency, and elemental defense from equipment. This is used
184
- * in the battle system to calculate elemental damage modifiers.
185
- *
186
- * @param otherPlayer - The target player to calculate coefficient against
187
- * @returns Numerical coefficient to multiply base damage by
188
- *
189
- * @example
190
- * ```ts
191
- * // Calculate elemental damage coefficient
192
- * const firePlayer = new MyPlayer();
193
- * const icePlayer = new MyPlayer();
194
- *
195
- * // Fire player attacks ice player (assuming ice is weak to fire)
196
- * const coefficient = icePlayer.coefficientElements(firePlayer);
197
- * console.log(`Damage multiplier: ${coefficient}`); // e.g., 2.0 for double damage
198
- *
199
- * // Use in damage calculation
200
- * const baseDamage = 100;
201
- * const finalDamage = baseDamage * coefficient;
202
- * console.log(`Final damage: ${finalDamage}`);
203
- *
204
- * // Check for elemental advantage
205
- * if (coefficient > 1) {
206
- * console.log('Attacker has elemental advantage!');
207
- * } else if (coefficient < 1) {
208
- * console.log('Defender resists this element');
209
- * }
210
- * ```
211
- */
212
65
  coefficientElements(otherPlayer: RpgPlayer): number {
213
66
  const atkPlayerElements: any = (otherPlayer as any).elements;
214
67
  const playerElements: any = this.elementsEfficiency;
@@ -238,7 +91,76 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
238
91
  }
239
92
 
240
93
  /**
241
- * Type helper to extract the interface from the WithElementManager mixin
242
- * This provides the type without duplicating method signatures
94
+ * Interface for Element Manager functionality
95
+ *
96
+ * Provides elemental management capabilities including resistances, vulnerabilities,
97
+ * and attack elements. This interface defines the public API of the ElementManager mixin.
243
98
  */
244
- export type IElementManager = InstanceType<ReturnType<typeof WithElementManager>>;
99
+ export interface IElementManager {
100
+ /**
101
+ * Gets the defensive capabilities against various elements from equipped items.
102
+ * The system automatically consolidates multiple defensive items, keeping only
103
+ * the highest protection rate for each element type.
104
+ *
105
+ * @returns Array of element defense objects with rate and element properties
106
+ */
107
+ elementsDefense: { rate: number; element: any }[];
108
+
109
+ /**
110
+ * Manages the player's elemental efficiency modifiers, which determine how
111
+ * effective different elements are against this player. Values greater than 1
112
+ * indicate vulnerability, while values less than 1 indicate resistance.
113
+ * This combines both class-based efficiency and player-specific modifiers.
114
+ *
115
+ * @returns Array of element efficiency objects with rate and element properties
116
+ */
117
+ elementsEfficiency: { rate: number; element: any }[];
118
+
119
+ /**
120
+ * Gets all offensive elements available to the player from equipped weapons and armor.
121
+ * This determines what elemental damage types the player can deal in combat.
122
+ * The system automatically combines elements from all equipped items and removes duplicates.
123
+ *
124
+ * @returns Array of element objects with rate and element properties for offensive capabilities
125
+ */
126
+ elements: {
127
+ rate: number;
128
+ element: string;
129
+ }[];
130
+
131
+ /**
132
+ * Calculate elemental damage coefficient against another player
133
+ *
134
+ * Determines the damage multiplier when this player attacks another player,
135
+ * taking into account the attacker's offensive elements, the defender's
136
+ * elemental efficiency, and elemental defense from equipment. This is used
137
+ * in the battle system to calculate elemental damage modifiers.
138
+ *
139
+ * @param otherPlayer - The target player to calculate coefficient against
140
+ * @returns Numerical coefficient to multiply base damage by
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * // Calculate elemental damage coefficient
145
+ * const firePlayer = new MyPlayer();
146
+ * const icePlayer = new MyPlayer();
147
+ *
148
+ * // Fire player attacks ice player (assuming ice is weak to fire)
149
+ * const coefficient = icePlayer.coefficientElements(firePlayer);
150
+ * console.log(`Damage multiplier: ${coefficient}`); // e.g., 2.0 for double damage
151
+ *
152
+ * // Use in damage calculation
153
+ * const baseDamage = 100;
154
+ * const finalDamage = baseDamage * coefficient;
155
+ * console.log(`Final damage: ${finalDamage}`);
156
+ *
157
+ * // Check for elemental advantage
158
+ * if (coefficient > 1) {
159
+ * console.log('Attacker has elemental advantage!');
160
+ * } else if (coefficient < 1) {
161
+ * console.log('Defender resists this element');
162
+ * }
163
+ * ```
164
+ */
165
+ coefficientElements(otherPlayer: RpgPlayer): number;
166
+ }
@@ -1,6 +1,9 @@
1
1
  import { RpgPlayer } from "./Player";
2
- import { Gui, DialogGui, MenuGui, ShopGui, NotificationGui } from "../Gui";
2
+ import { Gui, DialogGui, MenuGui, ShopGui, NotificationGui, SaveLoadGui, GameoverGui } from "../Gui";
3
3
  import { DialogOptions, Choice } from "../Gui/DialogGui";
4
+ import { SaveLoadOptions, SaveSlot } from "../Gui/SaveLoadGui";
5
+ import { MenuGuiOptions } from "../Gui/MenuGui";
6
+ import { GameoverGuiOptions, GameoverGuiSelection } from "../Gui/GameoverGui";
4
7
  import { Constructor, PlayerCtor } from "@rpgjs/common";
5
8
 
6
9
  /**
@@ -56,21 +59,42 @@ export function WithGuiManager<TBase extends PlayerCtor>(
56
59
 
57
60
  showNotification(
58
61
  message: string,
59
- options: { time?: number; icon?: string; sound?: string } = {}
62
+ options: { time?: number; icon?: string; sound?: string; type?: "info" | "warn" | "error" } = {}
60
63
  ): Promise<any> {
61
- const gui = new NotificationGui(<any>this);
62
- this._gui[gui.id] = gui;
63
- const data = {
64
+ this.emit('notification', {
64
65
  message,
65
66
  ...options,
66
- };
67
- return gui.open(data);
67
+ });
68
+ return Promise.resolve(true);
68
69
  }
69
70
 
70
- callMainMenu() {
71
+ callMainMenu(options: MenuGuiOptions = {}) {
71
72
  const gui = new MenuGui(<any>this);
72
73
  this._gui[gui.id] = gui;
73
- return gui.open();
74
+ return gui.open(options);
75
+ }
76
+
77
+ callGameover(options: GameoverGuiOptions = {}): Promise<GameoverGuiSelection | null> {
78
+ const gui = new GameoverGui(<any>this);
79
+ this._gui[gui.id] = gui;
80
+ return gui.open(options);
81
+ }
82
+
83
+ showSaveLoad(slots: SaveSlot[] = [], options: SaveLoadOptions = {}): Promise<number | null> {
84
+ const gui = new SaveLoadGui(<any>this);
85
+ this._gui[gui.id] = gui;
86
+ return gui.open(slots, options).then((index) => {
87
+ if (typeof index !== 'number') return null;
88
+ return index;
89
+ });
90
+ }
91
+
92
+ showSave(slots: SaveSlot[] = [], options: SaveLoadOptions = {}): Promise<number | null> {
93
+ return this.showSaveLoad(slots, { ...options, mode: 'save' });
94
+ }
95
+
96
+ showLoad(slots: SaveSlot[] = [], options: SaveLoadOptions = {}): Promise<number | null> {
97
+ return this.showSaveLoad(slots, { ...options, mode: 'load' });
74
98
  }
75
99
 
76
100
  /**
@@ -81,7 +105,13 @@ export function WithGuiManager<TBase extends PlayerCtor>(
81
105
  * @returns {void}
82
106
  * @memberof GuiManager
83
107
  */
84
- callShop(items: any[]) {
108
+ callShop(items: any[] | {
109
+ items: any[]
110
+ sell?: Record<string, number> | Array<{ id: string; multiplier: number }>
111
+ sellMultiplier?: number
112
+ message?: string
113
+ face?: { id: string; expression?: string }
114
+ }) {
85
115
  const gui = new ShopGui(<any>this);
86
116
  this._gui[gui.id] = gui;
87
117
  return gui.open(items);
@@ -128,6 +158,10 @@ export function WithGuiManager<TBase extends PlayerCtor>(
128
158
  return gui;
129
159
  }
130
160
 
161
+ getGui(guiId: string) {
162
+ return this._gui[guiId];
163
+ }
164
+
131
165
  /**
132
166
  * Closes the GUI and removes it from memory
133
167
  *
@@ -345,19 +379,96 @@ export interface IGuiManager {
345
379
  */
346
380
  showNotification(
347
381
  message: string,
348
- options?: { time?: number; icon?: string; sound?: string }
382
+ options?: { time?: number; icon?: string; sound?: string; type?: "info" | "warn" | "error" }
349
383
  ): Promise<any>;
384
+
385
+ /**
386
+ * Display a save/load slots screen. Opens the GUI named `rpg-save`
387
+ *
388
+ * ```ts
389
+ * const index = await player.showSaveLoad(slots, { mode: 'save' })
390
+ * ```
391
+ *
392
+ * @title Show Save/Load
393
+ * @method player.showSaveLoad(slots,options)
394
+ * @param {Array<object>} slots
395
+ * @param {object} [options]
396
+ * @returns {Promise<number | null>}
397
+ * @memberof GuiManager
398
+ */
399
+ showSaveLoad(slots?: SaveSlot[], options?: SaveLoadOptions): Promise<number | null>;
400
+
401
+ /**
402
+ * Display a save slots screen. Opens the GUI named `rpg-save`
403
+ *
404
+ * ```ts
405
+ * const index = await player.showSave(slots)
406
+ * ```
407
+ *
408
+ * @title Show Save
409
+ * @method player.showSave(slots,options)
410
+ * @param {Array<object>} slots
411
+ * @param {object} [options]
412
+ * @returns {Promise<number | null>}
413
+ * @memberof GuiManager
414
+ */
415
+ showSave(slots?: SaveSlot[], options?: SaveLoadOptions): Promise<number | null>;
416
+
417
+ /**
418
+ * Display a load slots screen. Opens the GUI named `rpg-save`
419
+ *
420
+ * ```ts
421
+ * const index = await player.showLoad(slots)
422
+ * ```
423
+ *
424
+ * @title Show Load
425
+ * @method player.showLoad(slots,options)
426
+ * @param {Array<object>} slots
427
+ * @param {object} [options]
428
+ * @returns {Promise<number | null>}
429
+ * @memberof GuiManager
430
+ */
431
+ showLoad(slots?: SaveSlot[], options?: SaveLoadOptions): Promise<number | null>;
350
432
  /**
351
433
  * Calls main menu. Opens the GUI named `rpg-main-menu`
352
434
  *
353
435
  * @title Call Main Menu
354
- * @method player.callMainMenu()
436
+ * @method player.callMainMenu(options)
437
+ * @param {object} [options]
355
438
  * @returns {void}
356
439
  * @memberof GuiManager
357
440
  */
358
- callMainMenu(): void;
359
- callShop(items: any[]): void;
441
+ callMainMenu(options?: MenuGuiOptions): void;
442
+
443
+ /**
444
+ * Calls game over menu. Opens the GUI named `rpg-gameover`
445
+ *
446
+ * ```ts
447
+ * const selection = await player.callGameover()
448
+ * if (selection?.id === 'title') {
449
+ * await player.gui('rpg-title-screen').open()
450
+ * }
451
+ * if (selection?.id === 'load') {
452
+ * await player.showLoad()
453
+ * }
454
+ * ```
455
+ *
456
+ * @title Call Game Over Menu
457
+ * @method player.callGameover(options)
458
+ * @param {object} [options]
459
+ * @returns {Promise<GameoverGuiSelection | null>}
460
+ * @memberof GuiManager
461
+ */
462
+ callGameover(options?: GameoverGuiOptions): Promise<GameoverGuiSelection | null>;
463
+ callShop(items: any[] | {
464
+ items: any[]
465
+ sell?: Record<string, number> | Array<{ id: string; multiplier: number }>
466
+ sellMultiplier?: number
467
+ message?: string
468
+ face?: { id: string; expression?: string }
469
+ }): void;
360
470
  gui(guiId: string): Gui;
471
+ getGui(guiId: string): Gui;
361
472
  removeGui(guiId: string, data?: any): void;
362
473
  showAttachedGui(players?: RpgPlayer[] | RpgPlayer): void;
363
474
  hideAttachedGui(players?: RpgPlayer[] | RpgPlayer): void;