@rpgjs/server 4.0.0-beta.11 → 4.0.0-beta.13
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/ItemManager.js +1 -1
- package/lib/Player/MoveManager.js +17 -12
- package/lib/Player/MoveManager.js.map +1 -1
- package/lib/Player/ParameterManager.d.ts +2 -1
- package/lib/Player/ParameterManager.js +7 -4
- package/lib/Player/ParameterManager.js.map +1 -1
- package/lib/Player/Player.d.ts +11 -5
- package/lib/Player/Player.js +40 -4
- package/lib/Player/Player.js.map +1 -1
- package/lib/Player/SkillManager.d.ts +13 -8
- package/lib/Player/SkillManager.js +11 -4
- package/lib/Player/SkillManager.js.map +1 -1
- package/lib/RpgServer.d.ts +0 -2
- package/lib/Scenes/Map.js +1 -0
- package/lib/Scenes/Map.js.map +1 -1
- package/lib/express/server.js +3 -1
- package/lib/express/server.js.map +1 -1
- package/lib/server.d.ts +1 -5
- package/lib/server.js +5 -7
- package/lib/server.js.map +1 -1
- package/package.json +7 -7
- package/src/Game/Map.ts +37 -4
- package/src/Gui/MenuGui.ts +3 -3
- package/src/Player/ItemManager.ts +1 -1
- package/src/Player/MoveManager.ts +25 -13
- package/src/Player/ParameterManager.ts +10 -7
- package/src/Player/Player.ts +43 -5
- package/src/Player/SkillManager.ts +20 -11
- package/src/RpgServer.ts +0 -2
- package/src/Scenes/Map.ts +1 -0
- package/src/express/server.ts +6 -3
- package/src/server.ts +7 -7
package/src/Player/Player.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RpgCommonPlayer, Utils, RpgPlugin, RpgCommonGame, RpgCommonMap, Direction } from '@rpgjs/common'
|
|
2
|
-
import { Room } from 'simple-room'
|
|
2
|
+
import { Room, WorldClass } from 'simple-room'
|
|
3
3
|
import { RpgMap, EventPosOption } from '../Game/Map'
|
|
4
4
|
import { Query } from '../Query'
|
|
5
5
|
import merge from 'lodash.merge'
|
|
@@ -80,10 +80,11 @@ const playerSchemas = {
|
|
|
80
80
|
hp: Number,
|
|
81
81
|
sp: Number,
|
|
82
82
|
gold: Number,
|
|
83
|
-
level:
|
|
83
|
+
level: {
|
|
84
|
+
$effects: ['$this.expForNextlevel']
|
|
85
|
+
},
|
|
84
86
|
exp: Number,
|
|
85
87
|
name: String,
|
|
86
|
-
expForNextlevel: Number,
|
|
87
88
|
items: [{ nb: Number, item: itemSchemas }],
|
|
88
89
|
_class: { name: String, description: String, id: String },
|
|
89
90
|
equipments: [itemSchemas],
|
|
@@ -182,6 +183,10 @@ export class RpgPlayer extends RpgCommonPlayer {
|
|
|
182
183
|
return super.otherPlayersCollision as RpgPlayer[]
|
|
183
184
|
}
|
|
184
185
|
|
|
186
|
+
get world(): WorldClass | undefined {
|
|
187
|
+
return this.server?.world
|
|
188
|
+
}
|
|
189
|
+
|
|
185
190
|
// As soon as a teleport has been made, the value is changed to force the client to change the positions on the map without making a move.
|
|
186
191
|
teleported: number = 0
|
|
187
192
|
|
|
@@ -784,12 +789,23 @@ export class RpgPlayer extends RpgCommonPlayer {
|
|
|
784
789
|
if (this._socket) this._socket.removeAllListeners(key)
|
|
785
790
|
}
|
|
786
791
|
|
|
792
|
+
disconnect() {
|
|
793
|
+
if (this._socket) this._socket.disconnect()
|
|
794
|
+
}
|
|
795
|
+
|
|
787
796
|
emitToMap(key: string, value: any) {
|
|
788
797
|
Query.getPlayersOfMap(this.map).forEach(player => player.emit(key, value))
|
|
789
798
|
}
|
|
790
799
|
|
|
791
|
-
async execMethod(methodName: string, methodData = []) {
|
|
792
|
-
|
|
800
|
+
async execMethod(methodName: string, methodData = [], target?: any) {
|
|
801
|
+
let ret
|
|
802
|
+
if (target && target[methodName]) {
|
|
803
|
+
ret = target[methodName](...methodData)
|
|
804
|
+
if (isPromise(ret)) await ret
|
|
805
|
+
}
|
|
806
|
+
else {
|
|
807
|
+
ret = await RpgPlugin.emit(`Server.${methodName}`, [this, ...methodData], true)
|
|
808
|
+
}
|
|
793
809
|
this.syncChanges()
|
|
794
810
|
return ret
|
|
795
811
|
}
|
|
@@ -799,6 +815,21 @@ export class RpgPlayer extends RpgCommonPlayer {
|
|
|
799
815
|
this.emit('Player.' + name, val)
|
|
800
816
|
}
|
|
801
817
|
|
|
818
|
+
// @internal
|
|
819
|
+
/**
|
|
820
|
+
* Allows you to manually update a status in the rooms that will then be sent to the customer.
|
|
821
|
+
* @param path
|
|
822
|
+
* @example
|
|
823
|
+
* ```ts
|
|
824
|
+
* player.changeRoomState('hp')
|
|
825
|
+
* ```
|
|
826
|
+
*/
|
|
827
|
+
changeRoomState(path: string) {
|
|
828
|
+
this.world?.forEachUserRooms(this.id, (room) => {
|
|
829
|
+
(room as any).$setCurrentState(`users.${this.id}.${path}`)
|
|
830
|
+
})
|
|
831
|
+
}
|
|
832
|
+
|
|
802
833
|
private _eventChanges() {
|
|
803
834
|
if (!this._getMap(this.map)) return
|
|
804
835
|
const {
|
|
@@ -928,4 +959,11 @@ export class RpgEvent extends RpgPlayer {
|
|
|
928
959
|
}
|
|
929
960
|
return ret
|
|
930
961
|
}
|
|
962
|
+
|
|
963
|
+
changeRoomState(path: string) {
|
|
964
|
+
const room = this.getCurrentMap()
|
|
965
|
+
if (room) {
|
|
966
|
+
(room as any).$setCurrentState(`events.${this.id}.${path}`)
|
|
967
|
+
}
|
|
968
|
+
}
|
|
931
969
|
}
|
|
@@ -17,15 +17,20 @@ const {
|
|
|
17
17
|
applyMixins
|
|
18
18
|
} = Utils
|
|
19
19
|
|
|
20
|
+
type SkillClass = { new(...args: any[]) }
|
|
21
|
+
|
|
20
22
|
export class SkillManager {
|
|
21
23
|
|
|
22
24
|
skills: any[]
|
|
23
25
|
|
|
24
|
-
private _getSkillIndex(skillClass) {
|
|
26
|
+
private _getSkillIndex(skillClass: SkillClass | string) {
|
|
25
27
|
return this.skills.findIndex(skill => {
|
|
26
28
|
if (isString(skill)) {
|
|
27
29
|
return skill.id == skillClass
|
|
28
30
|
}
|
|
31
|
+
if (isString(skillClass)) {
|
|
32
|
+
return skillClass == skill.id || skill
|
|
33
|
+
}
|
|
29
34
|
return isInstanceOf(skill, skillClass)
|
|
30
35
|
})
|
|
31
36
|
}
|
|
@@ -40,11 +45,11 @@ export class SkillManager {
|
|
|
40
45
|
*
|
|
41
46
|
* @title Get Skill
|
|
42
47
|
* @method player.getSkill(skillClass)
|
|
43
|
-
* @param {SkillClass} skillClass
|
|
48
|
+
* @param {SkillClass | string} skillClass or data id
|
|
44
49
|
* @returns {instance of SkillClass | null}
|
|
45
50
|
* @memberof SkillManager
|
|
46
51
|
*/
|
|
47
|
-
getSkill(skillClass) {
|
|
52
|
+
getSkill(skillClass: SkillClass | string) {
|
|
48
53
|
const index = this._getSkillIndex(skillClass)
|
|
49
54
|
return this.skills[index]
|
|
50
55
|
}
|
|
@@ -62,12 +67,13 @@ export class SkillManager {
|
|
|
62
67
|
*
|
|
63
68
|
* @title Learn Skill
|
|
64
69
|
* @method player.learnSkill(skillClass)
|
|
65
|
-
* @param {SkillClass} skillClass
|
|
70
|
+
* @param {SkillClass | string} skillClass or data id
|
|
66
71
|
* @returns {instance of SkillClass}
|
|
67
72
|
* @memberof SkillManager
|
|
68
73
|
*/
|
|
69
|
-
learnSkill(skillClass) {
|
|
70
|
-
|
|
74
|
+
learnSkill(skillClass: SkillClass | string) {
|
|
75
|
+
if (isString(skillClass)) skillClass = this.databaseById(skillClass)
|
|
76
|
+
const instance = new (skillClass as SkillClass)()
|
|
71
77
|
if (!instance.coefficient) instance.coefficient = {
|
|
72
78
|
[INT]: 1
|
|
73
79
|
}
|
|
@@ -94,7 +100,7 @@ export class SkillManager {
|
|
|
94
100
|
*
|
|
95
101
|
* @title Forget Skill
|
|
96
102
|
* @method player.learnSkill(skillClass)
|
|
97
|
-
* @param {SkillClass} skillClass
|
|
103
|
+
* @param {SkillClass | string} skillClass or data id
|
|
98
104
|
* @throws {SkillLog} notLearned
|
|
99
105
|
* If trying to forget a skill not learned
|
|
100
106
|
* ```
|
|
@@ -106,7 +112,8 @@ export class SkillManager {
|
|
|
106
112
|
* @returns {instance of SkillClass}
|
|
107
113
|
* @memberof SkillManager
|
|
108
114
|
*/
|
|
109
|
-
forgetSkill(skillClass) {
|
|
115
|
+
forgetSkill(skillClass: SkillClass | string) {
|
|
116
|
+
if (isString(skillClass)) skillClass = this.databaseById(skillClass)
|
|
110
117
|
const index = this._getSkillIndex(skillClass)
|
|
111
118
|
if (index == -1) {
|
|
112
119
|
throw SkillLog.notLearned(skillClass)
|
|
@@ -151,7 +158,7 @@ export class SkillManager {
|
|
|
151
158
|
*
|
|
152
159
|
* @title Use Skill
|
|
153
160
|
* @method player.useSkill(skillClass,otherPlayer)
|
|
154
|
-
* @param {SkillClass} skillClass
|
|
161
|
+
* @param {SkillClass | string} skillClass or data id
|
|
155
162
|
* @param {Array<RpgPlayer> | RpgPlayer} [otherPlayer]
|
|
156
163
|
* @throws {SkillLog} restriction
|
|
157
164
|
* If the player has the `Effect.CAN_NOT_SKILL` effect
|
|
@@ -192,7 +199,7 @@ export class SkillManager {
|
|
|
192
199
|
* @memberof SkillManager
|
|
193
200
|
* @todo
|
|
194
201
|
*/
|
|
195
|
-
useSkill(skillClass, otherPlayer?: RpgPlayer | RpgPlayer[]) {
|
|
202
|
+
useSkill(skillClass: SkillClass | string, otherPlayer?: RpgPlayer | RpgPlayer[]) {
|
|
196
203
|
const skill = this.getSkill(skillClass)
|
|
197
204
|
if (this.hasEffect(Effect.CAN_NOT_SKILL)) {
|
|
198
205
|
throw SkillLog.restriction(skillClass)
|
|
@@ -226,4 +233,6 @@ export class SkillManager {
|
|
|
226
233
|
|
|
227
234
|
applyMixins(SkillManager, [ParameterManager, StateManager, EffectManager])
|
|
228
235
|
|
|
229
|
-
export interface SkillManager extends ParameterManager, StateManager, EffectManager {
|
|
236
|
+
export interface SkillManager extends ParameterManager, StateManager, EffectManager {
|
|
237
|
+
databaseById(skillClass: any),
|
|
238
|
+
}
|
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,
|
package/src/Scenes/Map.ts
CHANGED
|
@@ -293,6 +293,7 @@ export class SceneMap {
|
|
|
293
293
|
player = World.getUser(player.id) as RpgPlayer
|
|
294
294
|
|
|
295
295
|
if (player) {
|
|
296
|
+
mapInstance.loadCommonEvents(this.server.inputOptions.events, player)
|
|
296
297
|
player.createDynamicEvent(<any>mapInstance._events, false)
|
|
297
298
|
await player.execMethod('onJoinMap', <any>[mapInstance])
|
|
298
299
|
}
|
package/src/express/server.ts
CHANGED
|
@@ -37,7 +37,7 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
37
37
|
|
|
38
38
|
// @ts-ignore
|
|
39
39
|
const isBuilt = !!envs.VITE_BUILT
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
// @ts-ignore
|
|
42
42
|
const hasStatic = process.env.STATIC_DIRECTORY_ENABLED
|
|
43
43
|
const staticDirectory = isBuilt ? '' : 'dist'
|
|
@@ -50,13 +50,15 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
50
50
|
limit: '50mb'
|
|
51
51
|
}))
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
if (staticEnabled) {
|
|
55
55
|
app.use('/', express.static(path.join(dirname, '..', staticDirectory, 'client')))
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
let rpgGame: RpgServerEngine
|
|
59
|
+
|
|
58
60
|
async function start() {
|
|
59
|
-
|
|
61
|
+
rpgGame = await entryPoint(modules, { io, ...options })
|
|
60
62
|
rpgGame.app = app
|
|
61
63
|
rpgGame.start()
|
|
62
64
|
app.use('/api', api(rpgGame))
|
|
@@ -89,6 +91,7 @@ export function expressServer(modules: ModuleType[], options: ExpressServerOptio
|
|
|
89
91
|
Query.getPlayers().forEach(player => {
|
|
90
92
|
player.gameReload()
|
|
91
93
|
})
|
|
94
|
+
rpgGame.stop()
|
|
92
95
|
});
|
|
93
96
|
}
|
|
94
97
|
})
|
package/src/server.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { Utils, RpgPlugin, Scheduler, HookServer, RpgCommonGame, DefaultInput }
|
|
|
7
7
|
import { Observable } from 'rxjs';
|
|
8
8
|
import { Tick } from '@rpgjs/types';
|
|
9
9
|
import { Actor, Armor, Class, DatabaseTypes, Item, Skill, State, Weapon } from '@rpgjs/database';
|
|
10
|
+
import { RpgMap } from './Game/Map';
|
|
10
11
|
|
|
11
12
|
export class RpgServerEngine {
|
|
12
13
|
|
|
@@ -360,7 +361,7 @@ export class RpgServerEngine {
|
|
|
360
361
|
})
|
|
361
362
|
|
|
362
363
|
socket.on('disconnect', () => {
|
|
363
|
-
this.onPlayerDisconnected(
|
|
364
|
+
this.onPlayerDisconnected(playerId)
|
|
364
365
|
})
|
|
365
366
|
|
|
366
367
|
this.world.setUser(player, socket)
|
|
@@ -383,14 +384,13 @@ export class RpgServerEngine {
|
|
|
383
384
|
}
|
|
384
385
|
}
|
|
385
386
|
|
|
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) {
|
|
387
|
+
private onPlayerDisconnected(playerId: string) {
|
|
392
388
|
const player: RpgPlayer = World.getUser(playerId) as RpgPlayer
|
|
393
389
|
player.execMethod('onDisconnected')
|
|
394
390
|
this.world.disconnectUser(playerId)
|
|
395
391
|
}
|
|
392
|
+
|
|
393
|
+
stop() {
|
|
394
|
+
this.scheduler.stop()
|
|
395
|
+
}
|
|
396
396
|
}
|