@rpgjs/server 3.3.2 → 4.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/lib/Game/Map.d.ts +58 -5
- package/lib/Game/Map.js +185 -80
- package/lib/Game/Map.js.map +1 -1
- package/lib/Game/WorldMaps.d.ts +3 -2
- package/lib/Game/WorldMaps.js +6 -11
- package/lib/Game/WorldMaps.js.map +1 -1
- package/lib/Gui/DialogGui.d.ts +1 -1
- package/lib/Gui/DialogGui.js +12 -13
- package/lib/Gui/DialogGui.js.map +1 -1
- package/lib/Gui/Gui.js +2 -6
- package/lib/Gui/Gui.js.map +1 -1
- package/lib/Gui/MenuGui.js +4 -8
- package/lib/Gui/MenuGui.js.map +1 -1
- package/lib/Gui/NotificationGui.js +4 -8
- package/lib/Gui/NotificationGui.js.map +1 -1
- package/lib/Gui/ShopGui.js +4 -8
- package/lib/Gui/ShopGui.js.map +1 -1
- package/lib/Gui/index.js +6 -13
- package/lib/Gui/index.js.map +1 -1
- package/lib/Interfaces/Gui.js +1 -2
- package/lib/Interfaces/StateStore.js +1 -2
- package/lib/MatchMaker.js +28 -46
- package/lib/MatchMaker.js.map +1 -1
- package/lib/Monitor/index.js +3 -5
- package/lib/Monitor/index.js.map +1 -1
- package/lib/Player/BattleManager.js +17 -16
- package/lib/Player/BattleManager.js.map +1 -1
- package/lib/Player/ClassManager.js +6 -10
- package/lib/Player/ClassManager.js.map +1 -1
- package/lib/Player/ComponentManager.d.ts +4 -4
- package/lib/Player/ComponentManager.js +37 -24
- package/lib/Player/ComponentManager.js.map +1 -1
- package/lib/Player/EffectManager.js +8 -12
- package/lib/Player/EffectManager.js.map +1 -1
- package/lib/Player/ElementManager.js +5 -9
- package/lib/Player/ElementManager.js.map +1 -1
- package/lib/Player/GoldManager.js +1 -5
- package/lib/Player/GoldManager.js.map +1 -1
- package/lib/Player/GuiManager.js +17 -15
- package/lib/Player/GuiManager.js.map +1 -1
- package/lib/Player/ItemFixture.js +1 -5
- package/lib/Player/ItemFixture.js.map +1 -1
- package/lib/Player/ItemManager.d.ts +3 -3
- package/lib/Player/ItemManager.js +29 -31
- package/lib/Player/ItemManager.js.map +1 -1
- package/lib/Player/MoveManager.d.ts +7 -6
- package/lib/Player/MoveManager.js +67 -74
- package/lib/Player/MoveManager.js.map +1 -1
- package/lib/Player/ParameterManager.js +10 -14
- package/lib/Player/ParameterManager.js.map +1 -1
- package/lib/Player/Player.d.ts +7 -1
- package/lib/Player/Player.js +193 -191
- package/lib/Player/Player.js.map +1 -1
- package/lib/Player/SkillManager.js +18 -22
- package/lib/Player/SkillManager.js.map +1 -1
- package/lib/Player/StateManager.js +9 -13
- package/lib/Player/StateManager.js.map +1 -1
- package/lib/Player/VariableManager.js +1 -5
- package/lib/Player/VariableManager.js.map +1 -1
- package/lib/Query.d.ts +2 -1
- package/lib/Query.js +19 -15
- package/lib/Query.js.map +1 -1
- package/lib/RpgServer.d.ts +11 -3
- package/lib/RpgServer.js +1 -2
- package/lib/Scenes/Map.d.ts +27 -4
- package/lib/Scenes/Map.js +117 -122
- package/lib/Scenes/Map.js.map +1 -1
- package/lib/decorators/event.js +4 -7
- package/lib/decorators/event.js.map +1 -1
- package/lib/decorators/map.d.ts +1 -1
- package/lib/decorators/map.js +5 -9
- package/lib/decorators/map.js.map +1 -1
- package/lib/entry-point.js +59 -65
- package/lib/entry-point.js.map +1 -1
- package/lib/express/api.d.ts +3 -0
- package/lib/express/api.js +105 -0
- package/lib/express/api.js.map +1 -0
- package/lib/express/errors/NotAuthorized.d.ts +4 -0
- package/lib/express/errors/NotAuthorized.js +7 -0
- package/lib/express/errors/NotAuthorized.js.map +1 -0
- package/lib/express/errors/NotFound.d.ts +4 -0
- package/lib/express/errors/NotFound.js +7 -0
- package/lib/express/errors/NotFound.js.map +1 -0
- package/lib/express/server.js +20 -5
- package/lib/express/server.js.map +1 -1
- package/lib/index.js +15 -68
- package/lib/index.js.map +1 -1
- package/lib/logs/index.js +5 -11
- package/lib/logs/index.js.map +1 -1
- package/lib/logs/item.js +11 -15
- package/lib/logs/item.js.map +1 -1
- package/lib/logs/log.js +1 -5
- package/lib/logs/log.js.map +1 -1
- package/lib/logs/skill.js +6 -10
- package/lib/logs/skill.js.map +1 -1
- package/lib/logs/state.js +5 -9
- package/lib/logs/state.js.map +1 -1
- package/lib/models/Item.js +1 -2
- package/lib/presets/index.js +28 -36
- package/lib/presets/index.js.map +1 -1
- package/lib/server.d.ts +23 -2
- package/lib/server.js +227 -134
- package/lib/server.js.map +1 -1
- package/package.json +24 -16
- package/src/Game/Map.ts +513 -0
- package/src/Game/WorldMaps.ts +45 -0
- package/src/Gui/DialogGui.ts +67 -0
- package/src/Gui/Gui.ts +45 -0
- package/src/Gui/MenuGui.ts +26 -0
- package/src/Gui/NotificationGui.ts +10 -0
- package/src/Gui/ShopGui.ts +43 -0
- package/src/Gui/index.ts +13 -0
- package/src/Interfaces/Gui.ts +4 -0
- package/src/Interfaces/StateStore.ts +5 -0
- package/src/MatchMaker.ts +63 -0
- package/src/Monitor/index.ts +78 -0
- package/src/Player/BattleManager.ts +123 -0
- package/src/Player/ClassManager.ts +72 -0
- package/src/Player/ComponentManager.ts +538 -0
- package/src/Player/EffectManager.ts +94 -0
- package/src/Player/ElementManager.ts +142 -0
- package/src/Player/GoldManager.ts +26 -0
- package/src/Player/GuiManager.ts +308 -0
- package/src/Player/ItemFixture.ts +24 -0
- package/src/Player/ItemManager.ts +474 -0
- package/src/Player/MoveManager.ts +635 -0
- package/src/Player/ParameterManager.ts +468 -0
- package/src/Player/Player.ts +931 -0
- package/src/Player/SkillManager.ts +229 -0
- package/src/Player/StateManager.ts +230 -0
- package/src/Player/VariableManager.ts +55 -0
- package/src/Query.ts +172 -0
- package/src/RpgServer.ts +429 -0
- package/src/Scenes/Map.ts +302 -0
- package/src/decorators/event.ts +57 -0
- package/src/decorators/map.ts +223 -0
- package/src/entry-point.ts +102 -0
- package/src/express/api.ts +118 -0
- package/src/express/errors/NotAuthorized.ts +6 -0
- package/src/express/errors/NotFound.ts +6 -0
- package/src/express/server.ts +93 -0
- package/src/index.ts +28 -0
- package/src/logs/index.ts +11 -0
- package/src/logs/item.ts +31 -0
- package/src/logs/log.ts +3 -0
- package/src/logs/skill.ts +16 -0
- package/src/logs/state.ts +13 -0
- package/src/models/Item.ts +11 -0
- package/src/presets/index.ts +71 -0
- package/src/server.ts +394 -0
- package/tsconfig.json +27 -0
package/src/RpgServer.ts
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { ModuleType, RpgShape, Direction, Control } from '@rpgjs/common'
|
|
2
|
+
import { RpgClassEvent, RpgEvent, RpgPlayer } from './Player/Player'
|
|
3
|
+
import { RpgMap } from './Game/Map'
|
|
4
|
+
import { RpgServerEngine } from './server'
|
|
5
|
+
import { MapOptions } from './decorators/map'
|
|
6
|
+
import { RpgClassMap } from './Scenes/Map'
|
|
7
|
+
import { TiledMap } from '@rpgjs/tiled'
|
|
8
|
+
import { WorldMap } from './Game/WorldMaps'
|
|
9
|
+
import { MatchMakerOption, RpgMatchMaker } from './MatchMaker'
|
|
10
|
+
import { IStoreState } from './Interfaces/StateStore'
|
|
11
|
+
|
|
12
|
+
export interface RpgServerEngineHooks {
|
|
13
|
+
/**
|
|
14
|
+
* When the server starts
|
|
15
|
+
*
|
|
16
|
+
* @prop { (engine: RpgServerEngine) => any } [onStart]
|
|
17
|
+
* @memberof RpgServerEngineHooks
|
|
18
|
+
*/
|
|
19
|
+
onStart?: (server: RpgServerEngine) => any
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* At each server frame. Normally represents 60FPS
|
|
23
|
+
*
|
|
24
|
+
* @prop { (engine: RpgServerEngine) => any } [onStep]
|
|
25
|
+
* @memberof RpgServerEngineHooks
|
|
26
|
+
*/
|
|
27
|
+
onStep?: (server: RpgServerEngine) => any
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface RpgPlayerHooks {
|
|
31
|
+
/**
|
|
32
|
+
* Set custom properties on the player. Several interests:
|
|
33
|
+
* 1. The property is shared with the client
|
|
34
|
+
* 2. If you save with `player.save()`, the property will be saved to be reloaded later
|
|
35
|
+
* 3. If you use horizontal scaling, the property will be kept in memory if the player changes the map and this map is on another server
|
|
36
|
+
*
|
|
37
|
+
* Example:
|
|
38
|
+
*
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { RpgPlayerHooks } from '@rpgjs/server'
|
|
41
|
+
*
|
|
42
|
+
* declare module '@rpgjs/server' {
|
|
43
|
+
* export interface RpgPlayer {
|
|
44
|
+
* nbWood: number
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* export const player: RpgPlayerHooks = {
|
|
49
|
+
* props: {
|
|
50
|
+
* nbWood: Number
|
|
51
|
+
* }
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* This is a simple example. Let's say that the player can have a number of harvested woods, then
|
|
56
|
+
* 1. you must specify the type for Typescript
|
|
57
|
+
* 2. Add the property in props
|
|
58
|
+
*
|
|
59
|
+
* You can also set up with this object:
|
|
60
|
+
*
|
|
61
|
+
* ```
|
|
62
|
+
* {
|
|
63
|
+
$default: <any> (undefined by default),
|
|
64
|
+
$syncWithClient: <boolean> (true by default),
|
|
65
|
+
$permanent: <boolean> (true by default)
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
*
|
|
69
|
+
* - Indicate if the property should be shared with the client
|
|
70
|
+
*
|
|
71
|
+
* Example:
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* export const player: RpgPlayerHooks = {
|
|
75
|
+
* props: {
|
|
76
|
+
* secretProp: {
|
|
77
|
+
* $syncWithClient: false
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* - Indicate if the property should be registered in a database. If the data is just temporary to use on the current map:
|
|
84
|
+
*
|
|
85
|
+
* ```ts
|
|
86
|
+
* export const player: RpgPlayerHooks = {
|
|
87
|
+
* props: {
|
|
88
|
+
* tmpProp: {
|
|
89
|
+
* $permanent: false
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @prop {object} [props]
|
|
96
|
+
* @since 3.0.0-beta.9
|
|
97
|
+
* @memberof RpgPlayerHooks
|
|
98
|
+
*/
|
|
99
|
+
props?: {
|
|
100
|
+
[key: string]: any
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* When the player joins the map
|
|
105
|
+
*
|
|
106
|
+
* @prop { (player: RpgPlayer, map: RpgMap) => any } [onJoinMap]
|
|
107
|
+
* @memberof RpgPlayerHooks
|
|
108
|
+
*/
|
|
109
|
+
onJoinMap?: (player: RpgPlayer, map: RpgMap) => any
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* When the player is connected to the server
|
|
113
|
+
*
|
|
114
|
+
* @prop { (player: RpgPlayer) => any } [onConnected]
|
|
115
|
+
* @memberof RpgPlayerHooks
|
|
116
|
+
*/
|
|
117
|
+
onConnected?: (player: RpgPlayer) => any
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* When the player presses a key on the client side
|
|
121
|
+
*
|
|
122
|
+
* @prop { (player: RpgPlayer, data: { input: Direction | Control | string, moving: boolean }) => any } [onInput]
|
|
123
|
+
* @memberof RpgPlayerHooks
|
|
124
|
+
*/
|
|
125
|
+
onInput?: (player: RpgPlayer, data: { input: Direction | Control | string, moving: boolean }) => any
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* When the player leaves the map
|
|
129
|
+
*
|
|
130
|
+
* @prop { (player: RpgPlayer, map: RpgMap) => any } [onLeaveMap]
|
|
131
|
+
* @memberof RpgPlayerHooks
|
|
132
|
+
*/
|
|
133
|
+
onLeaveMap?: (player: RpgPlayer, map: RpgMap) => any
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* When the player increases one level
|
|
137
|
+
*
|
|
138
|
+
* @prop { (player: RpgPlayer, nbLevel: number) => any } [onLevelUp]
|
|
139
|
+
* @stability 1
|
|
140
|
+
* @memberof RpgPlayerHooks
|
|
141
|
+
*/
|
|
142
|
+
onLevelUp?: (player: RpgPlayer, nbLevel: number) => any
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* When the player's HP drops to 0
|
|
146
|
+
*
|
|
147
|
+
* @prop { (player: RpgPlayer) => any } [onDead]
|
|
148
|
+
* @stability 1
|
|
149
|
+
* @memberof RpgPlayerHooks
|
|
150
|
+
*/
|
|
151
|
+
onDead?: (player: RpgPlayer) => any,
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* When the player leaves the server
|
|
155
|
+
*
|
|
156
|
+
* @prop { (player: RpgPlayer) => any } [onDisconnected]
|
|
157
|
+
* @memberof RpgPlayerHooks
|
|
158
|
+
*/
|
|
159
|
+
onDisconnected?: (player: RpgPlayer) => any
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* When the player enters the shape
|
|
163
|
+
*
|
|
164
|
+
* @prop { (player: RpgPlayer, shape: RpgShape) => any } [onInShape]
|
|
165
|
+
* 3.0.0-beta.3
|
|
166
|
+
* @memberof RpgPlayerHooks
|
|
167
|
+
*/
|
|
168
|
+
onInShape?: (player: RpgPlayer, shape: RpgShape) => any
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* When the player leaves the shape
|
|
172
|
+
*
|
|
173
|
+
* @prop { (player: RpgPlayer, shape: RpgShape) => any } [onOutShape]
|
|
174
|
+
* 3.0.0-beta.3
|
|
175
|
+
* @memberof RpgPlayerHooks
|
|
176
|
+
*/
|
|
177
|
+
onOutShape?: (player: RpgPlayer, shape: RpgShape) => any
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* When the x, y positions change
|
|
181
|
+
*
|
|
182
|
+
* @prop { (player: RpgPlayer) => any } [onMove]
|
|
183
|
+
* @since 3.0.0-beta.4
|
|
184
|
+
* @memberof RpgPlayerHooks
|
|
185
|
+
*/
|
|
186
|
+
onMove?: (player: RpgPlayer) => any
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Allow or not the player to switch maps. `nexMap` parameter is the retrieved RpgMap class and not the instance
|
|
190
|
+
*
|
|
191
|
+
* @prop { (player: RpgPlayer, nextMap: RpgClassMap<RpgMap>) => boolean | Promise<boolean> } [canChangeMap]
|
|
192
|
+
* @since 3.0.0-beta.8
|
|
193
|
+
* @memberof RpgPlayerHooks
|
|
194
|
+
*/
|
|
195
|
+
canChangeMap?: (player: RpgPlayer, nextMap: RpgClassMap<RpgMap>) => boolean | Promise<boolean>
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface RpgServer {
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Adding sub-modules
|
|
202
|
+
*
|
|
203
|
+
* @prop { { client: null | Function, server: null | Function }[]} [imports]
|
|
204
|
+
* @memberof RpgServer
|
|
205
|
+
*/
|
|
206
|
+
imports?: ModuleType[]
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Object containing the hooks concerning the engine
|
|
210
|
+
*
|
|
211
|
+
* ```ts
|
|
212
|
+
* import { RpgServerEngine, RpgServerEngineHooks, RpgModule, RpgClient } from '@rpgjs/server'
|
|
213
|
+
*
|
|
214
|
+
* const engine: RpgEngineHooks = {
|
|
215
|
+
* onStart(server: RpgServerEngine) {
|
|
216
|
+
* console.log('server is started')
|
|
217
|
+
* }
|
|
218
|
+
* }
|
|
219
|
+
*
|
|
220
|
+
* @RpgModule<RpgServer>({
|
|
221
|
+
* engine
|
|
222
|
+
* })
|
|
223
|
+
* class RpgServerModule {}
|
|
224
|
+
* ```
|
|
225
|
+
*
|
|
226
|
+
* @prop {RpgServerEngineHooks} [engine]
|
|
227
|
+
* @memberof RpgServer
|
|
228
|
+
*/
|
|
229
|
+
engine?: RpgServerEngineHooks
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Give the `player` object hooks. Each time a player connects, an instance of `RpgPlayer` is created.
|
|
233
|
+
*
|
|
234
|
+
* ```ts
|
|
235
|
+
* import { RpgPlayer, RpgServer, RpgPlayerHooks, RpgModule } from '@rpgjs/server'
|
|
236
|
+
*
|
|
237
|
+
* const player: RpgPlayerHooks = {
|
|
238
|
+
* onConnected(player: RpgPlayer) {
|
|
239
|
+
*
|
|
240
|
+
* }
|
|
241
|
+
* }
|
|
242
|
+
*
|
|
243
|
+
* @RpgModule<RpgServer>({
|
|
244
|
+
* player
|
|
245
|
+
* })
|
|
246
|
+
* class RpgServerEngine { }
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
* @prop {RpgClassPlayer<RpgPlayer>} [player]
|
|
250
|
+
* @memberof RpgServer
|
|
251
|
+
* */
|
|
252
|
+
player?: RpgPlayerHooks,
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* References all data in the server. it is mainly used to retrieve data according to their identifier
|
|
256
|
+
*
|
|
257
|
+
* ```ts
|
|
258
|
+
* import { RpgServer, RpgModule } from '@rpgjs/server'
|
|
259
|
+
* import { Potion } from 'my-database/items/potion'
|
|
260
|
+
*
|
|
261
|
+
* @RpgModule<RpgServer>({
|
|
262
|
+
* database: {
|
|
263
|
+
* Potion
|
|
264
|
+
* }
|
|
265
|
+
* })
|
|
266
|
+
* class RpgServerEngine { }
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* @prop { { [dataName]: data } } [database]
|
|
270
|
+
* @memberof RpgServer
|
|
271
|
+
* */
|
|
272
|
+
database?: object | any[],
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Array of all maps. Each element is an `RpgMap` class
|
|
276
|
+
*
|
|
277
|
+
* ```ts
|
|
278
|
+
* import { RpgMap, MapData, RpgServer, RpgModule } from '@rpgjs/server'
|
|
279
|
+
*
|
|
280
|
+
* @MapData({
|
|
281
|
+
* id: 'town',
|
|
282
|
+
* file: require('./tmx/mymap.tmx'),
|
|
283
|
+
* name: 'Town'
|
|
284
|
+
* })
|
|
285
|
+
* class TownMap extends RpgMap { }
|
|
286
|
+
*
|
|
287
|
+
* @RpgModule<RpgServer>({
|
|
288
|
+
* maps: [
|
|
289
|
+
* TownMap
|
|
290
|
+
* ]
|
|
291
|
+
* })
|
|
292
|
+
* class RpgServerEngine { }
|
|
293
|
+
* ```
|
|
294
|
+
*
|
|
295
|
+
* It is possible to just give the object as well
|
|
296
|
+
*
|
|
297
|
+
* ```ts
|
|
298
|
+
* @RpgModule<RpgServer>({
|
|
299
|
+
* maps: [
|
|
300
|
+
* {
|
|
301
|
+
* id: 'town',
|
|
302
|
+
* file: require('./tmx/mymap.tmx'),
|
|
303
|
+
* name: 'Town'
|
|
304
|
+
* }
|
|
305
|
+
* ]
|
|
306
|
+
* })
|
|
307
|
+
* class RpgServerEngine { }
|
|
308
|
+
* ```
|
|
309
|
+
*
|
|
310
|
+
* Since version 3.0.0-beta.8, you can just pass the path to the file. The identifier will then be the name of the file
|
|
311
|
+
*
|
|
312
|
+
* ```ts
|
|
313
|
+
* @RpgModule<RpgServer>({
|
|
314
|
+
* maps: [
|
|
315
|
+
* require('./tmx/mymap.tmx') // id is "mymap"
|
|
316
|
+
* ]
|
|
317
|
+
* })
|
|
318
|
+
* class RpgServerEngine { }
|
|
319
|
+
* ```
|
|
320
|
+
*
|
|
321
|
+
* @prop {RpgClassMap<RpgMap>[]} [maps]
|
|
322
|
+
* @memberof RpgServer
|
|
323
|
+
* */
|
|
324
|
+
maps?: RpgClassMap<RpgMap>[] | MapOptions[] | string[] | TiledMap[],
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Array of all events. Each element is an `RpgEvent` class
|
|
328
|
+
* Events can be used by placing a shape with the name of the event on Tiled Map Editor
|
|
329
|
+
*
|
|
330
|
+
* @prop {RpgClassEvent<RpgEvent>[]} [events]
|
|
331
|
+
* @since 4.0.0
|
|
332
|
+
* @memberof RpgServer
|
|
333
|
+
*/
|
|
334
|
+
events?: RpgClassEvent<RpgEvent>[]
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Loads the content of a `.world` file from Tiled Map Editor into the map scene
|
|
338
|
+
*
|
|
339
|
+
* > Note, that if the map already exists (i.e. you have already defined an RpgMap), the world will retrieve the already existing map. Otherwise it will create a new map
|
|
340
|
+
*
|
|
341
|
+
* @prop {object[]} [worldMaps]
|
|
342
|
+
* object is
|
|
343
|
+
* ```ts
|
|
344
|
+
* {
|
|
345
|
+
* id?: string
|
|
346
|
+
* maps: {
|
|
347
|
+
* id?: string
|
|
348
|
+
* properties?: object
|
|
349
|
+
* fileName: string;
|
|
350
|
+
height: number;
|
|
351
|
+
width: number;
|
|
352
|
+
x: number;
|
|
353
|
+
y: number;
|
|
354
|
+
* }[],
|
|
355
|
+
onlyShowAdjacentMaps: boolean, // only for Tiled Map Editor
|
|
356
|
+
type: 'world' // only for Tiled Map Editor
|
|
357
|
+
* }
|
|
358
|
+
* ```
|
|
359
|
+
* @since 3.0.0-beta.8
|
|
360
|
+
* @example
|
|
361
|
+
* ```ts
|
|
362
|
+
* import myworld from 'myworld.world'
|
|
363
|
+
*
|
|
364
|
+
* @RpgModule<RpgServer>({
|
|
365
|
+
* worldMaps: [
|
|
366
|
+
* myworld
|
|
367
|
+
* ]
|
|
368
|
+
* })
|
|
369
|
+
* class RpgServerEngine { }
|
|
370
|
+
* ```
|
|
371
|
+
* @memberof RpgServer
|
|
372
|
+
*/
|
|
373
|
+
worldMaps?: WorldMap[]
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Combat formula used in the method player.applyDamage(). There are already formulas in the RPGJS engine but you can customize them
|
|
378
|
+
*
|
|
379
|
+
* ```ts
|
|
380
|
+
* damageFormulas: {
|
|
381
|
+
* damageSkill: (a, b, skill) => number,
|
|
382
|
+
* damagePhysic: (a, b) => number,
|
|
383
|
+
*
|
|
384
|
+
* // damage: the damages calculated from the previous formulas
|
|
385
|
+
* damageCritical: (damage, a, b) => number
|
|
386
|
+
* coefficientElementsa : (a, b, bDef) => number
|
|
387
|
+
* }
|
|
388
|
+
* ```
|
|
389
|
+
*
|
|
390
|
+
* `a` represents the attacker's parameters
|
|
391
|
+
* `b` represents the defender's parameters
|
|
392
|
+
*
|
|
393
|
+
* Example:
|
|
394
|
+
*
|
|
395
|
+
* ```ts
|
|
396
|
+
* import { RpgModule, RpgServer, Presets } from '@rpgjs/server'
|
|
397
|
+
*
|
|
398
|
+
* const { ATK, PDEF } = Presets
|
|
399
|
+
*
|
|
400
|
+
* @RpgModule<RpgServer>({
|
|
401
|
+
* damageFormulas: {
|
|
402
|
+
* damagePhysic(a, b) {
|
|
403
|
+
* let damage = a[ATK] - b[PDEF]
|
|
404
|
+
* if (damage < 0) damage = 0
|
|
405
|
+
* return damage
|
|
406
|
+
* }
|
|
407
|
+
* }
|
|
408
|
+
* })
|
|
409
|
+
* class RpgServerEngine { }
|
|
410
|
+
* ```
|
|
411
|
+
* @prop {object} damageFormulas
|
|
412
|
+
* @memberof RpgServer
|
|
413
|
+
* */
|
|
414
|
+
damageFormulas?: {
|
|
415
|
+
damageSkill?: (a, b, skill) => number,
|
|
416
|
+
damagePhysic?: (a, b) => number,
|
|
417
|
+
damageCritical?: (damage, a, b) => number
|
|
418
|
+
coefficientElements?: (a, b, bDef) => number
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
scalability?: {
|
|
422
|
+
matchMaker: MatchMakerOption,
|
|
423
|
+
stateStore: IStoreState
|
|
424
|
+
hooks: {
|
|
425
|
+
onConnected(store: IStoreState, matchMaker: RpgMatchMaker, player: RpgPlayer): Promise<boolean> | boolean
|
|
426
|
+
doChangeServer(store: IStoreState, matchMaker: RpgMatchMaker, player: RpgPlayer): Promise<boolean> | boolean
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|