[+] Ongeki export

pull/131/head
Azalea 2025-03-11 16:51:46 -04:00
parent d5b4e1ca14
commit 67d2e52fbc
13 changed files with 74 additions and 33 deletions

View File

@ -237,6 +237,7 @@ fun Str.path() = Path.of(this)
operator fun Path.div(part: Str) = resolve(part) operator fun Path.div(part: Str) = resolve(part)
operator fun File.div(fileName: Str) = File(this, fileName) operator fun File.div(fileName: Str) = File(this, fileName)
fun Str.ensureEndingSlash() = if (endsWith('/')) this else "$this/" fun Str.ensureEndingSlash() = if (endsWith('/')) this else "$this/"
fun Str.ensureNoEndingSlash() = if (endsWith('/')) dropLast(1) else this
fun <T: Any> T.logger() = LoggerFactory.getLogger(this::class.java) fun <T: Any> T.logger() = LoggerFactory.getLogger(this::class.java)

View File

@ -7,12 +7,12 @@ data class Chu3DataExport(
override var gameId: String = "SDHD", override var gameId: String = "SDHD",
override var userData: Chu3UserData, override var userData: Chu3UserData,
var userGameOption: UserGameOption, var userGameOption: UserGameOption,
var userActivityList: List<UserActivity>, var userActivityList: List<Chu3UserActivity>,
var userCharacterList: List<UserCharacter>, var userCharacterList: List<UserCharacter>,
var userChargeList: List<UserCharge>, var userChargeList: List<UserCharge>,
var userCourseList: List<UserCourse>, var userCourseList: List<UserCourse>,
var userDuelList: List<UserDuel>, var userDuelList: List<UserDuel>,
var userItemList: List<UserItem>, var userItemList: List<Chu3UserItem>,
var userMapList: List<UserMap>, var userMapList: List<UserMap>,
var userMusicDetailList: List<UserMusicDetail>, var userMusicDetailList: List<UserMusicDetail>,
var userPlaylogList: List<UserPlaylog>, var userPlaylogList: List<UserPlaylog>,

View File

@ -17,13 +17,13 @@ import java.util.List;
public class ChuniDataImport { public class ChuniDataImport {
private String gameId; private String gameId;
private ExternalUserData userData; private ExternalUserData userData;
private List<UserActivity> userActivityList; private List<Chu3UserActivity> userActivityList;
private List<UserCharacter> userCharacterList; private List<UserCharacter> userCharacterList;
private List<UserCharge> userChargeList; private List<UserCharge> userChargeList;
private List<UserCourse> userCourseList; private List<UserCourse> userCourseList;
private List<UserDuel> userDuelList; private List<UserDuel> userDuelList;
private UserGameOption userGameOption; private UserGameOption userGameOption;
private List<UserItem> userItemList; private List<Chu3UserItem> userItemList;
private List<UserMap> userMapList; private List<UserMap> userMapList;
private List<UserMusicDetail> userMusicDetailList; private List<UserMusicDetail> userMusicDetailList;
private List<UserPlaylog> userPlaylogList; private List<UserPlaylog> userPlaylogList;

View File

@ -31,10 +31,10 @@ class Chu3Import(
artemisRenames = mapOf( artemisRenames = mapOf(
"chuni_item_character" to ImportClass(UserCharacter::class), "chuni_item_character" to ImportClass(UserCharacter::class),
"chuni_item_duel" to ImportClass(UserDuel::class), "chuni_item_duel" to ImportClass(UserDuel::class),
"chuni_item_item" to ImportClass(UserItem::class, mapOf("isValid" to "valid")), "chuni_item_item" to ImportClass(Chu3UserItem::class, mapOf("isValid" to "valid")),
// "chuni_item_login_bonus" to ImportClass(UserLoginBonus::class, mapOf("isWatched" to "watched")), // "chuni_item_login_bonus" to ImportClass(UserLoginBonus::class, mapOf("isWatched" to "watched")),
"chuni_item_map_area" to ImportClass(UserMap::class), "chuni_item_map_area" to ImportClass(UserMap::class),
"chuni_profile_activity" to ImportClass(UserActivity::class, mapOf("activityId" to "id")), "chuni_profile_activity" to ImportClass(Chu3UserActivity::class, mapOf("activityId" to "id")),
"chuni_profile_charge" to ImportClass(UserCharge::class), "chuni_profile_charge" to ImportClass(UserCharge::class),
"chuni_profile_data" to ImportClass(Chu3UserData::class, mapOf("user" to null, "version" to null, "isNetMember" to null)), "chuni_profile_data" to ImportClass(Chu3UserData::class, mapOf("user" to null, "version" to null, "isNetMember" to null)),
"chuni_profile_option" to ImportClass(UserGameOption::class, mapOf("version" to null)), "chuni_profile_option" to ImportClass(UserGameOption::class, mapOf("version" to null)),

View File

@ -47,6 +47,7 @@ class AllNetClient(val dns: String, val keychip: String, val game: String, val v
fun findDataBroker(log: (String) -> Unit) = when (game) { fun findDataBroker(log: (String) -> Unit) = when (game) {
"SDHD" -> ChusanDataBroker(this, log) "SDHD" -> ChusanDataBroker(this, log)
"SDEZ", "SDGA" -> MaimaiDataBroker(this, log) "SDEZ", "SDGA" -> MaimaiDataBroker(this, log)
"SDDT" -> OngekiDataBroker(this, log)
else -> throw IllegalArgumentException("Unsupported game: $game") else -> throw IllegalArgumentException("Unsupported game: $game")
} }
} }

View File

@ -2,13 +2,15 @@ package icu.samnyan.aqua.net.transfer
import ext.* import ext.*
import icu.samnyan.aqua.sega.chusan.model.request.Chu3UserAll import icu.samnyan.aqua.sega.chusan.model.request.Chu3UserAll
import icu.samnyan.aqua.sega.chusan.model.userdata.UserActivity import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserActivity
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem
import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail
import icu.samnyan.aqua.sega.maimai2.model.request.Mai2UserAll import icu.samnyan.aqua.sega.maimai2.model.request.Mai2UserAll
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserFavorite import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserFavorite
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserItem import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserItem
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail
import icu.samnyan.aqua.sega.ongeki.model.request.UpsertUserAll
import icu.samnyan.aqua.sega.ongeki.model.userdata.UserItem
import icu.samnyan.aqua.sega.util.jackson.BasicMapper import icu.samnyan.aqua.sega.util.jackson.BasicMapper
import icu.samnyan.aqua.sega.util.jackson.IMapper import icu.samnyan.aqua.sega.util.jackson.IMapper
import icu.samnyan.aqua.sega.util.jackson.StringMapper import icu.samnyan.aqua.sega.util.jackson.StringMapper
@ -70,13 +72,10 @@ class ChusanDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(
userGameOption = ls("GetUserOptionApi".get("userGameOption", userId)) userGameOption = ls("GetUserOptionApi".get("userGameOption", userId))
userCharacterList = "GetUserCharacterApi".get("userCharacterList", paged) userCharacterList = "GetUserCharacterApi".get("userCharacterList", paged)
userActivityList = (1..5).flatMap { userActivityList = (1..5).flatMap {
"GetUserActivityApi".get<List<UserActivity>>("userActivityList", userId + mapOf("kind" to it)) "GetUserActivityApi".get<List<Chu3UserActivity>>("userActivityList", userId + mapOf("kind" to it))
} }
userItemList = (1..12).flatMap { userItemList = (1..12).flatMap {
"GetUserItemApi".get<List<UserItem>>( "GetUserItemApi".get<List<Chu3UserItem>>("userItemList", paged + mapOf("nextIndex" to 10000000000 * it))
"userItemList",
userId + mapOf("nextIndex" to 10000000000 * it, "maxCount" to 10000000)
)
} }
userRecentRatingList = "GetUserRecentRatingApi".get("userRecentRatingList", userId) userRecentRatingList = "GetUserRecentRatingApi".get("userRecentRatingList", userId)
userMusicDetailList = "GetUserMusicApi".get<List<UserMusicWrapper>>("userMusicList", paged) userMusicDetailList = "GetUserMusicApi".get<List<UserMusicWrapper>>("userMusicList", paged)
@ -125,5 +124,45 @@ class MaimaiDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(
// TODO: userFavoriteMusicList // TODO: userFavoriteMusicList
}.toJson() }.toJson()
} }
}
class OngekiDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(allNet, log) {
override val mapper = BasicMapper()
override val url by lazy { allNet.gameUrl.ensureNoEndingSlash() }
override fun pull(): String {
val (userId, paged) = prePull()
return UpsertUserAll().apply {
userData = ls("GetUserDataApi".get("userData", userId))
userOption = ls("GetUserOptionApi".get("userOption", userId))
userMusicItemList = "GetUserMusicItemApi".get("userMusicItemList", paged)
userBossList = "GetUserBossApi".get("userBossList", userId)
userMusicDetailList = "GetUserMusicApi".get("userMusicList", paged)
userTechCountList = "GetUserTechCountApi".get("userTechCountList", userId)
userCardList = "GetUserCardApi".get("userCardList", paged)
userCharacterList = "GetUserCharacterApi".get("userCharacterList", paged)
userStoryList = "GetUserStoryApi".get("userStoryList", userId)
userChapterList = "GetUserChapterApi".get("userChapterList", userId)
userMemoryChapterList = "GetUserMemoryChapterApi".get("userMemoryChapterList", userId)
userDeckList = "GetUserDeckByKeyApi".get("userDeckList", userId + mapOf("authKey" to ""))
userTrainingRoomList = "GetUserTrainingRoomByKeyApi".get("userTrainingRoomList", userId + mapOf("authKey" to ""))
userActivityList = "GetUserActivityApi".get("userActivityList", userId + mapOf("kind" to 1))
userRatinglogList = "GetUserRatinglogApi".get("userRatinglogList", userId)
userRecentRatingList = "GetUserRecentRatingApi".get("userRecentRatingList", userId)
userItemList = ls(2, 3, 4, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 20).flatMap {
"GetUserItemApi".get<List<UserItem>>("userItemList", paged + mapOf("nextIndex" to 10000000000 * it))
}
userEventPointList = "GetUserEventPointApi".get("userEventPointList", userId)
userMissionPointList = "GetUserMissionPointApi".get("userMissionPointList", userId)
userLoginBonusList = "GetUserLoginBonusApi".get("userLoginBonusList", userId)
userScenarioList = "GetUserScenarioApi".get("userScenarioList", userId)
userTradeItemList = "GetUserTradeItemApi".get("userTradeItemList", userId + mapOf("startChapterId" to 0, "endChapterId" to 99999))
userEventMusicList = "GetUserEventMusicApi".get("userEventMusicList", userId)
userTechEventList = "GetUserTechEventRankingApi".get("userTechEventRankingList", userId)
userKopList = "GetUserKopApi".get("userKopList", userId)
}.toJson()
}
}
} }

