From 86f1ad3a6e80d6993febb5f12c5174be10554074 Mon Sep 17 00:00:00 2001 From: owen Date: Mon, 15 Jun 2026 14:02:04 -0400 Subject: [PATCH] =?UTF-8?q?Allow=201=E2=80=933=20player=20Morgeth=20clears?= =?UTF-8?q?=20under=20boss=20push=20strat=20(beta-2.2.2).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Duo and trio Morgeth checkpoint clears were still hitting TooFewPlayers at 99.5%; extend the same strat-window allowance already applied to solo. Co-authored-by: Cursor --- lib/services/cheat_detection/entry.go | 2 +- lib/services/cheat_detection/heuristics.go | 28 ++++++------------- .../cheat_detection/pantheon_heuristics.go | 14 +++++++++- tools/cheat-detection/main.go | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/lib/services/cheat_detection/entry.go b/lib/services/cheat_detection/entry.go index 542926e..0cea059 100644 --- a/lib/services/cheat_detection/entry.go +++ b/lib/services/cheat_detection/entry.go @@ -8,7 +8,7 @@ import ( // Logger is declared in database_layer.go const ( - CheatCheckVersion = "beta-2.2.1" + CheatCheckVersion = "beta-2.2.2" Threshold = 0.05 PlayerThreshold = 0.02 ) diff --git a/lib/services/cheat_detection/heuristics.go b/lib/services/cheat_detection/heuristics.go index ec8bfb7..39c8ee9 100644 --- a/lib/services/cheat_detection/heuristics.go +++ b/lib/services/cheat_detection/heuristics.go @@ -241,28 +241,16 @@ var Pantheon2Heuristic = ActivityHeuristic{ {MinPlayers: 4, CheatedChance: 0.15}, {MinPlayers: 3, CheatedChance: 0.35}, }, - pantheonVersionMorgethSurpassing: { - { - MinPlayers: 1, - Range: []DateRange{ - {Start: pantheonBossPushStratStart, End: time.Date(2999, time.January, 1, 0, 0, 0, 0, time.UTC)}, - }, - CheatedChance: 0.25, - }, - {MinPlayers: 4, CheatedChance: 0.65}, - }, + pantheonVersionMorgethSurpassing: append( + pantheonBossPushLowmanEntries(0.25), + LowmanData{MinPlayers: 4, CheatedChance: 0.65}, + ), }, CheckpointLowman: map[int][]LowmanData{ - pantheonVersionMorgethSurpassing: { - { - MinPlayers: 1, - Range: []DateRange{ - {Start: pantheonBossPushStratStart, End: time.Date(2999, time.January, 1, 0, 0, 0, 0, time.UTC)}, - }, - CheatedChance: 0.25, - }, - {MinPlayers: 4, CheatedChance: 0.50}, - }, + pantheonVersionMorgethSurpassing: append( + pantheonBossPushLowmanEntries(0.25), + LowmanData{MinPlayers: 4, CheatedChance: 0.50}, + ), pantheonVersionCalusResplendent: { {MinPlayers: 2, CheatedChance: 0.15}, }, diff --git a/lib/services/cheat_detection/pantheon_heuristics.go b/lib/services/cheat_detection/pantheon_heuristics.go index 0560e64..6707786 100644 --- a/lib/services/cheat_detection/pantheon_heuristics.go +++ b/lib/services/cheat_detection/pantheon_heuristics.go @@ -5,10 +5,22 @@ import ( "time" ) -// Boss push-off strat (solo Morgeth + IP Rev) discovered by Spite#2562 on 2026-06-15 ~08:33 UTC. +// Boss push-off strat (1–3 player Morgeth + solo IP Rev) discovered by Spite#2562 on 2026-06-15 ~08:33 UTC. // Window starts 2h earlier to cover clears immediately after the strat spread. var pantheonBossPushStratStart = time.Date(2026, 6, 15, 6, 33, 0, 0, time.UTC) +var pantheonBossPushStratRange = []DateRange{ + {Start: pantheonBossPushStratStart, End: time.Date(2999, time.January, 1, 0, 0, 0, 0, time.UTC)}, +} + +func pantheonBossPushLowmanEntries(cheatedChance float64) []LowmanData { + return []LowmanData{ + {MinPlayers: 1, Range: pantheonBossPushStratRange, CheatedChance: cheatedChance}, + {MinPlayers: 2, Range: pantheonBossPushStratRange, CheatedChance: cheatedChance}, + {MinPlayers: 3, Range: pantheonBossPushStratRange, CheatedChance: cheatedChance}, + } +} + const ( pantheonEmptyFeatSkullHash = int64(790421403) pantheonBattalionsSkullHash = int64(2392637702) diff --git a/tools/cheat-detection/main.go b/tools/cheat-detection/main.go index e6f3dfa..fd6b33f 100644 --- a/tools/cheat-detection/main.go +++ b/tools/cheat-detection/main.go @@ -26,7 +26,7 @@ var logger = logging.NewLogger("cheat-detection") const ( numBungieWorkers = 15 - versionPrefix = "beta-2.2.1" + versionPrefix = "beta-2.2.2" ) // Instances played by level 3+ accounts that have not yet been checked at the current version.