@rpgjs/server 4.2.2 → 5.0.0-alpha.0
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.
- package/{lib → dist}/Gui/DialogGui.d.ts +1 -2
- package/{lib → dist}/Gui/Gui.d.ts +1 -2
- package/dist/Player/BattleManager.d.ts +22 -0
- package/dist/Player/ClassManager.d.ts +18 -0
- package/dist/Player/Event.d.ts +0 -0
- package/dist/Player/ItemManager.d.ts +17 -0
- package/dist/Player/MoveManager.d.ts +177 -0
- package/dist/Player/ParameterManager.d.ts +42 -0
- package/dist/Player/Player.d.ts +73 -0
- package/dist/Player/SkillManager.d.ts +23 -0
- package/dist/Player/StateManager.d.ts +39 -0
- package/{lib → dist}/RpgServer.d.ts +34 -17
- package/dist/RpgServerEngine.d.ts +5 -0
- package/dist/core/context.d.ts +2 -0
- package/dist/core/inject.d.ts +5 -0
- package/dist/core/setup.d.ts +6 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +29673 -0
- package/dist/index.js.map +1 -0
- package/dist/module.d.ts +2 -0
- package/dist/rooms/lobby.d.ts +6 -0
- package/dist/rooms/map.d.ts +110 -0
- package/package.json +16 -38
- package/src/Gui/DialogGui.ts +3 -4
- package/src/Gui/Gui.ts +4 -6
- package/src/Player/BattleManager.ts +108 -99
- package/src/Player/ClassManager.ts +47 -46
- package/src/Player/ComponentManager.ts +26 -535
- package/src/Player/EffectManager.ts +44 -59
- package/src/Player/ElementManager.ts +70 -72
- package/src/Player/Event.ts +0 -0
- package/src/Player/GoldManager.ts +24 -6
- package/src/Player/GuiManager.ts +106 -97
- package/src/Player/ItemFixture.ts +22 -17
- package/src/Player/ItemManager.ts +234 -225
- package/src/Player/MoveManager.ts +1047 -457
- package/src/Player/ParameterManager.ts +59 -37
- package/src/Player/Player.ts +272 -1058
- package/src/Player/SkillManager.ts +146 -137
- package/src/Player/StateManager.ts +124 -98
- package/src/Player/VariableManager.ts +23 -3
- package/src/RpgServer.ts +38 -14
- package/src/RpgServerEngine.ts +7 -0
- package/src/core/context.ts +3 -0
- package/src/core/inject.ts +17 -0
- package/src/core/setup.ts +20 -0
- package/src/index.ts +9 -31
- package/src/module.ts +32 -0
- package/src/presets/index.ts +1 -3
- package/src/rooms/lobby.ts +24 -0
- package/src/rooms/map.ts +311 -0
- package/tsconfig.json +26 -23
- package/vite.config.ts +21 -0
- package/CHANGELOG.md +0 -163
- package/LICENSE +0 -19
- package/browser/manifest.json +0 -7
- package/browser/rpg.server.js +0 -22372
- package/browser/rpg.server.umd.cjs +0 -22403
- package/lib/Game/EventManager.d.ts +0 -54
- package/lib/Game/EventManager.js +0 -107
- package/lib/Game/EventManager.js.map +0 -1
- package/lib/Game/Map.d.ts +0 -191
- package/lib/Game/Map.js +0 -414
- package/lib/Game/Map.js.map +0 -1
- package/lib/Game/WorldMaps.d.ts +0 -17
- package/lib/Game/WorldMaps.js +0 -28
- package/lib/Game/WorldMaps.js.map +0 -1
- package/lib/Gui/DialogGui.js +0 -57
- package/lib/Gui/DialogGui.js.map +0 -1
- package/lib/Gui/Gui.js +0 -37
- package/lib/Gui/Gui.js.map +0 -1
- package/lib/Gui/MenuGui.js +0 -23
- package/lib/Gui/MenuGui.js.map +0 -1
- package/lib/Gui/NotificationGui.js +0 -8
- package/lib/Gui/NotificationGui.js.map +0 -1
- package/lib/Gui/ShopGui.js +0 -40
- package/lib/Gui/ShopGui.js.map +0 -1
- package/lib/Gui/index.js +0 -7
- package/lib/Gui/index.js.map +0 -1
- package/lib/Interfaces/Gui.d.ts +0 -4
- package/lib/Interfaces/Gui.js +0 -2
- package/lib/Interfaces/Gui.js.map +0 -1
- package/lib/Interfaces/StateStore.d.ts +0 -5
- package/lib/Interfaces/StateStore.js +0 -2
- package/lib/Interfaces/StateStore.js.map +0 -1
- package/lib/MatchMaker.d.ts +0 -24
- package/lib/MatchMaker.js +0 -42
- package/lib/MatchMaker.js.map +0 -1
- package/lib/Monitor/index.d.ts +0 -17
- package/lib/Monitor/index.js +0 -72
- package/lib/Monitor/index.js.map +0 -1
- package/lib/Player/BattleManager.d.ts +0 -36
- package/lib/Player/BattleManager.js +0 -101
- package/lib/Player/BattleManager.js.map +0 -1
- package/lib/Player/ClassManager.d.ts +0 -47
- package/lib/Player/ClassManager.js +0 -65
- package/lib/Player/ClassManager.js.map +0 -1
- package/lib/Player/ComponentManager.d.ts +0 -397
- package/lib/Player/ComponentManager.js +0 -505
- package/lib/Player/ComponentManager.js.map +0 -1
- package/lib/Player/EffectManager.d.ts +0 -46
- package/lib/Player/EffectManager.js +0 -75
- package/lib/Player/EffectManager.js.map +0 -1
- package/lib/Player/ElementManager.d.ts +0 -108
- package/lib/Player/ElementManager.js +0 -120
- package/lib/Player/ElementManager.js.map +0 -1
- package/lib/Player/GoldManager.d.ts +0 -17
- package/lib/Player/GoldManager.js +0 -27
- package/lib/Player/GoldManager.js.map +0 -1
- package/lib/Player/GuiManager.d.ts +0 -247
- package/lib/Player/GuiManager.js +0 -291
- package/lib/Player/GuiManager.js.map +0 -1
- package/lib/Player/ItemFixture.d.ts +0 -7
- package/lib/Player/ItemFixture.js +0 -19
- package/lib/Player/ItemFixture.js.map +0 -1
- package/lib/Player/ItemManager.d.ts +0 -331
- package/lib/Player/ItemManager.js +0 -475
- package/lib/Player/ItemManager.js.map +0 -1
- package/lib/Player/MoveManager.d.ts +0 -333
- package/lib/Player/MoveManager.js +0 -450
- package/lib/Player/MoveManager.js.map +0 -1
- package/lib/Player/ParameterManager.d.ts +0 -316
- package/lib/Player/ParameterManager.js +0 -408
- package/lib/Player/ParameterManager.js.map +0 -1
- package/lib/Player/Player.d.ts +0 -828
- package/lib/Player/Player.js +0 -927
- package/lib/Player/Player.js.map +0 -1
- package/lib/Player/SkillManager.d.ts +0 -163
- package/lib/Player/SkillManager.js +0 -223
- package/lib/Player/SkillManager.js.map +0 -1
- package/lib/Player/StateManager.d.ts +0 -185
- package/lib/Player/StateManager.js +0 -228
- package/lib/Player/StateManager.js.map +0 -1
- package/lib/Player/VariableManager.d.ts +0 -46
- package/lib/Player/VariableManager.js +0 -52
- package/lib/Player/VariableManager.js.map +0 -1
- package/lib/Query.d.ts +0 -127
- package/lib/Query.js +0 -159
- package/lib/Query.js.map +0 -1
- package/lib/RpgServer.js +0 -2
- package/lib/RpgServer.js.map +0 -1
- package/lib/Scenes/Map.d.ts +0 -136
- package/lib/Scenes/Map.js +0 -273
- package/lib/Scenes/Map.js.map +0 -1
- package/lib/decorators/event.d.ts +0 -43
- package/lib/decorators/event.js +0 -13
- package/lib/decorators/event.js.map +0 -1
- package/lib/decorators/map.d.ts +0 -178
- package/lib/decorators/map.js +0 -43
- package/lib/decorators/map.js.map +0 -1
- package/lib/entry-point.d.ts +0 -34
- package/lib/entry-point.js +0 -70
- package/lib/entry-point.js.map +0 -1
- package/lib/express/api.d.ts +0 -3
- package/lib/express/api.js +0 -105
- package/lib/express/api.js.map +0 -1
- package/lib/express/errors/NotAuthorized.d.ts +0 -4
- package/lib/express/errors/NotAuthorized.js +0 -7
- package/lib/express/errors/NotAuthorized.js.map +0 -1
- package/lib/express/errors/NotFound.d.ts +0 -4
- package/lib/express/errors/NotFound.js +0 -7
- package/lib/express/errors/NotFound.js.map +0 -1
- package/lib/express/server.d.ts +0 -16
- package/lib/express/server.js +0 -65
- package/lib/express/server.js.map +0 -1
- package/lib/index.d.ts +0 -20
- package/lib/index.js +0 -19
- package/lib/index.js.map +0 -1
- package/lib/inject.d.ts +0 -22
- package/lib/inject.js +0 -29
- package/lib/inject.js.map +0 -1
- package/lib/logs/index.js +0 -6
- package/lib/logs/index.js.map +0 -1
- package/lib/logs/item.js +0 -34
- package/lib/logs/item.js.map +0 -1
- package/lib/logs/log.js +0 -7
- package/lib/logs/log.js.map +0 -1
- package/lib/logs/skill.js +0 -19
- package/lib/logs/skill.js.map +0 -1
- package/lib/logs/state.js +0 -13
- package/lib/logs/state.js.map +0 -1
- package/lib/models/Item.d.ts +0 -10
- package/lib/models/Item.js +0 -2
- package/lib/models/Item.js.map +0 -1
- package/lib/presets/index.js +0 -65
- package/lib/presets/index.js.map +0 -1
- package/lib/server.d.ts +0 -137
- package/lib/server.js +0 -443
- package/lib/server.js.map +0 -1
- package/rpg.toml +0 -14
- package/src/Game/EventManager.ts +0 -125
- package/src/Game/Map.ts +0 -495
- package/src/Game/WorldMaps.ts +0 -45
- package/src/Interfaces/Gui.ts +0 -4
- package/src/Interfaces/StateStore.ts +0 -5
- package/src/MatchMaker.ts +0 -65
- package/src/Monitor/index.ts +0 -78
- package/src/Query.ts +0 -172
- package/src/Scenes/Map.ts +0 -310
- package/src/decorators/event.ts +0 -58
- package/src/decorators/map.ts +0 -226
- package/src/entry-point.ts +0 -111
- package/src/express/api.ts +0 -118
- package/src/express/errors/NotAuthorized.ts +0 -6
- package/src/express/errors/NotFound.ts +0 -6
- package/src/express/server.ts +0 -87
- package/src/inject.ts +0 -33
- package/src/models/Item.ts +0 -11
- package/src/server.ts +0 -459
- /package/{lib → dist}/Gui/MenuGui.d.ts +0 -0
- /package/{lib → dist}/Gui/NotificationGui.d.ts +0 -0
- /package/{lib → dist}/Gui/ShopGui.d.ts +0 -0
- /package/{lib → dist}/Gui/index.d.ts +0 -0
- /package/{lib → dist}/logs/index.d.ts +0 -0
- /package/{lib → dist}/logs/item.d.ts +0 -0
- /package/{lib → dist}/logs/log.d.ts +0 -0
- /package/{lib → dist}/logs/skill.d.ts +0 -0
- /package/{lib → dist}/logs/state.d.ts +0 -0
- /package/{lib → dist}/presets/index.d.ts +0 -0
|
@@ -1,145 +1,143 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
|
50
|
-
|
|
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
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
-
|
|
105
|
+
rate: number;
|
|
106
|
+
element: string;
|
|
107
107
|
}[] {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
108
|
+
let elements: any = [];
|
|
109
|
+
for (let item of this.equipments()) {
|
|
110
|
+
if (item.elements) {
|
|
111
|
+
elements = [...elements, ...item.elements];
|
|
113
112
|
}
|
|
114
|
-
|
|
113
|
+
}
|
|
114
|
+
return arrayUniq(elements);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
coefficientElements(otherPlayer: RpgPlayer): number {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
const atkPlayerElements: any = otherPlayer.elements;
|
|
119
|
+
const playerElements: any = this.elementsEfficiency;
|
|
120
|
+
let coefficient = 1;
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
|
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
|
+
}
|
package/src/Player/GuiManager.ts
CHANGED
|
@@ -1,140 +1,149 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
|
6
|
+
export interface IGuiManager {
|
|
7
|
+
emit: any;
|
|
8
|
+
removeGui: (guiId: string, data?: any) => void;
|
|
9
|
+
}
|
|
7
10
|
|
|
8
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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(
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
278
|
-
|
|
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
|
-
|
|
302
|
-
|
|
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
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
21
|
+
}
|
|
22
|
+
return Object.values(array);
|
|
18
23
|
}
|
|
24
|
+
};
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
equipments: ItemInstance[]
|
|
27
|
+
export interface ItemFixture {
|
|
28
|
+
equipments: ItemInstance[];
|
|
24
29
|
}
|