754 lines
14 KiB
TypeScript
754 lines
14 KiB
TypeScript
import { AimeCard } from "../aimedb";
|
|
import { ConstructableBaseEntity } from "external/db/utils/constructable-base-entity";
|
|
import { HasIdCardVersion } from "external/db/utils/has-id-card-version";
|
|
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, Unique } from "typeorm";
|
|
import { integer } from "types/misc";
|
|
|
|
@Entity("chunithm_user_data")
|
|
@Unique(["card", "version"])
|
|
export class ChunithmUserData extends HasIdCardVersion {
|
|
@Column({ type: "text" })
|
|
userName!: string;
|
|
|
|
@Column({ type: "text" })
|
|
userNameEx!: string;
|
|
|
|
/**
|
|
* @since NEW
|
|
*/
|
|
@Column({ default: 0 })
|
|
teamId!: integer;
|
|
|
|
// #region Rating
|
|
@Column({ default: 0 })
|
|
playerRating!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
highestRating!: integer;
|
|
// #endregion
|
|
|
|
// #region OVER POWER
|
|
@Column({ default: 0 })
|
|
overPowerPoint!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
overPowerRate!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
overPowerLowerRank!: integer;
|
|
// #endregion
|
|
|
|
// #region User level
|
|
@Column({ default: 0 })
|
|
reincarnationNum!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
level!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
exp!: integer;
|
|
// #endregion
|
|
|
|
// #region Course mode
|
|
@Column({ default: 0 })
|
|
classEmblemBase!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
classEmblemMedal!: integer;
|
|
// #endregion
|
|
|
|
// #region Play count
|
|
@Column({ default: 0 })
|
|
playCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
multiPlayCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
multiWinCount!: integer;
|
|
// #endregion
|
|
|
|
// #region Currency
|
|
@Column({ default: 0 })
|
|
point!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalPoint!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
avatarPoint!: integer;
|
|
// #endregion
|
|
|
|
// #region Collections
|
|
@Column({ default: 1 })
|
|
nameplateId!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
frameId!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
characterId!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
trophyId!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
voiceId!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
mapIconId!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
charaIllustId!: integer;
|
|
|
|
@Column({ default: 100000 })
|
|
skillId!: integer;
|
|
// #endregion
|
|
|
|
// #region User avatar
|
|
@Column({ default: 1100001 })
|
|
avatarWear!: integer;
|
|
|
|
@Column({ default: 1200001 })
|
|
avatarHead!: integer;
|
|
|
|
@Column({ default: 1300001 })
|
|
avatarFace!: integer;
|
|
|
|
@Column({ default: 1400001 })
|
|
avatarSkin!: integer;
|
|
|
|
@Column({ default: 1500001 })
|
|
avatarItem!: integer;
|
|
|
|
@Column({ default: 1600001 })
|
|
avatarFront!: integer;
|
|
|
|
@Column({ default: 1700001 })
|
|
avatarBack!: integer;
|
|
// #endregion
|
|
|
|
// #region Tutorial
|
|
@Column({ default: 0 })
|
|
playedTutorialBit!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
firstTutorialCancelNum!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
masterTutorialCancelNum!: integer;
|
|
// #endregion
|
|
|
|
// #region Cummulative statistics
|
|
@Column({ default: 0 })
|
|
totalMapNum!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalHiScore!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalBasicHighScore!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalAdvancedHighScore!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalExpertHighScore!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalMasterHighScore!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
totalRepertoireCount!: integer;
|
|
|
|
/**
|
|
* @since NEW
|
|
*/
|
|
@Column({ type: "integer", nullable: true, default: null })
|
|
totalUltimaHighScore!: integer | null;
|
|
// #endregion
|
|
|
|
// #region Map
|
|
@Column({ default: 0 })
|
|
stockedGridCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
exMapLoopCount!: integer;
|
|
// #endregion
|
|
|
|
// #region Online battle
|
|
@Column({ default: 0 })
|
|
netBattlePlayCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleWinCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleLoseCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleConsecutiveWinCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
battleRankId!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
battleRankPoint!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
eliteRankPoint!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattle1stCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattle2ndCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattle3rdCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattle4thCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleCorrection!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleErrCnt!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleHostErrCnt!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
battleRewardStatus!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
battleRewardIndex!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
battleRewardCount!: integer;
|
|
|
|
@Column({ type: "boolean", default: false })
|
|
isNetBattleHost!: boolean;
|
|
|
|
@Column({ default: 0 })
|
|
netBattleEndState!: integer;
|
|
// #endregion
|
|
|
|
// #region Play location history
|
|
@Column({ type: "text", nullable: true })
|
|
firstGameId!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
firstRomVersion!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
firstDataVersion!: string | null;
|
|
|
|
@Column({ type: "datetime", nullable: true })
|
|
firstPlayDate!: Date | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
lastGameId!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
lastRomVersion!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
lastDataVersion!: string | null;
|
|
|
|
@Column({ type: "datetime", nullable: true })
|
|
lastPlayDate!: Date | null;
|
|
|
|
@Column({ type: "integer", nullable: true })
|
|
lastPlaceId!: integer | null;
|
|
|
|
@Column({ type: "varchar", length: 60, nullable: true })
|
|
lastPlaceName!: string | null;
|
|
|
|
@Column({ type: "integer", nullable: true })
|
|
lastRegionId!: number | null;
|
|
|
|
@Column({ type: "varchar", length: 48, nullable: true })
|
|
lastRegionName!: string | null;
|
|
|
|
@Column({ type: "integer", nullable: true })
|
|
lastAllNetId!: number | null;
|
|
|
|
@Column({ type: "varchar", length: 11, nullable: true })
|
|
lastClientId!: string | null;
|
|
|
|
@Column({ type: "varchar", length: 3, nullable: true })
|
|
lastCountryCode!: string | null;
|
|
// #endregion
|
|
|
|
// #region what the hell is a res
|
|
@Column({ default: 0 })
|
|
acceptResCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
requestResCount!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
successResCount!: integer;
|
|
// #endregion
|
|
|
|
// #region Other fields
|
|
/**
|
|
* @deprecated since NEW
|
|
*/
|
|
@Column({ type: "boolean", default: false })
|
|
isMaimai!: boolean;
|
|
|
|
/**
|
|
* @deprecated since NEW
|
|
*/
|
|
@Column({ type: "boolean", default: false })
|
|
isWebJoin!: boolean;
|
|
|
|
@Column({ type: "datetime", nullable: true, default: null })
|
|
eventWatchedDate!: Date | null;
|
|
|
|
@Column({ type: "datetime", nullable: true, default: null })
|
|
webLimitDate!: Date | null;
|
|
|
|
@Column({ default: 0 })
|
|
friendCount!: integer;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
compatibleCmVersion!: string | null;
|
|
|
|
@Column({ default: 0 })
|
|
medal!: integer;
|
|
// #endregion
|
|
|
|
// #region Extension columns
|
|
@Column({ default: 0 })
|
|
ext1!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext2!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext3!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext4!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext5!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext6!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext7!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext8!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext9!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext10!: integer;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr1!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr2!: string | null;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong1!: string;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong2!: string;
|
|
// #endregion
|
|
}
|
|
|
|
@Entity("chunithm_user_data_ex")
|
|
@Unique(["card", "version"])
|
|
export class ChunithmUserDataEx extends HasIdCardVersion {
|
|
@Column({ default: 0 })
|
|
medal!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
voiceId!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
mapIconId!: integer;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
compatibleCmVersion!: string | null;
|
|
|
|
@Column({ default: 0 })
|
|
ext1!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext2!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext3!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext4!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext5!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext6!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext7!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext8!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext9!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext10!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext11!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext12!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext13!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext14!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext15!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext16!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext17!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext18!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext19!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext20!: integer;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr1!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr2!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr3!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr4!: string | null;
|
|
|
|
@Column({ type: "text", nullable: true })
|
|
extStr5!: string | null;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong1!: string;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong2!: string;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong3!: string;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong4!: string;
|
|
|
|
@Column({ type: "bigint", nullable: true })
|
|
extLong5!: string;
|
|
}
|
|
|
|
@Entity("chunithm_user_option")
|
|
@Unique(["card", "version"])
|
|
export class ChunithmUserOption extends HasIdCardVersion {
|
|
/**
|
|
* Options preset selected.
|
|
*/
|
|
@Column({ default: 0 })
|
|
optionSet!: integer;
|
|
|
|
/**
|
|
* Headphone volume.
|
|
*/
|
|
@Column({ default: 0 })
|
|
headphone!: integer;
|
|
|
|
// what??
|
|
@Column({ default: 0 })
|
|
hardJudge!: integer;
|
|
|
|
// #region Game settings
|
|
/**
|
|
* @note This may look like speed 5, but not really. CHUNITHM stores note speed in an enum.
|
|
* The actual note speed is `speed / 4 + 1`. Speed 2 matches the beginner speed in-game.
|
|
*/
|
|
@Column({ default: 4 })
|
|
speed!: integer;
|
|
|
|
@Column({ default: 4 })
|
|
speed_120!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
mirrorFumen!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
trackSkip!: integer;
|
|
|
|
/**
|
|
* @note Displayed in game as JUDGEMENT TIMING A. Default +0.0
|
|
*/
|
|
@Column({ default: 20 })
|
|
playTimingOffset!: integer;
|
|
|
|
@Column({ default: 20 })
|
|
playTimingOffset_120!: integer;
|
|
|
|
/**
|
|
* @note Displayed in game as JUDGEMENT TIMING B. Default +0.0
|
|
*/
|
|
@Column({ default: 20 })
|
|
judgeTimingOffset!: integer;
|
|
|
|
@Column({ default: 20 })
|
|
judgeTimingOffset_120!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
matching!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
playerLevel!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
rating!: integer;
|
|
|
|
/**
|
|
* Display OVER POWER details on the song selection menu.
|
|
*/
|
|
@Column({ default: 0 })
|
|
categoryDetail!: integer;
|
|
|
|
// wtf is this???
|
|
@Column({ default: 0 })
|
|
privacy!: integer;
|
|
// #endregion
|
|
|
|
// #region Sound settings
|
|
@Column({ default: 5 })
|
|
guideSound!: integer;
|
|
|
|
// Sound effect played on TAP
|
|
@Column({ default: 0 })
|
|
successTapTimbre!: integer;
|
|
|
|
@Column({ default: 5 })
|
|
successTap!: integer;
|
|
|
|
@Column({ default: 5 })
|
|
successExTap!: integer;
|
|
|
|
@Column({ default: 5 })
|
|
successSlideHold!: integer;
|
|
|
|
@Column({ default: 5 })
|
|
successAir!: integer;
|
|
|
|
@Column({ default: 5 })
|
|
successFlick!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
soundEffect!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
judgeAppendSe!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
resultVoiceShort!: integer;
|
|
// #endregion
|
|
|
|
// #region Judgement display settings
|
|
@Column({ default: 1 })
|
|
judgePos!: integer;
|
|
|
|
@Column({ default: 2 })
|
|
judgeAttack!: integer;
|
|
|
|
@Column({ default: 3 })
|
|
judgeJustice!: integer;
|
|
|
|
@Column({ default: 3 })
|
|
judgeCritical!: integer;
|
|
// #endregion
|
|
|
|
// #region Sort settings
|
|
@Column({ default: 1 })
|
|
selectMusicFilterLv!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
sortMusicFilterLv!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
sortMusicGenre!: integer;
|
|
// #endregion
|
|
|
|
// #region Background display settings
|
|
@Column({ default: 2 })
|
|
guideLine!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
fieldColor!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
fieldWallPosition!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
fieldWallPosition_120!: integer;
|
|
|
|
@Column({ default: 1 })
|
|
bgInfo!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
notesThickness!: integer;
|
|
// #endregion
|
|
|
|
// #region Extension columns
|
|
@Column({ default: 0 })
|
|
ext1!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext2!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext3!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext4!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext5!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext6!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext7!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext8!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext9!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext10!: integer;
|
|
// #endregion
|
|
}
|
|
|
|
@Entity("chunithm_user_option_ex")
|
|
@Unique(["card", "version"])
|
|
export class ChunithmUserOptionEx extends HasIdCardVersion {
|
|
@Column({ default: 0 })
|
|
ext1!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext2!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext3!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext4!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext5!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext6!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext7!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext8!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext9!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext10!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext11!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext12!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext13!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext14!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext15!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext16!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext17!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext18!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext19!: integer;
|
|
|
|
@Column({ default: 0 })
|
|
ext20!: integer;
|
|
}
|
|
|
|
@Entity("chunithm_user_activity")
|
|
export class ChunithmUserActivity extends ConstructableBaseEntity {
|
|
@PrimaryGeneratedColumn()
|
|
id!: integer;
|
|
|
|
@ManyToOne(() => AimeCard, { eager: true })
|
|
card!: AimeCard;
|
|
|
|
@Column()
|
|
activityId!: integer;
|
|
|
|
@Column()
|
|
kind!: integer;
|
|
|
|
@Column()
|
|
sortNumber!: integer;
|
|
|
|
@Column()
|
|
param1!: integer;
|
|
|
|
@Column()
|
|
param2!: integer;
|
|
|
|
@Column()
|
|
param3!: integer;
|
|
|
|
@Column()
|
|
param4!: integer;
|
|
}
|