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(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(); }); }