@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.
- 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 +32 -15
- 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 +15 -37
- 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 +36 -12
- 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 -174
- package/LICENSE +0 -19
- package/browser/manifest.json +0 -7
- package/browser/rpg.server.js +0 -22379
- package/browser/rpg.server.umd.cjs +0 -22410
- 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 -419
- 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 -18
- package/lib/express/server.js +0 -70
- 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 -500
- 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 -94
- 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,40 +1,67 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { isInstanceOf, isString, type Constructor } from "@rpgjs/common";
|
|
2
|
+
import { RpgCommonPlayer, Matter, SeekAvoid } from "@rpgjs/common";
|
|
3
|
+
import { signal, type WritableArraySignal } from "@signe/reactive";
|
|
4
|
+
import { ATK, PDEF, SDEF } from "../presets";
|
|
5
|
+
import { ItemLog, StateLog } from "../logs";
|
|
6
|
+
import { persist } from "@signe/sync";
|
|
7
|
+
import { RpgPlayer } from "./Player";
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
type StateClass = { new(...args: any[]) }
|
|
9
|
+
interface StateManagerDependencies {
|
|
10
|
+
equipments(): any[];
|
|
11
|
+
databaseById(id: string | StateClass): any;
|
|
12
|
+
addState(stateClass: StateClass | string, chance?: number): object | null;
|
|
13
|
+
removeState(stateClass: StateClass | string, chance?: number): void;
|
|
14
|
+
}
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Interface defining what MoveManager adds to a class
|
|
18
|
+
*/
|
|
19
|
+
export interface IStateManager {
|
|
20
|
+
statesDefense: { rate: number; state: any }[];
|
|
21
|
+
statesEfficiency: WritableArraySignal<any[]>;
|
|
22
|
+
applyStates(
|
|
23
|
+
player: RpgPlayer,
|
|
24
|
+
states: { addStates?: any[]; removeStates?: any[] }
|
|
25
|
+
): void;
|
|
26
|
+
getState(stateClass: StateClass | string): any;
|
|
27
|
+
addState(stateClass: StateClass | string, chance?: number): object | null;
|
|
28
|
+
removeState(stateClass: StateClass | string, chance?: number): void;
|
|
29
|
+
}
|
|
15
30
|
|
|
16
|
-
|
|
31
|
+
type StateClass = { new (...args: any[]) };
|
|
17
32
|
|
|
18
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Move Manager mixin
|
|
35
|
+
*
|
|
36
|
+
* Adds methods to manage player movement
|
|
37
|
+
*
|
|
38
|
+
* @param Base - The base class to extend
|
|
39
|
+
* @returns A new class with move management capabilities
|
|
40
|
+
*/
|
|
41
|
+
export function WithStateManager<
|
|
42
|
+
TBase extends Constructor<RpgCommonPlayer & StateManagerDependencies>
|
|
43
|
+
>(Base: TBase): Constructor<IStateManager> & TBase {
|
|
44
|
+
return class extends Base implements IStateManager {
|
|
45
|
+
_statesEfficiency = signal<any[]>([]);
|
|
19
46
|
|
|
20
|
-
/**
|
|
47
|
+
/**
|
|
21
48
|
* Recovers the player's states defense on inventory. This list is generated from the `statesDefense` property defined on the weapons or armors equipped.
|
|
22
49
|
* If several items have the same element, only the highest rate will be taken into account.
|
|
23
|
-
*
|
|
50
|
+
*
|
|
24
51
|
* ```ts
|
|
25
52
|
* import { Armor, State } from '@rpgjs/server'
|
|
26
|
-
*
|
|
53
|
+
*
|
|
27
54
|
* @State({
|
|
28
55
|
* name: 'Paralyze'
|
|
29
56
|
* })
|
|
30
57
|
* class Paralyze {}
|
|
31
|
-
*
|
|
58
|
+
*
|
|
32
59
|
* @Armor({
|
|
33
60
|
* name: 'Shield',
|
|
34
61
|
* statesDefense: [{ rate: 1, state: Paralyze }]
|
|
35
62
|
* })
|
|
36
63
|
* class Shield {}
|
|
37
|
-
*
|
|
64
|
+
*
|
|
38
65
|
* @Armor({
|
|
39
66
|
* name: 'FireShield',
|
|
40
67
|
* statesDefense: [{ rate: 0.5, state: Paralyze }]
|
|
@@ -45,81 +72,84 @@ export class StateManager {
|
|
|
45
72
|
* player.addItem(FireShield)
|
|
46
73
|
* player.equip(Shield)
|
|
47
74
|
* player.equip(FireShield)
|
|
48
|
-
*
|
|
75
|
+
*
|
|
49
76
|
* console.log(player.statesDefense) // [{ rate: 1, state: instance of Paralyze }]
|
|
50
|
-
* ```
|
|
77
|
+
* ```
|
|
51
78
|
* @title Get States Defense
|
|
52
79
|
* @prop {Array<{ rate: number, state: StateClass}>} player.statesDefense
|
|
53
80
|
* @readonly
|
|
54
81
|
* @memberof StateManager
|
|
55
82
|
* */
|
|
56
|
-
get statesDefense(): { rate: number
|
|
57
|
-
|
|
83
|
+
get statesDefense(): { rate: number; state: any }[] {
|
|
84
|
+
return this.getFeature("statesDefense", "state");
|
|
58
85
|
}
|
|
59
86
|
|
|
60
|
-
/**
|
|
61
|
-
* Set or retrieves all the states where the player is vulnerable or not.
|
|
62
|
-
*
|
|
87
|
+
/**
|
|
88
|
+
* Set or retrieves all the states where the player is vulnerable or not.
|
|
89
|
+
*
|
|
63
90
|
* ```ts
|
|
64
91
|
* import { Class, State } from '@rpgjs/server'
|
|
65
|
-
*
|
|
92
|
+
*
|
|
66
93
|
* @State({
|
|
67
94
|
* name: 'Paralyze'
|
|
68
95
|
* })
|
|
69
96
|
* class Paralyze {}
|
|
70
|
-
*
|
|
97
|
+
*
|
|
71
98
|
* @State({
|
|
72
99
|
* name: 'Sleep'
|
|
73
100
|
* })
|
|
74
101
|
* class Sleep {}
|
|
75
|
-
*
|
|
102
|
+
*
|
|
76
103
|
* @Class({
|
|
77
104
|
* name: 'Fighter',
|
|
78
105
|
* statesEfficiency: [{ rate: 1, state: Paralyze }]
|
|
79
106
|
* })
|
|
80
107
|
* class Hero {}
|
|
81
|
-
*
|
|
108
|
+
*
|
|
82
109
|
* player.setClass(Hero)
|
|
83
|
-
*
|
|
110
|
+
*
|
|
84
111
|
* console.log(player.statesEfficiency) // [{ rate: 1, instance of Paralyze }]
|
|
85
|
-
*
|
|
112
|
+
*
|
|
86
113
|
* player.statesEfficiency = [{ rate: 2, state: Sleep }]
|
|
87
|
-
*
|
|
114
|
+
*
|
|
88
115
|
* console.log(player.statesEfficiency) // [{ rate: 1, state: instance of Paralyze }, { rate: 2, state: instance of Sleep }]
|
|
89
|
-
* ```
|
|
116
|
+
* ```
|
|
90
117
|
* @title Set/Get States Efficiency
|
|
91
118
|
* @prop {Array<{ rate: number, state: StateClass}>} player.statesEfficiency
|
|
92
119
|
* @memberof StateManager
|
|
93
120
|
* */
|
|
94
121
|
get statesEfficiency() {
|
|
95
|
-
|
|
122
|
+
return this._statesEfficiency;
|
|
96
123
|
}
|
|
97
124
|
|
|
98
125
|
set statesEfficiency(val) {
|
|
99
|
-
|
|
126
|
+
this._statesEfficiency = val;
|
|
100
127
|
}
|
|
101
128
|
|
|
102
|
-
applyStates(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
129
|
+
applyStates(
|
|
130
|
+
player: RpgPlayer & IStateManager,
|
|
131
|
+
{ addStates, removeStates }
|
|
132
|
+
) {
|
|
133
|
+
if (addStates) {
|
|
134
|
+
for (let { state, rate } of addStates) {
|
|
135
|
+
player.addState(state, rate);
|
|
107
136
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
137
|
+
}
|
|
138
|
+
if (removeStates) {
|
|
139
|
+
for (let { state, rate } of removeStates) {
|
|
140
|
+
player.removeState(state, rate);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
113
143
|
}
|
|
114
144
|
|
|
115
145
|
/**
|
|
116
146
|
* Get a state to the player. Returns `null` if the state is not present on the player
|
|
117
147
|
* ```ts
|
|
118
148
|
* import Paralyze from 'your-database/states/paralyze'
|
|
119
|
-
*
|
|
149
|
+
*
|
|
120
150
|
* player.getState(Paralyze)
|
|
121
151
|
* ```
|
|
122
|
-
*
|
|
152
|
+
*
|
|
123
153
|
* @title Get State
|
|
124
154
|
* @method player.getState(stateClass)
|
|
125
155
|
* @param {StateClass | string} stateClass or state id
|
|
@@ -127,33 +157,33 @@ export class StateManager {
|
|
|
127
157
|
* @memberof StateManager
|
|
128
158
|
*/
|
|
129
159
|
getState(stateClass: StateClass | string) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
160
|
+
if (isString(stateClass)) stateClass = this.databaseById(stateClass);
|
|
161
|
+
return this.states().find((state) => {
|
|
162
|
+
if (isString(stateClass)) {
|
|
163
|
+
return state.id == stateClass;
|
|
164
|
+
}
|
|
165
|
+
return isInstanceOf(state, stateClass);
|
|
166
|
+
});
|
|
137
167
|
}
|
|
138
168
|
|
|
139
169
|
/**
|
|
140
170
|
* Adds a state to the player. Set the chance between 0 and 1 that the state can apply
|
|
141
171
|
* ```ts
|
|
142
172
|
* import Paralyze from 'your-database/states/paralyze'
|
|
143
|
-
*
|
|
144
|
-
* try {
|
|
173
|
+
*
|
|
174
|
+
* try {
|
|
145
175
|
* player.addState(Paralyze)
|
|
146
176
|
* }
|
|
147
177
|
* catch (err) {
|
|
148
178
|
* console.log(err)
|
|
149
179
|
* }
|
|
150
180
|
* ```
|
|
151
|
-
*
|
|
181
|
+
*
|
|
152
182
|
* @title Add State
|
|
153
183
|
* @method player.addState(stateClass,chance=1)
|
|
154
184
|
* @param {StateClass | string} stateClass state class or state id
|
|
155
185
|
* @param {number} [chance] 1 by default
|
|
156
|
-
* @throws {StateLog} addFailed
|
|
186
|
+
* @throws {StateLog} addFailed
|
|
157
187
|
* If the chance to add the state has failed (defined with the `chance` param)
|
|
158
188
|
* ```
|
|
159
189
|
* {
|
|
@@ -166,41 +196,41 @@ export class StateManager {
|
|
|
166
196
|
* @todo
|
|
167
197
|
*/
|
|
168
198
|
addState(stateClass: StateClass | string, chance = 1): object | null {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
199
|
+
const state = this.getState(stateClass);
|
|
200
|
+
if (isString(stateClass)) {
|
|
201
|
+
stateClass = this.databaseById(stateClass);
|
|
202
|
+
}
|
|
203
|
+
if (!state) {
|
|
204
|
+
if (Math.random() > chance) {
|
|
205
|
+
throw StateLog.addFailed(stateClass);
|
|
172
206
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.applyStates(<any>this, instance)
|
|
181
|
-
return instance
|
|
182
|
-
}
|
|
183
|
-
return null
|
|
207
|
+
//const efficiency = this.findStateEfficiency(stateClass)
|
|
208
|
+
const instance = new (stateClass as StateClass)();
|
|
209
|
+
this.states().push(instance);
|
|
210
|
+
this.applyStates(<any>this, instance);
|
|
211
|
+
return instance;
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
184
214
|
}
|
|
185
215
|
|
|
186
216
|
/**
|
|
187
217
|
* Remove a state to the player. Set the chance between 0 and 1 that the state can be removed
|
|
188
218
|
* ```ts
|
|
189
219
|
* import Paralyze from 'your-database/states/paralyze'
|
|
190
|
-
*
|
|
191
|
-
* try {
|
|
220
|
+
*
|
|
221
|
+
* try {
|
|
192
222
|
* player.removeState(Paralyze)
|
|
193
223
|
* }
|
|
194
224
|
* catch (err) {
|
|
195
225
|
* console.log(err)
|
|
196
226
|
* }
|
|
197
227
|
* ```
|
|
198
|
-
*
|
|
228
|
+
*
|
|
199
229
|
* @title Remove State
|
|
200
230
|
* @method player.removeState(stateClass,chance=1)
|
|
201
231
|
* @param {StateClass|string} stateClass class state or state id
|
|
202
232
|
* @param {number} [chance] 1 by default
|
|
203
|
-
* @throws {StateLog} removeFailed
|
|
233
|
+
* @throws {StateLog} removeFailed
|
|
204
234
|
* If the chance to remove the state has failed (defined with the `chance` param)
|
|
205
235
|
* ```
|
|
206
236
|
* {
|
|
@@ -208,7 +238,7 @@ export class StateManager {
|
|
|
208
238
|
* msg: '...'
|
|
209
239
|
* }
|
|
210
240
|
* ```
|
|
211
|
-
* @throws {StateLog} notApplied
|
|
241
|
+
* @throws {StateLog} notApplied
|
|
212
242
|
* If the status does not exist
|
|
213
243
|
* ```
|
|
214
244
|
* {
|
|
@@ -220,30 +250,26 @@ export class StateManager {
|
|
|
220
250
|
* @memberof StateManager
|
|
221
251
|
*/
|
|
222
252
|
removeState(stateClass: StateClass | string, chance = 1) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
return isInstanceOf(state, stateClass)
|
|
228
|
-
})
|
|
229
|
-
if (index != -1) {
|
|
230
|
-
if (Math.random() > chance) {
|
|
231
|
-
throw StateLog.removeFailed(stateClass)
|
|
232
|
-
}
|
|
233
|
-
this.states.splice(index, 1)
|
|
253
|
+
const index = this.states().findIndex((state) => {
|
|
254
|
+
if (isString(stateClass)) {
|
|
255
|
+
return state.id == stateClass;
|
|
234
256
|
}
|
|
235
|
-
|
|
236
|
-
|
|
257
|
+
return isInstanceOf(state, stateClass);
|
|
258
|
+
});
|
|
259
|
+
if (index != -1) {
|
|
260
|
+
if (Math.random() > chance) {
|
|
261
|
+
throw StateLog.removeFailed(stateClass);
|
|
237
262
|
}
|
|
263
|
+
this.states().splice(index, 1);
|
|
264
|
+
} else {
|
|
265
|
+
throw StateLog.notApplied(stateClass);
|
|
266
|
+
}
|
|
238
267
|
}
|
|
239
268
|
|
|
240
269
|
private findStateEfficiency(stateClass) {
|
|
241
|
-
|
|
270
|
+
return this.statesEfficiency().find((state) =>
|
|
271
|
+
isInstanceOf(state.state, stateClass)
|
|
272
|
+
);
|
|
242
273
|
}
|
|
274
|
+
};
|
|
243
275
|
}
|
|
244
|
-
|
|
245
|
-
applyMixins(StateManager, [ItemFixture])
|
|
246
|
-
|
|
247
|
-
export interface StateManager extends ItemFixture {
|
|
248
|
-
databaseById(stateClass: any),
|
|
249
|
-
}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { type Constructor } from "@rpgjs/common";
|
|
2
|
+
import { RpgCommonPlayer } from "@rpgjs/common";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Interface defining what MoveManager adds to a class
|
|
6
|
+
*/
|
|
7
|
+
export interface IWithVariableManager {
|
|
8
|
+
variables: Map<string, any>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Move Manager mixin
|
|
13
|
+
*
|
|
14
|
+
* Adds methods to manage player movement
|
|
15
|
+
*
|
|
16
|
+
* @param Base - The base class to extend
|
|
17
|
+
* @returns A new class with move management capabilities
|
|
18
|
+
*/
|
|
19
|
+
export function WithVariableManager<TBase extends Constructor<RpgCommonPlayer>>(Base: TBase) {
|
|
20
|
+
return class extends Base implements IWithVariableManager {
|
|
21
|
+
variables: Map<string, any> = new Map()
|
|
3
22
|
|
|
4
23
|
/**
|
|
5
24
|
* Assign a variable to the player
|
|
@@ -52,4 +71,5 @@ export class VariableManager {
|
|
|
52
71
|
removeVariable(key: string) {
|
|
53
72
|
return this.variables.delete(key)
|
|
54
73
|
}
|
|
55
|
-
}
|
|
74
|
+
};
|
|
75
|
+
}
|
package/src/RpgServer.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { RpgPlayer } from "./Player/Player"
|
|
2
|
+
import { type RpgMap } from "./rooms/map"
|
|
3
|
+
import { RpgServerEngine } from "./RpgServerEngine"
|
|
4
|
+
|
|
5
|
+
type RpgShape = any
|
|
6
|
+
type RpgClassMap<T> = any
|
|
7
|
+
type RpgClassEvent<T> = any
|
|
8
|
+
type RpgEvent = any
|
|
9
|
+
type MatchMakerOption = any
|
|
10
|
+
type RpgMatchMaker = any
|
|
11
|
+
type IStoreState = any
|
|
12
|
+
type TiledMap = any
|
|
13
|
+
type WorldMap = any
|
|
14
|
+
type MapOptions = any
|
|
11
15
|
|
|
12
16
|
export interface RpgServerEngineHooks {
|
|
13
17
|
/**
|
|
@@ -152,7 +156,7 @@ export interface RpgPlayerHooks {
|
|
|
152
156
|
* @prop { (player: RpgPlayer, data: { input: Direction | Control | string, moving: boolean }) => any } [onInput]
|
|
153
157
|
* @memberof RpgPlayerHooks
|
|
154
158
|
*/
|
|
155
|
-
onInput?: (player: RpgPlayer, data:
|
|
159
|
+
onInput?: (player: RpgPlayer, data: any) => any
|
|
156
160
|
|
|
157
161
|
/**
|
|
158
162
|
* When the player leaves the map
|
|
@@ -223,6 +227,22 @@ export interface RpgPlayerHooks {
|
|
|
223
227
|
canChangeMap?: (player: RpgPlayer, nextMap: RpgClassMap<RpgMap>) => boolean | Promise<boolean>
|
|
224
228
|
}
|
|
225
229
|
|
|
230
|
+
export interface RpgEventHooks {
|
|
231
|
+
onInit?: (event: RpgEvent) => any,
|
|
232
|
+
onAction?: (event: RpgEvent, player: RpgPlayer) => any
|
|
233
|
+
onBeforeCreated?: (object: any, map: RpgMap) => any
|
|
234
|
+
onDetectInShape?: (event: RpgEvent, player: RpgPlayer, shape: RpgShape) => any
|
|
235
|
+
onDetectOutShape?: (event: RpgEvent, player: RpgPlayer, shape: RpgShape) => any
|
|
236
|
+
onInShape?: (event: RpgEvent, shape: RpgShape) => any
|
|
237
|
+
onOutShape?: (event: RpgEvent, shape: RpgShape) => any
|
|
238
|
+
onPlayerTouch?: (event: RpgEvent, player: RpgPlayer) => any
|
|
239
|
+
onChanges?: (event: RpgEvent, player: RpgPlayer) => any
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export interface RpgMapHooks {
|
|
243
|
+
onBeforeUpdate<T = RpgMap>(mapData: any, map: T): T
|
|
244
|
+
}
|
|
245
|
+
|
|
226
246
|
export interface RpgServer {
|
|
227
247
|
/**
|
|
228
248
|
* Add hooks to the player or engine. All modules can listen to the hook
|
|
@@ -275,7 +295,7 @@ export interface RpgServer {
|
|
|
275
295
|
* @prop { { client: null | Function, server: null | Function }[]} [imports]
|
|
276
296
|
* @memberof RpgServer
|
|
277
297
|
*/
|
|
278
|
-
imports?:
|
|
298
|
+
imports?: any
|
|
279
299
|
|
|
280
300
|
/**
|
|
281
301
|
* Object containing the hooks concerning the engine
|
|
@@ -395,6 +415,10 @@ export interface RpgServer {
|
|
|
395
415
|
* */
|
|
396
416
|
maps?: RpgClassMap<RpgMap>[] | MapOptions[] | string[] | TiledMap[],
|
|
397
417
|
|
|
418
|
+
map?: RpgMapHooks
|
|
419
|
+
|
|
420
|
+
event?: RpgEventHooks
|
|
421
|
+
|
|
398
422
|
/**
|
|
399
423
|
* Array of all events. Each element is an `RpgEvent` class
|
|
400
424
|
* Events can be used by placing a shape with the name of the event on Tiled Map Editor
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Context, inject as injector } from "@signe/di";
|
|
2
|
+
|
|
3
|
+
export let context: Context | null = null
|
|
4
|
+
|
|
5
|
+
export function inject<T>(service: (new (...args: any[]) => T) | string, _context?: Context): T {
|
|
6
|
+
const c = _context ?? context
|
|
7
|
+
if (!c) throw new Error("Context is not set. use setInject() to set the context");
|
|
8
|
+
return injector(c, service);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function setInject(_context: Context) {
|
|
12
|
+
context = _context;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function clearInject() {
|
|
16
|
+
context = null
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { injector, Providers } from "@signe/di";
|
|
2
|
+
import { RpgServerEngine } from "../RpgServerEngine";
|
|
3
|
+
import { context } from "./context";
|
|
4
|
+
import { setInject } from "./inject";
|
|
5
|
+
|
|
6
|
+
interface SetupOptions {
|
|
7
|
+
providers: Providers;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function createServer(options: SetupOptions): any {
|
|
11
|
+
return class extends RpgServerEngine {
|
|
12
|
+
config = options;
|
|
13
|
+
|
|
14
|
+
async onStart() {
|
|
15
|
+
setInject(context);
|
|
16
|
+
await injector(context, options.providers);
|
|
17
|
+
return super.onStart();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,31 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
RpgShape,
|
|
11
|
-
ShapePositioning,
|
|
12
|
-
AbstractObject
|
|
13
|
-
} from '@rpgjs/common'
|
|
14
|
-
export type { RpgServer, RpgPlayerHooks, RpgServerEngineHooks } from './RpgServer'
|
|
15
|
-
export { EventData } from './decorators/event'
|
|
16
|
-
export { MapData } from './decorators/map'
|
|
17
|
-
export { RpgPlayer, RpgEvent } from './Player/Player'
|
|
18
|
-
export { EventMode } from './Game/EventManager'
|
|
19
|
-
export { RpgMap } from './Game/Map'
|
|
20
|
-
export { RpgWorldMaps } from './Game/WorldMaps'
|
|
21
|
-
export { Query, Query as RpgWorld } from './Query'
|
|
22
|
-
export { default as Monitor } from './Monitor'
|
|
23
|
-
export * as Presets from './presets'
|
|
24
|
-
export { Move, Frequency, Speed } from './Player/MoveManager'
|
|
25
|
-
export { RpgServerEngine } from './server'
|
|
26
|
-
export { SceneMap as RpgSceneMap, type RpgClassMap } from './Scenes/Map'
|
|
27
|
-
export { RpgMatchMaker } from './MatchMaker'
|
|
28
|
-
export type { IStoreState } from './Interfaces/StateStore'
|
|
29
|
-
export { Components } from './Player/ComponentManager'
|
|
30
|
-
export { Gui } from './Gui/Gui'
|
|
31
|
-
export { inject } from './inject'
|
|
1
|
+
export * from "./RpgServerEngine";
|
|
2
|
+
export * from "./Player/MoveManager";
|
|
3
|
+
export * from "./RpgServer";
|
|
4
|
+
export * from "./core/setup";
|
|
5
|
+
export * from "./core/inject";
|
|
6
|
+
export * from "./Player/Player";
|
|
7
|
+
export * from "./module";
|
|
8
|
+
export * from "./rooms/map";
|
|
9
|
+
export * from "./presets";
|
package/src/module.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { findModules, provideModules } from "@rpgjs/common";
|
|
2
|
+
import { FactoryProvider } from "@signe/di";
|
|
3
|
+
import { RpgServerEngine } from "./RpgServerEngine";
|
|
4
|
+
import { RpgMap } from "./rooms/map";
|
|
5
|
+
|
|
6
|
+
export function provideServerModules(modules: any[]): FactoryProvider {
|
|
7
|
+
return provideModules(modules, "server", (modules, context) => {
|
|
8
|
+
const mainModuleServer = findModules(context, 'Server')
|
|
9
|
+
modules = [...mainModuleServer, ...modules]
|
|
10
|
+
modules = modules.map((module) => {
|
|
11
|
+
if ('server' in module) {
|
|
12
|
+
module = module.server as any;
|
|
13
|
+
}
|
|
14
|
+
if (module.maps && Array.isArray(module.maps)) {
|
|
15
|
+
const maps = [...module.maps];
|
|
16
|
+
module = {
|
|
17
|
+
...module,
|
|
18
|
+
maps: {
|
|
19
|
+
load: (engine: RpgMap) => {
|
|
20
|
+
maps.forEach((map) => {
|
|
21
|
+
engine.maps.push(map);
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return module;
|
|
28
|
+
})
|
|
29
|
+
return modules
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
package/src/presets/index.ts
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { inject } from "@signe/di";
|
|
2
|
+
import { MockConnection, Room } from "@signe/room";
|
|
3
|
+
import { Hooks, ModulesToken } from "@rpgjs/common";
|
|
4
|
+
import { context } from "../core/context";
|
|
5
|
+
import { users } from "@signe/sync";
|
|
6
|
+
import { signal } from "@signe/reactive";
|
|
7
|
+
import { RpgPlayer } from "../Player/Player";
|
|
8
|
+
|
|
9
|
+
@Room({
|
|
10
|
+
path: "lobby-{id}",
|
|
11
|
+
})
|
|
12
|
+
export class LobbyRoom {
|
|
13
|
+
@users(RpgPlayer) players = signal({});
|
|
14
|
+
|
|
15
|
+
onJoin(player: RpgPlayer, conn: MockConnection) {
|
|
16
|
+
player.map = this;
|
|
17
|
+
player.context = context;
|
|
18
|
+
player.conn = conn;
|
|
19
|
+
const hooks = inject<Hooks>(context, ModulesToken);
|
|
20
|
+
hooks
|
|
21
|
+
.callHooks("server-player-onConnected", player)
|
|
22
|
+
.subscribe();
|
|
23
|
+
}
|
|
24
|
+
}
|