diff --git a/gitadora@asphyxia/README.md b/gitadora@asphyxia/README.md index 2fede0c..f3cd6d9 100644 --- a/gitadora@asphyxia/README.md +++ b/gitadora@asphyxia/README.md @@ -1,6 +1,6 @@ GITADORA Plugin for Asphyxia-Core ================================= -![Version: v1.2.3](https://img.shields.io/badge/version-v1.2.3-blue) +![Version: v1.2.4](https://img.shields.io/badge/version-v1.2.4-blue) This plugin is based on converted from public-exported Asphyxia's Routes. @@ -31,6 +31,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.2.3 ---------------- * Fixed bug preventing MDB files in XML format from loading (Thanks to DualEdge for reporting this ). 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 e5ca1fa..2765934 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"; const logger = new Logger("profiles") @@ -47,19 +51,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) => { @@ -232,7 +225,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: { @@ -348,6 +341,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}` }, { @@ -377,42 +371,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) }, @@ -502,42 +461,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', @@ -556,221 +479,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 } @@ -1034,27 +760,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', @@ -1135,24 +840,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; @@ -1168,4 +855,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'>; -}