Merge pull request #32 from cracrayol/stable

Add MGA plugin + Fix for PnM plugin
This commit is contained in:
Freddie Wang 2021-06-19 22:03:10 +08:00 committed by GitHub
commit ea15d4628d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 119 additions and 11 deletions

13
mga@asphyxia/README.md Normal file
View File

@ -0,0 +1,13 @@
# Metal Gear Arcade
Plugin Version: **v1.0.0**
Important : require minimum Asphyxia Core **v1.40c**
## Changelog
#### 1.0.0
Initial Release.
## Known limitations
* No network/online capabilities

92
mga@asphyxia/index.ts Normal file
View File

@ -0,0 +1,92 @@
interface PlayerData {
collection: 'data',
str: string[],
bin: string[]
}
export function register() {
R.GameCode('I36');
R.Route(`eventlog.write`, async (req, data, send) => {
// Don't save event log.
send.object({
gamesession: K.ITEM('s64', BigInt(1)),
logsendflg: K.ITEM('s32', 0),
logerrlevel: K.ITEM('s32', 0),
evtidnosendflg: K.ITEM('s32', 0),
})
});
R.Route(`system.getmaster`, async (req, data, send) => {
// Called at game startup
// Unlock all contents
send.object({
result: K.ITEM('s32', 1),
strdata1: K.ITEM('str', Buffer.from('2011081000:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1', 'utf-8').toString('base64')),
strdata2: K.ITEM('str', Buffer.from('1,1,1,1,1,1,1,1,1,1,1,1,1,1', 'utf-8').toString('base64')),
updatedate: K.ITEM('u64', BigInt('1120367223')),
})
});
R.Route(`playerdata.usergamedata_send`, async (req, data, send) => {
// Save user data
const refid = $(data).element('data').str('eaid');
const datanum = $(data).element('data').number('datanum');
let playerData: PlayerData = {
collection: 'data',
str: [],
bin: []
};
const record = $(data).element('data').element('record').obj;
for (let i = 0; i < datanum; i++) {
playerData.str[i] = Buffer.from(_.get(record.d[i], '@content'), 'base64').toString('utf-8');
playerData.bin[i] = _.get(record.d[i].bin1, '@content');
}
DB.Upsert(refid, { collection: 'data' }, playerData);
send.object({
result: K.ITEM('s32', 0),
});
});
R.Route(`playerdata.usergamedata_recv`, async (req, data, send) => {
// Load user data
const refid = $(data).element('data').str('eaid');
const playerData = await DB.FindOne<PlayerData>(refid, { collection: 'data' });
let player = {
record_num: K.ITEM('u32', playerData.str.length),
record: {
d: []
}
};
for(let i = 0; i < playerData.str.length; i++) {
// Remove the 2 firsts elements of player data
let data = playerData.str[i].split(',');
player.record.d[i] = K.ITEM('str', Buffer.from(data.slice(2).join(','), 'utf-8').toString('base64') + playerData.bin[i]);
player.record.d[i].bin1 = K.ITEM('str', playerData.bin[i]);
}
send.object({
player,
result: K.ITEM('s32', 0)
});
});
R.Route(`playerdata.usergamedata_scorerank`, async (req, data, send) => {
// Not implemented
send.object({
result: K.ITEM('s32', 0)
});
});
R.Unhandled((req: EamuseInfo, data: any, send: EamuseSend) => {
return send.success();
});
}

View File

@ -1,6 +1,6 @@
# Pop'n Music
Plugin Version: **v2.2.2**
Plugin Version: **v2.2.3**
## Supported Versions
- pop'n music 19 Tune Street
@ -15,6 +15,9 @@ Important : require minimum Asphyxia Core **v1.31**
## Changelog
### 2.2.3
* All : Send 0 if clear_type is not existing.
### 2.2.2
* Usaneko/Peace : Add Omnimix support (songs with id >= 3000).

View File

@ -169,7 +169,7 @@ const getScores = async (refid: string, forFriend: boolean = false) => {
900: 9,
1000: 10,
1100: 11,
}[score.clear_type];
}[score.clear_type] || 0;
if (music > GAME_MAX_MUSIC_ID) {
continue;

View File

@ -261,7 +261,7 @@ const getScores = async (refid: string) => {
900: 10,
1000: 11,
1100: 15,
}[score.clear_type];
}[score.clear_type] || 0;
clear_medal[music] = clear_medal[music] | (medal << (sheet * 4));
const hiscore_index = (music * 4) + sheet;

View File

@ -208,7 +208,7 @@ const getProfile = async (refid: string, name?: string) => {
900: 9,
1000: 10,
1100: 11,
}[score.clear_type]),
}[score.clear_type] || 0),
old_score: K.ITEM('s32', 0),
old_clear_type: K.ITEM('u8', 0),
});
@ -416,7 +416,7 @@ const friend = async (req: EamuseInfo, data: any, send: EamuseSend): Promise<any
music_num: music.toString(),
sheet_num: sheet.toString(),
score: score.score.toString(),
clearmedal: {
clearmedal: ({
100: 1,
200: 2,
300: 3,
@ -428,7 +428,7 @@ const friend = async (req: EamuseInfo, data: any, send: EamuseSend): Promise<any
900: 9,
1000: 10,
1100: 11,
}[score.clear_type].toString(),
}[score.clear_type] || 0).toString(),
}));
}

View File

@ -302,7 +302,7 @@ const getScores = async (refid: string) => {
900: 10,
1000: 11,
1100: 15,
}[score.clear_type];
}[score.clear_type] || 0;
clear_medal[music] = clear_medal[music] | (medal << (sheet * 4));
const hiscore_index = (music * 4) + sheet;

View File

@ -397,7 +397,7 @@ const __format_flags_for_score = (sheet: number, clear_type: number) => {
3: 0x4000,
7: 0,
8: 0,
}[sheet]
}[sheet];
const shift = {
9: 4,
4: 0,
@ -408,7 +408,7 @@ const __format_flags_for_score = (sheet: number, clear_type: number) => {
3: 6,
7: 9,
8: 8,
}[sheet]
}[sheet];
const flags = {
100: 0,
200: 0,
@ -421,7 +421,7 @@ const __format_flags_for_score = (sheet: number, clear_type: number) => {
900: 2,
1000: 2,
1100: 3,
}[clear_type]
}[clear_type] || 0;
return (flags << shift) | playedflag
}

View File

@ -185,7 +185,7 @@ const getScores = async (refid: string, version: string, forFriend: boolean = fa
900: 9,
1000: 10,
1100: 11,
}[score.clear_type];
}[score.clear_type] || 0;
if (music > maxMusicId) {
continue;