@rpgjs/server 4.0.0-beta.9 → 4.0.0-rc.2
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/Game/Map.d.ts +10 -1
- package/lib/Game/Map.js +36 -2
- package/lib/Game/Map.js.map +1 -1
- package/lib/Gui/MenuGui.js +2 -2
- package/lib/Gui/MenuGui.js.map +1 -1
- package/lib/Player/BattleManager.d.ts +5 -5
- package/lib/Player/BattleManager.js +8 -7
- package/lib/Player/BattleManager.js.map +1 -1
- package/lib/Player/ClassManager.d.ts +11 -4
- package/lib/Player/ClassManager.js +7 -3
- package/lib/Player/ClassManager.js.map +1 -1
- package/lib/Player/EffectManager.d.ts +2 -2
- package/lib/Player/EffectManager.js +6 -6
- package/lib/Player/EffectManager.js.map +1 -1
- package/lib/Player/ElementManager.d.ts +4 -1
- package/lib/Player/ElementManager.js.map +1 -1
- package/lib/Player/ItemManager.d.ts +21 -0
- package/lib/Player/ItemManager.js +22 -1
- package/lib/Player/ItemManager.js.map +1 -1
- package/lib/Player/MoveManager.js +27 -14
- package/lib/Player/MoveManager.js.map +1 -1
- package/lib/Player/ParameterManager.d.ts +2 -1
- package/lib/Player/ParameterManager.js +15 -4
- package/lib/Player/ParameterManager.js.map +1 -1
- package/lib/Player/Player.d.ts +13 -5
- package/lib/Player/Player.js +41 -4
- package/lib/Player/Player.js.map +1 -1
- package/lib/Player/SkillManager.d.ts +13 -8
- package/lib/Player/SkillManager.js +14 -7
- package/lib/Player/SkillManager.js.map +1 -1
- package/lib/Player/StateManager.d.ts +11 -6
- package/lib/Player/StateManager.js +21 -6
- package/lib/Player/StateManager.js.map +1 -1
- package/lib/RpgServer.d.ts +42 -2
- package/lib/Scenes/Map.d.ts +2 -0
- package/lib/Scenes/Map.js +3 -0
- package/lib/Scenes/Map.js.map +1 -1
- package/lib/express/server.js +5 -1
- package/lib/express/server.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/models/Item.d.ts +1 -1
- package/lib/server.d.ts +2 -5
- package/lib/server.js +8 -7
- package/lib/server.js.map +1 -1
- package/package.json +8 -7
- package/src/Game/Map.ts +37 -4
- package/src/Gui/MenuGui.ts +3 -3
- package/src/Player/BattleManager.ts +10 -9
- package/src/Player/ClassManager.ts +13 -7
- package/src/Player/EffectManager.ts +6 -5
- package/src/Player/ElementManager.ts +4 -1
- package/src/Player/ItemManager.ts +47 -26
- package/src/Player/MoveManager.ts +35 -15
- package/src/Player/ParameterManager.ts +18 -7
- package/src/Player/Player.ts +44 -5
- package/src/Player/SkillManager.ts +23 -14
- package/src/Player/StateManager.ts +30 -11
- package/src/RpgServer.ts +42 -2
- package/src/Scenes/Map.ts +3 -0
- package/src/express/server.ts +9 -3
- package/src/index.ts +8 -7
- package/src/models/Item.ts +1 -1
- package/src/server.ts +10 -7
|
@@ -5,9 +5,12 @@ import { StateLog } from '../logs/state'
|
|
|
5
5
|
|
|
6
6
|
const {
|
|
7
7
|
isInstanceOf,
|
|
8
|
-
applyMixins
|
|
8
|
+
applyMixins,
|
|
9
|
+
isString
|
|
9
10
|
} = Utils
|
|
10
11
|
|
|
12
|
+
type StateClass = { new(...args: any[]) }
|
|
13
|
+
|
|
11
14
|
export class StateManager {
|
|
12
15
|
|
|
13
16
|
states: any[] = []
|
|
@@ -119,12 +122,18 @@ export class StateManager {
|
|
|
119
122
|
*
|
|
120
123
|
* @title Get State
|
|
121
124
|
* @method player.getState(stateClass)
|
|
122
|
-
* @param {StateClass} stateClass
|
|
125
|
+
* @param {StateClass | string} stateClass or state id
|
|
123
126
|
* @returns {instance of StateClass | null}
|
|
124
127
|
* @memberof StateManager
|
|
125
128
|
*/
|
|
126
|
-
getState(stateClass) {
|
|
127
|
-
|
|
129
|
+
getState(stateClass: StateClass | string) {
|
|
130
|
+
if (isString(stateClass)) stateClass = this.databaseById(stateClass)
|
|
131
|
+
return this.states.find((state) => {
|
|
132
|
+
if (isString(stateClass)) {
|
|
133
|
+
return state.id == stateClass
|
|
134
|
+
}
|
|
135
|
+
return isInstanceOf(state, stateClass)
|
|
136
|
+
})
|
|
128
137
|
}
|
|
129
138
|
|
|
130
139
|
/**
|
|
@@ -142,7 +151,7 @@ export class StateManager {
|
|
|
142
151
|
*
|
|
143
152
|
* @title Add State
|
|
144
153
|
* @method player.addState(stateClass,chance=1)
|
|
145
|
-
* @param {StateClass} stateClass
|
|
154
|
+
* @param {StateClass | string} stateClass state class or state id
|
|
146
155
|
* @param {number} [chance] 1 by default
|
|
147
156
|
* @throws {StateLog} addFailed
|
|
148
157
|
* If the chance to add the state has failed (defined with the `chance` param)
|
|
@@ -156,14 +165,17 @@ export class StateManager {
|
|
|
156
165
|
* @memberof StateManager
|
|
157
166
|
* @todo
|
|
158
167
|
*/
|
|
159
|
-
addState(stateClass, chance = 1): object | null {
|
|
168
|
+
addState(stateClass: StateClass | string, chance = 1): object | null {
|
|
160
169
|
const state = this.getState(stateClass)
|
|
170
|
+
if (isString(stateClass)) {
|
|
171
|
+
stateClass = this.databaseById(stateClass)
|
|
172
|
+
}
|
|
161
173
|
if (!state) {
|
|
162
174
|
if (Math.random() > chance) {
|
|
163
175
|
throw StateLog.addFailed(stateClass)
|
|
164
176
|
}
|
|
165
177
|
//const efficiency = this.findStateEfficiency(stateClass)
|
|
166
|
-
const instance = new stateClass()
|
|
178
|
+
const instance = new (stateClass as StateClass)()
|
|
167
179
|
this.states.push(instance)
|
|
168
180
|
this.applyStates(<any>this, instance)
|
|
169
181
|
return instance
|
|
@@ -186,7 +198,7 @@ export class StateManager {
|
|
|
186
198
|
*
|
|
187
199
|
* @title Remove State
|
|
188
200
|
* @method player.removeState(stateClass,chance=1)
|
|
189
|
-
* @param {StateClass} stateClass
|
|
201
|
+
* @param {StateClass|string} stateClass class state or state id
|
|
190
202
|
* @param {number} [chance] 1 by default
|
|
191
203
|
* @throws {StateLog} removeFailed
|
|
192
204
|
* If the chance to remove the state has failed (defined with the `chance` param)
|
|
@@ -207,8 +219,13 @@ export class StateManager {
|
|
|
207
219
|
* @returns {instance of StateClass}
|
|
208
220
|
* @memberof StateManager
|
|
209
221
|
*/
|
|
210
|
-
removeState(stateClass, chance = 1) {
|
|
211
|
-
const index = this.states.findIndex(state =>
|
|
222
|
+
removeState(stateClass: StateClass | string, chance = 1) {
|
|
223
|
+
const index = this.states.findIndex((state) => {
|
|
224
|
+
if (isString(stateClass)) {
|
|
225
|
+
return state.id == stateClass
|
|
226
|
+
}
|
|
227
|
+
return isInstanceOf(state, stateClass)
|
|
228
|
+
})
|
|
212
229
|
if (index != -1) {
|
|
213
230
|
if (Math.random() > chance) {
|
|
214
231
|
throw StateLog.removeFailed(stateClass)
|
|
@@ -227,4 +244,6 @@ export class StateManager {
|
|
|
227
244
|
|
|
228
245
|
applyMixins(StateManager, [ItemFixture])
|
|
229
246
|
|
|
230
|
-
export interface StateManager extends ItemFixture {
|
|
247
|
+
export interface StateManager extends ItemFixture {
|
|
248
|
+
databaseById(stateClass: any),
|
|
249
|
+
}
|
package/src/RpgServer.ts
CHANGED
|
@@ -136,7 +136,6 @@ export interface RpgPlayerHooks {
|
|
|
136
136
|
* When the player increases one level
|
|
137
137
|
*
|
|
138
138
|
* @prop { (player: RpgPlayer, nbLevel: number) => any } [onLevelUp]
|
|
139
|
-
* @stability 1
|
|
140
139
|
* @memberof RpgPlayerHooks
|
|
141
140
|
*/
|
|
142
141
|
onLevelUp?: (player: RpgPlayer, nbLevel: number) => any
|
|
@@ -145,7 +144,6 @@ export interface RpgPlayerHooks {
|
|
|
145
144
|
* When the player's HP drops to 0
|
|
146
145
|
*
|
|
147
146
|
* @prop { (player: RpgPlayer) => any } [onDead]
|
|
148
|
-
* @stability 1
|
|
149
147
|
* @memberof RpgPlayerHooks
|
|
150
148
|
*/
|
|
151
149
|
onDead?: (player: RpgPlayer) => any,
|
|
@@ -196,6 +194,48 @@ export interface RpgPlayerHooks {
|
|
|
196
194
|
}
|
|
197
195
|
|
|
198
196
|
export interface RpgServer {
|
|
197
|
+
/**
|
|
198
|
+
* Add hooks to the player or engine. All modules can listen to the hook
|
|
199
|
+
*
|
|
200
|
+
* @prop { { player: string[], engine: string[] } } [hooks]
|
|
201
|
+
* @memberof RpgServer
|
|
202
|
+
* @since 4.0.0
|
|
203
|
+
* @stability 1
|
|
204
|
+
* @example
|
|
205
|
+
*
|
|
206
|
+
* ```ts
|
|
207
|
+
* import { RpgServer, RpgModule } from '@rpgjs/server'
|
|
208
|
+
*
|
|
209
|
+
* @RpgModule<RpgServer>({
|
|
210
|
+
* hooks: {
|
|
211
|
+
* player: ['onAuth']
|
|
212
|
+
* }
|
|
213
|
+
* })
|
|
214
|
+
* class RpgServerEngine { }
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* Emit the hook:
|
|
218
|
+
*
|
|
219
|
+
* ```ts
|
|
220
|
+
* server.module.emit('server.player.onAuth', player)
|
|
221
|
+
* ```
|
|
222
|
+
*
|
|
223
|
+
* And listen to the hook:
|
|
224
|
+
*
|
|
225
|
+
* ```ts
|
|
226
|
+
* import { RpgPlayerHooks, RpgPlayer } from '@rpgjs/server'
|
|
227
|
+
*
|
|
228
|
+
* const player: RpgPlayerHooks = {
|
|
229
|
+
* onAuth(player: RpgPlayer) {
|
|
230
|
+
* console.log('player is authenticated')
|
|
231
|
+
* }
|
|
232
|
+
* }
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
hooks?: {
|
|
236
|
+
player?: string[],
|
|
237
|
+
engine?: string[]
|
|
238
|
+
}
|
|
199
239
|
|
|
200
240
|
/**
|
|
201
241
|
* Adding sub-modules
|
package/src/Scenes/Map.ts
CHANGED
|
@@ -48,6 +48,8 @@ export class SceneMap {
|
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* Returns an array of RpgClassMap objects that represent maps with static properties.
|
|
51
|
+
*
|
|
52
|
+
* @method sceneMap.getMaps()
|
|
51
53
|
* @returns {RpgClassMap<RpgMap>[]} Array of RpgClassMap objects.
|
|
52
54
|
* @since 4.0.0
|
|
53
55
|
* @example
|
|
@@ -293,6 +295,7 @@ export class SceneMap {
|
|
|
293
295
|
player = World.getUser(player.id) as RpgPlayer
|
|
294
296
|
|
|
295
297
|
if (player) {
|
|
298
|
+
mapInstance.loadCommonEvents(this.server.inputOptions.events, player)
|
|
296
299
|
player.createDynamicEvent(<any>mapInstance._events, false)
|
|
297
300
|
await player.execMethod('onJoinMap', <any>[mapInstance])
|
|
298
301
|
}
|
package/src/express/server.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import http from 'http'
|
|
2
2
|
import path from 'path'
|
|
3
3
|
import express from 'express'
|
|
4
|
+
import cors from 'cors'
|
|
4
5
|
import { Server } from 'socket.io'
|
|
5
6
|
import entryPoint from '../entry-point'
|
|
6
7
|
import PrettyError from 'pretty-error'
|
|
@@ -37,7 +38,7 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
37
38
|
|
|
38
39
|
// @ts-ignore
|
|
39
40
|
const isBuilt = !!envs.VITE_BUILT
|
|
40
|
-
|
|
41
|
+
|
|
41
42
|
// @ts-ignore
|
|
42
43
|
const hasStatic = process.env.STATIC_DIRECTORY_ENABLED
|
|
43
44
|
const staticDirectory = isBuilt ? '' : 'dist'
|
|
@@ -50,13 +51,17 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
50
51
|
limit: '50mb'
|
|
51
52
|
}))
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
+
|
|
55
|
+
app.use(cors())
|
|
56
|
+
|
|
54
57
|
if (staticEnabled) {
|
|
55
58
|
app.use('/', express.static(path.join(dirname, '..', staticDirectory, 'client')))
|
|
56
59
|
}
|
|
57
60
|
|
|
61
|
+
let rpgGame: RpgServerEngine
|
|
62
|
+
|
|
58
63
|
async function start() {
|
|
59
|
-
|
|
64
|
+
rpgGame = await entryPoint(modules, { io, ...options })
|
|
60
65
|
rpgGame.app = app
|
|
61
66
|
rpgGame.start()
|
|
62
67
|
app.use('/api', api(rpgGame))
|
|
@@ -89,6 +94,7 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
89
94
|
Query.getPlayers().forEach(player => {
|
|
90
95
|
player.gameReload()
|
|
91
96
|
})
|
|
97
|
+
rpgGame.stop()
|
|
92
98
|
});
|
|
93
99
|
}
|
|
94
100
|
})
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { default as entryPoint } from './entry-point'
|
|
2
|
-
export {
|
|
3
|
-
Direction,
|
|
4
|
-
Input,
|
|
5
|
-
Control,
|
|
6
|
-
RpgPlugin,
|
|
7
|
-
HookServer,
|
|
8
|
-
HookClient,
|
|
2
|
+
export {
|
|
3
|
+
Direction,
|
|
4
|
+
Input,
|
|
5
|
+
Control,
|
|
6
|
+
RpgPlugin,
|
|
7
|
+
HookServer,
|
|
8
|
+
HookClient,
|
|
9
9
|
RpgModule,
|
|
10
10
|
RpgShape,
|
|
11
11
|
ShapePositioning,
|
|
@@ -26,3 +26,4 @@ export { SceneMap as RpgSceneMap, RpgClassMap } from './Scenes/Map'
|
|
|
26
26
|
export { RpgMatchMaker } from './MatchMaker'
|
|
27
27
|
export { IStoreState } from './Interfaces/StateStore'
|
|
28
28
|
export { Components } from './Player/ComponentManager'
|
|
29
|
+
export { Gui } from './Gui/Gui'
|
package/src/models/Item.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { ItemOptions } from '@rpgjs/database'
|
|
|
2
2
|
import { RpgPlayer } from '../Player/Player';
|
|
3
3
|
|
|
4
4
|
export interface ItemModel extends ItemOptions {
|
|
5
|
-
id
|
|
5
|
+
id?: string
|
|
6
6
|
equipped?: boolean
|
|
7
7
|
onUseFailed?: (player: RpgPlayer) => {}
|
|
8
8
|
onUse?: (player: RpgPlayer) => {}
|
package/src/server.ts
CHANGED
|
@@ -336,6 +336,10 @@ export class RpgServerEngine {
|
|
|
336
336
|
return this.getScene<SceneMap>(SceneMap.id)
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
+
get module() {
|
|
340
|
+
return RpgPlugin
|
|
341
|
+
}
|
|
342
|
+
|
|
339
343
|
sendToPlayer(currentPlayer, eventName, data) {
|
|
340
344
|
currentPlayer._socket.emit(eventName, data)
|
|
341
345
|
}
|
|
@@ -360,7 +364,7 @@ export class RpgServerEngine {
|
|
|
360
364
|
})
|
|
361
365
|
|
|
362
366
|
socket.on('disconnect', () => {
|
|
363
|
-
this.onPlayerDisconnected(
|
|
367
|
+
this.onPlayerDisconnected(playerId)
|
|
364
368
|
})
|
|
365
369
|
|
|
366
370
|
this.world.setUser(player, socket)
|
|
@@ -383,14 +387,13 @@ export class RpgServerEngine {
|
|
|
383
387
|
}
|
|
384
388
|
}
|
|
385
389
|
|
|
386
|
-
|
|
387
|
-
*
|
|
388
|
-
* @param {string} socketId - The socketId of the player that disconnected
|
|
389
|
-
* @param {string} playerId - The playerId of the player that disconnected
|
|
390
|
-
*/
|
|
391
|
-
private onPlayerDisconnected(socketId, playerId: string) {
|
|
390
|
+
private onPlayerDisconnected(playerId: string) {
|
|
392
391
|
const player: RpgPlayer = World.getUser(playerId) as RpgPlayer
|
|
393
392
|
player.execMethod('onDisconnected')
|
|
394
393
|
this.world.disconnectUser(playerId)
|
|
395
394
|
}
|
|
395
|
+
|
|
396
|
+
stop() {
|
|
397
|
+
this.scheduler.stop()
|
|
398
|
+
}
|
|
396
399
|
}
|