@quenty/deathreport 10.44.0 → 10.45.0
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/CHANGELOG.md +10 -0
- package/package.json +10 -10
- package/src/Client/DeathReportBindersClient.lua +6 -3
- package/src/Client/DeathReportServiceClient.lua +4 -4
- package/src/Client/Stats/PlayerDeathTrackerClient.lua +20 -10
- package/src/Client/Stats/PlayerKillTrackerClient.lua +17 -6
- package/src/Client/Stats/TeamKillTrackerClient.lua +19 -10
- package/src/Server/DeathReportBindersServer.lua +6 -3
- package/src/Server/DeathTrackedHumanoid.lua +16 -5
- package/src/Server/Stats/PlayerDeathTracker.lua +19 -7
- package/src/Server/Stats/PlayerKillTracker.lua +12 -10
- package/src/Server/Stats/TeamKillTracker.lua +26 -12
- package/src/Shared/DeathReportUtils.lua +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [10.45.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/deathreport@10.44.1...@quenty/deathreport@10.45.0) (2026-06-24)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **deathreport:** convert package to --!strict ([#719](https://github.com/Quenty/NevermoreEngine/issues/719)) ([238945a](https://github.com/Quenty/NevermoreEngine/commit/238945acb31670a95a3f7b01657066179968baf4))
|
|
11
|
+
|
|
12
|
+
## [10.44.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/deathreport@10.44.0...@quenty/deathreport@10.44.1) (2026-05-30)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @quenty/deathreport
|
|
15
|
+
|
|
6
16
|
# [10.44.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/deathreport@10.43.0...@quenty/deathreport@10.44.0) (2026-05-29)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @quenty/deathreport
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/deathreport",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.45.0",
|
|
4
4
|
"description": "Death report service which will track the deaths of players",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -33,20 +33,20 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@quenty/baseobject": "10.13.0",
|
|
36
|
-
"@quenty/binder": "14.36.
|
|
37
|
-
"@quenty/characterutils": "12.32.
|
|
36
|
+
"@quenty/binder": "14.36.1",
|
|
37
|
+
"@quenty/characterutils": "12.32.1",
|
|
38
38
|
"@quenty/humanoidkillerutils": "2.3.5",
|
|
39
39
|
"@quenty/loader": "10.11.0",
|
|
40
40
|
"@quenty/maid": "3.9.0",
|
|
41
41
|
"@quenty/nevermore-test-runner": "1.4.0",
|
|
42
|
-
"@quenty/playerhumanoidbinder": "14.37.
|
|
43
|
-
"@quenty/remoting": "12.32.
|
|
44
|
-
"@quenty/rx": "13.28.
|
|
45
|
-
"@quenty/rxbinderutils": "14.36.
|
|
46
|
-
"@quenty/servicebag": "11.18.
|
|
47
|
-
"@quenty/signal": "7.13.
|
|
42
|
+
"@quenty/playerhumanoidbinder": "14.37.1",
|
|
43
|
+
"@quenty/remoting": "12.32.1",
|
|
44
|
+
"@quenty/rx": "13.28.3",
|
|
45
|
+
"@quenty/rxbinderutils": "14.36.1",
|
|
46
|
+
"@quenty/servicebag": "11.18.1",
|
|
47
|
+
"@quenty/signal": "7.13.1",
|
|
48
48
|
"@quenty/table": "3.9.2",
|
|
49
49
|
"@quentystudios/jest-lua": "3.10.0-quenty.2"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "d81b1c01ac4d0bdbd90045e6c7c4aafb5ff5fe92"
|
|
52
52
|
}
|
|
@@ -7,11 +7,14 @@ local require = require(script.Parent.loader).load(script)
|
|
|
7
7
|
|
|
8
8
|
local Binder = require("Binder")
|
|
9
9
|
local BinderProvider = require("BinderProvider")
|
|
10
|
+
local PlayerDeathTrackerClient = require("PlayerDeathTrackerClient")
|
|
11
|
+
local PlayerKillTrackerClient = require("PlayerKillTrackerClient")
|
|
10
12
|
local ServiceBag = require("ServiceBag")
|
|
13
|
+
local TeamKillTrackerClient = require("TeamKillTrackerClient")
|
|
11
14
|
|
|
12
15
|
return BinderProvider.new(script.Name, function(self, serviceBag: ServiceBag.ServiceBag)
|
|
13
16
|
-- Stats
|
|
14
|
-
self:Add(Binder.new("TeamKillTracker",
|
|
15
|
-
self:Add(Binder.new("PlayerKillTracker",
|
|
16
|
-
self:Add(Binder.new("PlayerDeathTracker",
|
|
17
|
+
self:Add(Binder.new("TeamKillTracker", TeamKillTrackerClient :: any, serviceBag))
|
|
18
|
+
self:Add(Binder.new("PlayerKillTracker", PlayerKillTrackerClient :: any, serviceBag))
|
|
19
|
+
self:Add(Binder.new("PlayerDeathTracker", PlayerDeathTrackerClient :: any, serviceBag))
|
|
17
20
|
end)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
Centralized death reporting service which can be used to track
|
|
4
4
|
deaths.
|
|
@@ -105,7 +105,7 @@ end
|
|
|
105
105
|
@param character Model
|
|
106
106
|
@return Observable<DeathReport>
|
|
107
107
|
]=]
|
|
108
|
-
function DeathReportServiceClient:ObserveCharacterKillerReports(character)
|
|
108
|
+
function DeathReportServiceClient:ObserveCharacterKillerReports(character: Model)
|
|
109
109
|
assert(typeof(character) == "Instance" and character:IsA("Model"), "Bad character")
|
|
110
110
|
|
|
111
111
|
return self._reportProcessor:ObserveCharacterKillerReports(character)
|
|
@@ -117,7 +117,7 @@ end
|
|
|
117
117
|
@param character Model
|
|
118
118
|
@return Observable<DeathReport>
|
|
119
119
|
]=]
|
|
120
|
-
function DeathReportServiceClient:ObserveCharacterDeathReports(character)
|
|
120
|
+
function DeathReportServiceClient:ObserveCharacterDeathReports(character: Model)
|
|
121
121
|
assert(typeof(character) == "Instance" and character:IsA("Model"), "Bad character")
|
|
122
122
|
|
|
123
123
|
return self._reportProcessor:ObserveCharacterDeathReports(character)
|
|
@@ -131,7 +131,7 @@ function DeathReportServiceClient:GetLastDeathReports()
|
|
|
131
131
|
return self._lastDeathReports
|
|
132
132
|
end
|
|
133
133
|
|
|
134
|
-
function DeathReportServiceClient:_handleClientEvent(deathReport)
|
|
134
|
+
function DeathReportServiceClient:_handleClientEvent(deathReport: DeathReportUtils.DeathReport)
|
|
135
135
|
assert(DeathReportUtils.isDeathReport(deathReport), "Bad deathreport")
|
|
136
136
|
|
|
137
137
|
if typeof(deathReport.adornee) ~= "Instance" then
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class PlayerDeathTrackerClient
|
|
4
4
|
]=]
|
|
@@ -12,26 +12,36 @@ local PlayerDeathTrackerClient = setmetatable({}, BaseObject)
|
|
|
12
12
|
PlayerDeathTrackerClient.ClassName = "PlayerDeathTrackerClient"
|
|
13
13
|
PlayerDeathTrackerClient.__index = PlayerDeathTrackerClient
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
export type PlayerDeathTrackerClient =
|
|
16
|
+
typeof(setmetatable(
|
|
17
|
+
{} :: {
|
|
18
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
19
|
+
DeathsChanged: RBXScriptSignal,
|
|
20
|
+
},
|
|
21
|
+
{} :: typeof({ __index = PlayerDeathTrackerClient })
|
|
22
|
+
))
|
|
23
|
+
& BaseObject.BaseObject
|
|
24
|
+
|
|
25
|
+
function PlayerDeathTrackerClient.new(tracker: IntValue, serviceBag: ServiceBag.ServiceBag): PlayerDeathTrackerClient
|
|
26
|
+
local self: PlayerDeathTrackerClient = setmetatable(BaseObject.new(tracker) :: any, PlayerDeathTrackerClient)
|
|
17
27
|
|
|
18
28
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
19
29
|
|
|
20
|
-
self.DeathsChanged = self._obj.Changed
|
|
30
|
+
self.DeathsChanged = (self._obj :: IntValue).Changed
|
|
21
31
|
|
|
22
32
|
return self
|
|
23
33
|
end
|
|
24
34
|
|
|
25
|
-
function PlayerDeathTrackerClient
|
|
26
|
-
return self._obj
|
|
35
|
+
function PlayerDeathTrackerClient.GetDeathValue(self: PlayerDeathTrackerClient): IntValue
|
|
36
|
+
return self._obj :: IntValue
|
|
27
37
|
end
|
|
28
38
|
|
|
29
|
-
function PlayerDeathTrackerClient
|
|
30
|
-
return self._obj.Parent
|
|
39
|
+
function PlayerDeathTrackerClient.GetPlayer(self: PlayerDeathTrackerClient): Instance?
|
|
40
|
+
return (self._obj :: IntValue).Parent
|
|
31
41
|
end
|
|
32
42
|
|
|
33
|
-
function PlayerDeathTrackerClient
|
|
34
|
-
return self._obj.Value
|
|
43
|
+
function PlayerDeathTrackerClient.GetKills(self: PlayerDeathTrackerClient): number
|
|
44
|
+
return (self._obj :: IntValue).Value
|
|
35
45
|
end
|
|
36
46
|
|
|
37
47
|
return PlayerDeathTrackerClient
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class PlayerKillTrackerClient
|
|
4
4
|
]=]
|
|
@@ -12,8 +12,19 @@ local PlayerKillTrackerClient = setmetatable({}, BaseObject)
|
|
|
12
12
|
PlayerKillTrackerClient.ClassName = "PlayerKillTrackerClient"
|
|
13
13
|
PlayerKillTrackerClient.__index = PlayerKillTrackerClient
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
export type PlayerKillTrackerClient =
|
|
16
|
+
typeof(setmetatable(
|
|
17
|
+
{} :: {
|
|
18
|
+
_obj: IntValue,
|
|
19
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
20
|
+
KillsChanged: RBXScriptSignal,
|
|
21
|
+
},
|
|
22
|
+
{} :: typeof({ __index = PlayerKillTrackerClient })
|
|
23
|
+
))
|
|
24
|
+
& BaseObject.BaseObject
|
|
25
|
+
|
|
26
|
+
function PlayerKillTrackerClient.new(tracker: IntValue, serviceBag: ServiceBag.ServiceBag): PlayerKillTrackerClient
|
|
27
|
+
local self: PlayerKillTrackerClient = setmetatable(BaseObject.new(tracker) :: any, PlayerKillTrackerClient)
|
|
17
28
|
|
|
18
29
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
19
30
|
|
|
@@ -22,15 +33,15 @@ function PlayerKillTrackerClient.new(tracker, serviceBag: ServiceBag.ServiceBag)
|
|
|
22
33
|
return self
|
|
23
34
|
end
|
|
24
35
|
|
|
25
|
-
function PlayerKillTrackerClient
|
|
36
|
+
function PlayerKillTrackerClient.GetKillValue(self: PlayerKillTrackerClient): IntValue
|
|
26
37
|
return self._obj
|
|
27
38
|
end
|
|
28
39
|
|
|
29
|
-
function PlayerKillTrackerClient
|
|
40
|
+
function PlayerKillTrackerClient.GetPlayer(self: PlayerKillTrackerClient): Instance?
|
|
30
41
|
return self._obj.Parent
|
|
31
42
|
end
|
|
32
43
|
|
|
33
|
-
function PlayerKillTrackerClient
|
|
44
|
+
function PlayerKillTrackerClient.GetKills(self: PlayerKillTrackerClient): number
|
|
34
45
|
return self._obj.Value
|
|
35
46
|
end
|
|
36
47
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class TeamKillTrackerClient
|
|
4
4
|
]=]
|
|
@@ -11,24 +11,33 @@ local TeamKillTrackerClient = setmetatable({}, BaseObject)
|
|
|
11
11
|
TeamKillTrackerClient.ClassName = "TeamKillTrackerClient"
|
|
12
12
|
TeamKillTrackerClient.__index = TeamKillTrackerClient
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
export type TeamKillTrackerClient =
|
|
15
|
+
typeof(setmetatable(
|
|
16
|
+
{} :: {
|
|
17
|
+
KillsChanged: RBXScriptSignal,
|
|
18
|
+
},
|
|
19
|
+
{} :: typeof({ __index = TeamKillTrackerClient })
|
|
20
|
+
))
|
|
21
|
+
& BaseObject.BaseObject
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
function TeamKillTrackerClient.new(tracker: IntValue): TeamKillTrackerClient
|
|
24
|
+
local self: TeamKillTrackerClient = setmetatable(BaseObject.new(tracker) :: any, TeamKillTrackerClient)
|
|
25
|
+
|
|
26
|
+
self.KillsChanged = self:GetKillValue().Changed
|
|
18
27
|
|
|
19
28
|
return self
|
|
20
29
|
end
|
|
21
30
|
|
|
22
|
-
function TeamKillTrackerClient
|
|
23
|
-
return self._obj
|
|
31
|
+
function TeamKillTrackerClient.GetKillValue(self: TeamKillTrackerClient): IntValue
|
|
32
|
+
return self._obj :: IntValue
|
|
24
33
|
end
|
|
25
34
|
|
|
26
|
-
function TeamKillTrackerClient
|
|
27
|
-
return self.
|
|
35
|
+
function TeamKillTrackerClient.GetTeam(self: TeamKillTrackerClient): Instance?
|
|
36
|
+
return self:GetKillValue().Parent
|
|
28
37
|
end
|
|
29
38
|
|
|
30
|
-
function TeamKillTrackerClient
|
|
31
|
-
return self.
|
|
39
|
+
function TeamKillTrackerClient.GetKills(self: TeamKillTrackerClient): number
|
|
40
|
+
return self:GetKillValue().Value
|
|
32
41
|
end
|
|
33
42
|
|
|
34
43
|
return TeamKillTrackerClient
|
|
@@ -7,11 +7,14 @@ local require = require(script.Parent.loader).load(script)
|
|
|
7
7
|
|
|
8
8
|
local Binder = require("Binder")
|
|
9
9
|
local BinderProvider = require("BinderProvider")
|
|
10
|
+
local PlayerDeathTracker = require("PlayerDeathTracker")
|
|
11
|
+
local PlayerKillTracker = require("PlayerKillTracker")
|
|
10
12
|
local ServiceBag = require("ServiceBag")
|
|
13
|
+
local TeamKillTracker = require("TeamKillTracker")
|
|
11
14
|
|
|
12
15
|
return BinderProvider.new(script.Name, function(self, serviceBag: ServiceBag.ServiceBag)
|
|
13
16
|
-- Stats
|
|
14
|
-
self:Add(Binder.new("TeamKillTracker",
|
|
15
|
-
self:Add(Binder.new("PlayerKillTracker",
|
|
16
|
-
self:Add(Binder.new("PlayerDeathTracker",
|
|
17
|
+
self:Add(Binder.new("TeamKillTracker", TeamKillTracker :: any, serviceBag))
|
|
18
|
+
self:Add(Binder.new("PlayerKillTracker", PlayerKillTracker :: any, serviceBag))
|
|
19
|
+
self:Add(Binder.new("PlayerDeathTracker", PlayerDeathTracker :: any, serviceBag))
|
|
17
20
|
end)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class DeathTrackedHumanoid
|
|
4
4
|
]=]
|
|
@@ -14,11 +14,22 @@ local DeathTrackedHumanoid = setmetatable({}, BaseObject)
|
|
|
14
14
|
DeathTrackedHumanoid.ClassName = "DeathTrackedHumanoid"
|
|
15
15
|
DeathTrackedHumanoid.__index = DeathTrackedHumanoid
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
export type DeathTrackedHumanoid =
|
|
18
|
+
typeof(setmetatable(
|
|
19
|
+
{} :: {
|
|
20
|
+
_obj: Humanoid,
|
|
21
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
22
|
+
_deathReportService: DeathReportService.DeathReportService,
|
|
23
|
+
},
|
|
24
|
+
{} :: typeof({ __index = DeathTrackedHumanoid })
|
|
25
|
+
))
|
|
26
|
+
& BaseObject.BaseObject
|
|
27
|
+
|
|
28
|
+
function DeathTrackedHumanoid.new(humanoid: Humanoid, serviceBag: ServiceBag.ServiceBag): DeathTrackedHumanoid
|
|
29
|
+
local self: DeathTrackedHumanoid = setmetatable(BaseObject.new(humanoid) :: any, DeathTrackedHumanoid)
|
|
19
30
|
|
|
20
31
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
21
|
-
self._deathReportService = self._serviceBag:GetService(DeathReportService)
|
|
32
|
+
self._deathReportService = self._serviceBag:GetService(DeathReportService) :: any
|
|
22
33
|
|
|
23
34
|
self._maid._diedEvent = self._obj:GetPropertyChangedSignal("Health"):Connect(function()
|
|
24
35
|
self:_handleDeath()
|
|
@@ -27,7 +38,7 @@ function DeathTrackedHumanoid.new(humanoid: Humanoid, serviceBag: ServiceBag.Ser
|
|
|
27
38
|
return self
|
|
28
39
|
end
|
|
29
40
|
|
|
30
|
-
function DeathTrackedHumanoid
|
|
41
|
+
function DeathTrackedHumanoid._handleDeath(self: DeathTrackedHumanoid)
|
|
31
42
|
-- make sure we haven't already reported and this is a deferred event.
|
|
32
43
|
if not self._maid._diedEvent then
|
|
33
44
|
return
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class PlayerDeathTracker
|
|
4
4
|
]=]
|
|
@@ -13,15 +13,27 @@ local PlayerDeathTracker = setmetatable({}, BaseObject)
|
|
|
13
13
|
PlayerDeathTracker.ClassName = "PlayerDeathTracker"
|
|
14
14
|
PlayerDeathTracker.__index = PlayerDeathTracker
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
export type PlayerDeathTracker =
|
|
17
|
+
typeof(setmetatable(
|
|
18
|
+
{} :: {
|
|
19
|
+
_obj: IntValue,
|
|
20
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
21
|
+
_deathReportService: DeathReportService.DeathReportService,
|
|
22
|
+
_player: Player,
|
|
23
|
+
},
|
|
24
|
+
{} :: typeof({ __index = PlayerDeathTracker })
|
|
25
|
+
))
|
|
26
|
+
& BaseObject.BaseObject
|
|
27
|
+
|
|
28
|
+
function PlayerDeathTracker.new(scoreObject: IntValue, serviceBag: ServiceBag.ServiceBag): PlayerDeathTracker
|
|
29
|
+
local self: PlayerDeathTracker = setmetatable(BaseObject.new(scoreObject) :: any, PlayerDeathTracker)
|
|
18
30
|
|
|
19
31
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
20
|
-
self._deathReportService = self._serviceBag:GetService(DeathReportService)
|
|
32
|
+
self._deathReportService = self._serviceBag:GetService(DeathReportService) :: any
|
|
21
33
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
34
|
+
local player = self._obj.Parent
|
|
35
|
+
assert(player and player:IsA("Player"), "Bad player")
|
|
36
|
+
self._player = player
|
|
25
37
|
|
|
26
38
|
self._maid:GiveTask(self._deathReportService:ObservePlayerDeathReports(self._player):Subscribe(function(deathReport)
|
|
27
39
|
assert(deathReport.player == self._player, "Bad player")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class PlayerKillTracker
|
|
4
4
|
]=]
|
|
@@ -16,22 +16,24 @@ PlayerKillTracker.__index = PlayerKillTracker
|
|
|
16
16
|
export type PlayerKillTracker =
|
|
17
17
|
typeof(setmetatable(
|
|
18
18
|
{} :: {
|
|
19
|
+
_obj: IntValue,
|
|
19
20
|
_serviceBag: ServiceBag.ServiceBag,
|
|
20
|
-
_deathReportService:
|
|
21
|
+
_deathReportService: DeathReportService.DeathReportService,
|
|
21
22
|
_player: Player,
|
|
22
23
|
},
|
|
23
24
|
{} :: typeof({ __index = PlayerKillTracker })
|
|
24
25
|
))
|
|
25
26
|
& BaseObject.BaseObject
|
|
26
27
|
|
|
27
|
-
function PlayerKillTracker.new(scoreObject, serviceBag: ServiceBag.ServiceBag): PlayerKillTracker
|
|
28
|
+
function PlayerKillTracker.new(scoreObject: IntValue, serviceBag: ServiceBag.ServiceBag): PlayerKillTracker
|
|
28
29
|
local self: PlayerKillTracker = setmetatable(BaseObject.new(scoreObject) :: any, PlayerKillTracker)
|
|
29
30
|
|
|
30
31
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
31
|
-
self._deathReportService = self._serviceBag:GetService(DeathReportService)
|
|
32
|
+
self._deathReportService = self._serviceBag:GetService(DeathReportService) :: any
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
assert(
|
|
34
|
+
local player = self._obj.Parent
|
|
35
|
+
assert(player and player:IsA("Player"), "Bad player")
|
|
36
|
+
self._player = player
|
|
35
37
|
|
|
36
38
|
self._maid:GiveTask(
|
|
37
39
|
self._deathReportService:ObservePlayerKillerReports(self._player):Subscribe(function(deathReport)
|
|
@@ -43,15 +45,15 @@ function PlayerKillTracker.new(scoreObject, serviceBag: ServiceBag.ServiceBag):
|
|
|
43
45
|
return self
|
|
44
46
|
end
|
|
45
47
|
|
|
46
|
-
function PlayerKillTracker
|
|
48
|
+
function PlayerKillTracker.GetKillValue(self: PlayerKillTracker): IntValue
|
|
47
49
|
return self._obj
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
function PlayerKillTracker
|
|
51
|
-
return self.
|
|
52
|
+
function PlayerKillTracker.GetPlayer(self: PlayerKillTracker): Player
|
|
53
|
+
return self._player
|
|
52
54
|
end
|
|
53
55
|
|
|
54
|
-
function PlayerKillTracker
|
|
56
|
+
function PlayerKillTracker.GetKills(self: PlayerKillTracker): number
|
|
55
57
|
return self._obj.Value
|
|
56
58
|
end
|
|
57
59
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class TeamKillTracker
|
|
4
4
|
]=]
|
|
@@ -7,42 +7,56 @@ local require = require(script.Parent.loader).load(script)
|
|
|
7
7
|
|
|
8
8
|
local BaseObject = require("BaseObject")
|
|
9
9
|
local DeathReportService = require("DeathReportService")
|
|
10
|
+
local DeathReportUtils = require("DeathReportUtils")
|
|
10
11
|
local ServiceBag = require("ServiceBag")
|
|
11
12
|
|
|
12
13
|
local TeamKillTracker = setmetatable({}, BaseObject)
|
|
13
14
|
TeamKillTracker.ClassName = "TeamKillTracker"
|
|
14
15
|
TeamKillTracker.__index = TeamKillTracker
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
export type TeamKillTracker =
|
|
18
|
+
typeof(setmetatable(
|
|
19
|
+
{} :: {
|
|
20
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
21
|
+
_deathReportService: DeathReportService.DeathReportService,
|
|
22
|
+
_team: Team,
|
|
23
|
+
},
|
|
24
|
+
{} :: typeof({ __index = TeamKillTracker })
|
|
25
|
+
))
|
|
26
|
+
& BaseObject.BaseObject
|
|
27
|
+
|
|
28
|
+
function TeamKillTracker.new(scoreObject: IntValue, serviceBag: ServiceBag.ServiceBag): TeamKillTracker
|
|
29
|
+
local self: TeamKillTracker = setmetatable(BaseObject.new(scoreObject) :: any, TeamKillTracker)
|
|
18
30
|
|
|
19
31
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
20
|
-
self._deathReportService = self._serviceBag:GetService(DeathReportService)
|
|
32
|
+
self._deathReportService = self._serviceBag:GetService(DeathReportService) :: any
|
|
21
33
|
|
|
22
34
|
-- Hm.... this is suppose to be generic, but this is not....
|
|
23
35
|
self._maid:GiveTask(self._deathReportService.NewDeathReport:Connect(function(deathReport)
|
|
24
36
|
self:_handleDeathReport(deathReport)
|
|
25
37
|
end))
|
|
26
38
|
|
|
27
|
-
|
|
28
|
-
assert(
|
|
39
|
+
local team = (self._obj :: IntValue).Parent
|
|
40
|
+
assert(team and team:IsA("Team"), "Bad team")
|
|
41
|
+
self._team = team
|
|
29
42
|
|
|
30
43
|
return self
|
|
31
44
|
end
|
|
32
45
|
|
|
33
|
-
function TeamKillTracker
|
|
34
|
-
return self._obj.Parent
|
|
46
|
+
function TeamKillTracker.GetTeam(self: TeamKillTracker): Instance?
|
|
47
|
+
return (self._obj :: IntValue).Parent
|
|
35
48
|
end
|
|
36
49
|
|
|
37
|
-
function TeamKillTracker
|
|
38
|
-
return self._obj.Value
|
|
50
|
+
function TeamKillTracker.GetKills(self: TeamKillTracker): number
|
|
51
|
+
return (self._obj :: IntValue).Value
|
|
39
52
|
end
|
|
40
53
|
|
|
41
|
-
function TeamKillTracker
|
|
54
|
+
function TeamKillTracker._handleDeathReport(self: TeamKillTracker, deathReport: DeathReportUtils.DeathReport)
|
|
42
55
|
if deathReport.killerPlayer then
|
|
43
56
|
if deathReport.killerPlayer.Team == self._team then
|
|
44
57
|
-- increment kills
|
|
45
|
-
|
|
58
|
+
local obj = self._obj :: IntValue
|
|
59
|
+
obj.Value = obj.Value + 1
|
|
46
60
|
end
|
|
47
61
|
end
|
|
48
62
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class DeathReportUtils
|
|
4
4
|
]=]
|
|
@@ -19,11 +19,11 @@ local DeathReportUtils = {}
|
|
|
19
19
|
@param weaponData WeaponData
|
|
20
20
|
@return DeathReport
|
|
21
21
|
]=]
|
|
22
|
-
function DeathReportUtils.fromDeceasedHumanoid(humanoid: Humanoid, weaponData: WeaponData?)
|
|
22
|
+
function DeathReportUtils.fromDeceasedHumanoid(humanoid: Humanoid, weaponData: WeaponData?): DeathReport
|
|
23
23
|
assert(DeathReportUtils.isWeaponData(weaponData) or weaponData == nil, "Bad weaponData")
|
|
24
24
|
|
|
25
25
|
local killerHumanoid = HumanoidKillerUtils.getKillerHumanoidOfHumanoid(humanoid)
|
|
26
|
-
local character = humanoid.Parent
|
|
26
|
+
local character = assert(humanoid.Parent, "No character for humanoid")
|
|
27
27
|
return DeathReportUtils.create(character, killerHumanoid, weaponData)
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -44,7 +44,7 @@ export type DeathReport = {
|
|
|
44
44
|
function DeathReportUtils.create(adornee: Instance, killerAdornee: Instance?, weaponData: WeaponData?): DeathReport
|
|
45
45
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
46
46
|
|
|
47
|
-
local humanoid
|
|
47
|
+
local humanoid: Humanoid?
|
|
48
48
|
if adornee:IsA("Humanoid") then
|
|
49
49
|
humanoid = adornee
|
|
50
50
|
else
|
|
@@ -79,7 +79,7 @@ end
|
|
|
79
79
|
@param weaponData any
|
|
80
80
|
@return boolean
|
|
81
81
|
]=]
|
|
82
|
-
function DeathReportUtils.isWeaponData(weaponData): boolean
|
|
82
|
+
function DeathReportUtils.isWeaponData(weaponData: any): boolean
|
|
83
83
|
return type(weaponData) == "table"
|
|
84
84
|
and (typeof(weaponData.weaponInstance) == "Instance" or weaponData.weaponInstance == nil)
|
|
85
85
|
end
|