@rpgjs/server 3.0.0-beta → 3.0.0-beta.4

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 CHANGED
@@ -1,32 +1,112 @@
1
- import { RpgCommonMap } from '@rpgjs/common';
1
+ import { RpgCommonMap, RpgShape } from '@rpgjs/common';
2
2
  import * as Kompute from 'kompute/build/Kompute';
3
3
  import { EventOptions } from '../decorators/event';
4
4
  import { EventMode, RpgEvent } from '../Event';
5
5
  import { RpgPlayer } from '../Player/Player';
6
- declare type EventOption = {
6
+ import { RpgServerEngine } from '../server';
7
+ export declare type EventPosOption = {
7
8
  x: number;
8
9
  y: number;
10
+ z?: number;
9
11
  event: EventOptions;
10
- } | EventOptions;
12
+ };
13
+ export declare type EventOption = EventPosOption | EventOptions;
11
14
  export declare class RpgMap extends RpgCommonMap {
12
15
  private _server;
13
16
  _events: EventOption[];
14
- id: any;
17
+ /**
18
+ * @title map id
19
+ * @readonly
20
+ * @prop {string} [id]
21
+ * @memberof Map
22
+ * */
23
+ readonly id: string;
15
24
  file: any;
25
+ /**
26
+ * @title event list
27
+ * @prop { { [eventId: string]: RpgEvent } } [events]
28
+ * @memberof Map
29
+ * */
16
30
  events: {
17
31
  [eventId: string]: RpgEvent;
18
32
  };
19
33
  kWorld: Kompute;
20
34
  entityManager: any;
21
- constructor(_server: any);
35
+ constructor(_server: RpgServerEngine);
22
36
  load(): Promise<void>;
23
37
  get game(): any;
24
38
  onLoad(): void;
25
39
  onJoin(player: RpgPlayer): void;
26
40
  onLeave(player: RpgPlayer): void;
27
41
  autoLoadEvent(): void;
28
- getEventShape(eventName: string): any | null;
29
- createEvent(obj: EventOption, mode: EventMode, shape?: any): RpgEvent | null;
42
+ /**
43
+ * Edit a tile on the map. All players on the map will see the modified tile
44
+ *
45
+ *
46
+ * @title Change Tile in map
47
+ * @since 3.0.0-beta.4
48
+ * @method map.setTile(x,y,layer,tileInfo)
49
+ * @param {number} x Position X
50
+ * @param {number} y Position Y
51
+ * @param {string | ((layer: any) => boolean)} layer Name of the layer where you want to put a tile. OYou can also put a function that will act as a filter. The first parameter is the layer and you return a boolean to indicate if you modify the tile of this layer or not
52
+ * @param {object} tileInfo Object with the following properties:
53
+ * - {number} gid: The tile number in tileset (from 1)
54
+ * - {object} properties Property of the tile. You own object. To set a collision, set the `collision:true` property
55
+ * @example
56
+ * ```ts
57
+ * map.setTile(15, 18, 'mylayer', { gid: 2 })
58
+ * ```
59
+ * @returns {void}
60
+ * @memberof Map
61
+ */
62
+ setTile(x: number, y: number, layerFilter: string | ((layer: any) => boolean), tileInfo: {
63
+ gid: number;
64
+ properties?: object;
65
+ }): any;
66
+ getEventShape(eventName: string): RpgShape | undefined;
67
+ /**
68
+ * Dynamically create an event in Shared mode
69
+ *
70
+ * ```ts
71
+ * @EventData({
72
+ * name: 'EV-1'
73
+ * })
74
+ * class MyEvent extends RpgEvent {
75
+ * onAction() {
76
+ * console.log('ok')
77
+ * }
78
+ * }
79
+ *
80
+ * map.createDynamicEvent({
81
+ * x: 100,
82
+ * y: 100,
83
+ * event: MyEvent
84
+ * })
85
+ * ```
86
+ *
87
+ * You can also put an array of objects to create several events at once
88
+ *
89
+ * @title Create Dynamic Event
90
+ * @since 3.0.0-beta.4
91
+ * @method map.createDynamicEvent(eventObj|eventObj[])
92
+ * @param { { x: number, y: number, z?: number, event: eventClass } } eventsList
93
+ * @returns { { [eventId: string]: RpgEvent } }
94
+ * @memberof Map
95
+ */
96
+ createDynamicEvent(eventsList: EventPosOption | EventPosOption[]): {
97
+ [eventId: string]: RpgEvent;
98
+ };
99
+ /**
100
+ * Removes an event from the map. Returns false if the event is not found
101
+ * @title Remove Event
102
+ * @since 3.0.0-beta.4
103
+ * @method map.removeEvent(eventId)
104
+ * @param {string} eventId Event Name
105
+ * @returns {boolean}
106
+ * @memberof Map
107
+ */
108
+ removeEvent(eventId: string): boolean;
109
+ createEvent(obj: EventPosOption, mode: EventMode, shape?: any): RpgEvent | null;
30
110
  createEvents(eventsList: EventOption[], mode: EventMode): {
31
111
  [eventId: string]: RpgEvent;
32
112
  };
@@ -37,4 +117,3 @@ export interface RpgMap {
37
117
  sounds: string[];
38
118
  $setSchema: (schema: any) => void;
39
119
  }
40
- export {};
package/lib/Game/Map.js CHANGED
@@ -72,6 +72,11 @@ class RpgMap extends common_1.RpgCommonMap {
72
72
  constructor(_server) {
73
73
  super();
74
74
  this._server = _server;
75
+ /**
76
+ * @title event list
77
+ * @prop { { [eventId: string]: RpgEvent } } [events]
78
+ * @memberof Map
79
+ * */
75
80
  this.events = {};
76
81
  this.entityManager = new YUKA.EntityManager();
77
82
  }
@@ -86,13 +91,7 @@ class RpgMap extends common_1.RpgCommonMap {
86
91
  const data = yield this.parseFile();
87
92
  _super.load.call(this, data);
88
93
  common_1.RpgCommonMap.buffer.set(this.id, this);
89
- //this.kWorld = new Kompute.World(data.width * data.tileWidth, data.height * data.tileHeight, 1000, 32)
90
- this.events = this.createEvents(this._events, Event_1.EventMode.Shared);
91
- // TODO
92
- // this.autoLoadEvent()
93
- for (let key in this.events) {
94
- this.events[key].execMethod('onInit');
95
- }
94
+ this.createDynamicEvent(this._events);
96
95
  this.onLoad();
97
96
  });
98
97
  }