View File

@ -5,7 +5,7 @@ import icu.samnyan.aqua.sega.allnet.TokenChecker
import icu.samnyan.aqua.sega.chusan.ChusanController import icu.samnyan.aqua.sega.chusan.ChusanController
import icu.samnyan.aqua.sega.chusan.ChusanData import icu.samnyan.aqua.sega.chusan.ChusanData
import icu.samnyan.aqua.sega.chusan.model.request.UserCMissionResp import icu.samnyan.aqua.sega.chusan.model.request.UserCMissionResp
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem
import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail
import icu.samnyan.aqua.sega.general.model.response.UserRecentRating import icu.samnyan.aqua.sega.general.model.response.UserRecentRating
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
@ -179,7 +179,7 @@ fun ChusanController.chusanInit() {
db.userData.findByCard_ExtId(uid)()?.card?.aquaUser?.gameOptions?.let { db.userData.findByCard_ExtId(uid)()?.card?.aquaUser?.gameOptions?.let {
if (it.chusanInfinitePenguins && kind == 5) { if (it.chusanInfinitePenguins && kind == 5) {
items.removeAll { it.itemId in penguins } items.removeAll { it.itemId in penguins }
items.addAll(penguins.map { UserItem(kind, it, 999, true) }) items.addAll(penguins.map { Chu3UserItem(kind, it, 999, true) })
} }
} }

View File

@ -5,7 +5,7 @@ import icu.samnyan.aqua.sega.chusan.ChusanController
import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha
import icu.samnyan.aqua.sega.chusan.model.request.UserEmoney import icu.samnyan.aqua.sega.chusan.model.request.UserEmoney
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem
import java.time.LocalDateTime import java.time.LocalDateTime
fun ChusanController.cmApiInit() { fun ChusanController.cmApiInit() {
@ -76,7 +76,7 @@ fun ChusanController.cmApiInit() {
"CMUpsertUserPrintSubtract" api@ { "CMUpsertUserPrintSubtract" api@ {
val userCardPrintState = cmMapper.convert<UserCardPrintState>(parsing { data["userCardPrintState"]!! }) val userCardPrintState = cmMapper.convert<UserCardPrintState>(parsing { data["userCardPrintState"]!! })
val userItemList = cmMapper.convert<List<UserItem>>(parsing { data["userItemList"]!! }) val userItemList = cmMapper.convert<List<Chu3UserItem>>(parsing { data["userItemList"]!! })
val u = db.userData.findByCard_ExtId(uid)() ?: return@api null val u = db.userData.findByCard_ExtId(uid)() ?: return@api null

View File

@ -40,11 +40,11 @@ interface Chu3UserLoginBonusRepo : JpaRepository<UserLoginBonus, Long> {
fun findLoginBonus(userId: Int, version: Int, presetId: Long): Optional<UserLoginBonus> fun findLoginBonus(userId: Int, version: Int, presetId: Long): Optional<UserLoginBonus>
} }
interface Chu3UserActivityRepo : Chu3UserLinked<UserActivity> { interface Chu3UserActivityRepo : Chu3UserLinked<Chu3UserActivity> {
fun findTopByUserAndActivityIdAndKindOrderByIdDesc(user: Chu3UserData, activityId: Int, kind: Int): Optional<UserActivity> fun findTopByUserAndActivityIdAndKindOrderByIdDesc(user: Chu3UserData, activityId: Int, kind: Int): Optional<Chu3UserActivity>
fun findByUserAndActivityIdAndKind(user: Chu3UserData, activityId: Int, kind: Int): UserActivity? fun findByUserAndActivityIdAndKind(user: Chu3UserData, activityId: Int, kind: Int): Chu3UserActivity?
fun findAllByUser_Card_ExtIdAndKind(extId: Long, kind: Int): List<UserActivity> fun findAllByUser_Card_ExtIdAndKind(extId: Long, kind: Int): List<Chu3UserActivity>
} }
interface Chu3UserCardPrintStateRepo : Chu3UserLinked<UserCardPrintState> { interface Chu3UserCardPrintStateRepo : Chu3UserLinked<UserCardPrintState> {
@ -89,14 +89,14 @@ interface Chu3UserGeneralDataRepo : Chu3UserLinked<UserGeneralData> {
fun findByUser_Card_ExtIdAndPropertyKey(extId: Long, key: String): Optional<UserGeneralData> fun findByUser_Card_ExtIdAndPropertyKey(extId: Long, key: String): Optional<UserGeneralData>
} }
interface Chu3UserItemRepo : Chu3UserLinked<UserItem> { interface Chu3UserItemRepo : Chu3UserLinked<Chu3UserItem> {
fun findAllByUser(user: Chu3UserData): List<UserItem> fun findAllByUser(user: Chu3UserData): List<Chu3UserItem>
fun findTopByUserAndItemIdAndItemKindOrderByIdDesc(user: Chu3UserData, itemId: Int, itemKind: Int): Optional<UserItem> fun findTopByUserAndItemIdAndItemKindOrderByIdDesc(user: Chu3UserData, itemId: Int, itemKind: Int): Optional<Chu3UserItem>
fun findByUserAndItemIdAndItemKind(user: Chu3UserData, itemId: Int, itemKind: Int): UserItem? fun findByUserAndItemIdAndItemKind(user: Chu3UserData, itemId: Int, itemKind: Int): Chu3UserItem?
fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int, pageable: Pageable): Page<UserItem> fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int, pageable: Pageable): Page<Chu3UserItem>
fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int): List<UserItem> fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int): List<Chu3UserItem>
} }
interface Chu3UserMapRepo : Chu3UserLinked<UserMap> { interface Chu3UserMapRepo : Chu3UserLinked<UserMap> {

View File

@ -41,9 +41,9 @@ class Chu3UserAll(
var userData: List<Chu3UserData>? = null, var userData: List<Chu3UserData>? = null,
var userGameOption: List<UserGameOption>? = null, var userGameOption: List<UserGameOption>? = null,
var userCharacterList: List<UserCharacter>? = null, var userCharacterList: List<UserCharacter>? = null,
var userItemList: List<UserItem>? = null, var userItemList: List<Chu3UserItem>? = null,
var userMusicDetailList: List<UserMusicDetail>? = null, var userMusicDetailList: List<UserMusicDetail>? = null,
var userActivityList: List<UserActivity>? = null, var userActivityList: List<Chu3UserActivity>? = null,
var userRecentRatingList: List<UserRecentRating>? = null, var userRecentRatingList: List<UserRecentRating>? = null,
var userPlaylogList: List<UserPlaylog>? = null, var userPlaylogList: List<UserPlaylog>? = null,
var userChargeList: List<UserCharge>? = null, var userChargeList: List<UserCharge>? = null,

View File

@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
import icu.samnyan.aqua.sega.chusan.model.GameGachaCard import icu.samnyan.aqua.sega.chusan.model.GameGachaCard
import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserData import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserData
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem
import java.io.Serializable import java.io.Serializable
class UpsertUserGacha : Serializable { class UpsertUserGacha : Serializable {
@ -13,7 +13,7 @@ class UpsertUserGacha : Serializable {
var userCharacterList: List<Any>? = null var userCharacterList: List<Any>? = null
var userCardList: List<Any>? = null var userCardList: List<Any>? = null
var gameGachaCardList: List<GameGachaCard>? = null var gameGachaCardList: List<GameGachaCard>? = null
var userItemList: List<UserItem>? = null var userItemList: List<Chu3UserItem>? = null
@JsonProperty("isNewCharacterList") @JsonProperty("isNewCharacterList")
var isNewCharacterList: String? = null var isNewCharacterList: String? = null

View File

@ -8,7 +8,7 @@ import jakarta.persistence.UniqueConstraint
@Entity(name = "ChusanUserActivity") @Entity(name = "ChusanUserActivity")
@Table(name = "chusan_user_activity", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "kind", "activity_id"])]) @Table(name = "chusan_user_activity", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "kind", "activity_id"])])
class UserActivity : Chu3UserEntity() { class Chu3UserActivity : Chu3UserEntity() {
var kind = 0 var kind = 0
@JsonProperty("id") @JsonProperty("id")
@Column(name = "activity_id") @Column(name = "activity_id")

View File

@ -7,7 +7,7 @@ import jakarta.persistence.UniqueConstraint
@Entity(name = "ChusanUserItem") @Entity(name = "ChusanUserItem")
@Table(name = "chusan_user_item", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "item_id", "item_kind"])]) @Table(name = "chusan_user_item", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "item_id", "item_kind"])])
class UserItem( class Chu3UserItem(
var itemKind: Int = 0, var itemKind: Int = 0,
var itemId: Int = 0, var itemId: Int = 0,
var stock: Int = 1, var stock: Int = 1,