From 9e4591cac83722acf6102b6efe0481fd8cdd9bca Mon Sep 17 00:00:00 2001 From: R-unic Date: Wed, 13 Mar 2024 20:29:49 -0400 Subject: [PATCH] feat: create PlaytimeService --- src/server/classes/firebase.lua | 1 - src/server/services/database.ts | 2 +- src/server/services/playtime.ts | 31 +++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 src/server/services/playtime.ts diff --git a/src/server/classes/firebase.lua b/src/server/classes/firebase.lua index 4417df8..6e2710b 100644 --- a/src/server/classes/firebase.lua +++ b/src/server/classes/firebase.lua @@ -86,7 +86,6 @@ function FirebaseService:fetch(name, database) end end - print("fetched firebase") return Firebase; end diff --git a/src/server/services/database.ts b/src/server/services/database.ts index e2575ec..979065b 100644 --- a/src/server/services/database.ts +++ b/src/server/services/database.ts @@ -54,7 +54,7 @@ export class DatabaseService implements OnInit, LogStart { this.set(player, directory, value); } - private getDirectoryForPlayer(player: Player, directory: string) { + private getDirectoryForPlayer(player: Player, directory: string): string { return `${player.UserId}/${directory}`; } } \ No newline at end of file diff --git a/src/server/services/playtime.ts b/src/server/services/playtime.ts new file mode 100644 index 0000000..b9ac9f4 --- /dev/null +++ b/src/server/services/playtime.ts @@ -0,0 +1,31 @@ +import { Service, type OnInit } from "@flamework/core"; +import { Players } from "@rbxts/services"; + +import type { LogStart } from "shared/hooks"; +import type { OnPlayerJoin, OnPlayerLeave } from "server/hooks"; +import type { DatabaseService } from "./database"; + +@Service() +export class PlaytimeService implements OnInit, OnPlayerJoin, OnPlayerLeave, LogStart { + private readonly joinTimestamps: Record = {}; + + public constructor( + private readonly db: DatabaseService + ) {} + + public onInit(): void { + game.BindToClose(() => { + for (const player of Players.GetPlayers()) + this.onPlayerLeave(player); + }); + } + + public onPlayerJoin(player: Player): void { + this.joinTimestamps[player.UserId] = os.clock(); + } + + public onPlayerLeave(player: Player): void { + const timeSpent = os.clock() - this.joinTimestamps[player.UserId]; + this.db.increment(player, "playtime", timeSpent); + } +} \ No newline at end of file