@@ -107,6 +106,11 @@ class RpgMap extends common_1.RpgCommonMap {
107
106
  player.stopBehavior();
108
107
  this.entityManager.remove(player.steerable);
109
108
  this.getShapes().forEach(shape => shape.out(player));
109
+ const events = this.game.world.getObjectsOfGroup(this.id, player);
110
+ for (let event of events) {
111
+ player.getShapes().forEach(shape => shape.out(event));
112
+ event.getShapes().forEach(shape => shape.out(player));
113
+ }
110
114
  }
111
115
  autoLoadEvent() {
112
116
  this.getShapes().forEach(shape => {
@@ -130,19 +134,104 @@ class RpgMap extends common_1.RpgCommonMap {
130
134
  }
131
135
  });
132
136
  }
137
+ /**
138
+ * Edit a tile on the map. All players on the map will see the modified tile
139
+ *
140
+ *
141
+ * @title Change Tile in map
142
+ * @since 3.0.0-beta.4
143
+ * @method map.setTile(x,y,layer,tileInfo)
144
+ * @param {number} x Position X
145
+ * @param {number} y Position Y
146
+ * @param {string | ((layer: any) => boolean)} layer Name of the layer where you want to put a tile. OYou can also put a function that will act as a filter. The first parameter is the layer and you return a boolean to indicate if you modify the tile of this layer or not
147
+ * @param {object} tileInfo Object with the following properties:
148
+ * - {number} gid: The tile number in tileset (from 1)
149
+ * - {object} properties Property of the tile. You own object. To set a collision, set the `collision:true` property
150
+ * @example
151
+ * ```ts
152
+ * map.setTile(15, 18, 'mylayer', { gid: 2 })
153
+ * ```
154
+ * @returns {void}
155
+ * @memberof Map
156
+ */
157
+ setTile(x, y, layerFilter, tileInfo) {
158
+ const tiles = super.setTile(x, y, layerFilter, tileInfo);
159
+ const players = Object.values(this['users']);
160
+ for (let player of players) {
161
+ player.emit('changeTile', tiles);
162
+ }
163
+ return tiles;
164
+ }
133
165
  // TODO: return type
