From 8cc866d34f5fffbec9dce8a09117b230cd7f6bb2 Mon Sep 17 00:00:00 2001 From: Raymond <101374892+raymonable@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:43:51 -0400 Subject: [PATCH] fix: send only events for game version --- src/main/java/ext/Ext.kt | 7 ++++++- .../sega/general/filter/CompressionFilter.kt | 4 +--- .../icu/samnyan/aqua/sega/ongeki/OngekiApis.kt | 17 +++++++++++++---- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/ext/Ext.kt b/src/main/java/ext/Ext.kt index 39ab99a8..a59b6e50 100644 --- a/src/main/java/ext/Ext.kt +++ b/src/main/java/ext/Ext.kt @@ -32,6 +32,7 @@ import java.time.ZoneOffset.UTC import java.time.format.DateTimeFormatter import java.util.* import java.util.concurrent.locks.Lock +import kotlin.math.floor import kotlin.reflect.KCallable import kotlin.reflect.KClass import kotlin.reflect.KMutableProperty1 @@ -199,6 +200,10 @@ val Any?.truthy get() = when (this) { } val Any?.str get() = toString() +fun truncateVersion(version: Number): Number { + return (floor(version.toFloat() / 5.0) * 5).toInt(); +} + // Collections fun ls(vararg args: T) = args.toList() inline fun arr(vararg args: T) = arrayOf(*args) @@ -277,4 +282,4 @@ fun List>.numCsv(vararg head: Str) = head.joinToString(",") + "\n" + joinToString("\n") { it.joinToString(",") } // DI -inline fun ApplicationContext.lazy() = kotlin.lazy { getBean(T::class.java) } +inline fun ApplicationContext.lazy() = kotlin.lazy { getBean(T::class.java) } diff --git a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt index 40f2e84d..5aa5dcb9 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt +++ b/src/main/java/icu/samnyan/aqua/sega/general/filter/CompressionFilter.kt @@ -3,6 +3,7 @@ package icu.samnyan.aqua.sega.general.filter import ext.details import ext.logger import ext.toJson +import ext.truncateVersion import icu.samnyan.aqua.net.components.GeoIP import icu.samnyan.aqua.sega.allnet.TokenChecker import icu.samnyan.aqua.sega.general.model.GameEncryptionKey @@ -36,9 +37,6 @@ class CompressionFilter( } - fun truncateVersion(version: Number): Number { - return (floor(version.toFloat() / 5.0) * 5).toInt(); - } fun getVersion(req: HttpServletRequest, game: String): Int { // NOTE: this should help with some issues regarding mismatched data val expectedVersion = (req.getHeader("Mai-Encoding") ?: diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt index 04263fc1..20692773 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt @@ -4,6 +4,8 @@ import ext.empty import ext.int import ext.parsing import ext.plus +import ext.str +import ext.truncateVersion fun OngekiController.ongekiInit() { fun List.staticLst(key: String) = mapOf("length" to size, key to this) @@ -13,10 +15,17 @@ fun OngekiController.ongekiInit() { initUpsertAll() // Has type, but type is always 1 - "GetGameEvent".static { - gdb.event.findAll().map { - mapOf("id" to it.id, "type" to 1, "startDate" to "2005-01-01 00:00:00.0", "endDate" to "2099-01-01 05:00:00.0") - }.staticLst("gameEventList") + mapOf("type" to 1) + "GetGameEvent" { + // NOTE: each event begins with 150 or 155 or 160, etc. so we're relying on that to know which events to send + // theoretically this should reduce the number of users crashing but it may require unlockall for users with improper ICFs + // but this is definitely a hack for sure + val trunkVer = truncateVersion((data["version"] ?: "1.50.00").str.split(".").take(2).joinToString("").int) + val events = gdb.event.findAll() + .filter{ it.id.str.startsWith(trunkVer.str) } + .map { + mapOf("id" to it.id, "type" to 1, "startDate" to "2005-01-01 00:00:00.0", "endDate" to "2099-01-01 05:00:00.0") + } + mapOf("gameEventList" to events, "length" to events.size, "type" to 1) } "GetGamePoint".static { gdb.point.findAll().staticLst("gamePointList") }