1
+ local Players = game :GetService ("Players" )
2
+
1
3
local Console = require (script .Parent .Parent .Packages .Console )
2
4
3
5
local GetScriptFromFullName = require (script .Parent .Parent .Util .GetScriptFromFullName )
4
6
7
+ local Network = require (script .Parent .Parent .Network .Server )
8
+
5
9
local BreadcrumbService = { }
6
10
7
11
BreadcrumbService .Store = { } :: { [Instance ]: Breadcrumb }
12
+ BreadcrumbService .PlayerStore = { } :: { [Player ]: typeof (BreadcrumbService .Store ) }
8
13
9
14
BreadcrumbService .Priority = 0
10
15
BreadcrumbService .Reporter = Console .new (`{script .Name }` )
11
16
12
- function BreadcrumbService .GetBreadcrumbsFor (self : BreadcrumbService , sourcePath : string ): { Breadcrumb }
17
+ function BreadcrumbService .GetBreadcrumbsFor (self : BreadcrumbService , player : Player ? , sourcePath : string ): { Breadcrumb }
13
18
local source = GetScriptFromFullName (sourcePath )
19
+ local store = player and self .PlayerStore [player ] or self .Store
14
20
15
21
if not source then
16
22
return { }
17
23
end
18
24
19
- if not self . Store [source ] then
25
+ if not store [source ] then
20
26
return { }
21
27
end
22
28
23
- return self . Store [source ]
29
+ return store [source ]
24
30
end
25
31
26
- function BreadcrumbService .CreateBreadcrumbFor (self : BreadcrumbService , sourcePath : string , message : string )
32
+ function BreadcrumbService .CreateBreadcrumbFor (self : BreadcrumbService , player : Player ? , sourcePath : string , message : string )
27
33
local source = GetScriptFromFullName (sourcePath )
34
+ local store = player and self .PlayerStore [player ] or self .Store
28
35
local breadcrumbObject = {
29
36
message = message ,
30
37
timestamp = DateTime .now ():ToIsoDate ()
@@ -34,11 +41,25 @@ function BreadcrumbService.CreateBreadcrumbFor(self: BreadcrumbService, sourcePa
34
41
return
35
42
end
36
43
37
- if not self . Store [source ] then
38
- self . Store [source ] = { }
44
+ if not store [source ] then
45
+ store [source ] = { }
39
46
end
40
47
41
- table.insert (self .Store [source ], breadcrumbObject )
48
+ table.insert (store [source ], breadcrumbObject )
49
+ end
50
+
51
+ function BreadcrumbService .OnStart (self : BreadcrumbService )
52
+ Network .CreateBreadcrumb .SetCallback (function (player : Player , breadcrumb : { message : string , sourcePath : string })
53
+ if not self .PlayerStore [player ] then
54
+ self .PlayerStore [player ] = { }
55
+ end
56
+
57
+ self :CreateBreadcrumbFor (player , breadcrumb .sourcePath , breadcrumb .message )
58
+ end )
59
+
60
+ Players .PlayerRemoving :Connect (function (player : Player )
61
+ BreadcrumbService .PlayerStore [player ] = nil
62
+ end )
42
63
end
43
64
44
65
export type BreadcrumbService = typeof (BreadcrumbService )
0 commit comments