134
166
  getEventShape(eventName) {
135
167
  return this.getShapes().find(shape => shape.name == eventName);
136
168
  }
169
+ /**
170
+ * Dynamically create an event in Shared mode
171
+ *
172
+ * ```ts
173
+ * @EventData({
174
+ * name: 'EV-1'
175
+ * })
176
+ * class MyEvent extends RpgEvent {
177
+ * onAction() {
178
+ * console.log('ok')
179
+ * }
180
+ * }
181
+ *
182
+ * map.createDynamicEvent({
183
+ * x: 100,
184
+ * y: 100,
185
+ * event: MyEvent
186
+ * })
187
+ * ```
188
+ *
189
+ * You can also put an array of objects to create several events at once
190
+ *
191
+ * @title Create Dynamic Event
192
+ * @since 3.0.0-beta.4
193
+ * @method map.createDynamicEvent(eventObj|eventObj[])
194
+ * @param { { x: number, y: number, z?: number, event: eventClass } } eventsList
195
+ * @returns { { [eventId: string]: RpgEvent } }
196
+ * @memberof Map
197
+ */
198
+ createDynamicEvent(eventsList) {
199
+ if (!eventsList)
200
+ return {};
201
+ if (!common_1.Utils.isArray(eventsList)) {
202
+ eventsList = [eventsList];
203
+ }
204
+ const events = this.createEvents(eventsList, Event_1.EventMode.Shared);
205
+ for (let key in events) {
206
+ this.events[key] = events[key];
207
+ this.events[key].execMethod('onInit');
208
+ }
209
+ return events;
210
+ }
211
+ /**
212
+ * Removes an event from the map. Returns false if the event is not found
213
+ * @title Remove Event
214
+ * @since 3.0.0-beta.4
215
+ * @method map.removeEvent(eventId)
216
+ * @param {string} eventId Event Name
217
+ * @returns {boolean}
218
+ * @memberof Map
219
+ */
220
+ removeEvent(eventId) {
221
+ if (!this.events[eventId])
222
+ return false;
223
+ delete this.events[eventId];
224
+ return true;
225
+ }
137
226
  createEvent(obj, mode, shape) {
138
227
  let event, position;
139
228
  // We retrieve the information of the event ([Event] or [{event: Event, x: number, y: number}])
140
- if (obj['x'] === undefined) {
229
+ if (obj.x === undefined) {
141
230
  event = obj;
142
231
  }
143
232
  else {
144
- event = obj['event'];
145
- position = { x: obj['x'], y: obj['y'] };
233
+ event = obj.event;
234
+ position = { x: obj.x, y: obj.y, z: 0 };
146
235
  }
147
236
  // The event is ignored if the mode is different.
148
237
  if (event.mode != mode) {
@@ -1 +1 @@
1
- {"version":3,"file":"Map.js","sourceRoot":"","sources":["../../src/Game/Map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Map.js","sourceRoot":"","sources":["../../src/Game/Map.ts"],"names":[],"mappings":"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"}
@@ -93,7 +93,7 @@ export declare class ElementManager extends ItemFixture {
93
93
  * @readonly
94
94
  * @memberof ElementManager
95
95
  * */
96
- get elements(): unknown[];
96
+ get elements(): any[];
97
97
  coefficientElements(otherPlayer: RpgPlayer): number;
98
98
  }
99
99
  export interface ElementManager {
@@ -13,11 +13,13 @@ import { VariableManager } from './VariableManager';
13
13
  import { MoveManager } from './MoveManager';
14
14
  import { BattleManager } from './BattleManager';
15
15
  import { BehaviorManager } from './BehaviorManager';
16
- export declare type Position = {
16
+ import { EventPosOption } from '../Game/Map';
17
+ import { RpgEvent } from '..';
18
+ export interface Position {
17
19
  x: number;
18
20
  y: number;
19
21
  z: number;
20
- };
22
+ }
21
23
  export declare class RpgPlayer extends RpgCommonPlayer {
22
24
  readonly type: string;
23
25
  static schemas: {
@@ -157,9 +159,10 @@ export declare class RpgPlayer extends RpgCommonPlayer {
157
159
  hHitbox: NumberConstructor;
158
160
  };
159
161
  private _name;
160
- events: any[];
162
+ events: any;
161
163
  param: any;
162
164
  _rooms: never[];
165
+ prevMap: string;
163
166
  constructor(gameEngine?: any, playerId?: any);
164
167
  teleported: number;
165
168
  initialize(): void;
@@ -186,36 +189,6 @@ export declare class RpgPlayer extends RpgCommonPlayer {
186
189
  * @memberof Player
187
190
  */
188
191
  setGraphic(graphic: string): void;
189
- /**
190
- * Define a vision for the event.
191
- *
192
- * The object in parameter
193
- * - type: `box`
194
- * - height: Height
195
- * - width: Width
196
- *
197
- * the `onInVision()` and `onOutVision()` methods are triggered on the `RpgPlayer` class
198
- *
199
- * ```ts
200
- * player.setVision({
201
- * type: 'box',
202
- * width: 100,
203
- * height: 100
204
- * })
205
- * ```
206
- *
207
- * @title Set Vision
208
- * @todo
209
- * @method player.setVision(obj)
210
- * @param {object} obj
211
- * @memberof Player
212
- */
213
- setVision(obj: {
214
- ellipse?: boolean;
215
- height: number;
216
- width: number;
217
- type: string;
218
- }): void;
219
192
  /**
220
193
  * Change your map. Indicate the positions to put the player at a place on the map
221
194
  *
@@ -231,6 +204,48 @@ export declare class RpgPlayer extends RpgCommonPlayer {
231
204
  * @memberof Player
232
205
  */
233
206
  changeMap(mapId: string, positions?: any): Promise<RpgMap>;
207
+ /**
208
+ * Dynamically create an event in Scenario mode on the current map
209
+ *
210
+ * ```ts
211
+ * @EventData({
212
+ * name: 'EV-1'
213
+ * })
214
+ * class MyEvent extends RpgEvent {
215
+ * onAction() {
216
+ * console.log('ok')
217
+ * }
218
+ * }
219
+ *
220
+ * player.createDynamicEvent({
221
+ * x: 100,
222
+ * y: 100,
223
+ * event: MyEvent
224
+ * })
225
+ * ```
226
+ *
227
+ * You can also put an array of objects to create several events at once
228
+ *
229
+ * @title Create Dynamic Event
230
+ * @since 3.0.0-beta.4
231
+ * @method player.createDynamicEvent(eventObj | eventObj[])
232
+ * @param { { x: number, y: number, z?: number, event: eventClass } } [eventsList]
233
+ * @returns { { [eventId: string]: RpgEvent } }
234
+ * @memberof Player
235
+ */
236
+ createDynamicEvent(eventsList: EventPosOption | EventPosOption[], forceMode?: boolean): {
237
+ [eventId: string]: RpgEvent;
238
+ };
239
+ /**
240
+ * Removes an event from the map (Scenario Mode). Returns false if the event is not found
241
+ * @title Remove Event
242
+ * @since 3.0.0-beta.4
243
+ * @method player.removeEvent(eventId)
244
+ * @param {string} eventId Event Name
245
+ * @returns {boolean}
246
+ * @memberof Player
247
+ */
248
+ removeEvent(eventId: string): boolean;
234
249
  /**
235
250
  * Allows to change the positions of the player on the current map.
236
251
  * You can put the X and Y positions or the name of the created shape on Tiled Map Editor.
@@ -258,7 +273,11 @@ export declare class RpgPlayer extends RpgCommonPlayer {
258
273
  * @returns { {x: number, y: number, z: number} }
259
274
  * @memberof Player
260
275
  */
261
- teleport(positions?: Position | string): Position;
276
+ teleport(positions?: {
277
+ x: number;
278
+ y: number;
279
+ z?: number;
280
+ } | string): Position;
262
281
  startBattle(enemies: {
263
282
  enemy: any;
264
283
  level: number;
@@ -319,10 +338,6 @@ export declare class RpgPlayer extends RpgCommonPlayer {
319
338
  loadScene(name: string, data: any): void;
320
339
  private _getMap;
321
340
  showEffect(): void;
322
- /**
323
- * @todo
324
- */
325
- createDynamicEvent(obj: any, mode: any): RpgPlayer | null;
326
341
  /**
327
342
  * Calls the showAnimation() method on the client side to display an animation on the player
328
343
  * You must remember to create the spritesheet beforehand
@@ -378,6 +393,17 @@ export declare class RpgPlayer extends RpgCommonPlayer {
378
393
  * @memberof Player
379
394
  */
380
395
  emit(key: string, value: any): void;
396
+ /**
397
+ * Listen to the data (socket) sent by the client
398
+ *
399
+ * @title Listen to data from the client
400
+ * @method player.on(key,cb)
401
+ * @param {string} key
402
+ * @param {function} cb
403
+ * @returns {void}
404
+ * @memberof Player
405
+ */
406
+ on(key: string, cb: Function): void;
381
407
  emitToMap(key: string, value: any): void;
382
408
  execMethod(methodName: string, methodData?: never[]): Promise<any[]>;
383
409
  _triggerHook(name: any, val?: any): void;
@@ -424,4 +450,5 @@ export interface RpgPlayer extends ItemManager, GoldManager, StateManager, Skill
424
450
  server: any;
425
451
  vision: any;
426
452
  steerable: Kompute;
453
+ attachShape: any;
427
454
  }
@@ -50,6 +50,7 @@ const MoveManager_1 = require("./MoveManager");
50
50
  const BattleManager_1 = require("./BattleManager");
51
51
  const presets_1 = require("../presets");
52
52
  const BehaviorManager_1 = require("./BehaviorManager");
53
+ const __1 = require("..");
53
54
  const { isPromise, applyMixins, isString } = common_1.Utils;
54
55
  const itemSchemas = {
55
56
  name: String,
@@ -102,8 +103,9 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
102
103
  constructor(gameEngine, playerId) {
103
104
  super(gameEngine, playerId);
104
105
  this.type = 'player';
105
- this.events = [];
106
+ this.events = {};
106
107
  this._rooms = [];
108
+ this.prevMap = '';
107
109
  // 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.
108
110
  this.teleported = 0;
109
111
  this.initialize();
@@ -184,36 +186,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
184
186
  setGraphic(graphic) {
185
187
  this.graphic = graphic;
186
188
  }
187
- /**
188
- * Define a vision for the event.
189
- *
190
- * The object in parameter
191
- * - type: `box`
192
- * - height: Height
193
- * - width: Width
194
- *
195
- * the `onInVision()` and `onOutVision()` methods are triggered on the `RpgPlayer` class
196
- *
197
- * ```ts
198
- * player.setVision({
199
- * type: 'box',
200
- * width: 100,
201
- * height: 100
202
- * })
203
- * ```
204
- *
205
- * @title Set Vision
206
- * @todo
207
- * @method player.setVision(obj)
208
- * @param {object} obj
209
- * @memberof Player
210
- */
211
- setVision(obj) {
212
- if (!this.hitbox) {
213
- throw 'Please define hitbox property before';
214
- }
215
- this.vision = obj;
216
- }
217
189
  /**
218
190
  * Change your map. Indicate the positions to put the player at a place on the map
219
191
  *
@@ -231,6 +203,74 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
231
203
  changeMap(mapId, positions) {
232
204
  return this.server.getScene('map').changeMap(mapId, this, positions);
233
205
  }
206
+ /**
207
+ * Dynamically create an event in Scenario mode on the current map
208
+ *
209
+ * ```ts
210
+ * @EventData({
211
+ * name: 'EV-1'
212
+ * })
213
+ * class MyEvent extends RpgEvent {
214
+ * onAction() {
215
+ * console.log('ok')
216
+ * }
217
+ * }
218
+ *
219
+ * player.createDynamicEvent({
220
+ * x: 100,
221
+ * y: 100,
222
+ * event: MyEvent
223
+ * })
224
+ * ```
225
+ *
226
+ * You can also put an array of objects to create several events at once
227
+ *
228
+ * @title Create Dynamic Event
229
+ * @since 3.0.0-beta.4
230
+ * @method player.createDynamicEvent(eventObj | eventObj[])
231
+ * @param { { x: number, y: number, z?: number, event: eventClass } } [eventsList]
232
+ * @returns { { [eventId: string]: RpgEvent } }
233
+ * @memberof Player
234
+ */
235
+ createDynamicEvent(eventsList, forceMode = true) {
236
+ if (!eventsList)
237
+ return {};
238
+ const mapInstance = this.getCurrentMap();
239
+ if (!mapInstance) {
240
+ throw 'The player is not assigned to any map';
241
+ }
242
+ if (!common_1.Utils.isArray(eventsList)) {
243
+ eventsList = [eventsList];
244
+ }
245
+ let eventsListMode = eventsList;
246
+ if (forceMode) {
247
+ eventsListMode = eventsList.map(event => {
248
+ event.event.mode = __1.EventMode.Scenario;
249
+ return event;
250
+ });
251
+ }
252
+ const events = mapInstance.createEvents(eventsListMode, __1.EventMode.Scenario);
253
+ for (let key in events) {
254
+ this.events[key] = events[key];
255
+ this.events[key].execMethod('onInit', [this]);
256
+ }
257
+ return events;
258
+ }
259
+ /**
260
+ * Removes an event from the map (Scenario Mode). Returns false if the event is not found
261
+ * @title Remove Event
262
+ * @since 3.0.0-beta.4
263
+ * @method player.removeEvent(eventId)
264
+ * @param {string} eventId Event Name
265
+ * @returns {boolean}
266
+ * @memberof Player
267
+ */
268
+ removeEvent(eventId) {
269
+ if (!this.events[eventId])
270
+ return false;
271
+ delete this.events[eventId];
272
+ return true;
273
+ }
234
274
  /**
235
275
  * Allows to change the positions of the player on the current map.
236
276
  * You can put the X and Y positions or the name of the created shape on Tiled Map Editor.
@@ -267,6 +307,8 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
267
307
  positions.z = 0;
268
308
  this.teleported++;
269
309
  this.position = positions;
310
+ // force interaction with event or shape
311
+ this.isCollided(this.position);
270
312
  return positions;
271
313
  }
272
314
  startBattle(enemies) {
@@ -331,7 +373,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
331
373
  toJSON() {
332
374
  const obj = {};
333
375
  const props = [
334
- 'id',
335
376
  'hp',
336
377
  'sp',
337
378
  'gold',
@@ -411,18 +452,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
411
452
  params: []
412
453
  });
413
454
  }
414
- /**
415
- * @todo
416
- */
417
- createDynamicEvent(obj, mode) {
418
- const map = this.mapInstance;
419
- const event = map.createEvent(obj, mode);
420
- if (event) {
421
- map.events[event.name] = event;
422
- event.execMethod('onInit');
423
- }
424
- return event;
425
- }
426
455
  /**
427
456
  * Calls the showAnimation() method on the client side to display an animation on the player
428
457
  * You must remember to create the spritesheet beforehand
@@ -487,6 +516,20 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
487
516
  if (this._socket)
488
517
  this._socket.emit(key, value);
489
518
  }
519
+ /**
520
+ * Listen to the data (socket) sent by the client
521
+ *
522
+ * @title Listen to data from the client
523
+ * @method player.on(key,cb)
524
+ * @param {string} key
525
+ * @param {function} cb
526
+ * @returns {void}
527
+ * @memberof Player
528
+ */
529
+ on(key, cb) {
530
+ if (this._socket)
531
+ this._socket.on(key, cb);
532
+ }
490
533
  emitToMap(key, value) {
491
534
  Query_1.Query.getPlayersOfMap(this.map).forEach(player => player.emit(key, value));
492
535
  }