From 3808c2787587635c51e0758e6613b8e8bce36e40 Mon Sep 17 00:00:00 2001 From: sarimash Date: Mon, 19 Jun 2023 01:39:38 -0700 Subject: [PATCH 1/3] Wave should only check for online players --- server/src/modules/player/player.service.ts | 37 +++++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/server/src/modules/player/player.service.ts b/server/src/modules/player/player.service.ts index d2d9caf..ae9ffa1 100644 --- a/server/src/modules/player/player.service.ts +++ b/server/src/modules/player/player.service.ts @@ -150,22 +150,37 @@ export class PlayerService { } } - async getRandomUserAtLocation( + async getRandomOnlinePlayerAtLocation( excludeUserId: string, locationName: string, ): Promise { - const found = await this.players.aggregate([ + + const currentTime = Date.now(); + + const found = await this.em.aggregate(Player, [ { - $match: { - userId: { $ne: excludeUserId }, - 'location.current': locationName, + $lookup: { + from: 'user', + let: { userId: "$userId" }, + pipeline: [ + { + $match: { + $expr: { + $eq: [{ $toObjectId: "$$userId" }, "$_id"] + } + } + } + ], + as: 'user' }, }, { - $sample: { - size: 1, - }, - }, + $match: { + 'location.current': locationName, + 'user.onlineUntil': { $gt: currentTime }, + 'userId': { $ne: excludeUserId } + } + } ]); return found[0]; @@ -177,11 +192,11 @@ export class PlayerService { if (waveRoll > waveChance) return; - const randomPlayer = await this.getRandomUserAtLocation( + const randomPlayer = await this.getRandomOnlinePlayerAtLocation( player.userId, player.location.current, ); - + if (!randomPlayer) return; this.setPlayerAction(player, { From 5d4f5586c1f8c656cd2244cf9e0e68e7b482270f Mon Sep 17 00:00:00 2001 From: sarimash Date: Mon, 19 Jun 2023 01:41:00 -0700 Subject: [PATCH 2/3] run lint --- server/src/modules/player/player.service.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/server/src/modules/player/player.service.ts b/server/src/modules/player/player.service.ts index ae9ffa1..739f714 100644 --- a/server/src/modules/player/player.service.ts +++ b/server/src/modules/player/player.service.ts @@ -154,33 +154,32 @@ export class PlayerService { excludeUserId: string, locationName: string, ): Promise { - const currentTime = Date.now(); const found = await this.em.aggregate(Player, [ { $lookup: { from: 'user', - let: { userId: "$userId" }, + let: { userId: '$userId' }, pipeline: [ { $match: { $expr: { - $eq: [{ $toObjectId: "$$userId" }, "$_id"] - } - } - } + $eq: [{ $toObjectId: '$$userId' }, '$_id'], + }, + }, + }, ], - as: 'user' + as: 'user', }, }, { $match: { 'location.current': locationName, 'user.onlineUntil': { $gt: currentTime }, - 'userId': { $ne: excludeUserId } - } - } + userId: { $ne: excludeUserId }, + }, + }, ]); return found[0]; @@ -196,7 +195,7 @@ export class PlayerService { player.userId, player.location.current, ); - + if (!randomPlayer) return; this.setPlayerAction(player, { From 12123bb6e5fc46a5c591b6625ea1357eca077384 Mon Sep 17 00:00:00 2001 From: sarimash Date: Mon, 19 Jun 2023 01:49:17 -0700 Subject: [PATCH 3/3] Re-add the sample instead of always returning the first player --- server/src/modules/player/player.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/modules/player/player.service.ts b/server/src/modules/player/player.service.ts index 739f714..7c29383 100644 --- a/server/src/modules/player/player.service.ts +++ b/server/src/modules/player/player.service.ts @@ -180,6 +180,9 @@ export class PlayerService { userId: { $ne: excludeUserId }, }, }, + { + $sample: { size: 1 }, + }, ]); return found[0];