diff --git a/gitadora@asphyxia/README.md b/gitadora@asphyxia/README.md index d87d34b..0fb7102 100644 --- a/gitadora@asphyxia/README.md +++ b/gitadora@asphyxia/README.md @@ -29,6 +29,11 @@ Known Issues Release Notes ============= +v1.2.4 +---------------- +* Fixed note scroll speed defaulting to 0.5x for newly registered profiles. +* Misc code cleanup. No changes expected to plugin behaviour. + v1.3.0 ---------------- * Added experimental 'Shared Favorite Songs' option. If disabled, players will be able to keep separate lists of favorite songs for each version of Gitadora, as well as between Guitar Freaks and Drummania. Enable this option to have a single unified list of favorite songs for both games, and across all versions. Default is false, to match original arcade behaviour. diff --git a/gitadora@asphyxia/data/mdb/.gitignore b/gitadora@asphyxia/data/mdb/.gitignore index 7a7be89..c394e00 100644 --- a/gitadora@asphyxia/data/mdb/.gitignore +++ b/gitadora@asphyxia/data/mdb/.gitignore @@ -7,4 +7,5 @@ mt.json nt.json hv.json custom.xml -custom.json \ No newline at end of file +custom.json +blacklist.txt \ No newline at end of file diff --git a/gitadora@asphyxia/handlers/MusicList.ts b/gitadora@asphyxia/handlers/MusicList.ts index eeb218f..5b4156f 100644 --- a/gitadora@asphyxia/handlers/MusicList.ts +++ b/gitadora@asphyxia/handlers/MusicList.ts @@ -2,12 +2,13 @@ import { getVersion } from "../utils"; import { findMDBFile, readMDBFile, loadSongsForGameVersion } from "../data/mdb"; import { CommonMusicDataField } from "../models/commonmusicdata"; import Logger from "../utils/logger" +import { getPlayableMusicResponse, PlayableMusicResponse } from "../models/Responses/playablemusicresponse"; const logger = new Logger("MusicList") export const playableMusic: EPR = async (info, data, send) => { const version = getVersion(info); - + const start = Date.now() let music: CommonMusicDataField[] = []; try { if (U.GetConfig("enable_custom_mdb")) { @@ -24,18 +25,11 @@ export const playableMusic: EPR = async (info, data, send) => { music = (await loadSongsForGameVersion(version)).music } - let response = getPlayableMusicResponse(music) + const end = Date.now() + const timeDiff = end - start + logger.debugInfo(`MDB loading took ${timeDiff} ms`) + + let response : PlayableMusicResponse = getPlayableMusicResponse(music) await send.object(response) }; -function getPlayableMusicResponse(music) { - return { - hot: { - major: K.ITEM('s32', 1), - minor: K.ITEM('s32', 1), - }, - musicinfo: K.ATTR({ nr: `${music.length}` }, { - music, - }), - } -} \ No newline at end of file diff --git a/gitadora@asphyxia/handlers/profiles.ts b/gitadora@asphyxia/handlers/profiles.ts index 6fc053f..ca1a99c 100644 --- a/gitadora@asphyxia/handlers/profiles.ts +++ b/gitadora@asphyxia/handlers/profiles.ts @@ -1,16 +1,20 @@ -import { PlayerInfo } from "../models/playerinfo"; +import { getDefaultPlayerInfo, PlayerInfo } from "../models/playerinfo"; import { PlayerRanking } from "../models/playerranking"; -import { Profile } from "../models/profile"; -import { Record } from "../models/record"; -import { Extra } from "../models/extra"; +import { getDefaultProfile, Profile } from "../models/profile"; +import { getDefaultRecord, Record } from "../models/record"; +import { Extra, getDefaultExtra } from "../models/extra"; import { getVersion, isDM } from "../utils"; -import { Scores } from "../models/scores"; -import { PlayerStickerResponse } from "../models/playerstickerresponse"; -import { SecretMusicResponse } from "../models/secretmusicresponse"; +import { getDefaultScores, Scores } from "../models/scores"; + import { PLUGIN_VER } from "../const"; import Logger from "../utils/logger" import { isAsphyxiaDebugMode } from "../Utils/index"; import { SecretMusicEntry } from "../models/secretmusicentry"; +import { CheckPlayerResponse, getCheckPlayerResponse } from "../models/Responses/checkplayerresponse"; +import { getPlayerStickerResponse, PlayerStickerResponse } from "../models/Responses/playerstickerresponse"; +import { getSecretMusicResponse, SecretMusicResponse } from "../models/Responses/secretmusicresponse"; +import { getSaveProfileResponse } from "../models/Responses/saveprofileresponse"; +import { getDefaultBattleDataResponse } from "../models/Responses/battledataresponse"; import { applySharedFavoriteMusicToExtra, saveSharedFavoriteMusicFromExtra } from "./FavoriteMusic"; const logger = new Logger("profiles") @@ -48,19 +52,8 @@ export const check: EPR = async (info, data, send) => { const version = getVersion(info) const playerInfo = await getOrRegisterPlayerInfo(refid, version, no) - await send.object({ - player: K.ATTR({ no: `${no}`, state: '2' }, { - name: K.ITEM('str', playerInfo.name), - charaid: K.ITEM('s32', 0), - did: K.ITEM('s32', playerInfo.id), - skilldata: { - skill: K.ITEM('s32', 0), - all_skill: K.ITEM('s32', 0), - old_skill: K.ITEM('s32', 0), - old_all_skill: K.ITEM('s32', 0), - } - }) - }) + const result : CheckPlayerResponse = getCheckPlayerResponse(no, playerInfo.name, playerInfo.id) + await send.object(result) } export const getPlayer: EPR = async (info, data, send) => { @@ -235,7 +228,7 @@ export const getPlayer: EPR = async (info, data, send) => { })); } - const sticker: PlayerStickerResponse[] = getPlayerStickers(name.card); + const sticker: PlayerStickerResponse[] = getPlayerStickerResponse(name.card); const playerData: any = { playerboard: { @@ -351,6 +344,7 @@ export const getPlayer: EPR = async (info, data, send) => { const innerSecretMusic = getSecretMusicResponse(profile) const innerFriendData = getFriendDataResponse(profile) + const innerBattleData = getDefaultBattleDataResponse() const response = { player: K.ATTR({ 'no': `${no}` }, { @@ -380,42 +374,7 @@ export const getPlayer: EPR = async (info, data, send) => { skindata: { skin: K.ARRAY('u32', Array(100).fill(-1)), }, - battledata: { - info: { - orb: K.ITEM('s32', 0), - get_gb_point: K.ITEM('s32', 0), - send_gb_point: K.ITEM('s32', 0), - }, - greeting: { - greeting_1: K.ITEM('str', ''), - greeting_2: K.ITEM('str', ''), - greeting_3: K.ITEM('str', ''), - greeting_4: K.ITEM('str', ''), - greeting_5: K.ITEM('str', ''), - greeting_6: K.ITEM('str', ''), - greeting_7: K.ITEM('str', ''), - greeting_8: K.ITEM('str', ''), - greeting_9: K.ITEM('str', ''), - }, - setting: { - matching: K.ITEM('s32', 0), - info_level: K.ITEM('s32', 0), - }, - score: { - battle_class: K.ITEM('s32', 0), - max_battle_class: K.ITEM('s32', 0), - battle_point: K.ITEM('s32', 0), - win: K.ITEM('s32', 0), - lose: K.ITEM('s32', 0), - draw: K.ITEM('s32', 0), - consecutive_win: K.ITEM('s32', 0), - max_consecutive_win: K.ITEM('s32', 0), - glorious_win: K.ITEM('s32', 0), - max_defeat_skill: K.ITEM('s32', 0), - latest_result: K.ITEM('s32', 0), - }, - history: {}, - }, + battledata: innerBattleData, is_free_ok: K.ITEM('bool', 0), ranking: { skill: { rank: K.ITEM('s32', playerRanking.skill), total_nr: K.ITEM('s32', playerRanking.totalPlayers) }, @@ -505,42 +464,6 @@ export const getPlayer: EPR = async (info, data, send) => { send.object(response); } -function getPlayerStickers(playerCard) : PlayerStickerResponse[] { - let stickers : PlayerStickerResponse[] = [] - if (_.isArray(playerCard)) { - for (const item of playerCard) { - const id = _.get(item, 'id'); - const posX = _.get(item, 'position.0'); - const posY = _.get(item, 'position.1'); - const scaleX = _.get(item, 'scale.0'); - const scaleY = _.get(item, 'scale.1'); - const rotation = _.get(item, 'rotation'); - - if ( - !isFinite(id) || - !isFinite(posX) || - !isFinite(posY) || - !isFinite(scaleX) || - !isFinite(scaleY) || - !isFinite(rotation) - ) { - continue; - } - - stickers.push({ - id: K.ITEM('s32', id), - pos_x: K.ITEM('float', posX), - pos_y: K.ITEM('float', posY), - scale_x: K.ITEM('float', scaleX), - scale_y: K.ITEM('float', scaleY), - rotate: K.ITEM('float', rotation), - }); - } - } - - return stickers -} - async function getOrRegisterPlayerInfo(refid: string, version: string, no: number) { let playerInfo = await DB.FindOne(refid, { collection: 'playerinfo', @@ -559,221 +482,24 @@ function getPlayerNo(data: any): number { } async function registerUser(refid: string, version: string, id = _.random(0, 99999999)) { - while (await DB.FindOne(null, { collecttion: 'profile', id })) { + while (await DB.FindOne(null, { collection: 'profile', id })) { id = _.random(0, 99999999); } - const defaultInfo: PlayerInfo = { - collection: 'playerinfo', - pluginVer: PLUGIN_VER, - id, - version, - name: 'ASPHYXIA-CORE USER', - title: 'Please edit on WebUI', - } - - const defaultProfile = (game: 'gf' | 'dm'): Profile => { - return { - collection: 'profile', - pluginVer: PLUGIN_VER, - - game, - version, - id, - - play: 0, - playtime: 0, - playterm: 0, - session_cnt: 0, - extra_stage: 0, - extra_play: 0, - extra_clear: 0, - encore_play: 0, - encore_clear: 0, - pencore_play: 0, - pencore_clear: 0, - max_clear_diff: 0, - max_full_diff: 0, - max_exce_diff: 0, - clear_num: 0, - full_num: 0, - exce_num: 0, - no_num: 0, - e_num: 0, - d_num: 0, - c_num: 0, - b_num: 0, - a_num: 0, - s_num: 0, - ss_num: 0, - last_category: 0, - last_musicid: -1, - last_seq: 0, - disp_level: 0, - progress: 0, - disp_state: 0, - skill: 0, - all_skill: 0, - extra_gauge: 0, - encore_gauge: 0, - encore_cnt: 0, - encore_success: 0, - unlock_point: 0, - max_skill: 0, - max_all_skill: 0, - clear_diff: 0, - full_diff: 0, - exce_diff: 0, - clear_music_num: 0, - full_music_num: 0, - exce_music_num: 0, - clear_seq_num: 0, - classic_all_skill: 0, - secretmusic: { - music: [] - } - } - }; - - const defaultRecord = (game: 'gf' | 'dm'): Record => { - return { - collection: 'record', - pluginVer: PLUGIN_VER, - - game, - version, - - diff_100_nr: 0, - diff_150_nr: 0, - diff_200_nr: 0, - diff_250_nr: 0, - diff_300_nr: 0, - diff_350_nr: 0, - diff_400_nr: 0, - diff_450_nr: 0, - diff_500_nr: 0, - diff_550_nr: 0, - diff_600_nr: 0, - diff_650_nr: 0, - diff_700_nr: 0, - diff_750_nr: 0, - diff_800_nr: 0, - diff_850_nr: 0, - diff_900_nr: 0, - diff_950_nr: 0, - diff_100_clear: [0, 0, 0, 0, 0, 0, 0], - diff_150_clear: [0, 0, 0, 0, 0, 0, 0], - diff_200_clear: [0, 0, 0, 0, 0, 0, 0], - diff_250_clear: [0, 0, 0, 0, 0, 0, 0], - diff_300_clear: [0, 0, 0, 0, 0, 0, 0], - diff_350_clear: [0, 0, 0, 0, 0, 0, 0], - diff_400_clear: [0, 0, 0, 0, 0, 0, 0], - diff_450_clear: [0, 0, 0, 0, 0, 0, 0], - diff_500_clear: [0, 0, 0, 0, 0, 0, 0], - diff_550_clear: [0, 0, 0, 0, 0, 0, 0], - diff_600_clear: [0, 0, 0, 0, 0, 0, 0], - diff_650_clear: [0, 0, 0, 0, 0, 0, 0], - diff_700_clear: [0, 0, 0, 0, 0, 0, 0], - diff_750_clear: [0, 0, 0, 0, 0, 0, 0], - diff_800_clear: [0, 0, 0, 0, 0, 0, 0], - diff_850_clear: [0, 0, 0, 0, 0, 0, 0], - diff_900_clear: [0, 0, 0, 0, 0, 0, 0], - diff_950_clear: [0, 0, 0, 0, 0, 0, 0], - } - } - - const defaultExtra = (game: 'gf' | 'dm'): Extra => { - return { - collection: 'extra', - pluginVer: PLUGIN_VER, - - game, - version, - id, - - playstyle: [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 0, - ], - custom: Array(50).fill(0), - list_1: Array(100).fill(-1), - list_2: Array(100).fill(-1), - list_3: Array(100).fill(-1), - recommend_musicid_list: Array(5).fill(-1), - reward_status: Array(50).fill(0), - } - } - - const defaultScores = (game: 'gf' | 'dm'): Scores => { - return { - collection: 'scores', - version, - pluginVer: PLUGIN_VER, - game, - scores: {} - } - }; + const defaultInfo: PlayerInfo = getDefaultPlayerInfo(version, id) const gf = { game: 'gf', version }; const dm = { game: 'dm', version }; await DB.Upsert(refid, { collection: 'playerinfo', version }, defaultInfo); - await DB.Upsert(refid, { collection: 'profile', ...gf }, defaultProfile('gf')); - await DB.Upsert(refid, { collection: 'profile', ...dm }, defaultProfile('dm')); - await DB.Upsert(refid, { collection: 'record', ...gf }, defaultRecord('gf')); - await DB.Upsert(refid, { collection: 'record', ...dm }, defaultRecord('dm')); - await DB.Upsert(refid, { collection: 'extra', ...gf }, defaultExtra('gf')); - await DB.Upsert(refid, { collection: 'extra', ...dm }, defaultExtra('dm')); - await DB.Upsert(refid, { collection: 'scores', ...gf }, defaultScores('gf')); - await DB.Upsert(refid, { collection: 'scores', ...dm }, defaultScores('dm')); + await DB.Upsert(refid, { collection: 'profile', ...gf }, getDefaultProfile('gf', version, id)); + await DB.Upsert(refid, { collection: 'profile', ...dm }, getDefaultProfile('dm', version, id)); + await DB.Upsert(refid, { collection: 'record', ...gf }, getDefaultRecord('gf', version)); + await DB.Upsert(refid, { collection: 'record', ...dm }, getDefaultRecord('dm', version)); + await DB.Upsert(refid, { collection: 'extra', ...gf }, getDefaultExtra('gf', version, id)); + await DB.Upsert(refid, { collection: 'extra', ...dm }, getDefaultExtra('dm', version, id)); + await DB.Upsert(refid, { collection: 'scores', ...gf }, getDefaultScores('gf', version)); + await DB.Upsert(refid, { collection: 'scores', ...dm }, getDefaultScores('dm', version)); return defaultInfo } @@ -1039,27 +765,6 @@ async function getPlayerRanking(refid: string, version: string, game: 'gf' | 'dm } } -function getSaveProfileResponse(playerNo: number, ranking : PlayerRanking) -{ - - const result = K.ATTR({ no: `${playerNo}` }, { - skill: { rank: K.ITEM('s32', ranking.skill), total_nr: K.ITEM('s32', ranking.totalPlayers) }, - all_skill: { rank: K.ITEM('s32', ranking.all_skill), total_nr: K.ITEM('s32', ranking.totalPlayers) }, - kac2018: { - data: { - term: K.ITEM('s32', 0), - total_score: K.ITEM('s32', 0), - score: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), - music_type: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), - play_count: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), - }, - }, - }) - - return result - -} - async function getAllProfiles( version: string, game: 'gf' | 'dm') { return await DB.Find(null, { collection: 'profile', @@ -1140,24 +845,6 @@ function parseSecretMusic(playerData: KDataReader) : SecretMusicEntry[] return response } -function getSecretMusicResponse(profile: Profile) : SecretMusicResponse[] { - let response : SecretMusicResponse[] = [] - - if (!profile.secretmusic?.music ) { - return response - } - - for (let music of profile.secretmusic.music) { - response.push({ - musicid: K.ITEM('s32', music.musicid), - seq: K.ITEM('u16', music.seq), - kind: K.ITEM('s32', music.kind) - }) - } - - return response -} - function getFriendDataResponse(profile: Profile) { let response = [] return response; @@ -1173,4 +860,3 @@ function logStagesPlayed(playedStages: KDataReader[]) { logger.debugLog(result) } - diff --git a/gitadora@asphyxia/models/Responses/battledataresponse.ts b/gitadora@asphyxia/models/Responses/battledataresponse.ts new file mode 100644 index 0000000..fad986f --- /dev/null +++ b/gitadora@asphyxia/models/Responses/battledataresponse.ts @@ -0,0 +1,79 @@ +export interface BattleDataResponse +{ + info: { + orb: KITEM<'s32'>, + get_gb_point: KITEM<'s32'>, + send_gb_point: KITEM<'s32'>, + } + greeting: { + greeting_1: KITEM<'str'>, + greeting_2: KITEM<'str'>, + greeting_3: KITEM<'str'>, + greeting_4: KITEM<'str'>, + greeting_5: KITEM<'str'>, + greeting_6: KITEM<'str'>, + greeting_7: KITEM<'str'>, + greeting_8: KITEM<'str'>, + greeting_9: KITEM<'str'>, + + } + setting: { + matching: KITEM<'s32'>, + info_level: KITEM<'s32'>, + } + + score: { + battle_class: KITEM<'s32'>, + max_battle_class: KITEM<'s32'>, + battle_point: KITEM<'s32'>, + win: KITEM<'s32'>, + lose: KITEM<'s32'>, + draw: KITEM<'s32'>, + consecutive_win: KITEM<'s32'>, + max_consecutive_win: KITEM<'s32'>, + glorious_win: KITEM<'s32'>, + max_defeat_skill: KITEM<'s32'>, + latest_result: KITEM<'s32'>, + + } + history: {} +} + +export function getDefaultBattleDataResponse() : BattleDataResponse { + return { + info: { + orb: K.ITEM('s32', 0), + get_gb_point: K.ITEM('s32', 0), + send_gb_point: K.ITEM('s32', 0), + }, + greeting: { + greeting_1: K.ITEM('str', ''), + greeting_2: K.ITEM('str', ''), + greeting_3: K.ITEM('str', ''), + greeting_4: K.ITEM('str', ''), + greeting_5: K.ITEM('str', ''), + greeting_6: K.ITEM('str', ''), + greeting_7: K.ITEM('str', ''), + greeting_8: K.ITEM('str', ''), + greeting_9: K.ITEM('str', ''), + }, + setting: { + matching: K.ITEM('s32', 0), + info_level: K.ITEM('s32', 0), + }, + score: { + battle_class: K.ITEM('s32', 0), + max_battle_class: K.ITEM('s32', 0), + battle_point: K.ITEM('s32', 0), + win: K.ITEM('s32', 0), + lose: K.ITEM('s32', 0), + draw: K.ITEM('s32', 0), + consecutive_win: K.ITEM('s32', 0), + max_consecutive_win: K.ITEM('s32', 0), + glorious_win: K.ITEM('s32', 0), + max_defeat_skill: K.ITEM('s32', 0), + latest_result: K.ITEM('s32', 0), + }, + history: {}, + } +} diff --git a/gitadora@asphyxia/models/Responses/checkplayerresponse.ts b/gitadora@asphyxia/models/Responses/checkplayerresponse.ts new file mode 100644 index 0000000..9f9a48b --- /dev/null +++ b/gitadora@asphyxia/models/Responses/checkplayerresponse.ts @@ -0,0 +1,30 @@ +export interface CheckPlayerResponse { + player: { + name: KITEM<'str'>, + charaid: KITEM<'s32'>, + did: KITEM<'s32'>, + skilldata: { + skill: KITEM<'s32'> + all_skill: KITEM<'s32'> + old_skill: KITEM<'s32'> + old_all_skill: KITEM<'s32'> + }, + } +} + +export function getCheckPlayerResponse(playerNo : number, name: string, id: number) : CheckPlayerResponse +{ + return { + player: K.ATTR({ no: `${playerNo}`, state: '2' }, { + name: K.ITEM('str', name), + charaid: K.ITEM('s32', 0), + did: K.ITEM('s32', id), + skilldata: { + skill: K.ITEM('s32', 0), + all_skill: K.ITEM('s32', 0), + old_skill: K.ITEM('s32', 0), + old_all_skill: K.ITEM('s32', 0), + } + }) + } +} \ No newline at end of file diff --git a/gitadora@asphyxia/models/Responses/playablemusicresponse.ts b/gitadora@asphyxia/models/Responses/playablemusicresponse.ts new file mode 100644 index 0000000..1508ec7 --- /dev/null +++ b/gitadora@asphyxia/models/Responses/playablemusicresponse.ts @@ -0,0 +1,22 @@ +import { CommonMusicDataField } from "../commonmusicdata" + +export interface PlayableMusicResponse +{ + hot: { + major: KITEM<'s32'>, + minor: KITEM<'s32'> + } + musicinfo: KATTR +} + +export function getPlayableMusicResponse(music : CommonMusicDataField[]) : PlayableMusicResponse { + return { + hot: { + major: K.ITEM('s32', 1), + minor: K.ITEM('s32', 1), + }, + musicinfo: K.ATTR({ nr: `${music.length}` }, { + music, + }), + } + } \ No newline at end of file diff --git a/gitadora@asphyxia/models/Responses/playerstickerresponse.ts b/gitadora@asphyxia/models/Responses/playerstickerresponse.ts new file mode 100644 index 0000000..2fd2383 --- /dev/null +++ b/gitadora@asphyxia/models/Responses/playerstickerresponse.ts @@ -0,0 +1,46 @@ +export interface PlayerStickerResponse { + id: KITEM<'s32'>, + pos_x: KITEM<'float'> , + pos_y: KITEM<'float'>, + scale_x: KITEM<'float'> , + scale_y: KITEM<'float'>, + rotate: KITEM<'float'> +} + +export function getPlayerStickerResponse(playerCard : any[]) : PlayerStickerResponse[] { + let stickers : PlayerStickerResponse[] = [] + if (!_.isArray(playerCard)) { + return stickers + } + + for (const item of playerCard) { + const id = _.get(item, 'id'); + const posX = _.get(item, 'position.0'); + const posY = _.get(item, 'position.1'); + const scaleX = _.get(item, 'scale.0'); + const scaleY = _.get(item, 'scale.1'); + const rotation = _.get(item, 'rotation'); + + if ( + !isFinite(id) || + !isFinite(posX) || + !isFinite(posY) || + !isFinite(scaleX) || + !isFinite(scaleY) || + !isFinite(rotation) + ) { + continue; + } + + stickers.push({ + id: K.ITEM('s32', id), + pos_x: K.ITEM('float', posX), + pos_y: K.ITEM('float', posY), + scale_x: K.ITEM('float', scaleX), + scale_y: K.ITEM('float', scaleY), + rotate: K.ITEM('float', rotation), + }); + } + + return stickers + } \ No newline at end of file diff --git a/gitadora@asphyxia/models/Responses/saveprofileresponse.ts b/gitadora@asphyxia/models/Responses/saveprofileresponse.ts new file mode 100644 index 0000000..4faa3a6 --- /dev/null +++ b/gitadora@asphyxia/models/Responses/saveprofileresponse.ts @@ -0,0 +1,41 @@ +import { PlayerRanking } from "../playerranking" + +export interface SaveProfileResponse +{ + skill: { + rank: KITEM<'s32'>, + total_nr: KITEM<'s32'> + } + all_skill: { + rank: KITEM<'s32'>, + total_nr: KITEM<'s32'> + } + kac2018: { + data: { + term: KITEM<'s32'>, + total_score: KITEM<'s32'>, + score: KARRAY<'s32'>, + music_type: KARRAY<'s32'>, + play_count: KARRAY<'s32'> + } + } +} + +export function getSaveProfileResponse(playerNo: number, ranking : PlayerRanking) +{ + const result : SaveProfileResponse = K.ATTR({ no: `${playerNo}` }, { + skill: { rank: K.ITEM('s32', ranking.skill), total_nr: K.ITEM('s32', ranking.totalPlayers) }, + all_skill: { rank: K.ITEM('s32', ranking.all_skill), total_nr: K.ITEM('s32', ranking.totalPlayers) }, + kac2018: { + data: { + term: K.ITEM('s32', 0), + total_score: K.ITEM('s32', 0), + score: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), + music_type: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), + play_count: K.ARRAY('s32', [0, 0, 0, 0, 0, 0]), + }, + }, + }) + + return result +} \ No newline at end of file diff --git a/gitadora@asphyxia/models/Responses/secretmusicresponse.ts b/gitadora@asphyxia/models/Responses/secretmusicresponse.ts new file mode 100644 index 0000000..29cd694 --- /dev/null +++ b/gitadora@asphyxia/models/Responses/secretmusicresponse.ts @@ -0,0 +1,25 @@ +import { Profile } from "../profile"; + +export interface SecretMusicResponse { + musicid: KITEM<'s32'>; + seq: KITEM<'u16'>; + kind: KITEM<'s32'>; +} + +export function getSecretMusicResponse(profile: Profile) : SecretMusicResponse[] { + let response : SecretMusicResponse[] = [] + + if (!profile.secretmusic?.music ) { + return response + } + + for (let music of profile.secretmusic.music) { + response.push({ + musicid: K.ITEM('s32', music.musicid), + seq: K.ITEM('u16', music.seq), + kind: K.ITEM('s32', music.kind) + }) + } + + return response + } \ No newline at end of file diff --git a/gitadora@asphyxia/models/extra.ts b/gitadora@asphyxia/models/extra.ts index 5a2ad6e..93c5d69 100644 --- a/gitadora@asphyxia/models/extra.ts +++ b/gitadora@asphyxia/models/extra.ts @@ -1,3 +1,5 @@ +import { PLUGIN_VER } from "../const"; + export interface Extra { collection: 'extra'; @@ -13,4 +15,27 @@ export interface Extra { list_3: number[]; recommend_musicid_list: number[]; reward_status: number[]; -} \ No newline at end of file +} + +export function getDefaultExtra(game: 'gf' | 'dm', version: string, id: number) : Extra { + const result : Extra = { + collection: 'extra', + pluginVer: PLUGIN_VER, + + game, + version, + id, + playstyle: Array(50).fill(0), + custom: Array(50).fill(0), + list_1: Array(100).fill(-1), + list_2: Array(100).fill(-1), + list_3: Array(100).fill(-1), + recommend_musicid_list: Array(5).fill(-1), + reward_status: Array(50).fill(0), + } + result.playstyle[1] = 1 // Note scroll speed (should default to 1.0x) + result.playstyle[36] = 20 // Unknown + result.playstyle[48] = 20 // Unknown + + return result +} diff --git a/gitadora@asphyxia/models/playerinfo.ts b/gitadora@asphyxia/models/playerinfo.ts index 52bb36d..055fb65 100644 --- a/gitadora@asphyxia/models/playerinfo.ts +++ b/gitadora@asphyxia/models/playerinfo.ts @@ -1,7 +1,9 @@ +import { PLUGIN_VER } from "../const"; + export interface PlayerInfo { collection: 'playerinfo', - pluginVer: Number; + pluginVer: number; id: number; version: string, @@ -16,4 +18,15 @@ export interface PlayerInfo { }[]; // TODO: Add Board things. -} \ No newline at end of file +} + +export function getDefaultPlayerInfo(version: string, id: number) : PlayerInfo { + return { + collection: 'playerinfo', + pluginVer: PLUGIN_VER, + id, + version, + name: 'ASPHYXIA-CORE USER', + title: 'Please edit on WebUI', + } +} diff --git a/gitadora@asphyxia/models/playerstickerresponse.ts b/gitadora@asphyxia/models/playerstickerresponse.ts deleted file mode 100644 index 14bd4f0..0000000 --- a/gitadora@asphyxia/models/playerstickerresponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface PlayerStickerResponse { - id: KITEM<'s32'>, - pos_x: KITEM<'float'> , - pos_y: KITEM<'float'>, - scale_x: KITEM<'float'> , - scale_y: KITEM<'float'>, - rotate: KITEM<'float'> -} \ No newline at end of file diff --git a/gitadora@asphyxia/models/profile.ts b/gitadora@asphyxia/models/profile.ts index 3829578..94ae907 100644 --- a/gitadora@asphyxia/models/profile.ts +++ b/gitadora@asphyxia/models/profile.ts @@ -1,3 +1,4 @@ +import { PLUGIN_VER } from "../const"; import { SecretMusicEntry } from "./secretmusicentry"; export interface Profile { @@ -60,3 +61,66 @@ export interface Profile { music: SecretMusicEntry[]; } } + +export function getDefaultProfile (game: 'gf' | 'dm', version: string, id: number): Profile { + return { + collection: 'profile', + pluginVer: PLUGIN_VER, + + game, + version, + id, + + play: 0, + playtime: 0, + playterm: 0, + session_cnt: 0, + extra_stage: 0, + extra_play: 0, + extra_clear: 0, + encore_play: 0, + encore_clear: 0, + pencore_play: 0, + pencore_clear: 0, + max_clear_diff: 0, + max_full_diff: 0, + max_exce_diff: 0, + clear_num: 0, + full_num: 0, + exce_num: 0, + no_num: 0, + e_num: 0, + d_num: 0, + c_num: 0, + b_num: 0, + a_num: 0, + s_num: 0, + ss_num: 0, + last_category: 0, + last_musicid: -1, + last_seq: 0, + disp_level: 0, + progress: 0, + disp_state: 0, + skill: 0, + all_skill: 0, + extra_gauge: 0, + encore_gauge: 0, + encore_cnt: 0, + encore_success: 0, + unlock_point: 0, + max_skill: 0, + max_all_skill: 0, + clear_diff: 0, + full_diff: 0, + exce_diff: 0, + clear_music_num: 0, + full_music_num: 0, + exce_music_num: 0, + clear_seq_num: 0, + classic_all_skill: 0, + secretmusic: { + music: [] + } + } +}; \ No newline at end of file diff --git a/gitadora@asphyxia/models/record.ts b/gitadora@asphyxia/models/record.ts index 2dd43c3..a72f90b 100644 --- a/gitadora@asphyxia/models/record.ts +++ b/gitadora@asphyxia/models/record.ts @@ -1,3 +1,5 @@ +import { PLUGIN_VER } from "../const"; + export interface Record { collection: 'record'; @@ -41,4 +43,50 @@ export interface Record { diff_850_clear: number[]; diff_900_clear: number[]; diff_950_clear: number[]; -} \ No newline at end of file +} + +export function getDefaultRecord(game: 'gf' | 'dm', version: string): Record { + return { + collection: 'record', + pluginVer: PLUGIN_VER, + game, + version, + + diff_100_nr: 0, + diff_150_nr: 0, + diff_200_nr: 0, + diff_250_nr: 0, + diff_300_nr: 0, + diff_350_nr: 0, + diff_400_nr: 0, + diff_450_nr: 0, + diff_500_nr: 0, + diff_550_nr: 0, + diff_600_nr: 0, + diff_650_nr: 0, + diff_700_nr: 0, + diff_750_nr: 0, + diff_800_nr: 0, + diff_850_nr: 0, + diff_900_nr: 0, + diff_950_nr: 0, + diff_100_clear: [0, 0, 0, 0, 0, 0, 0], + diff_150_clear: [0, 0, 0, 0, 0, 0, 0], + diff_200_clear: [0, 0, 0, 0, 0, 0, 0], + diff_250_clear: [0, 0, 0, 0, 0, 0, 0], + diff_300_clear: [0, 0, 0, 0, 0, 0, 0], + diff_350_clear: [0, 0, 0, 0, 0, 0, 0], + diff_400_clear: [0, 0, 0, 0, 0, 0, 0], + diff_450_clear: [0, 0, 0, 0, 0, 0, 0], + diff_500_clear: [0, 0, 0, 0, 0, 0, 0], + diff_550_clear: [0, 0, 0, 0, 0, 0, 0], + diff_600_clear: [0, 0, 0, 0, 0, 0, 0], + diff_650_clear: [0, 0, 0, 0, 0, 0, 0], + diff_700_clear: [0, 0, 0, 0, 0, 0, 0], + diff_750_clear: [0, 0, 0, 0, 0, 0, 0], + diff_800_clear: [0, 0, 0, 0, 0, 0, 0], + diff_850_clear: [0, 0, 0, 0, 0, 0, 0], + diff_900_clear: [0, 0, 0, 0, 0, 0, 0], + diff_950_clear: [0, 0, 0, 0, 0, 0, 0], + } +} diff --git a/gitadora@asphyxia/models/scores.ts b/gitadora@asphyxia/models/scores.ts index 40e91ed..4f6afb3 100644 --- a/gitadora@asphyxia/models/scores.ts +++ b/gitadora@asphyxia/models/scores.ts @@ -1,3 +1,5 @@ +import { PLUGIN_VER } from "../const"; + export interface Scores { collection: 'scores'; @@ -22,3 +24,13 @@ export interface Scores { }; }; } + +export function getDefaultScores (game: 'gf' | 'dm', version: string): Scores { + return { + collection: 'scores', + version, + pluginVer: PLUGIN_VER, + game, + scores: {} + } +}; \ No newline at end of file diff --git a/gitadora@asphyxia/models/secretmusicresponse.ts b/gitadora@asphyxia/models/secretmusicresponse.ts deleted file mode 100644 index 5f6d4e3..0000000 --- a/gitadora@asphyxia/models/secretmusicresponse.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface SecretMusicResponse { - musicid: KITEM<'s32'>; - seq: KITEM<'u16'>; - kind: KITEM<'s32'>; -}