diff --git a/Dockerfile b/Dockerfile index a6e8b01..d6f9983 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,6 @@ WORKDIR /app RUN npm config set registry http://registry.npm.taobao.org/ && npm install pm2@5.2.2 -g +RUN rm -rf node_modules/tsbuffer-validator/index.js && cp tsbufferIndex.js node_modules/tsbuffer-validator/index.js + CMD cd /app && sh zoeninfo.sh "Asia/Tokyo" && pm2-runtime start js_pm2.config.js -- ${Param} diff --git a/js_pm2.config.js b/js_pm2.config.js index 0efa009..bb6f27d 100644 --- a/js_pm2.config.js +++ b/js_pm2.config.js @@ -60,6 +60,8 @@ const localApps = [ instances: instancesNum, // 传递给脚本的参数 args: '-serverType msg', + //允许强制gc + node_args: '--expose-gc', // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。 watch: false, // 不用监听的文件 @@ -86,6 +88,8 @@ const crossApps = [ cwd: './', // 传递给脚本的参数 args: '-serverType cross', + //允许强制gc + node_args: '--expose-gc', // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。 watch: false, // 不用监听的文件 diff --git a/package-lock.json b/package-lock.json index 12225a6..7ba4421 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "axios": "^1.4.0", "crypto-js": "^4.1.1", "express": "^4.18.2", + "heapdump": "^0.3.15", "ioredis": "^5.3.2", "json5": "^2.2.3", "mathjs": "^11.4.0", @@ -2924,6 +2925,18 @@ "he": "bin/he" } }, + "node_modules/heapdump": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz", + "integrity": "sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==", + "hasInstallScript": true, + "dependencies": { + "nan": "^2.13.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/http-basic": { "version": "8.1.3", "resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz", @@ -3840,6 +3853,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + }, "node_modules/nanoid": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz", @@ -7911,6 +7929,14 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "heapdump": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz", + "integrity": "sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==", + "requires": { + "nan": "^2.13.2" + } + }, "http-basic": { "version": "8.1.3", "resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz", @@ -8629,6 +8655,11 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + }, "nanoid": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz", diff --git a/package.json b/package.json index ccc3f16..d55ec03 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,9 @@ "private": true, "scripts": { "dev": "tsrpc-cli dev", - "build": "tsrpc-cli build && copy js_pm2.config.js dist && copy zoeninfo.sh dist && mkdir dist\\json && xcopy src\\json dist\\json /e ", - "build_win": "tsrpc-cli build && copy js_pm2.config.js dist && copy zoeninfo.sh dist && mkdir dist\\json && xcopy src\\json dist\\json /e ", - "build_linux": "tsrpc-cli build && cp js_pm2.config.js dist && cp zoeninfo.sh dist && cp src/json/ -a dist ", + "build": "tsrpc-cli build && copy js_pm2.config.js dist && copy zoeninfo.sh dist && copy tsbufferIndex.js dist && mkdir dist\\json && xcopy src\\json dist\\json /e ", + "build_win": "tsrpc-cli build && copy js_pm2.config.js dist && copy zoeninfo.sh dist && copy tsbufferIndex.js dist && mkdir dist\\json && xcopy src\\json dist\\json /e ", + "build_linux": "tsrpc-cli build && cp js_pm2.config.js dist && cp zoeninfo.sh dist && cp tsbufferIndex.js dist && cp src/json/ -a dist ", "build_docker_win": "npm run build_win && cd dist && npm i --omit=dev", "build_docker_linux": "npm run build_linux && cd dist && npm i --omit=dev", "doc": "tsrpc-cli doc && node js_uploadDoc.js", @@ -37,6 +37,7 @@ "axios": "^1.4.0", "crypto-js": "^4.1.1", "express": "^4.18.2", + "heapdump": "^0.3.15", "ioredis": "^5.3.2", "json5": "^2.2.3", "mathjs": "^11.4.0", diff --git a/src/api_cross/email/ApiDelCrossEmail.ts b/src/api_cross/email/ApiDelCrossEmail.ts index 72fee11..d958688 100644 --- a/src/api_cross/email/ApiDelCrossEmail.ts +++ b/src/api_cross/email/ApiDelCrossEmail.ts @@ -5,7 +5,7 @@ export default async function (call: ApiCall let eids = call.req.eids; G.mongodb.collection("email").updateMany({ _id: {$in: eids.map((i) => G.mongodb.conversionId(i))} - }, {isdel: true}) + }, {$set: {isdel: true}}) call.succ({result:true}) } \ No newline at end of file diff --git a/src/api_cross/wzry/ApiRank.ts b/src/api_cross/wzry/ApiRank.ts index 767fdc8..77ccad7 100644 --- a/src/api_cross/wzry/ApiRank.ts +++ b/src/api_cross/wzry/ApiRank.ts @@ -1,23 +1,29 @@ import {ApiCall} from "tsrpc"; import {ReqRank, ResRank} from "../../cross/protocols/wzry/PtlRank"; import {player} from "../../shared/protocols/user/type"; -import {FindOptions} from "mongodb"; +import {Filter, FindOptions, OptionalId} from "mongodb"; +import { CollectionRankList } from "../../module/collection_rank"; -export async function getRankList(limit?: number, projection?: any) { +export async function getRankList(limit?: number, projection?: any, _where?:any) { let option: FindOptions = { sort: { 'data.valArr': -1, 'data.player.power': -1 } } + let filter:Filter> = {type: 'wzryCross'}; + if (limit != null) { option.limit = limit; } if (projection != null) { option.projection = projection; } + if (_where != null) { + Object.assign(filter, _where); + } - let listArr = await G.mongodb.collection('rankList').find({type: 'wzryCross'}, option).toArray(); + let listArr = await G.mongodb.collection('rankList').find(filter, option).toArray(); let list = listArr.map(l => l.data); return list; diff --git a/src/api_o2s/games/Apiheapdump.ts b/src/api_o2s/games/Apiheapdump.ts new file mode 100644 index 0000000..e4b923d --- /dev/null +++ b/src/api_o2s/games/Apiheapdump.ts @@ -0,0 +1,23 @@ +import { ApiCall } from "tsrpc"; +import { Reqheapdump, Resheapdump } from "../../monopoly/protocols/games/Ptlheapdump"; +var heapdump = require('heapdump'); + +export default async function (call: ApiCall) { + + if(call.req.act == "heapdump"){ + let name = Date.now() + '.heapsnapshot' + heapdump.writeSnapshot(name); + call.succ({ + code:200, + data:name + }) + } + + if(call.req.act == "gc"){ + global.gc(); + call.succ({ + code:200, + data:"gc..." + }) + } +} \ No newline at end of file diff --git a/src/api_s2c/ApiSyncBtn.ts b/src/api_s2c/ApiSyncBtn.ts index 68065df..959eb6e 100644 --- a/src/api_s2c/ApiSyncBtn.ts +++ b/src/api_s2c/ApiSyncBtn.ts @@ -39,15 +39,15 @@ export default async function (call: ApiCall) { } break; case 'christmas': - //领完消失 - if (!data[key]) { - let _hdList = await HuoDongFun.gethdList(call, 8) - if (_hdList) { - // 无此活动 - data[key] = {active: true}; - change[key] = data[key]; - } - } + //领完消失 + data[key] = {active: false}; + change[key] = data[key]; + let _hdList = await HuoDongFun.gethdList(call, 8) + if (_hdList.length > 0) { + // 无此活动 + data[key] = {active: true}; + change[key] = data[key]; + } break; case 'dayjijin': case 'dengjijijin': diff --git a/src/api_s2c/event/christmas/ApiLiBao.ts b/src/api_s2c/event/christmas/ApiLiBao.ts index ad070db..cb87f50 100644 --- a/src/api_s2c/event/christmas/ApiLiBao.ts +++ b/src/api_s2c/event/christmas/ApiLiBao.ts @@ -27,7 +27,6 @@ export default async function (call: ApiCall) { // 判断是否选择奖励了 return call.error('', { code: -3, message: globalThis.lng.yangchengmubiao_2 }) } - let _prize: atn[] = _con.basep for (let key in _select) { diff --git a/src/api_s2c/event/christmas/ApiQianDao.ts b/src/api_s2c/event/christmas/ApiQianDao.ts index 5eb2830..06ac114 100644 --- a/src/api_s2c/event/christmas/ApiQianDao.ts +++ b/src/api_s2c/event/christmas/ApiQianDao.ts @@ -19,17 +19,23 @@ export default async function (call: ApiCall) { _mydata.qiandao.push(i) _prize = _prize.concat(_con[i]) } - - if (!_prize){ + if (_prize.length <= 0){ // 没有奖励可以领取 return call.error('', { code: -1, message: globalThis.lng.yangchengmubiao_2 }) } - - let _setData = {} + let _addVal = 0 + // 懒得喊后台和前端修改了,直接取prize里面的对应的经验字段去添加zhanling经验 + for (const p of _prize) { + // 战令经验 + if (p.t == "shengdanExp") { + _addVal += p.n + } + } + _mydata["val"] += _addVal + _setData["val"] = _mydata.val _setData["qiandao"] = _mydata.qiandao await Christmasfun.setMyData(call.uid, call.req.hdid, { $set: _setData }) - await PlayerFun.sendPrize(call, _prize); let changedata = { mydata: _mydata, prize: _prize} // 推送红点 diff --git a/src/api_s2c/event/christmas/ApiTaskRec.ts b/src/api_s2c/event/christmas/ApiTaskRec.ts index 1227d85..d0af2c9 100644 --- a/src/api_s2c/event/christmas/ApiTaskRec.ts +++ b/src/api_s2c/event/christmas/ApiTaskRec.ts @@ -22,11 +22,14 @@ export default async function (call: ApiCall) { return call.error('', { code: -3, message: globalThis.lng.yangchengmubiao_4 }) } _mydata.taskfinish.push(taskid) - + let _addval = _con.addval let _setData = {} + _mydata["val"] += _addval + _setData["val"] = _mydata.val _setData["taskfinish"] = _mydata.taskfinish await Christmasfun.setMyData(call.uid, call.req.hdid, { $set: _setData }) let _prize = _con.prize + await PlayerFun.sendPrize(call, _prize); let changedata = { mydata: _mydata, prize: _prize} // 推送红点 diff --git a/src/api_s2c/event/christmas/ApiZhanLingRec.ts b/src/api_s2c/event/christmas/ApiZhanLingRec.ts index 42a460f..a95ff7d 100644 --- a/src/api_s2c/event/christmas/ApiZhanLingRec.ts +++ b/src/api_s2c/event/christmas/ApiZhanLingRec.ts @@ -30,7 +30,7 @@ export default async function (call: ApiCall) { _mydata.gj.push(index) } - if (!_prize) { + if (_prize.length <= 0) { // 没有奖励可以领取 return call.error('', { code: -1, message: globalThis.lng.yangchengmubiao_2 }) } diff --git a/src/api_s2c/event/christmas/fun.ts b/src/api_s2c/event/christmas/fun.ts index 327422c..b3e5fca 100644 --- a/src/api_s2c/event/christmas/fun.ts +++ b/src/api_s2c/event/christmas/fun.ts @@ -113,11 +113,17 @@ export class Christmasfun { mydata.taskval = await this.getTaskVal(call, hdid) mydata.refresh = G.time mydata.gamenum = 0 - await this.setMyData(call.uid, hdid, { $set: { refresh: mydata.refresh, taskfinish: mydata.taskfinish, taskval: mydata.taskval, gamenum: mydata.gamenum} }) + mydata.libao = {} + await this.setMyData(call.uid, hdid, { $set: { + refresh: mydata.refresh, + taskfinish: mydata.taskfinish, + taskval: mydata.taskval, + gamenum: mydata.gamenum, + libao:mydata.libao} }) return mydata } - static async payChristmas(payid, call: ApiCall) { + static async payChristmas(payid, call: any) { let _hd = await HuoDongFun.gethdList(call, 8) for (let index = 0; index < _hd.length; index++) { const hdinfo = _hd[index]; @@ -126,8 +132,8 @@ export class Christmasfun { let _mydata = await Christmasfun.getMyData(call, _hdid) if (_mydata.pay) continue await this.setMyData(call.uid, _hdid, { $set: { pay: true} }) - let _prize = hdinfo.data.zlpayprize - await PlayerFun.sendPrize(call, _prize); + // let _prize = hdinfo.data.zlpayprize + // await PlayerFun.sendPrize(call, _prize); } else{ const libaos = hdinfo.data.libao @@ -140,6 +146,12 @@ export class Christmasfun { if (_buyNum >= _tmp["buynum"]) continue _mydata.libao[lbid] = _buyNum + 1 this.setMyData(call.uid, _hdid, { $set: { libao: _mydata.libao} }) + let _select = _mydata.select[lbid] || {} + let _prize: atn[] = _tmp["basep"] + for (let key in _select) { + _prize.push(_tmp["dlz"][parseInt(key)][_select[key]]) + } + await PlayerFun.sendPrize(call, _prize); break } diff --git a/src/api_s2c/gonglukuangbiao/ApiOpen.ts b/src/api_s2c/gonglukuangbiao/ApiOpen.ts index 419f224..98fcb44 100644 --- a/src/api_s2c/gonglukuangbiao/ApiOpen.ts +++ b/src/api_s2c/gonglukuangbiao/ApiOpen.ts @@ -50,19 +50,44 @@ export default async function (call: ApiCall) { call.succ(db as any); } -export async function refreshEnemys(call: ApiCall) { - let section = [call.conn.gud.mapId - 8, call.conn.gud.mapId + 8]; - //let allUser = Object.values(await G.redis.get('user')).filter(u => u.mapId >= section[0] && u.mapId <= section[1] && u.uid != call.uid); - //let dbUser = await G.mongodb.collection('wanted').find({uid: {$in: allUser.map(u => u.uid)}}).toArray(); +let lastRefreshTime: number +let enemyObject: object = {} - let allUser = await G.mongodb.find('user', { - $and: [ - {mapId: {$gte: section[0]}}, - {mapId: {$lte: section[1]}}, - {uid: {$ne: call.uid}} - ] - }, ['uid']); - let dbUser = await G.mongodb.find('wanted', {uid: {$in: allUser.map(u => u.uid)}}, ['uid', 'wanted']); +/** + * 每小时刷新公路狂飙用户,功能超过30级开放,只查询30级以上的用户,超过80级的,80级到100级为一档 + */ +async function checkAndRefreshEnemy() { + if (lastRefreshTime + 3600 > G.time) return + lastRefreshTime = G.time + for (let i = 3; i <= 8; i++) { + let users = await G.mongodb.collection('user').aggregate([ + { + $match: { + $and: [ + {lv: {$gte: i * 10}}, + {lv: {$lt: i == 8 ? 101 : (i + 1) * 10}}, + ] + } + }, + { + $project: {uid: 1} + }, + { + $sample: {size: 100} + } + ]).toArray() + let dbUser = await G.mongodb.find('wanted', {uid: {$in: users.map(u => u.uid)}}, ['uid', 'wanted']); + + enemyObject[i] = dbUser || [] + } +} + +export async function refreshEnemys(call: ApiCall) { + if (!lastRefreshTime) await checkAndRefreshEnemy() + + let lvDw = Math.floor(call.conn.gud.lv / 10 > 8 ? 8 : call.conn.gud.lv / 10) + + let dbUser = enemyObject[lvDw] || [] let enemys: joinFightData[] = []; @@ -74,7 +99,6 @@ export async function refreshEnemys(call: ApiCall) { let filter = dbUser.filter(u => conf.need <= u.wanted && u.wanted < needMax); let uids = filter.map(f => f.uid); dbUser.remove(u => uids.includes(u.uid)); - let a = configs[0].npc.random() let enemy = uids.length > 0 ? await FightFun.getPlayerFightData(uids.random()) : formatNpcData(configs[0].npc.random()); if (!enemy) enemy = formatNpcData(configs[0].npc.random()) if (enemy.player.isNpc) enemy.player.name = G.gc.gonglukuangbiao.npcname.random() @@ -83,7 +107,7 @@ export async function refreshEnemys(call: ApiCall) { PublicShared.randomNum(G.gc.gonglukuangbiao.wanted[0].wanted[0], G.gc.gonglukuangbiao.wanted[0].wanted[1]) enemys.push(enemy); } - + checkAndRefreshEnemy() return enemys.reverse(); } diff --git a/src/api_s2c/hongdian/fun.ts b/src/api_s2c/hongdian/fun.ts index 4b58691..3f3eeba 100644 --- a/src/api_s2c/hongdian/fun.ts +++ b/src/api_s2c/hongdian/fun.ts @@ -364,6 +364,10 @@ export class HuoDongHongDianFun { // 检测 htype 6 七日登录活动红点 ishd = await this.qiridengluHongDian(call, element) } + if (element.htype == 8) { + // 检测 htype 8 圣诞活动红点 + ishd = await this.christmasHongDian(call, element) + } // 此活动有红点 if (ishd.show) { @@ -704,7 +708,7 @@ export class HuoDongHongDianFun { for (let indextask = 0; indextask < Object.keys(_tasks).length; indextask++) { const elementtask = Object.keys(_tasks)[indextask]; let _tmp = _tasks[elementtask]; - if (_tmp.pval <= (_mydata.taskval[elementtask] || 0) && !_mydata.taskfinsih.includes(elementtask)) { + if (_tmp.pval <= (_mydata.taskval[elementtask] || 0) && !_mydata.taskfinish.includes(elementtask)) { // 任务完成且没有领取 _res.show = true; return _res; diff --git a/src/api_s2c/item/ApiUse.ts b/src/api_s2c/item/ApiUse.ts index 7b850e0..65f786c 100644 --- a/src/api_s2c/item/ApiUse.ts +++ b/src/api_s2c/item/ApiUse.ts @@ -6,7 +6,7 @@ import {PublicShared} from '../../shared/public/public'; import {TanXianShared} from '../../shared/public/tanxian'; import {event_dldh_addPrize} from '../event/diaoluoduihuan/ApiOpen'; import {getEventPrize} from '../tanxian/ApiEvent'; -import { getItemByItemId } from "../../public/item"; +import {getItemByItemId} from "../../public/item"; const iType = { 3: 'hero', @@ -15,10 +15,10 @@ const iType = { }; export default async function (call: ApiCall) { - - //ȥ��item Redis��� - let itemInfo = await getItemByItemId(call.uid,call.req.itemId); //call.conn.item[call.req.itemId]; - if(!itemInfo[call.req.itemId]) return call.error(globalThis.lng.item_1); + + //ȥ��item Redis��� + let itemInfo = await getItemByItemId(call.uid, call.req.itemId); //call.conn.item[call.req.itemId]; + if (!itemInfo[call.req.itemId]) return call.error(globalThis.lng.item_1); let item = itemInfo[call.req.itemId]; let useNum = call.req.useNum; @@ -105,8 +105,9 @@ export default async function (call: ApiCall) { n: useNum } ]; - } else if ([7, 8].includes(itemConf.type)) { + } else if ([6, 7, 8].includes(itemConf.type)) { if (useNum > item.num) return call.error(globalThis.lng.item_3); + if (itemConf.type == 6) UserFun.activeModel(call.uid, itemConf.diaoluo.toString(), useNum); if (itemConf.type == 7) UserFun.activeHeadFrame(call.uid, itemConf.diaoluo.toString(), useNum); if (itemConf.type == 8) UserFun.activeChatFrame(call.uid, itemConf.diaoluo.toString(), useNum); diff --git a/src/api_s2c/user/ApiChangeInfo.ts b/src/api_s2c/user/ApiChangeInfo.ts index 4d221d3..5bfac14 100644 --- a/src/api_s2c/user/ApiChangeInfo.ts +++ b/src/api_s2c/user/ApiChangeInfo.ts @@ -1,16 +1,27 @@ -import { ApiCall } from "tsrpc"; -import { PlayerFun } from '../../public/player'; -import { ReqChangeInfo, ResChangeInfo } from "../../shared/protocols/user/PtlChangeInfo"; -import { ResLogin } from '../../shared/protocols/user/PtlLogin'; -import { UserShared } from '../../shared/public/user'; +import {ApiCall} from "tsrpc"; +import {PlayerFun} from '../../public/player'; +import {ReqChangeInfo, ResChangeInfo} from "../../shared/protocols/user/PtlChangeInfo"; +import {ResLogin} from '../../shared/protocols/user/PtlLogin'; +import {UserShared} from '../../shared/public/user'; export default async function (call: ApiCall) { - if (call.req.type == 'model' && !call.req.pos) return call.error(globalThis.lng.shiwu_6); + // if (call.req.type == 'model' && !call.req.pos) return call.error(globalThis.lng.shiwu_6); - const active = (await G.mongodb.collection('playerInfo', 'playerInfo').findOne({ uid: call.uid, type: 'playerInfo' }))?.active || {}; - const fmtId = UserShared.getInfoId(call.req.type, call.req.id, call.req.pos || ''); - const isMeet = UserShared.chechIsActive(fmtId, { lv: call.conn.gud.lv, vip: call.conn.gud.vip, lsyx: call.conn.lshd.hero, active: active }); + let active = (await G.mongodb.collection('playerInfo', 'playerInfo').findOne({ + uid: call.uid, + type: 'playerInfo' + }))?.active || {}; + const fmtId = UserShared.getInfoId(call.req.type, call.req.id); + if (R.values(active).length == 0) active = UserShared.getActive(fmtId, call.conn.gud, call.req.type, call.req.id) + + const isMeet = UserShared.chechIsActive(fmtId, { + lv: call.conn.gud.lv, + vip: call.conn.gud.vip, + lsyx: call.conn.lshd.hero, + model: call.conn.gud.model, + active: active + }); if (!isMeet && call.req.type != 'headFrame' && call.req.type != 'chatFrame') return call.error(globalThis.lng.user_1); @@ -18,10 +29,12 @@ export default async function (call: ApiCall) { if (call.req.type == 'model') { let d = JSON.parse(JSON.stringify(call.conn.gud.model)); - d[call.req.pos] = { + let changeItem = { id: call.req.id, time: active[fmtId] || -1 - }; + } + d[call.req.id] = changeItem + change.upModel = changeItem change.model = d; } else { change[call.req.type] = { diff --git a/src/clusterUtils.ts b/src/clusterUtils.ts index 3836098..05b3006 100644 --- a/src/clusterUtils.ts +++ b/src/clusterUtils.ts @@ -2,13 +2,14 @@ import {RedisClientType, createClient} from "redis"; import {redisClient} from "./setRedis"; import {ConnectionStatus, WsServer} from "tsrpc"; import cluster from 'cluster'; -import { clusterFun } from "./clusterFunction"; +import {clusterFun} from "./clusterFunction"; //维护当前uid和pid的对应关系 let uid2processId = {}; //订阅redis let subscribeRedis: RedisClientType let firstPid = null; + //发布和可写redis复用原 setRedis 里的redisClient @@ -20,10 +21,10 @@ let firstPid = null; */ export function clusterSubscribe(key: string, callback: Function) { subscribeRedis.subscribe(G.redis.fromatKey(key), function (msg) { - try{ + try { callback(msg); - }catch(e){ - console.error("clusterSubscribe error",e); + } catch (e) { + console.error("clusterSubscribe error", e); } }); } @@ -43,14 +44,19 @@ export function clusterPublish(key: string, data: any) { * 在集群的N个进程中,只运行一次,在业务逻辑中也可使用 */ export function clusterRunOnce(fun) { + console.log(`${process.pid}环境变量pm_id===>${process.env.pm_id}`); if (process.env.pm_id == null || process.env.pm_id === '0') { //非pm2启动的,或是pm2下启动的第一个进程 + console.log("run clusterRunOnce1 ===>", process.pid) fun(); return; } - if(firstPid == process.pid){ + if(G.config.isG123)return; + + if (firstPid == process.pid) { //pm2的其中一个进程 + console.log("run clusterRunOnce2 ===>", process.pid) fun(); return; } @@ -60,16 +66,16 @@ export function clusterRunOnce(fun) { * 对外方法: * 在uid所在的进程执行fun方法,如果uid不在任何进程的话,则在当前进程执行 */ -export function clusterFunctionRunAtUidProcess(uid:string, fun:string, ...arg:any[]) { - if(!uid2processId[uid] || uid2processId[uid] == process.pid){ - clusterFun[ fun ].call(this, ...arg); +export function clusterFunctionRunAtUidProcess(uid: string, fun: string, ...arg: any[]) { + if (!uid2processId[uid] || uid2processId[uid] == process.pid) { + clusterFun[fun].call(this, ...arg); return; } clusterPublish("RunclusterFunction", JSON.stringify({ "uid": uid, "fun": fun, - "arg" : arg + "arg": arg })) } @@ -159,17 +165,17 @@ async function initSubscribeRedis() { clusterSubscribe('broadcastClusterMsg', function (msg) { let data = JSON.parse(msg); - if(!data.filter){ + if (!data.filter) { //如果不是有条件发送的话 G.server.broadcastMsg(data.msgName, data.msg); - }else { + } else { //但是如果是有条件发送的话 //条件里可能需要进程内的信息,则需要每个进程都分别筛选后执行 if (data.filter.ghId != null) { //指定公会 let conns = G.server.connections; conns = conns.filter(c => c?.gud?.ghId == data.filter.ghId); - conns.length>0 && G.server.broadcastMsg(data.msgName, data.msg, conns); + conns.length > 0 && G.server.broadcastMsg(data.msgName, data.msg, conns); } } }); @@ -178,7 +184,7 @@ async function initSubscribeRedis() { clusterSubscribe('RunclusterFunction', function (msg) { let data = JSON.parse(msg); if (uid2processId[data.uid] == process.pid) { - clusterFun[ data.fun ].call(this, ...data.arg); + clusterFun[data.fun].call(this, ...data.arg); } }); } @@ -193,8 +199,8 @@ export async function clusterMain() { }); //初始化订阅redis await initSubscribeRedis(); - - if(process.env.pm_id != null){ + + if (process.env.pm_id != null) { //pm2启动的,设置key为我的pid firstPid = await redisClient.get(G.redis.fromatKey("firstPid")); if (!firstPid) { @@ -207,7 +213,7 @@ export async function clusterMain() { redisClient.del(G.redis.fromatKey("uid2processId")); }); } - + //初始化玩家pid信息 await initUid2processId(); diff --git a/src/cross/protocols/serviceProto.ts b/src/cross/protocols/serviceProto.ts index 8dcedb7..e99cd52 100644 --- a/src/cross/protocols/serviceProto.ts +++ b/src/cross/protocols/serviceProto.ts @@ -875,6 +875,29 @@ export const serviceProto: ServiceProto = { }, { "id": 5, + "name": "upModel", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 6, "name": "model", "type": { "type": "Interface", @@ -903,14 +926,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 6, + "id": 7, "name": "renown", "type": { "type": "Number" } }, { - "id": 7, + "id": 8, "name": "wxcLv", "type": { "type": "Interface", @@ -936,14 +959,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 8, + "id": 9, "name": "mapId", "type": { "type": "Number" } }, { - "id": 9, + "id": 10, "name": "shoucangping", "type": { "type": "Interface", @@ -956,14 +979,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 10, + "id": 11, "name": "useTujianLvPoint", "type": { "type": "Number" } }, { - "id": 11, + "id": 12, "name": "skills", "type": { "type": "Interface", @@ -976,7 +999,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 12, + "id": 13, "name": "fightSkills", "type": { "type": "Interface", @@ -989,7 +1012,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 13, + "id": 14, "name": "heroPos", "type": { "type": "Interface", @@ -1002,21 +1025,21 @@ export const serviceProto: ServiceProto = { } }, { - "id": 14, + "id": 15, "name": "ghId", "type": { "type": "String" } }, { - "id": 15, + "id": 16, "name": "ghName", "type": { "type": "String" } }, { - "id": 16, + "id": 17, "name": "ghLevel", "type": { "type": "Reference", @@ -1024,7 +1047,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 17, + "id": 18, "name": "ghwz", "type": { "type": "Interface", @@ -1038,7 +1061,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 18, + "id": 19, "name": "ghExitTime", "type": { "type": "Number" @@ -1046,7 +1069,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 19, + "id": 20, "name": "loginTime", "type": { "type": "Number" @@ -1054,7 +1077,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 20, + "id": 21, "name": "logoutTime", "type": { "type": "Number" @@ -1062,7 +1085,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 21, + "id": 22, "name": "cTime", "type": { "type": "Number" @@ -1070,7 +1093,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 22, + "id": 23, "name": "loginDays", "type": { "type": "Number" @@ -1078,7 +1101,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 23, + "id": 24, "name": "serverName", "type": { "type": "String" @@ -1086,7 +1109,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 24, + "id": 25, "name": "sid", "type": { "type": "Number" @@ -1094,7 +1117,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 25, + "id": 26, "name": "onlineTime", "type": { "type": "Number" @@ -1102,7 +1125,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 26, + "id": 27, "name": "newonlinetime", "type": { "type": "Number" @@ -1110,7 +1133,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 27, + "id": 28, "name": "isNpc", "type": { "type": "Boolean" @@ -1118,7 +1141,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 28, + "id": 29, "name": "matrix", "type": { "type": "Interface", @@ -1132,7 +1155,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 29, + "id": 30, "name": "matrixPos", "type": { "type": "Interface", @@ -1152,7 +1175,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 30, + "id": 31, "name": "selectMatrix", "type": { "type": "String" @@ -1160,7 +1183,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 31, + "id": 32, "name": "fightHeros", "type": { "type": "Array", @@ -1171,7 +1194,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 32, + "id": 33, "name": "helpHeros", "type": { "type": "Array", @@ -1248,7 +1271,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 33, + "id": 34, "name": "changeNameNum", "type": { "type": "Number" @@ -1256,7 +1279,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 34, + "id": 35, "name": "peijianUnlock", "type": { "type": "Interface", @@ -1270,7 +1293,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 35, + "id": 36, "name": "headFrames", "type": { "type": "Interface", @@ -1284,7 +1307,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 36, + "id": 37, "name": "chatFrames", "type": { "type": "Interface", diff --git a/src/fix_patch/patch_hdinfo_20231221.ts b/src/fix_patch/patch_hdinfo_20231221.ts new file mode 100644 index 0000000..22afa3b --- /dev/null +++ b/src/fix_patch/patch_hdinfo_20231221.ts @@ -0,0 +1,27 @@ +import {ctor} from "../global"; +import {initMongoDB} from "../setMongodb"; + +async function start() { + await initMongoDB() + + // 刷新活动配置 + console.log(`删除错误活动数据开始...`); + + + await G.mongodb.collection("hdinfo").deleteOne({hdid: 8000}) + + console.log(`删除错误活动数据完成...`); +} + +ctor(); +start().then(() => { + let s = 0; + setInterval(() => { + s += 1; + console.log(new Date().format("MM-dd hh:mm:ss")); + if (s >= 3) process.exit(1); + }, 1000) + console.log("逻辑执行完成...等待退出!!!"); +}); + + diff --git a/src/globalListener.ts b/src/globalListener.ts index 2c3aa37..fc2c85b 100644 --- a/src/globalListener.ts +++ b/src/globalListener.ts @@ -143,6 +143,10 @@ export type gEventType = { Class_task_154: (eventname, call, val, chkVal) => void; /**每日任务宝箱领取 */ Class_task_155: (eventname, call, val, chkVal) => void; + /**每日钻石消耗 */ + Class_task_156: (eventname, call, val, chkVal) => void; + /**每日获取vip经验 */ + Class_task_157: (eventname, call, val, chkVal) => void; }; export function addListener() { @@ -177,8 +181,6 @@ export function addListener() { ActionLog.addRetainLog(player.uid, { key: 'pay', val: conf.payExp[0].n }); if (payId == G.gc.zhanling.payId) payZhanLing(player); - //圣诞节活动充值 - Christmasfun.payChristmas(payId, call); let payEmailConf = G.gc.payEmail[payId] as _gcType['payEmail']['caifutequan']; if (payEmailConf?.length > 0) { let sendEmailConfs = payEmailConf; diff --git a/src/json/huodong.json5 b/src/json/huodong.json5 index 48ff890..e66b88a 100644 --- a/src/json/huodong.json5 +++ b/src/json/huodong.json5 @@ -3828,7 +3828,7 @@ "hdid" : 10000, // 唯一活动id 超值好礼 "htype" : 10, // 后端唯一识别标识 "stype" : 1000, // 前端唯一识别标识(看前端需要是否修改) - "ttype" : 0, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动 + "ttype" : 4, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动 "stime" : 0, // 活动开始天数 "rtime" : 30, // 活动显示结束天数 "etime" : 30, // 活动实际结束 @@ -3849,27 +3849,33 @@ free: false, payId: 'czlb_1', buyNum: 1, + equal: 15000, prize: [ { "a": "item", "t": "13", - "n": 600 + "n": 601 } - ], - "recPrize1": [ + ], + "recPrize1": [ { "a": "item", - "t": "13", + "t": "12", "n": 600 + }, + { + "a": "attr", + "t": "rmbmoney", + "n": 333 } - ], - "recPrize2": [ + ], + "recPrize2": [ { "a": "item", - "t": "13", - "n": 600 + "t": "4", + "n": 10 } - ] + ] }, { id: '2', @@ -3878,27 +3884,62 @@ free: false, payId: 'czlb_2', buyNum: 1, + equal: 35000, prize: [ { "a": "item", - "t": "13", - "n": 600 + "t": "1", + "n": 1200 } - ], - "recPrize1": [ + ], + "recPrize1": [ { "a": "item", - "t": "13", - "n": 600 + "t": "2", + "n": 4400 } - ], - "recPrize2": [ + ], + "recPrize2": [ { "a": "item", + "t": "9", + "n": 63300 + }, + { + "a": "attr", + "t": "jinbi", + "n": 114514 + }, + { + "a": "attr", + "t": "rmbmoney", + "n": 31313 + }, + { + "a": "item", + "t": "2", + "n": 111 + }, + { + "a": "item", "t": "13", - "n": 600 + "n": 515 + },{ + "a": "item", + "t": "601", + "n": 1 + }, + { + "a": "item", + "t": "633", + "n": 2 + }, + { + "a": "hero", + "t": "5001", + "n": 1 } - ] + ] }, { id: '3', @@ -3907,27 +3948,28 @@ free: false, payId: 'czlb_3', buyNum: 1, + equal: 65000, prize: [ { "a": "item", "t": "13", - "n": 600 + "n": 123 } - ], - "recPrize1": [ + ], + "recPrize1": [ { "a": "item", "t": "13", - "n": 600 + "n": 321 } - ], - "recPrize2": [ + ], + "recPrize2": [ { "a": "item", "t": "13", - "n": 600 + "n": 548 } - ] + ] } ] } @@ -3986,5 +4028,201 @@ } ] } + }, + { + "hdid" : 12000, // 唯一活动id 累计购买礼包 + "htype" : 12, // 后端唯一识别标识 + "stype" : 1200, // 前端唯一识别标识(看前端需要是否修改) + "ttype" : 0, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动 + "stime" : 0, // 活动开始天数 + "rtime" : 30, // 活动显示结束天数 + "etime" : 30, // 活动实际结束 + "name": "ljlibao", + "icon": "icon_ljlibao", + "showtime" : "仅供参考,会复写正确值", // 自选礼包,如果存在多个活动,计费点不要设置一样;如果是一样,可能会存在付费一次,购买多次。 + "data" : { + //活动文本描述 + intr: "ljlibaotips_1", + intr: "ljlibaotips_2", + //礼包 + gift: [ + { + id: '1', + name: 'ljlibaotips_3', + need:[], + free: false, + payId: 'ljlibao_1', + scale: 200, + buynum: 1, + prize:[ + { + "a": "item", + "t": "13", + "n": 123 + } + ] + }, + { + id: '2', + name: 'ljlibaotips_4', + need:[], + free: false, + payId: 'ljlibao_2', + buynum: 1, + scale: 201, + prize:[ + { + "a": "item", + "t": "12", + "n": 111 + } + ] + }, + { + id: '3', + name: 'ljlibaotips_5', + need:[], + free: false, + payId: 'ljlibao_3', + buynum: 1, + scale: 203, + prize:[ + { + "a": "item", + "t": "1", + "n": 111111 + } + ] + }, + { + id: '4', + name: 'ljlibaotips_6', + need:[], + free: false, + payId: 'ljlibao_4', + buynum: 1, + scale: 204, + prize:[ + { + "a": "item", + "t": "13", + "n": 123 + }, + { + "a": "item", + "t": "2", + "n": 123 + } + ] + }, + { + id: '5', + name: 'ljlibaotips_7', + need:[], + free: false, + payId: 'ljlibao_5', + buynum: 1, + scale: 201, + prize:[ + { + "a": "item", + "t": "13", + "n": 12 + }, + { + "a": "item", + "t": "1", + "n": 31 + } + ] + }, + { + id: '6', + name: 'ljlibaotips_8', + need:[], + free: false, + payId: 'ljlibao_6', + buynum: 1, + scale: 200, + prize:[ + { + "a": "item", + "t": "1", + "n": 123 + }, + { + "a": "item", + "t": "2", + "n": 123 + } + ] + }, + { + id: '7', + name: 'ljlibaotips_9', + need:[], + free: false, + payId: 'ljlibao_7', + buynum: 1, + scale: 300, + prize:[ + { + "a": "item", + "t": "4", + "n": 123 + }, + { + "a": "item", + "t": "2", + "n": 123 + } + ] + }, + ], + //自选框掉落池 + dlz: [ + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"1", "n": 10000000}, + "2": {"a": "item", "t":"12", "n": 1000}, + "3": {"a": "item", "t":"2", "n": 2000}, + "4": {"a": "item", "t":"18", "n": 500} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + }, + { + "1": {"a": "item", "t":"600", "n": 20}, + "2": {"a": "item", "t":"5002", "n": 10}, + "3": {"a": "item", "t":"5004", "n": 10} + } + ] + } } ] \ No newline at end of file diff --git a/src/json/item.json b/src/json/item.json index 1802cff..a5551b3 100644 --- a/src/json/item.json +++ b/src/json/item.json @@ -3860,6 +3860,7 @@ "way": [], "go": "", "icon": "txk_019", + "sicon": "txk_019", "describe": "intr_item_describe_50001", "diaoluo": 3, "useNeed": [], @@ -3878,6 +3879,7 @@ "way": [], "go": "", "icon": "txk_016", + "sicon": "txk_016", "describe": "intr_item_describe_50002", "diaoluo": 4, "useNeed": [], @@ -3896,6 +3898,7 @@ "way": [], "go": "", "icon": "txk_023", + "sicon": "txk_023", "describe": "intr_item_describe_50003", "diaoluo": 6, "useNeed": [], @@ -3914,6 +3917,7 @@ "way": [], "go": "", "icon": "txk_009", + "sicon": "txk_009", "describe": "intr_item_describe_50004", "diaoluo": 7, "useNeed": [], @@ -3932,6 +3936,7 @@ "way": [], "go": "", "icon": "txk_026", + "sicon": "txk_026", "describe": "intr_item_describe_50005", "diaoluo": 8, "useNeed": [], @@ -3950,6 +3955,7 @@ "way": [], "go": "", "icon": "txk_018", + "sicon": "txk_018", "describe": "intr_item_describe_50006", "diaoluo": 9, "useNeed": [], @@ -3968,6 +3974,7 @@ "way": [], "go": "", "icon": "txk_014", + "sicon": "txk_014", "describe": "intr_item_describe_50007", "diaoluo": 10, "useNeed": [], @@ -3986,6 +3993,7 @@ "way": [], "go": "", "icon": "txk_022", + "sicon": "txk_022", "describe": "intr_item_describe_50008", "diaoluo": 11, "useNeed": [], @@ -4004,6 +4012,7 @@ "way": [], "go": "", "icon": "txk_028", + "sicon": "txk_028", "describe": "intr_item_describe_50009", "diaoluo": 23, "useNeed": [], @@ -4012,6 +4021,24 @@ "payId": "", "advancedEffects": "" }, + "50010": { + "id": 50010, + "name": "playerheadFrame_name_24", + "type": 7, + "sort": 1, + "colour": 4, + "way": [], + "go": "", + "icon": "txk_025", + "sicon": "txk_025", + "describe": "intr_item_describe_50010", + "diaoluo": 24, + "useNeed": [], + "usePrize": [], + "selecPrize": [], + "payId": "", + "advancedEffects": "" + }, "50101": { "id": 50101, "name": "playerChatFrame_name_6", @@ -4022,6 +4049,7 @@ "way": [], "go": "", "icon": "lt_dhk11", + "sicon": "lt_dhk11", "describe": "intr_item_describe_50101", "diaoluo": 6, "useNeed": [], @@ -4040,6 +4068,7 @@ "way": [], "go": "", "icon": "lt_dhk10", + "sicon": "lt_dhk10", "describe": "intr_item_describe_50102", "diaoluo": 7, "useNeed": [], @@ -4058,6 +4087,7 @@ "way": [], "go": "", "icon": "txk_020", + "sicon": "txk_020", "describe": "intr_item_describe_50103", "diaoluo": 15, "useNeed": [], @@ -4076,6 +4106,7 @@ "way": [], "go": "", "icon": "lt_dhk14", + "sicon": "lt_dhk14", "describe": "intr_item_describe_50104", "diaoluo": 8, "useNeed": [], @@ -4094,6 +4125,7 @@ "way": [], "go": "", "icon": "txk_017", + "sicon": "txk_017", "describe": "intr_item_describe_50201", "diaoluo": 16, "useNeed": [], @@ -4112,6 +4144,7 @@ "way": [], "go": "", "icon": "txk_011", + "sicon": "txk_011", "describe": "intr_item_describe_50202", "diaoluo": 17, "useNeed": [], @@ -4130,6 +4163,7 @@ "way": [], "go": "", "icon": "txk_005", + "sicon": "txk_005", "describe": "intr_item_describe_50203", "diaoluo": 18, "useNeed": [], @@ -4148,6 +4182,7 @@ "way": [], "go": "", "icon": "txk_004", + "sicon": "txk_004", "describe": "intr_item_describe_50204", "diaoluo": 19, "useNeed": [], @@ -4166,6 +4201,7 @@ "way": [], "go": "", "icon": "txk_024", + "sicon": "txk_024", "describe": "intr_item_describe_50205", "diaoluo": 20, "useNeed": [], @@ -4184,6 +4220,7 @@ "way": [], "go": "", "icon": "txk_013", + "sicon": "txk_013", "describe": "intr_item_describe_50206", "diaoluo": 21, "useNeed": [], @@ -4202,6 +4239,7 @@ "way": [], "go": "", "icon": "txk_021", + "sicon": "txk_021", "describe": "intr_item_describe_50207", "diaoluo": 22, "useNeed": [], @@ -4220,7 +4258,8 @@ "way": [], "go": "", "icon": 100011, - "describe": "intr_item_describe_50208", + "sicon": 100011, + "describe": "intr_item_describe_50301", "diaoluo": 3, "useNeed": [], "usePrize": [], @@ -4238,7 +4277,8 @@ "way": [], "go": "", "icon": 100021, - "describe": "intr_item_describe_50209", + "sicon": 100021, + "describe": "intr_item_describe_50302", "diaoluo": 4, "useNeed": [], "usePrize": [], diff --git a/src/json/openCond.json b/src/json/openCond.json index 2478204..ef4f726 100644 --- a/src/json/openCond.json +++ b/src/json/openCond.json @@ -718,7 +718,7 @@ }, "or": {}, "time": 0, - "tips": "openCond_tips_53", + "tips": "openCond_tips_96", "display": { "lv": 15 } @@ -839,7 +839,7 @@ }, "or": {}, "time": 0, - "tips": "openCond_tips_60", + "tips": "openCond_tips_96", "display": { "lv": 15 } @@ -904,7 +904,7 @@ }, "or": {}, "time": 0, - "tips": "openCond_tips_65", + "tips": "openCond_tips_96", "display": { "lv": 15 } @@ -1339,5 +1339,31 @@ "display": { "lv": 15 } + }, + "czlibao": { + "name": "czlibao", + "undefined": "超值礼包破冰", + "and": { + "lv": 15 + }, + "or": {}, + "time": 0, + "tips": "openCond_tips_96", + "display": { + "lv": 15 + } + }, + "xiaofeijingsai": { + "name": "xiaofeijingsai", + "undefined": "钻石消费竞赛", + "and": { + "lv": 15 + }, + "or": {}, + "time": 0, + "tips": "openCond_tips_96", + "display": { + "lv": 15 + } } } \ No newline at end of file diff --git a/src/json/pay.json b/src/json/pay.json index d293892..c40b1d1 100644 --- a/src/json/pay.json +++ b/src/json/pay.json @@ -939,12 +939,12 @@ { "a": "item", "t": "12", - "n": 100 + "n": 200 } ], "firstPayPrize": [], "name": "pay_name_lv15", - "undefined": "等级推送礼包15", + "undefined": "等级豪礼(等级15)", "time": -1, "buys": 1, "needVip": 0, @@ -980,7 +980,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv25", - "undefined": "等级推送礼包25", + "undefined": "等级豪礼(等级25)", "time": -1, "buys": 1, "needVip": 0, @@ -1016,7 +1016,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv30", - "undefined": "等级推送礼包30", + "undefined": "等级豪礼(等级30)", "time": -1, "buys": 1, "needVip": 0, @@ -1025,34 +1025,142 @@ }, "lv40": { "id": "lv40", - "money": 6, + "money": 30, "payExp": [ { "a": "attr", "t": "payExp", - "n": 60 + "n": 300 } ], "prize": [ { "a": "attr", "t": "rmbmoney", - "n": 120 + "n": 600 }, { "a": "item", "t": "4", - "n": 5 + "n": 10 }, { "a": "item", - "t": "1", - "n": 200000 + "t": "2", + "n": 2000 } ], "firstPayPrize": [], "name": "pay_name_lv40", - "undefined": "等级推送礼包40", + "undefined": "等级豪礼(等级40小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv40_1": { + "id": "lv40_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "4", + "n": 50 + }, + { + "a": "item", + "t": "2", + "n": 10000 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv40_1", + "undefined": "等级豪礼(等级40大)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv50_1": { + "id": "lv50_1", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 600 + }, + { + "a": "item", + "t": "10", + "n": 50 + }, + { + "a": "item", + "t": "23", + "n": 800000 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv50_1", + "undefined": "等级豪礼(等级50小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv50_2": { + "id": "lv50_2", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "10", + "n": 250 + }, + { + "a": "item", + "t": "23", + "n": 4000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv50_2", + "undefined": "等级豪礼(等级50大)", "time": -1, "buys": 1, "needVip": 0, @@ -1073,22 +1181,58 @@ { "a": "attr", "t": "rmbmoney", - "n": 1200 + "n": 600 }, { "a": "item", - "t": "4", - "n": 5 + "t": "606", + "n": 6 }, { "a": "item", - "t": "12", - "n": 1500 + "t": "20", + "n": 100 } ], "firstPayPrize": [], "name": "pay_name_lv55", - "undefined": "等级推送礼包55", + "undefined": "等级豪礼(等级55小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv55_1": { + "id": "lv55_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "605", + "n": 12 + }, + { + "a": "item", + "t": "20", + "n": 500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv55_1", + "undefined": "等级豪礼(等级55大)", "time": -1, "buys": 1, "needVip": 0, @@ -1124,7 +1268,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv58", - "undefined": "等级推送礼包58", + "undefined": "等级豪礼(等级58)", "time": -1, "buys": 1, "needVip": 0, @@ -1145,22 +1289,58 @@ { "a": "attr", "t": "rmbmoney", - "n": 1200 + "n": 600 }, { "a": "item", - "t": "4", - "n": 10 + "t": "615", + "n": 1 }, { "a": "item", - "t": "23", - "n": 200000 + "t": "18", + "n": 300 } ], "firstPayPrize": [], "name": "pay_name_lv60", - "undefined": "等级推送礼包60", + "undefined": "等级豪礼(等级60小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv60_1": { + "id": "lv60_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "628", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 1500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv60_1", + "undefined": "等级豪礼(等级60大)", "time": -1, "buys": 1, "needVip": 0, @@ -1181,22 +1361,58 @@ { "a": "attr", "t": "rmbmoney", - "n": 1200 + "n": 600 }, { "a": "item", - "t": "10", - "n": 80 + "t": "4", + "n": 10 }, { "a": "item", - "t": "6", - "n": 20 + "t": "1", + "n": 5000000 } ], "firstPayPrize": [], "name": "pay_name_lv63", - "undefined": "等级推送礼包63", + "undefined": "等级豪礼(等级63小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv63_1": { + "id": "lv63_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "4", + "n": 50 + }, + { + "a": "item", + "t": "1", + "n": 10000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv63_1", + "undefined": "等级豪礼(等级63大)", "time": -1, "buys": 1, "needVip": 0, @@ -1205,34 +1421,70 @@ }, "lv66": { "id": "lv66", - "money": 68, + "money": 30, "payExp": [ { "a": "attr", "t": "payExp", - "n": 680 + "n": 300 } ], "prize": [ { "a": "attr", "t": "rmbmoney", - "n": 2000 + "n": 600 }, { "a": "item", - "t": "4", - "n": 20 + "t": "615", + "n": 1 }, { "a": "item", - "t": "1", - "n": 800000 + "t": "18", + "n": 300 } ], "firstPayPrize": [], "name": "pay_name_lv66", - "undefined": "等级推送礼包66", + "undefined": "等级豪礼(等级66小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv66_1": { + "id": "lv66_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "628", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 1500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv66_1", + "undefined": "等级豪礼(等级66大)", "time": -1, "buys": 1, "needVip": 0, @@ -1241,34 +1493,70 @@ }, "lv69": { "id": "lv69", - "money": 68, + "money": 30, "payExp": [ { "a": "attr", "t": "payExp", - "n": 680 + "n": 300 } ], "prize": [ { "a": "attr", "t": "rmbmoney", - "n": 1200 + "n": 600 }, { "a": "item", - "t": "600", - "n": 20 + "t": "606", + "n": 6 }, { "a": "item", - "t": "28", - "n": 8000 + "t": "20", + "n": 100 } ], "firstPayPrize": [], "name": "pay_name_lv69", - "undefined": "等级推送礼包69", + "undefined": "等级豪礼(等级69小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv69_1": { + "id": "lv69_1", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "605", + "n": 12 + }, + { + "a": "item", + "t": "20", + "n": 500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv69_1", + "undefined": "等级豪礼(等级69大)", "time": -1, "buys": 1, "needVip": 0, @@ -1304,7 +1592,79 @@ ], "firstPayPrize": [], "name": "pay_name_lv72", - "undefined": "等级推送礼包72", + "undefined": "等级豪礼(等级72)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv73_1": { + "id": "lv73_1", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 600 + }, + { + "a": "item", + "t": "606", + "n": 6 + }, + { + "a": "item", + "t": "20", + "n": 100 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv73_1", + "undefined": "等级豪礼(等级73小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv73_2": { + "id": "lv73_2", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "605", + "n": 12 + }, + { + "a": "item", + "t": "20", + "n": 500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv73_2", + "undefined": "等级豪礼(等级73大)", "time": -1, "buys": 1, "needVip": 0, @@ -1340,7 +1700,79 @@ ], "firstPayPrize": [], "name": "pay_name_lv75", - "undefined": "等级推送礼包75", + "undefined": "等级豪礼(等级75)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv76_1": { + "id": "lv76_1", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 600 + }, + { + "a": "item", + "t": "615", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 300 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv76_1", + "undefined": "等级豪礼(等级76小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv76_2": { + "id": "lv76_2", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "628", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 1500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv76_2", + "undefined": "等级豪礼(等级76大)", "time": -1, "buys": 1, "needVip": 0, @@ -1376,7 +1808,79 @@ ], "firstPayPrize": [], "name": "pay_name_lv78", - "undefined": "等级推送礼包78", + "undefined": "等级豪礼(等级78)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv79_1": { + "id": "lv79_1", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 600 + }, + { + "a": "item", + "t": "606", + "n": 6 + }, + { + "a": "item", + "t": "20", + "n": 100 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv79_1", + "undefined": "等级豪礼(等级79小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv79_2": { + "id": "lv79_2", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "605", + "n": 12 + }, + { + "a": "item", + "t": "20", + "n": 500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv79_2", + "undefined": "等级豪礼(等级79大)", "time": -1, "buys": 1, "needVip": 0, @@ -1412,7 +1916,79 @@ ], "firstPayPrize": [], "name": "pay_name_lv81", - "undefined": "等级推送礼包81", + "undefined": "等级豪礼(等级81)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv82_1": { + "id": "lv82_1", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 600 + }, + { + "a": "item", + "t": "606", + "n": 6 + }, + { + "a": "item", + "t": "20", + "n": 100 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv82_1", + "undefined": "等级豪礼(等级82小)", + "time": -1, + "buys": 1, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "lv82_2": { + "id": "lv82_2", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 2560 + }, + { + "a": "item", + "t": "605", + "n": 12 + }, + { + "a": "item", + "t": "20", + "n": 500 + } + ], + "firstPayPrize": [], + "name": "pay_name_lv82_2", + "undefined": "等级豪礼(等级82大)", "time": -1, "buys": 1, "needVip": 0, @@ -1448,7 +2024,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv84", - "undefined": "等级推送礼包84", + "undefined": "等级豪礼(等级84)", "time": -1, "buys": 1, "needVip": 0, @@ -1484,7 +2060,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv87", - "undefined": "等级推送礼包87", + "undefined": "等级豪礼(等级87)", "time": -1, "buys": 1, "needVip": 0, @@ -1520,7 +2096,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv90", - "undefined": "等级推送礼包90", + "undefined": "等级豪礼(等级90)", "time": -1, "buys": 1, "needVip": 0, @@ -1556,7 +2132,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv93", - "undefined": "等级推送礼包93", + "undefined": "等级豪礼(等级93)", "time": -1, "buys": 1, "needVip": 0, @@ -1592,7 +2168,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv96", - "undefined": "等级推送礼包96", + "undefined": "等级豪礼(等级96)", "time": -1, "buys": 1, "needVip": 0, @@ -1628,7 +2204,7 @@ ], "firstPayPrize": [], "name": "pay_name_lv99", - "undefined": "等级推送礼包99", + "undefined": "等级豪礼(等级99)", "time": -1, "buys": 1, "needVip": 0, @@ -3543,7 +4119,7 @@ "name": "pay_name_djlb_2", "undefined": "枪油补充包", "time": 86400, - "buys": 3, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3569,7 +4145,7 @@ "name": "pay_name_djlb_1", "undefined": "能量饮料补充包", "time": 86400, - "buys": 2, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3595,7 +4171,7 @@ "name": "pay_name_djlb_12", "undefined": "弹壳补充包", "time": 86400, - "buys": 3, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3621,7 +4197,7 @@ "name": "pay_name_djlb_18", "undefined": "装备蓝图补充包", "time": 86400, - "buys": 3, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3641,7 +4217,7 @@ "name": "pay_name_mingwang_2", "undefined": "名望礼包_68元", "time": 86400, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3661,7 +4237,7 @@ "name": "pay_name_mingwang_3", "undefined": "名望礼包_648元", "time": 86400, - "buys": 2, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3681,7 +4257,7 @@ "name": "pay_name_mingwang_4", "undefined": "名望礼包_128元", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -3839,119 +4415,139 @@ "prize": [ { "a": "item", - "t": "49", - "n": 50 + "t": "4", + "n": 10 }, { "a": "attr", "t": "rmbmoney", - "n": 600 + "n": 120 + }, + { + "a": "item", + "t": "1", + "n": 100000 } ], "firstPayPrize": [], "name": "pay_name_guanqialibao_1", "undefined": "关卡礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" }, "guanqialibao_2": { "id": "guanqialibao_2", - "money": 30, + "money": 68, "payExp": [ { "a": "attr", "t": "payExp", - "n": 300 + "n": 680 } ], "prize": [ { "a": "item", - "t": "49", - "n": 100 + "t": "4", + "n": 30 }, { "a": "attr", "t": "rmbmoney", "n": 1360 + }, + { + "a": "item", + "t": "12", + "n": 1500 } ], "firstPayPrize": [], "name": "pay_name_guanqialibao_2", "undefined": "关卡礼包_30", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" }, "guanqialibao_3": { "id": "guanqialibao_3", - "money": 68, + "money": 198, "payExp": [ { "a": "attr", "t": "payExp", - "n": 680 + "n": 1980 } ], "prize": [ { "a": "item", - "t": "49", - "n": 200 + "t": "617", + "n": 1 }, { "a": "attr", "t": "rmbmoney", - "n": 2560 + "n": 3960 + }, + { + "a": "item", + "t": "12", + "n": 5000 } ], "firstPayPrize": [], "name": "pay_name_guanqialibao_3", "undefined": "关卡礼包_68", "time": -1, - "buys": 1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "guanqialibao_4": { + "id": "guanqialibao_4", + "money": 198, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1980 + } + ], + "prize": [ + { + "a": "item", + "t": "632", + "n": 20 + }, + { + "a": "attr", + "t": "rmbmoney", + "n": 3960 + }, + { + "a": "item", + "t": "12", + "n": 2000 + } + ], + "firstPayPrize": [], + "name": "pay_name_guanqialibao_4", + "undefined": "关卡礼包_68", + "time": -1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" }, "daojulibao_1": { "id": "daojulibao_1", - "money": 6, - "payExp": [ - { - "a": "attr", - "t": "payExp", - "n": 60 - } - ], - "prize": [ - { - "a": "item", - "t": "49", - "n": 50 - }, - { - "a": "attr", - "t": "rmbmoney", - "n": 700 - } - ], - "firstPayPrize": [], - "name": "pay_name_daojulibao_1", - "undefined": "道具礼包_6", - "time": -1, - "buys": 1, - "needVip": 0, - "front": {}, - "currency": "CNY" - }, - "daojulibao_2": { - "id": "daojulibao_2", "money": 30, "payExp": [ { @@ -3961,28 +4557,38 @@ } ], "prize": [ - { - "a": "item", - "t": "49", - "n": 100 - }, { "a": "attr", "t": "rmbmoney", - "n": 1260 + "n": 300 + }, + { + "a": "item", + "t": "23", + "n": 400000 + }, + { + "a": "item", + "t": "9", + "n": 1500 + }, + { + "a": "item", + "t": "10", + "n": 30 } ], "firstPayPrize": [], - "name": "pay_name_daojulibao_2", - "undefined": "道具礼包_30", + "name": "pay_name_daojulibao_1", + "undefined": "专属润滑剂不足_30", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" }, - "daojulibao_3": { - "id": "daojulibao_3", + "daojulibao_2": { + "id": "daojulibao_2", "money": 68, "payExp": [ { @@ -3993,21 +4599,441 @@ ], "prize": [ { - "a": "item", - "t": "49", - "n": 200 + "a": "attr", + "t": "rmbmoney", + "n": 680 }, + { + "a": "item", + "t": "23", + "n": 800000 + }, + { + "a": "item", + "t": "9", + "n": 4000 + }, + { + "a": "item", + "t": "10", + "n": 80 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_2", + "undefined": "专属润滑剂不足_68", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_3": { + "id": "daojulibao_3", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ { "a": "attr", "t": "rmbmoney", - "n": 2660 + "n": 1280 + }, + { + "a": "item", + "t": "23", + "n": 1500000 + }, + { + "a": "item", + "t": "9", + "n": 10000 + }, + { + "a": "item", + "t": "10", + "n": 100 } ], "firstPayPrize": [], "name": "pay_name_daojulibao_3", - "undefined": "道具礼包_68", + "undefined": "专属润滑剂不足_128", "time": -1, - "buys": 1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_4": { + "id": "daojulibao_4", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + }, + { + "a": "item", + "t": "28", + "n": 5000 + }, + { + "a": "item", + "t": "20", + "n": 200 + }, + { + "a": "item", + "t": "606", + "n": 2 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_4", + "undefined": "配件零件不足_30", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_5": { + "id": "daojulibao_5", + "money": 68, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 680 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 680 + }, + { + "a": "item", + "t": "28", + "n": 10000 + }, + { + "a": "item", + "t": "20", + "n": 500 + }, + { + "a": "item", + "t": "605", + "n": 2 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_5", + "undefined": "配件零件不足_68", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_6": { + "id": "daojulibao_6", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1280 + }, + { + "a": "item", + "t": "28", + "n": 20000 + }, + { + "a": "item", + "t": "20", + "n": 1000 + }, + { + "a": "item", + "t": "605", + "n": 4 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_6", + "undefined": "配件零件不足_128", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_7": { + "id": "daojulibao_7", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + }, + { + "a": "item", + "t": "627", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 200 + }, + { + "a": "attr", + "t": "jinbi", + "n": 1000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_7", + "undefined": "装备蓝图不足_30", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_8": { + "id": "daojulibao_8", + "money": 68, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 680 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 680 + }, + { + "a": "item", + "t": "627", + "n": 2 + }, + { + "a": "item", + "t": "18", + "n": 500 + }, + { + "a": "attr", + "t": "jinbi", + "n": 5000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_8", + "undefined": "装备蓝图不足_68", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_9": { + "id": "daojulibao_9", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1280 + }, + { + "a": "item", + "t": "625", + "n": 1 + }, + { + "a": "item", + "t": "18", + "n": 1100 + }, + { + "a": "attr", + "t": "jinbi", + "n": 10000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_9", + "undefined": "装备蓝图不足_128", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_10": { + "id": "daojulibao_10", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 300 + }, + { + "a": "item", + "t": "627", + "n": 1 + }, + { + "a": "item", + "t": "19", + "n": 80 + }, + { + "a": "attr", + "t": "jinbi", + "n": 5000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_10", + "undefined": "调校合金不足_30", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_11": { + "id": "daojulibao_11", + "money": 68, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 680 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 680 + }, + { + "a": "item", + "t": "627", + "n": 2 + }, + { + "a": "item", + "t": "19", + "n": 200 + }, + { + "a": "attr", + "t": "jinbi", + "n": 10000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_11", + "undefined": "调校合金不足_68", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "daojulibao_12": { + "id": "daojulibao_12", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1280 + }, + { + "a": "item", + "t": "625", + "n": 1 + }, + { + "a": "item", + "t": "19", + "n": 500 + }, + { + "a": "attr", + "t": "jinbi", + "n": 20000000 + } + ], + "firstPayPrize": [], + "name": "pay_name_daojulibao_12", + "undefined": "调校合金不足_128", + "time": -1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4038,7 +5064,7 @@ "name": "pay_name_zhanbailibao_1", "undefined": "战败礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4069,7 +5095,7 @@ "name": "pay_name_zhanbailibao_2", "undefined": "战败礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4100,7 +5126,7 @@ "name": "pay_name_zhanbailibao_3", "undefined": "战败礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4131,7 +5157,7 @@ "name": "pay_name_choukalibao_1", "undefined": "抽卡礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4162,7 +5188,7 @@ "name": "pay_name_choukalibao_2", "undefined": "抽卡礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4193,7 +5219,7 @@ "name": "pay_name_choukalibao_3", "undefined": "抽卡礼包_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4213,7 +5239,7 @@ "name": "pay_name_shouchong_1", "undefined": "首充礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4233,7 +5259,7 @@ "name": "pay_name_shouchong_2", "undefined": "首充礼包_30", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4253,7 +5279,7 @@ "name": "pay_name_shouchong_3", "undefined": "首充礼包_98", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4289,7 +5315,7 @@ "name": "pay_name_jitianlibao_1", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4325,7 +5351,7 @@ "name": "pay_name_jitianlibao_2", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4361,7 +5387,7 @@ "name": "pay_name_jitianlibao_3", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4397,7 +5423,7 @@ "name": "pay_name_jitianlibao_4", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4433,7 +5459,7 @@ "name": "pay_name_jitianlibao_5", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4469,7 +5495,7 @@ "name": "pay_name_jitianlibao_6", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4505,7 +5531,7 @@ "name": "pay_name_jitianlibao_7", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4541,7 +5567,7 @@ "name": "pay_name_jitianlibao_8", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4577,7 +5603,7 @@ "name": "pay_name_jitianlibao_9", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4613,7 +5639,7 @@ "name": "pay_name_jitianlibao_10", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4649,7 +5675,7 @@ "name": "pay_name_jitianlibao_11", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4685,7 +5711,7 @@ "name": "pay_name_jitianlibao_12", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4721,7 +5747,7 @@ "name": "pay_name_jitianlibao_13", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4757,7 +5783,7 @@ "name": "pay_name_jitianlibao_14", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4793,7 +5819,7 @@ "name": "pay_name_jitianlibao_15", "undefined": "积天礼包_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4813,7 +5839,7 @@ "name": "pay_name_czlb_1", "undefined": "超值好礼_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4833,7 +5859,7 @@ "name": "pay_name_czlb_2", "undefined": "超值好礼_30", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4853,7 +5879,7 @@ "name": "pay_name_czlb_3", "undefined": "超值好礼_68", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4873,7 +5899,7 @@ "name": "pay_name_sdhd_zhanling_1", "undefined": "圣诞战令_1", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4893,7 +5919,7 @@ "name": "pay_name_sdhd_zhanling_1", "undefined": "圣诞战令_2", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4913,7 +5939,7 @@ "name": "pay_name_sdhd_zhanling_1", "undefined": "圣诞战令_3", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4925,7 +5951,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 5 } ], "prize": [], @@ -4933,7 +5959,7 @@ "name": "pay_name_sdhd_libao_1", "undefined": "圣诞自选_1", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4945,7 +5971,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 60 } ], "prize": [], @@ -4953,7 +5979,7 @@ "name": "pay_name_sdhd_libao_2", "undefined": "圣诞自选_2", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4965,7 +5991,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 300 } ], "prize": [], @@ -4973,7 +5999,7 @@ "name": "pay_name_sdhd_libao_3", "undefined": "圣诞自选_3", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -4985,7 +6011,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 680 } ], "prize": [], @@ -4993,7 +6019,7 @@ "name": "pay_name_sdhd_libao_4", "undefined": "圣诞自选_4", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -5013,7 +6039,7 @@ "name": "pay_name_sdhd_libao_5", "undefined": "圣诞自选_5", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -5025,7 +6051,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 3280 } ], "prize": [], @@ -5033,7 +6059,7 @@ "name": "pay_name_sdhd_libao_6", "undefined": "圣诞自选_6", "time": -1, - "buys": 1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" @@ -5045,7 +6071,7 @@ { "a": "attr", "t": "payExp", - "n": 1280 + "n": 6480 } ], "prize": [], @@ -5053,7 +6079,407 @@ "name": "pay_name_sdhd_libao_7", "undefined": "圣诞自选_7", "time": -1, - "buys": 1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_1": { + "id": "czlibao_libao_1", + "money": 0.5, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 5 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_1", + "undefined": "超值好礼_1", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_2": { + "id": "czlibao_libao_2", + "money": 1, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 10 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_2", + "undefined": "超值好礼_2", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_3": { + "id": "czlibao_libao_3", + "money": 6, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 60 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_3", + "undefined": "超值好礼_3", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_4": { + "id": "czlibao_libao_4", + "money": 18, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 180 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_4", + "undefined": "超值好礼_4", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_5": { + "id": "czlibao_libao_5", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_5", + "undefined": "超值好礼_5", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_6": { + "id": "czlibao_libao_6", + "money": 68, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 680 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_6", + "undefined": "超值好礼_6", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_7": { + "id": "czlibao_libao_7", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_7", + "undefined": "超值好礼_7", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_8": { + "id": "czlibao_libao_8", + "money": 198, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1980 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_8", + "undefined": "超值好礼_8", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_9": { + "id": "czlibao_libao_9", + "money": 328, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 3280 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_9", + "undefined": "超值好礼_9", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "czlibao_libao_10": { + "id": "czlibao_libao_10", + "money": 648, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 6480 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_czlibao_libao_10", + "undefined": "超值好礼_10", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_1": { + "id": "ljlibao_1", + "money": 0.5, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 5 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_1", + "undefined": "累日礼包_1", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_2": { + "id": "ljlibao_2", + "money": 1, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 10 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_2", + "undefined": "累日礼包_2", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_3": { + "id": "ljlibao_3", + "money": 6, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 60 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_3", + "undefined": "累日礼包_3", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_4": { + "id": "ljlibao_4", + "money": 18, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 180 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_4", + "undefined": "累日礼包_4", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_5": { + "id": "ljlibao_5", + "money": 30, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 300 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_5", + "undefined": "累日礼包_5", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_6": { + "id": "ljlibao_6", + "money": 68, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 680 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_6", + "undefined": "累日礼包_6", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_7": { + "id": "ljlibao_7", + "money": 128, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1280 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_7", + "undefined": "累日礼包_7", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_8": { + "id": "ljlibao_8", + "money": 198, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 1980 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_8", + "undefined": "累日礼包_8", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_9": { + "id": "ljlibao_9", + "money": 328, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 3280 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_9", + "undefined": "累日礼包_9", + "time": -1, + "buys": 0, + "needVip": 0, + "front": {}, + "currency": "CNY" + }, + "ljlibao_10": { + "id": "ljlibao_10", + "money": 648, + "payExp": [ + { + "a": "attr", + "t": "payExp", + "n": 6480 + } + ], + "prize": [], + "firstPayPrize": [], + "name": "pay_name_ljlibao_10", + "undefined": "累日礼包_10", + "time": -1, + "buys": 0, "needVip": 0, "front": {}, "currency": "CNY" diff --git a/src/json/playerHead.json b/src/json/playerHead.json index 04f1367..37bf3c9 100644 --- a/src/json/playerHead.json +++ b/src/json/playerHead.json @@ -29,6 +29,36 @@ "colour": 1, "ani": "" }, + "3": { + "id": 3, + "name": "intr_playerinfo_name_3", + "undefined": "获得圣诞活动皮肤【圣诞庆典:男】后解锁", + "img": 100011, + "cond": [ + "model", + 3 + ], + "intr": "intr_playerinfo_intr_3", + "sort": 3, + "buff": {}, + "colour": 1, + "ani": "" + }, + "4": { + "id": 4, + "name": "intr_playerinfo_name_4", + "undefined": "获得圣诞活动皮肤【圣诞庆典:女】后解锁", + "img": 100021, + "cond": [ + "model", + 4 + ], + "intr": "intr_playerinfo_intr_4", + "sort": 4, + "buff": {}, + "colour": 1, + "ani": "" + }, "1001": { "id": 1001, "name": "intr_playerinfo_name_1001", @@ -39,7 +69,7 @@ 1001 ], "intr": "intr_playerinfo_intr_1001", - "sort": 40, + "sort": 42, "buff": {}, "colour": 1, "ani": "" @@ -54,7 +84,7 @@ 1002 ], "intr": "intr_playerinfo_intr_1002", - "sort": 41, + "sort": 43, "buff": {}, "colour": 1, "ani": "" @@ -69,7 +99,7 @@ 2001 ], "intr": "intr_playerinfo_intr_2001", - "sort": 38, + "sort": 40, "buff": {}, "colour": 1, "ani": "" @@ -84,7 +114,7 @@ 2002 ], "intr": "intr_playerinfo_intr_2002", - "sort": 39, + "sort": 41, "buff": {}, "colour": 1, "ani": "" @@ -99,7 +129,7 @@ 3001 ], "intr": "intr_playerinfo_intr_3001", - "sort": 23, + "sort": 25, "buff": {}, "colour": 1, "ani": "" @@ -114,7 +144,7 @@ 3002 ], "intr": "intr_playerinfo_intr_3002", - "sort": 24, + "sort": 26, "buff": {}, "colour": 1, "ani": "" @@ -129,7 +159,7 @@ 3003 ], "intr": "intr_playerinfo_intr_3003", - "sort": 25, + "sort": 27, "buff": {}, "colour": 1, "ani": "" @@ -144,7 +174,7 @@ 3004 ], "intr": "intr_playerinfo_intr_3004", - "sort": 26, + "sort": 28, "buff": {}, "colour": 1, "ani": "" @@ -159,7 +189,7 @@ 3005 ], "intr": "intr_playerinfo_intr_3005", - "sort": 27, + "sort": 29, "buff": {}, "colour": 1, "ani": "" @@ -174,7 +204,7 @@ 3006 ], "intr": "intr_playerinfo_intr_3006", - "sort": 28, + "sort": 30, "buff": {}, "colour": 1, "ani": "" @@ -189,7 +219,7 @@ 3007 ], "intr": "intr_playerinfo_intr_3007", - "sort": 29, + "sort": 31, "buff": {}, "colour": 1, "ani": "" @@ -204,7 +234,7 @@ 3008 ], "intr": "intr_playerinfo_intr_3008", - "sort": 30, + "sort": 32, "buff": {}, "colour": 1, "ani": "" @@ -219,7 +249,7 @@ 3009 ], "intr": "intr_playerinfo_intr_3009", - "sort": 31, + "sort": 33, "buff": {}, "colour": 1, "ani": "" @@ -234,7 +264,7 @@ 3010 ], "intr": "intr_playerinfo_intr_3010", - "sort": 32, + "sort": 34, "buff": {}, "colour": 1, "ani": "" @@ -249,7 +279,7 @@ 3011 ], "intr": "intr_playerinfo_intr_3011", - "sort": 33, + "sort": 35, "buff": {}, "colour": 1, "ani": "" @@ -264,7 +294,7 @@ 3012 ], "intr": "intr_playerinfo_intr_3012", - "sort": 34, + "sort": 36, "buff": {}, "colour": 1, "ani": "" @@ -279,7 +309,7 @@ 3013 ], "intr": "intr_playerinfo_intr_3013", - "sort": 35, + "sort": 37, "buff": {}, "colour": 1, "ani": "" @@ -294,7 +324,7 @@ 3014 ], "intr": "intr_playerinfo_intr_3014", - "sort": 36, + "sort": 38, "buff": {}, "colour": 1, "ani": "" @@ -309,7 +339,7 @@ 3015 ], "intr": "intr_playerinfo_intr_3015", - "sort": 37, + "sort": 39, "buff": {}, "colour": 1, "ani": "" @@ -324,7 +354,7 @@ 4001 ], "intr": "intr_playerinfo_intr_4001", - "sort": 8, + "sort": 10, "buff": {}, "colour": 1, "ani": "" @@ -339,7 +369,7 @@ 4002 ], "intr": "intr_playerinfo_intr_4002", - "sort": 9, + "sort": 11, "buff": {}, "colour": 1, "ani": "" @@ -354,7 +384,7 @@ 4003 ], "intr": "intr_playerinfo_intr_4003", - "sort": 10, + "sort": 12, "buff": {}, "colour": 1, "ani": "" @@ -369,7 +399,7 @@ 4004 ], "intr": "intr_playerinfo_intr_4004", - "sort": 11, + "sort": 13, "buff": {}, "colour": 1, "ani": "" @@ -384,7 +414,7 @@ 4005 ], "intr": "intr_playerinfo_intr_4005", - "sort": 12, + "sort": 14, "buff": {}, "colour": 1, "ani": "" @@ -399,7 +429,7 @@ 4006 ], "intr": "intr_playerinfo_intr_4006", - "sort": 13, + "sort": 15, "buff": {}, "colour": 1, "ani": "" @@ -414,7 +444,7 @@ 4007 ], "intr": "intr_playerinfo_intr_4007", - "sort": 14, + "sort": 16, "buff": {}, "colour": 1, "ani": "" @@ -429,7 +459,7 @@ 4008 ], "intr": "intr_playerinfo_intr_4008", - "sort": 15, + "sort": 17, "buff": {}, "colour": 1, "ani": "" @@ -444,7 +474,7 @@ 4009 ], "intr": "intr_playerinfo_intr_4009", - "sort": 16, + "sort": 18, "buff": {}, "colour": 1, "ani": "" @@ -459,7 +489,7 @@ 4010 ], "intr": "intr_playerinfo_intr_4010", - "sort": 17, + "sort": 19, "buff": {}, "colour": 1, "ani": "" @@ -474,7 +504,7 @@ 4011 ], "intr": "intr_playerinfo_intr_4011", - "sort": 18, + "sort": 20, "buff": {}, "colour": 1, "ani": "" @@ -489,7 +519,7 @@ 4012 ], "intr": "intr_playerinfo_intr_4012", - "sort": 19, + "sort": 21, "buff": {}, "colour": 1, "ani": "" @@ -504,7 +534,7 @@ 4013 ], "intr": "intr_playerinfo_intr_4013", - "sort": 20, + "sort": 22, "buff": {}, "colour": 1, "ani": "" @@ -519,7 +549,7 @@ 4014 ], "intr": "intr_playerinfo_intr_4014", - "sort": 21, + "sort": 23, "buff": {}, "colour": 1, "ani": "" @@ -534,7 +564,7 @@ 4015 ], "intr": "intr_playerinfo_intr_4015", - "sort": 22, + "sort": 24, "buff": {}, "colour": 1, "ani": "" @@ -549,7 +579,7 @@ 5001 ], "intr": "intr_playerinfo_intr_5001", - "sort": 3, + "sort": 5, "buff": {}, "colour": 1, "ani": "" @@ -564,7 +594,7 @@ 5002 ], "intr": "intr_playerinfo_intr_5002", - "sort": 4, + "sort": 6, "buff": {}, "colour": 1, "ani": "" @@ -579,7 +609,7 @@ 5003 ], "intr": "intr_playerinfo_intr_5003", - "sort": 5, + "sort": 7, "buff": {}, "colour": 1, "ani": "" @@ -594,7 +624,7 @@ 5004 ], "intr": "intr_playerinfo_intr_5004", - "sort": 6, + "sort": 8, "buff": {}, "colour": 1, "ani": "" @@ -609,7 +639,7 @@ 5005 ], "intr": "intr_playerinfo_intr_5005", - "sort": 7, + "sort": 9, "buff": {}, "colour": 1, "ani": "" diff --git a/src/json/playerHeadFrame.json b/src/json/playerHeadFrame.json index 485c541..a52191d 100644 --- a/src/json/playerHeadFrame.json +++ b/src/json/playerHeadFrame.json @@ -391,5 +391,22 @@ }, "colour": 4, "ani": "" + }, + "24": { + "id": 24, + "name": "playerheadFrame_name_24", + "undefined": "消费竞赛活动前三名获得,解锁后伤害加成+1%(限时7天)", + "img": "txk_025", + "cond": [ + "time", + 604800 + ], + "intr": "playerheadFrame_des_24", + "sort": 24, + "buff": { + "dpspro": 0.01 + }, + "colour": 5, + "ani": "" } } \ No newline at end of file diff --git a/src/json/playerModel.json b/src/json/playerModel.json index dcf972b..634d211 100644 --- a/src/json/playerModel.json +++ b/src/json/playerModel.json @@ -1,76 +1,74 @@ { "1": { - "1": { - "type": 1, - "id": 1, - "name": "playerModel_name_1", - "head": 10001, - "img": "zhu_10001", - "cond": [ - "lv", - 1 - ], - "intr": "playerModel_des_1", - "sort": 1, - "buff": {}, - "colour": 1, - "mwSpine": "ani_mingwangnan", - "fireHead": "img_lih2" + "id": 1, + "type": 1, + "name": "playerModel_name_1", + "head": 10001, + "img": "zhu_10001", + "cond": [ + "lv", + 1 + ], + "intr": "playerModel_des_1", + "sort": 1, + "buff": {}, + "colour": 1, + "mwSpine": "ani_mingwangnan", + "fireHead": "img_lih2" + }, + "2": { + "id": 2, + "type": 1, + "name": "playerModel_name_2", + "head": 10002, + "img": "zhu_10002", + "cond": [ + "lv", + 1 + ], + "intr": "playerModel_des_2", + "sort": 2, + "buff": {}, + "colour": 1, + "mwSpine": "ani_mingwangnv", + "fireHead": "img_lih1" + }, + "3": { + "id": 3, + "type": 1, + "name": "playerModel_name_3", + "head": 100011, + "img": 100011, + "cond": [ + "time", + -1 + ], + "intr": "playerModel_des_3", + "sort": 3, + "buff": { + "defpro": 0.02 }, - "2": { - "type": 1, - "id": 2, - "name": "playerModel_name_2", - "head": 10002, - "img": "zhu_10002", - "cond": [ - "lv", - 1 - ], - "intr": "playerModel_des_2", - "sort": 2, - "buff": {}, - "colour": 1, - "mwSpine": "ani_mingwangnv", - "fireHead": "img_lih1" + "colour": 5, + "mwSpine": "ani_mingwangnan", + "fireHead": "img_lih21" + }, + "4": { + "id": 4, + "type": 1, + "name": "playerModel_name_4", + "head": 100021, + "img": 100021, + "cond": [ + "time", + -1 + ], + "intr": "playerModel_des_4", + "sort": 4, + "buff": { + "atkpro": 0.02 }, - "3": { - "type": 1, - "id": 3, - "name": "playerModel_name_3", - "head": 100011, - "img": 100011, - "cond": [ - "time", - -1 - ], - "intr": "playerModel_des_3", - "sort": 3, - "buff": { - "defpro": 0.02 - }, - "colour": 5, - "mwSpine": "ani_mingwangnan", - "fireHead": "img_lih21" - }, - "4": { - "type": 1, - "id": 4, - "name": "playerModel_name_4", - "head": 100021, - "img": 100021, - "cond": [ - "time", - -1 - ], - "intr": "playerModel_des_4", - "sort": 4, - "buff": { - "atkpro": 0.02 - }, - "colour": 5, - "mwSpine": "ani_mingwangnv", - "fireHead": "img_lih11" - } + "colour": 5, + "mwSpine": "ani_mingwangnv", + "fireHead": "img_lih11" } } \ No newline at end of file diff --git a/src/json/shop.json b/src/json/shop.json index d13cfdf..9893e4e 100644 --- a/src/json/shop.json +++ b/src/json/shop.json @@ -499,8 +499,8 @@ "13": { "id": 13, "type": 12, - "name": "wsw_wz_dhsd", - "undefined": "兑换商店", + "name": "wsw_wz_mrjxdh", + "undefined": "每日精选兑换商店", "openCond": [ "lv", 15 @@ -511,7 +511,7 @@ "freeRefreshInterval": 0, "freeRefreshNum": 0, "shopItems": [ - 4001 + 10001 ], "showItem": [ { diff --git a/src/json/shopItem.json b/src/json/shopItem.json index ec6950d..46da62c 100644 --- a/src/json/shopItem.json +++ b/src/json/shopItem.json @@ -3918,31 +3918,6 @@ 9999 ], "vipAddbuyNum": [] - }, - { - "id": 4001, - "a": "item", - "t": 4, - "n": 10, - "p": 1, - "colour": 4, - "buyNum": -1, - "openDay": 1, - "buyNeed": [ - { - "a": "item", - "t": "15", - "n": 2800 - } - ], - "sale": 10, - "needVip": 0, - "needZCCG": 0, - "lv": [ - 1, - 9999 - ], - "vipAddbuyNum": [] } ], "4002": [ @@ -6294,6 +6269,33 @@ "vipAddbuyNum": [] } ], + "10001": [ + { + "id": 10001, + "a": "item", + "t": 4, + "n": 10, + "p": 1, + "colour": 4, + "buyNum": -1, + "openDay": 1, + "buyNeed": [ + { + "a": "item", + "t": "15", + "n": 2800 + } + ], + "sale": 10, + "needVip": 0, + "needZCCG": 0, + "lv": [ + 1, + 9999 + ], + "vipAddbuyNum": [] + } + ], "120001": [ { "id": 120001, diff --git a/src/json/shopcom.json b/src/json/shopcom.json index b8b86ba..b5157f4 100644 --- a/src/json/shopcom.json +++ b/src/json/shopcom.json @@ -198,5 +198,22 @@ "npcImg": "img_sd_3015", "npcText": "intr_shopCom_text_10", "helpText": "intr_shopCom_helpText_10" + }, + "11": { + "id": 11, + "shopId": 13, + "shopType": 12, + "title": "wsw_wz_dhsd", + "undefined": "兑换商店", + "openCond": "shop_13", + "des": "intr_shop_des_13", + "img": "wsw_wz_dhsd", + "cost": [ + { + "a": "attr", + "t": "rmbmoney", + "n": 1 + } + ] } } \ No newline at end of file diff --git a/src/json/tuisonglibao.json b/src/json/tuisonglibao.json index 737dbc1..e46aeef 100644 --- a/src/json/tuisonglibao.json +++ b/src/json/tuisonglibao.json @@ -2,8 +2,39 @@ "1": { "id": 1, "type": 1, + "typeName": "tuisonglibao_name_2", "num": [ - 5 + 100 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "2": { + "id": 2, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 140 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "3": { + "id": 3, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 180 ], "payId": [ "guanqialibao_1", @@ -11,78 +42,257 @@ "guanqialibao_3" ], "time": 3600, - "displayCD": 7200, - "scale": 500 - }, - "2": { - "id": 2, - "type": 1, - "num": [ - 10 - ], - "payId": [ - "guanqialibao_1", - "guanqialibao_2" - ], - "time": 3600, - "displayCD": 7200, - "scale": 501 - }, - "3": { - "id": 3, - "type": 1, - "num": [ - 20 - ], - "payId": [ - "guanqialibao_1", - "guanqialibao_3" - ], - "time": 3600, - "displayCD": 7200, - "scale": 502 + "displayCD": 3600, + "scale": 3000 }, "4": { "id": 4, - "type": 2, + "type": 1, + "typeName": "tuisonglibao_name_2", "num": [ - { - "a": "item", - "t": "1" - } + 240 ], "payId": [ - "daojulibao_1", - "daojulibao_2" + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" ], "time": 3600, - "displayCD": 7200, - "scale": 503 + "displayCD": 3600, + "scale": 3000 }, "5": { "id": 5, - "type": 2, + "type": 1, + "typeName": "tuisonglibao_name_2", "num": [ - { - "a": "item", - "t": "2" - } + 300 ], "payId": [ - "daojulibao_1", - "daojulibao_3" + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" ], "time": 3600, - "displayCD": 7200, - "scale": 504 + "displayCD": 3600, + "scale": 3000 }, "6": { "id": 6, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 360 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "7": { + "id": 7, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 400 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "8": { + "id": 8, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 460 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "9": { + "id": 9, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 490 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "10": { + "id": 10, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 520 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "11": { + "id": 11, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 550 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_3" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "12": { + "id": 12, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 580 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "13": { + "id": 13, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 610 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "14": { + "id": 14, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 640 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "15": { + "id": 15, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 670 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "16": { + "id": 16, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 700 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "17": { + "id": 17, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 730 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "18": { + "id": 18, + "type": 1, + "typeName": "tuisonglibao_name_2", + "num": [ + 760 + ], + "payId": [ + "guanqialibao_1", + "guanqialibao_2", + "guanqialibao_4" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "101": { + "id": 101, "type": 2, + "typeName": "tuisonglibao_name_3", "num": [ { - "a": "attr", - "t": "jinbi" + "a": "item", + "t": "9" } ], "payId": [ @@ -91,167 +301,227 @@ "daojulibao_3" ], "time": 3600, - "displayCD": 7200, - "scale": 505 + "displayCD": 86400, + "scale": 3000 }, - "7": { - "id": 7, - "type": 3, + "102": { + "id": 102, + "type": 2, + "typeName": "tuisonglibao_name_3", "num": [ - 1 + { + "a": "item", + "t": "28" + } ], "payId": [ - "zhanbailibao_1", - "zhanbailibao_2", - "zhanbailibao_3" + "daojulibao_4", + "daojulibao_5", + "daojulibao_6" ], "time": 3600, - "displayCD": 7200, - "scale": 506 + "displayCD": 86400, + "scale": 3000 }, - "8": { - "id": 8, - "type": 4, + "103": { + "id": 103, + "type": 2, + "typeName": "tuisonglibao_name_3", "num": [ - 3 + { + "a": "item", + "t": "18" + } ], "payId": [ - "choukalibao_1", - "choukalibao_2", - "choukalibao_3" + "daojulibao_7", + "daojulibao_8", + "daojulibao_9" ], "time": 3600, - "displayCD": 7200, - "scale": 507 + "displayCD": 86400, + "scale": 3000 }, - "9": { - "id": 9, + "104": { + "id": 104, + "type": 2, + "typeName": "tuisonglibao_name_3", + "num": [ + { + "a": "item", + "t": "19" + } + ], + "payId": [ + "daojulibao_10", + "daojulibao_11", + "daojulibao_12" + ], + "time": 3600, + "displayCD": 86400, + "scale": 3000 + }, + "401": { + "id": 401, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ - 31 + 15 ], "payId": [ - "lv30" + "lv15" ], "time": 3600, "displayCD": 3600, - "scale": 3300 + "scale": 3000 }, - "10": { - "id": 10, + "402": { + "id": 402, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ - 45 + 25 ], "payId": [ - "lv40" + "lv25" ], "time": 3600, "displayCD": 3600, - "scale": 3300 + "scale": 3000 }, - "11": { - "id": 11, + "403": { + "id": 403, "type": 5, + "typeName": "tuisonglibao_name_1", + "num": [ + 40 + ], + "payId": [ + "lv40", + "lv40_1" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 + }, + "404": { + "id": 404, + "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ 50 ], "payId": [ - "lv55" + "lv50_1", + "lv50_2" ], "time": 3600, "displayCD": 3600, - "scale": 2000 + "scale": 3000 }, - "12": { - "id": 12, + "405": { + "id": 405, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ - 53 + 55 ], "payId": [ - "lv58" + "lv55", + "lv55_1" ], "time": 3600, "displayCD": 3600, - "scale": 2000 + "scale": 3000 }, - "13": { - "id": 13, - "type": 5, - "num": [ - 56 - ], - "payId": [ - "lv60" - ], - "time": 3600, - "displayCD": 3600, - "scale": 2000 - }, - "14": { - "id": 14, + "406": { + "id": 406, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ 60 ], "payId": [ - "lv63" + "lv60", + "lv60_1" ], "time": 3600, "displayCD": 3600, - "scale": 2000 + "scale": 3000 }, - "15": { - "id": 15, + "407": { + "id": 407, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ 63 ], "payId": [ - "lv66" + "lv63", + "lv63_1" ], "time": 3600, "displayCD": 3600, - "scale": 2000 + "scale": 3000 }, - "16": { - "id": 16, + "408": { + "id": 408, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ 66 ], "payId": [ - "lv69" + "lv66", + "lv66_1" ], "time": 3600, "displayCD": 3600, - "scale": 1800 + "scale": 3000 }, - "17": { - "id": 17, + "409": { + "id": 409, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ - 68 + 69 ], "payId": [ - "lv72" + "lv69", + "lv69_1" ], "time": 3600, "displayCD": 3600, - "scale": 1800 + "scale": 3000 }, - "18": { - "id": 18, + "410": { + "id": 410, "type": 5, + "typeName": "tuisonglibao_name_1", "num": [ - 70 + 73 ], "payId": [ - "lv75" + "lv73_1", + "lv73_2" ], "time": 3600, "displayCD": 3600, - "scale": 1800 + "scale": 3000 + }, + "411": { + "id": 411, + "type": 5, + "typeName": "tuisonglibao_name_1", + "num": [ + 82 + ], + "payId": [ + "lv82_1", + "lv82_2" + ], + "time": 3600, + "displayCD": 3600, + "scale": 3000 } } \ No newline at end of file diff --git a/src/jsonType.ts b/src/jsonType.ts index 43654a4..e822019 100644 --- a/src/jsonType.ts +++ b/src/jsonType.ts @@ -1032,7 +1032,7 @@ type gc_playerLv = k_v<{ 'tujianlv': number }>; -type gc_playerModel = k_v>; +}>; type gc_pmd = { "get_hero_star5_pmd": string, "glkb_pmd": string, "jinjie_peijian": string, "guild_pmd": string, "tlsd_pmd": string, "hbzb_pmd1": string, "hbzb_pmd2": string, "hbzb_pmd3": string, [x: string]: any } diff --git a/src/monopoly/protocols/games/Ptlheapdump.ts b/src/monopoly/protocols/games/Ptlheapdump.ts new file mode 100644 index 0000000..bd93a7f --- /dev/null +++ b/src/monopoly/protocols/games/Ptlheapdump.ts @@ -0,0 +1,18 @@ +import { StringTypeSchema } from "tsbuffer-schema"; + +/** + * 区服初始化 + */ +export type Reqheapdump = { + act:string, + data:any +}; + + +export type Resheapdump = { + /** + * 如果发送成功 将返回 + */ + code: number + data: any; +}; \ No newline at end of file diff --git a/src/monopoly/protocols/serviceProto.ts b/src/monopoly/protocols/serviceProto.ts index 782cc14..886f4d6 100644 --- a/src/monopoly/protocols/serviceProto.ts +++ b/src/monopoly/protocols/serviceProto.ts @@ -1,6 +1,7 @@ import { ServiceProto } from 'tsrpc-proto'; import { Reqsendemail, Ressendemail } from './email/Ptlsendemail'; import { Reqdeploy, Resdeploy } from './games/Ptldeploy'; +import { Reqheapdump, Resheapdump } from './games/Ptlheapdump'; import { Reqmetrics, Resmetrics } from './games/Ptlmetrics'; import { Reqnotification, Resnotification } from './games/Ptlnotification'; import { Reqopen, Resopen } from './games/Ptlopen'; @@ -31,6 +32,10 @@ export interface ServiceType { req: Reqdeploy, res: Resdeploy }, + "games/heapdump": { + req: Reqheapdump, + res: Resheapdump + }, "games/metrics": { req: Reqmetrics, res: Resmetrics @@ -127,96 +132,101 @@ export const serviceProto: ServiceProto = { }, { "id": 2, - "name": "games/metrics", + "name": "games/heapdump", "type": "api" }, { "id": 3, - "name": "games/notification", + "name": "games/metrics", "type": "api" }, { "id": 4, - "name": "games/open", + "name": "games/notification", "type": "api" }, { "id": 5, - "name": "games/ranking", + "name": "games/open", "type": "api" }, { "id": 6, - "name": "gift/popup", + "name": "games/ranking", "type": "api" }, { "id": 7, - "name": "gm/Pay", + "name": "gift/popup", "type": "api" }, { "id": 8, - "name": "gm/SendPrize", + "name": "gm/Pay", "type": "api" }, { "id": 9, - "name": "hdinfo/details", + "name": "gm/SendPrize", "type": "api" }, { "id": 10, - "name": "AddHuoDong", + "name": "hdinfo/details", "type": "api" }, { "id": 11, - "name": "CatAllhd", + "name": "AddHuoDong", "type": "api" }, { "id": 12, - "name": "DelHuoDong", + "name": "CatAllhd", "type": "api" }, { "id": 13, - "name": "Email", + "name": "DelHuoDong", "type": "api" }, { "id": 14, - "name": "GetLog", + "name": "Email", "type": "api" }, { "id": 15, - "name": "healthz", + "name": "GetLog", "type": "api" }, { "id": 16, - "name": "union/rename", + "name": "healthz", "type": "api" }, { "id": 17, - "name": "user/data", + "name": "union/rename", "type": "api" }, { "id": 18, - "name": "user/disable", + "name": "user/data", "type": "api" }, { "id": 19, - "name": "user/getdata", + "name": "user/disable", "type": "api" }, { "id": 20, + "name": "user/getdata", + "type": "api" + }, + { + "id": 21, "name": "user/rename", "type": "api" } @@ -367,6 +377,44 @@ export const serviceProto: ServiceProto = { } ] }, + "games/Ptlheapdump/Reqheapdump": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "act", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "data", + "type": { + "type": "Any" + } + } + ] + }, + "games/Ptlheapdump/Resheapdump": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "code", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "data", + "type": { + "type": "Any" + } + } + ] + }, "games/Ptlmetrics/Reqmetrics": { "type": "Interface" }, @@ -2145,6 +2193,29 @@ export const serviceProto: ServiceProto = { }, { "id": 5, + "name": "upModel", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 6, "name": "model", "type": { "type": "Interface", @@ -2173,14 +2244,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 6, + "id": 7, "name": "renown", "type": { "type": "Number" } }, { - "id": 7, + "id": 8, "name": "wxcLv", "type": { "type": "Interface", @@ -2206,14 +2277,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 8, + "id": 9, "name": "mapId", "type": { "type": "Number" } }, { - "id": 9, + "id": 10, "name": "shoucangping", "type": { "type": "Interface", @@ -2226,14 +2297,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 10, + "id": 11, "name": "useTujianLvPoint", "type": { "type": "Number" } }, { - "id": 11, + "id": 12, "name": "skills", "type": { "type": "Interface", @@ -2246,7 +2317,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 12, + "id": 13, "name": "fightSkills", "type": { "type": "Interface", @@ -2259,7 +2330,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 13, + "id": 14, "name": "heroPos", "type": { "type": "Interface", @@ -2272,21 +2343,21 @@ export const serviceProto: ServiceProto = { } }, { - "id": 14, + "id": 15, "name": "ghId", "type": { "type": "String" } }, { - "id": 15, + "id": 16, "name": "ghName", "type": { "type": "String" } }, { - "id": 16, + "id": 17, "name": "ghLevel", "type": { "type": "Reference", @@ -2294,7 +2365,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 17, + "id": 18, "name": "ghwz", "type": { "type": "Interface", @@ -2308,7 +2379,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 18, + "id": 19, "name": "ghExitTime", "type": { "type": "Number" @@ -2316,7 +2387,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 19, + "id": 20, "name": "loginTime", "type": { "type": "Number" @@ -2324,7 +2395,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 20, + "id": 21, "name": "logoutTime", "type": { "type": "Number" @@ -2332,7 +2403,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 21, + "id": 22, "name": "cTime", "type": { "type": "Number" @@ -2340,7 +2411,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 22, + "id": 23, "name": "loginDays", "type": { "type": "Number" @@ -2348,7 +2419,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 23, + "id": 24, "name": "serverName", "type": { "type": "String" @@ -2356,7 +2427,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 24, + "id": 25, "name": "sid", "type": { "type": "Number" @@ -2364,7 +2435,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 25, + "id": 26, "name": "onlineTime", "type": { "type": "Number" @@ -2372,7 +2443,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 26, + "id": 27, "name": "newonlinetime", "type": { "type": "Number" @@ -2380,7 +2451,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 27, + "id": 28, "name": "isNpc", "type": { "type": "Boolean" @@ -2388,7 +2459,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 28, + "id": 29, "name": "matrix", "type": { "type": "Interface", @@ -2402,7 +2473,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 29, + "id": 30, "name": "matrixPos", "type": { "type": "Interface", @@ -2422,7 +2493,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 30, + "id": 31, "name": "selectMatrix", "type": { "type": "String" @@ -2430,7 +2501,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 31, + "id": 32, "name": "fightHeros", "type": { "type": "Array", @@ -2441,7 +2512,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 32, + "id": 33, "name": "helpHeros", "type": { "type": "Array", @@ -2518,7 +2589,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 33, + "id": 34, "name": "changeNameNum", "type": { "type": "Number" @@ -2526,7 +2597,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 34, + "id": 35, "name": "peijianUnlock", "type": { "type": "Interface", @@ -2540,7 +2611,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 35, + "id": 36, "name": "headFrames", "type": { "type": "Interface", @@ -2554,7 +2625,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 36, + "id": 37, "name": "chatFrames", "type": { "type": "Interface", diff --git a/src/patch_player_model_20231221.ts b/src/patch_player_model_20231221.ts new file mode 100644 index 0000000..53c60ea --- /dev/null +++ b/src/patch_player_model_20231221.ts @@ -0,0 +1,35 @@ +import {ctor} from "./global"; +import {initMongoDB} from "./setMongodb"; + +async function start() { + await initMongoDB() + + // 刷新活动配置 + console.log(`修复玩家model数据开始...`); + + + await G.mongodb.collection("user").updateMany({},{ + $set:{ + upModel:{id: "1", time: -1}, + model: { + '1': {id: "1", time: -1}, + '2': {id: "2", time: -1} + } + } + }) + + console.log(`修复玩家model数据完成...`); +} + +ctor(); +start().then(() => { + let s = 0; + setInterval(() => { + s += 1; + console.log(new Date().format("MM-dd hh:mm:ss")); + if (s >= 3) process.exit(1); + }, 1000) + console.log("逻辑执行完成...等待退出!!!"); +}); + + diff --git a/src/path_20231221.ts b/src/path_20231221.ts new file mode 100644 index 0000000..11098b7 --- /dev/null +++ b/src/path_20231221.ts @@ -0,0 +1,121 @@ +import {ctor} from "./global"; +import {initMongoDB} from "./setMongodb"; +import {yangchengmubiao} from "./shared/protocols/event/yangchengmubiao/PtlOpen"; + +async function start() { + await initMongoDB() + + const hdid = [100, 101]; + const task = { + '2001': { + 'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 50, + 'cond': [], + 'stype': 118 + }, + '2002': { + 'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 100, + 'cond': [], + 'stype': 118 + }, + '2003': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '626', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 200, + 'cond': [], + 'stype': 118 + }, + '2004': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 250, + 'cond': [], + 'stype': 118 + }, + '2005': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 300, + 'cond': [], + 'stype': 118 + }, + '2006': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 400, + 'cond': [], + 'stype': 118 + }, + '2007': { + 'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}], + 'tujing': '', + 'title': 'intr_yczm_day_des_2', + 'type': 2, + 'pval': 500, + 'cond': [], + 'stype': 118 + } + }; + // 中间插入了2004 所以之前的任务id一次往后顺延 + const change = {2004: 2005, 2005: 2006, 2006: 2007}; + // 刷新活动配置 + await G.mongodb.collection("hdinfo").updateMany({hdid: {$in: hdid}}, { + "$set": {'data.tasklist.2': task} + }) + + let datas: yangchengmubiao[] = []; + // 刷新玩家领取记录 + datas = datas.concat(await G.mongodb.cEvent(`yangchengmubiao${hdid[0]}`).find( + {type: `yangchengmubiao${hdid[0]}`} + ).toArray()); + + datas = datas.concat(await G.mongodb.cEvent(`yangchengmubiao${hdid[1]}`).find( + {type: `yangchengmubiao${hdid[1]}`} + ).toArray()); + + for (let i = 0; i < datas.length; i++) { + let data = datas[i]; + let finished = data.finishid["2"].map((task) => { + return change[task] ? change[task] : task + }); + let maxtaskval = Math.max(...Object.values(data.taskval)); + + let taskval = {}; + for (let taskid in task) { + taskval[taskid] = maxtaskval; + } + + await G.mongodb.collection("event").updateOne( + {uid: data.uid, type: data.type}, {$set: {taskval: taskval, "finishid.2": finished}} + ) + console.log(`修复玩家${data.uid}人才计划数据完成...`); + } +} + +ctor(); +start().then(() => { + let s = 0; + setInterval(() => { + s += 1; + console.log(new Date().format("MM-dd hh:mm:ss")); + if (s >= 3) process.exit(1); + }, 1000) + console.log("逻辑执行完成...等待退出!!!"); +}); + + diff --git a/src/public/huodongfun.ts b/src/public/huodongfun.ts index 99ed2a1..44d16cc 100644 --- a/src/public/huodongfun.ts +++ b/src/public/huodongfun.ts @@ -54,7 +54,6 @@ export class HuoDongFun { if (htype != 0) _where["htype"] = htype let _res = await this.catAllHD(_where) - let result = [] for (let index = 0; index < _res.length; index++) { const element = _res[index]; diff --git a/src/public/pay.ts b/src/public/pay.ts index 43a0e58..b1302b5 100644 --- a/src/public/pay.ts +++ b/src/public/pay.ts @@ -10,6 +10,7 @@ import {call, PlayerFun} from './player'; import {number} from "mathjs"; import {getGud} from './gud'; import {getConf as zmlbGetConf} from '../api_s2c/event/zhoumolibao/ApiOpen'; +import {Christmasfun} from "../api_s2c/event/christmas/fun"; async function checkPayIsActive(payId: string, logs: payLog[], payArgs) { let conf: any = await this.getConf(payId, payArgs); @@ -177,6 +178,7 @@ export class PayFun { if (payed) { console.log(uid, payId, payArgs, orderNo); console.log('订单号已存在'); + return; } } @@ -230,16 +232,21 @@ export class PayFun { let conf = await zmlbGetConf(call, {payId}) prize.push(...conf.prize) } + //圣诞节活动充值 + try{ + await Christmasfun.payChristmas(payId, call); + }catch (e) { + console.log("Christmasfun.payChristmas Error",e); + } let isReplaceConf = await this.checkBuysAfterPay(uid, payId, conf, payArgs, player) if (isReplaceConf) { let prizePayId = `zuanshi_${conf.money}` payArgs.toPrizePayId = prizePayId conf = this.replacePrizeToChongzhi(prizePayId, conf) - prize = [...conf.prize] + prize = conf.prize; } - await PlayerFun.sendPrize(call, prize); await PlayerFun.addAttr(call, conf.payExp); if (payId == 'G123SendGift') { @@ -285,7 +292,7 @@ export class PayFun { * @param payId * @param conf */ - static async replacePrizeToChongzhi(payId, conf) { + static replacePrizeToChongzhi(payId, conf) { return { id: payId, money: conf.money, diff --git a/src/public/player.ts b/src/public/player.ts index d8322dd..df3e641 100644 --- a/src/public/player.ts +++ b/src/public/player.ts @@ -169,6 +169,15 @@ export class PlayerFun { change[atn.t] = this.fixAttrLteZero(atn.t, await this.getAtnNum(call, atn) + atn.n); if (atn.t == 'rmbmoney') { this.changeAttrLog(call.conn.uid, change[atn.t], atn, call.conn.gud.rmbmoney) + // 扣除钻石时 + if (atn.n < 0) { + // 监听任务消耗任务 + G.emit("Class_task_156", 'Class_task_156', call, -atn.n, 0); + } + } + // 增加vip经验的任务监听 + if (atn.t == "payExp" && atn.n > 0) { + G.emit("Class_task_157", 'Class_task_157', call, atn.n, 0); } all.push(this.changeAttr(call.conn.uid, change)); all.push(this.upAttr(call, {...atn, n: change[atn.t]})); diff --git a/src/public/scheduler/scheduler_cross_email_pull.ts b/src/public/scheduler/scheduler_cross_email_pull.ts index 71c26da..ceee41e 100644 --- a/src/public/scheduler/scheduler_cross_email_pull.ts +++ b/src/public/scheduler/scheduler_cross_email_pull.ts @@ -22,12 +22,15 @@ export class CrossEmailPull extends Scheduler { G.clientCross.callApi("email/GetCrossEmail", {server_id: G.config.serverId + ""}).then((res) => { if (!res.isSucc) return; res.res.emails.forEach(async (email) => { + let _prize = R.clone(email?.prizeData?.prize) || []; + if (email?.prizeData) delete email.prizeData; + + email["prize"] = _prize; if (email.uid != "system") { await EmailFun.addEmail(email) } else { await EmailFun.addQuanFuEmail(email) } - await EmailFun.addEmail(email) }) if (res.res.emails.length > 0) { G.clientCross.callApi("email/DelCrossEmail", {eids: res.res.emails.map(e => e._id)}) diff --git a/src/public/scheduler/scheduler_wzry.ts b/src/public/scheduler/scheduler_wzry.ts index 2ae2094..02d3a8a 100644 --- a/src/public/scheduler/scheduler_wzry.ts +++ b/src/public/scheduler/scheduler_wzry.ts @@ -102,9 +102,10 @@ export class SchedulerWzryDlDjinji extends SchedulerWzryAutoBaoMing { return } - let _zuanshiUser = await getRankList(null,{ + let _zuanshiUser = await getRankList(256,{ 'data.player.uid':1 - }); //Rank.list.wzryCross.getRankListAll() + },{'data.player.isNpc':{$exists:false}}); + if (_zuanshiUser.length < 256) { console.log("本期无玩家,此次不执行") await this.record() @@ -117,10 +118,10 @@ export class SchedulerWzryDlDjinji extends SchedulerWzryAutoBaoMing { for (let index = 0; index < _zuanshiUser.length; index++) { const element = _zuanshiUser[index]; _userList.push(element.player.uid) - if (element.player.uid.indexOf('npc_') != -1) { - if (_userList.length >= 256) break - continue - } + // if (element.player.uid.indexOf('npc_') != -1) { + // if (_userList.length >= 256) break + // continue + // } // 发送晋级钻石赛奖励 prize.length > 0 && EmailFun.addEmail({ uid: element.player.uid, diff --git a/src/public/task.ts b/src/public/task.ts index f9f4171..055ed64 100644 --- a/src/public/task.ts +++ b/src/public/task.ts @@ -788,7 +788,7 @@ export class TaskAllEmitFun { let _val = node.call.req.num; G.emit("Class_task_136", 'Class_task_136', node.call, _val, 0); // todo 统计藏品修复胶,此处只是临时处理,防止线上任务数据出错,正确做法是,统计修复胶的消耗,走136任务的统计 - G.emit("Class_task_134", 'Class_task_134', node.call, _val, 0, {}); + G.emit("Class_task_134", 'Class_task_134', node.call, _val, 0, []); } if (node.call.service.name == 'peijian/LvUp' && node.return.isSucc) { diff --git a/src/public/taskclass.ts b/src/public/taskclass.ts index 5266c85..5bf3f67 100644 --- a/src/public/taskclass.ts +++ b/src/public/taskclass.ts @@ -390,7 +390,10 @@ export module manager { async initVal(call: ApiCall, con) { const data = await TanXianFun.getData(call); - return data.useFastGuaJiNum || 0 + if (data?.resetTime > PublicShared.getToDayZeroTime()) { + return data.useFastGuaJiNum || 0 + } + return 0 } } @@ -401,7 +404,10 @@ export module manager { async initVal(call: ApiCall, con) { let data = await JJCFun.getData(call); - return data?.useFightNum || 0 + if (data?.resetTime >= PublicShared.getToDayZeroTime()) { + return data?.useFightNum || 0 + } + return 0 } } @@ -418,7 +424,10 @@ export module manager { async initVal(call: ApiCall, con) { let myData = await G.mongodb.cPlayerInfo('meirishilian').findOne({uid: call.uid, type: 'meirishilian'}); - return R.compose(R.sum(), R.map(i => i[0].useFightNum), R.values())(myData.data.numInfo) || 0 + if (myData.data.refreshTime > PublicShared.getToDayZeroTime()) { + return R.compose(R.sum(), R.map(i => i[0].useFightNum), R.values())(myData.data.numInfo) || 0 + } + return 0 } } @@ -435,7 +444,10 @@ export module manager { async initVal(call: ApiCall, con) { let myData = await G.mongodb.cPlayerInfo('qjzzd').findOne({uid: call.uid, type: 'qjzzd'}); - return myData.useFightNum || 0 + if (myData?.refreFightTime > PublicShared.getToDayZeroTime()) { + return myData?.useFightNum || 0 + } + return 0 } } @@ -491,7 +503,10 @@ export module manager { async initVal(call: ApiCall, con) { let data: Partial = await G.mongodb.collection('wanted').findOne({uid: call.uid}) || {}; - return data.toDayUseNum || 0 + if (data.refreshTime > PublicShared.getToDayZeroTime()) { + return data.toDayUseNum || 0 + } + return 0 } } @@ -766,24 +781,44 @@ export module manager { return call.conn.gud?.helpHeros?.length || 0; } } + // 第56个任务 完成圣诞活动小游戏 export class Class_task_154 extends BaseClass { stype = 154 isinc = 1 async initVal(call: ApiCall, con) { - return 1; + return 0; } } + // 第57个任务 领取每日任务最终宝箱 export class Class_task_155 extends BaseClass { stype = 155 isinc = 0 + async initVal(call: ApiCall, con) { + return 0; + } + } + // 第58个任务 每日钻石消耗 + export class Class_task_156 extends BaseClass { + stype = 156 + isinc = 1 + async initVal(call: ApiCall, con) { return 1; } } + // 第59个任务 获得vip经验 + export class Class_task_157 extends BaseClass { + stype = 157 + isinc = 1 + + async initVal(call: ApiCall, con) { + return 0; + } + } } diff --git a/src/public/user.ts b/src/public/user.ts index 0189473..55fcd89 100644 --- a/src/public/user.ts +++ b/src/public/user.ts @@ -1,14 +1,14 @@ import CryptoJS from 'crypto-js'; -import { ObjectId, OptionalId, WithId } from 'mongodb'; -import { BaseConnection } from 'tsrpc'; -import { Wjjl } from '../module/collection_wjjl'; -import { ServiceType } from '../shared/protocols/serviceProto'; -import { ReqLogin, ResLogin, playerAppend, playerAttr, playerInfo } from '../shared/protocols/user/PtlLogin'; -import { player } from '../shared/protocols/user/type'; -import { PublicShared } from '../shared/public/public'; -import { PlayerFun } from './player'; -import { ZhanLingTasks } from './zhanling'; -import { getGud, setGud } from './gud'; +import {ObjectId, OptionalId, WithId} from 'mongodb'; +import {BaseConnection} from 'tsrpc'; +import {Wjjl} from '../module/collection_wjjl'; +import {ServiceType} from '../shared/protocols/serviceProto'; +import {ReqLogin, ResLogin, playerAppend, playerAttr, playerInfo} from '../shared/protocols/user/PtlLogin'; +import {player} from '../shared/protocols/user/type'; +import {PublicShared} from '../shared/public/public'; +import {PlayerFun} from './player'; +import {ZhanLingTasks} from './zhanling'; +import {getGud, setGud} from './gud'; export const defaultUserInfo: playerInfo = { lv: 1, @@ -30,14 +30,13 @@ export const defaultUserAttr: playerAttr = { export const defaultUserAppend: playerAppend = { name: '', tujianLv: 0, - head: { id: "1", time: -1 }, - headFrame: { id: "1", time: -1 }, - chatFrame: { id: "1", time: -1 }, + head: {id: "1", time: -1}, + headFrame: {id: "1", time: -1}, + chatFrame: {id: "1", time: -1}, + upModel: {id: "1", time: -1}, model: { - 1: { id: "1", time: -1 }, - 2: { id: "1", time: -1 }, - 3: { id: "1", time: -1 }, - 4: { id: "1", time: -1 }, + 1: {id: "1", time: -1}, + 2: {id: "2", time: -1} }, renown: 0, wxcLv: { @@ -60,12 +59,12 @@ export const defaultUserAppend: playerAppend = { ghId: '', ghName: '', ghLevel: 0, - ghwz: { 1: 0, 2: 0, 3: 0, 4: 0 } + ghwz: {1: 0, 2: 0, 3: 0, 4: 0} }; export class UserFun { static create(bUid: string) { - let { bindUid, ...userInfo } = defaultUserInfo; + let {bindUid, ...userInfo} = defaultUserInfo; return { bindUid: bUid, @@ -73,6 +72,7 @@ export class UserFun { ...defaultUserAttr }; } + static async check(gud: ResLogin['gud'], req: ReqLogin) { let obj: k_v = {}; let add: k_v = {}; @@ -126,14 +126,14 @@ export class UserFun { if (h_ids.length < 1) { gud.fightHeros = []; } else { - let dHeros = await G.mongodb.collection('hero').find({ _id: { $in: h_ids.map(id => G.mongodb.conversionId(id)) } }).toArray(); + let dHeros = await G.mongodb.collection('hero').find({_id: {$in: h_ids.map(id => G.mongodb.conversionId(id))}}).toArray(); gud.fightHeros = dHeros.map(h => h.heroId.toString()); } add.fightHeros = gud.fightHeros; } if (!gud.matrixPos) { - gud.matrixPos = Object.fromEntries(Object.keys(G.gc.fightPlan).map(pos => [pos, { ...gud.heroPos }])); + gud.matrixPos = Object.fromEntries(Object.keys(G.gc.fightPlan).map(pos => [pos, {...gud.heroPos}])); add.matrixPos = gud.matrixPos; } @@ -197,7 +197,7 @@ export class UserFun { add.loginTime = G.time; if (Object.keys(add).length > 0) { - G.mongodb.collection('user').updateOne({ bindUid: gud.bindUid,sid:gud.sid }, { + G.mongodb.collection('user').updateOne({bindUid: gud.bindUid, sid: gud.sid}, { $set: { ...add } @@ -211,24 +211,25 @@ export class UserFun { return obj; } - + // 检查空数据并修复 static async checkUidOrName() { - let users = await G.mongodb.collection('user').findOne({$or: [{uid: {$in:['', null]}},{name: {$in: ['', null]}}]}) - if(users) { + let users = await G.mongodb.collection('user').findOne({$or: [{uid: {$in: ['', null]}}, {name: {$in: ['', null]}}]}) + if (users) { let {bindUid, sid, _id} = users let uid = users.uid || (sid + '_' + _id) // 随机创建name let b64 = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(bindUid + sid)); let name = users.name || `temp_${b64}`.toLocaleLowerCase(); - await G.mongodb.collection('user').updateOne({ bindUid, sid }, { + await G.mongodb.collection('user').updateOne({bindUid, sid}, { $set: { uid, name } }); } - return + return } + /**创建账号数据 */ static async createUser(client: BaseConnection, bindUid: string, sid: number): Promise>> { // 开启事务 @@ -258,14 +259,17 @@ export class UserFun { // session.endSession() // 结束事务 return gud as WithId>; } + /**获取玩家附带的buff加成 */ static getOtherBuff(gud: ResLogin['gud']) { return gud; } + static async getGud(uid: string) { //return await G.redis.get('user', uid); return await getGud(uid); } + /**激活头像框 */ static async activeHeadFrame(uid: string, k: string, v: number) { let gud: player; @@ -312,11 +316,12 @@ export class UserFun { } if (change) { - PlayerFun.changeAttr(uid, { headFrames: gud.headFrames }); - G.server.sendMsgByUid(uid, 'msg_s2c/PlayerChange', { headFrames: gud.headFrames }); + PlayerFun.changeAttr(uid, {headFrames: gud.headFrames}); + G.server.sendMsgByUid(uid, 'msg_s2c/PlayerChange', {headFrames: gud.headFrames}); G.server.uid_connections[uid]?.refreshPower(); } } + /**激活聊天框 */ static async activeChatFrame(uid: string, k: string, v: number) { let gud: player; @@ -363,8 +368,60 @@ export class UserFun { } if (change) { - PlayerFun.changeAttr(uid, { chatFrames: gud.chatFrames }); - G.server.sendMsgByUid(uid, 'msg_s2c/PlayerChange', { chatFrames: gud.chatFrames }); + PlayerFun.changeAttr(uid, {chatFrames: gud.chatFrames}); + G.server.sendMsgByUid(uid, 'msg_s2c/PlayerChange', {chatFrames: gud.chatFrames}); + G.server.uid_connections[uid]?.refreshPower(); + } + } + + /**激活造型 */ + static async activeModel(uid: string, k: string, v: number) { + let gud: player; + // if (G.server.uid_connections[uid]) { + // gud = G.server.uid_connections[uid].gud; + // } else { + // gud = await G.redis.get('user', uid); + // } + gud = await getGud(uid); + + let change = false; + let model = G.gc.playerModel; + let checks = Object.values(model).filter(v => v.cond[0] == k); + if (checks.length > 0) { + checks.forEach(conf => { + let val = v; + if (k == 'wxcLv') val = gud.wxcLv.lv; + else if (gud[k] != undefined) val = gud[k]; + + if (k == 'jjc_rank' && !gud.model[conf.id] && val <= conf.cond[1]) { + gud.model[conf.id] = {id: conf.id + '', time: -1}; + change = true; + } else if (!gud.model[conf.id] && val >= conf.cond[1]) { + gud.model[conf.id] = {id: conf.id + '', time: -1}; + change = true; + } + }); + } else { + let conf = model[k]; + if (conf?.cond?.[0] == 'time') { + let val = conf.cond[1]; + + if (val == -1) { + change = true; + gud.model[conf.id] = {id: conf.id + '', time: -1}; + } else if (gud.model[conf.id].time < G.time) { + change = true; + gud.model[conf.id] = {id: conf.id + '', time: G.time + val * v}; + } else { + change = true; + gud.model[conf.id] = {id: conf.id + '', time: gud.model[conf.id].time += val * v} + } + } + } + + if (change) { + PlayerFun.changeAttr(uid, {model: gud.model}); + G.server.sendMsgByUid(uid, 'msg_s2c/PlayerChange', {model: gud.model}); G.server.uid_connections[uid]?.refreshPower(); } } diff --git a/src/setHttp.ts b/src/setHttp.ts index 6c10173..62af391 100644 --- a/src/setHttp.ts +++ b/src/setHttp.ts @@ -10,7 +10,8 @@ export async function createHttp() { json: true, cors: '*', port: G.config.httpPort, - logLevel: G.argv.logModel as LogLevel + logLevel: G.argv.logModel as LogLevel, + apiTimeout:300000, }); setHttp(G.http); await G.http.autoImplementApi(resolve(__dirname, 'api_o2s'), true); diff --git a/src/shared/fightControl/fightDPS.ts b/src/shared/fightControl/fightDPS.ts index 3509d39..6129e1a 100644 --- a/src/shared/fightControl/fightDPS.ts +++ b/src/shared/fightControl/fightDPS.ts @@ -37,7 +37,7 @@ export function getFightDPS(fromRole: FightObj, toRole: FightObj, extData: DPS_E 运算速度 自身速度*随机浮动值 随机浮动值 0.9-1.1(1位小数) (-10,10) */ - + if (fromRole.isDead || toRole.isDead) return { num: 0, dps: 0, miss: false, baoji: false, fromRole: fromRole, toRole: toRole }; let miss = false, baoji = false, dps = 0; let fromRoleLv = fromRole.getData('lv'), toRoleLv = toRole.getData('lv'); @@ -182,6 +182,18 @@ export function getBuffDPS(toRole: FightObj, fromRole: FightObj, extData: { xiao // todo 主角技能还没有限制百分比的最大伤害,以下判断修复技能buff没有伤害 if (fromRole.getData('pos') != 7){ dps = dps > maxDps ? maxDps : dps; + } else { + // 主角技能伤害最大值: avg(所有上场干部的maxDps) * 2 + let sumHeroMaxDps = 0, heroCount = 0; + const fromRoleSide = fromRole.getData('side'); + fromRole.fightControl.fightRolesArr.forEach(role => { + if (role.getData('pos') < 7 && role.getData('side') === fromRoleSide) { + sumHeroMaxDps += role.getData('maxdps'); + heroCount++; + } + }); + maxDps = sumHeroMaxDps / heroCount * 2; + dps = dps > maxDps ? maxDps : dps; } return { num: -dps, dps: -dps, miss: miss, baoji: baoji, fromRole: fromRole, toRole: toRole }; diff --git a/src/shared/protocols/serviceProto.ts b/src/shared/protocols/serviceProto.ts index 0c851c1..44e02a4 100644 --- a/src/shared/protocols/serviceProto.ts +++ b/src/shared/protocols/serviceProto.ts @@ -3964,6 +3964,29 @@ export const serviceProto: ServiceProto = { }, { "id": 5, + "name": "upModel", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 6, "name": "model", "type": { "type": "Interface", @@ -3992,14 +4015,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 6, + "id": 7, "name": "renown", "type": { "type": "Number" } }, { - "id": 7, + "id": 8, "name": "wxcLv", "type": { "type": "Interface", @@ -4025,14 +4048,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 8, + "id": 9, "name": "mapId", "type": { "type": "Number" } }, { - "id": 9, + "id": 10, "name": "shoucangping", "type": { "type": "Interface", @@ -4045,14 +4068,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 10, + "id": 11, "name": "useTujianLvPoint", "type": { "type": "Number" } }, { - "id": 11, + "id": 12, "name": "skills", "type": { "type": "Interface", @@ -4065,7 +4088,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 12, + "id": 13, "name": "fightSkills", "type": { "type": "Interface", @@ -4078,7 +4101,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 13, + "id": 14, "name": "heroPos", "type": { "type": "Interface", @@ -4091,21 +4114,21 @@ export const serviceProto: ServiceProto = { } }, { - "id": 14, + "id": 15, "name": "ghId", "type": { "type": "String" } }, { - "id": 15, + "id": 16, "name": "ghName", "type": { "type": "String" } }, { - "id": 16, + "id": 17, "name": "ghLevel", "type": { "type": "Reference", @@ -4113,7 +4136,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 17, + "id": 18, "name": "ghwz", "type": { "type": "Interface", @@ -4127,7 +4150,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 18, + "id": 19, "name": "ghExitTime", "type": { "type": "Number" @@ -4135,7 +4158,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 19, + "id": 20, "name": "loginTime", "type": { "type": "Number" @@ -4143,7 +4166,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 20, + "id": 21, "name": "logoutTime", "type": { "type": "Number" @@ -4151,7 +4174,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 21, + "id": 22, "name": "cTime", "type": { "type": "Number" @@ -4159,7 +4182,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 22, + "id": 23, "name": "loginDays", "type": { "type": "Number" @@ -4167,7 +4190,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 23, + "id": 24, "name": "serverName", "type": { "type": "String" @@ -4175,7 +4198,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 24, + "id": 25, "name": "sid", "type": { "type": "Number" @@ -4183,7 +4206,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 25, + "id": 26, "name": "onlineTime", "type": { "type": "Number" @@ -4191,7 +4214,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 26, + "id": 27, "name": "newonlinetime", "type": { "type": "Number" @@ -4199,7 +4222,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 27, + "id": 28, "name": "isNpc", "type": { "type": "Boolean" @@ -4207,7 +4230,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 28, + "id": 29, "name": "matrix", "type": { "type": "Interface", @@ -4221,7 +4244,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 29, + "id": 30, "name": "matrixPos", "type": { "type": "Interface", @@ -4241,7 +4264,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 30, + "id": 31, "name": "selectMatrix", "type": { "type": "String" @@ -4249,7 +4272,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 31, + "id": 32, "name": "fightHeros", "type": { "type": "Array", @@ -4260,7 +4283,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 32, + "id": 33, "name": "helpHeros", "type": { "type": "Array", @@ -4337,7 +4360,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 33, + "id": 34, "name": "changeNameNum", "type": { "type": "Number" @@ -4345,7 +4368,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 34, + "id": 35, "name": "peijianUnlock", "type": { "type": "Interface", @@ -4359,7 +4382,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 35, + "id": 36, "name": "headFrames", "type": { "type": "Interface", @@ -4373,7 +4396,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 36, + "id": 37, "name": "chatFrames", "type": { "type": "Interface", @@ -5185,6 +5208,29 @@ export const serviceProto: ServiceProto = { }, { "id": 5, + "name": "upModel", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 6, "name": "model", "type": { "type": "Interface", @@ -5213,14 +5259,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 6, + "id": 7, "name": "renown", "type": { "type": "Number" } }, { - "id": 7, + "id": 8, "name": "wxcLv", "type": { "type": "Interface", @@ -5246,14 +5292,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 8, + "id": 9, "name": "mapId", "type": { "type": "Number" } }, { - "id": 9, + "id": 10, "name": "shoucangping", "type": { "type": "Interface", @@ -5266,14 +5312,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 10, + "id": 11, "name": "useTujianLvPoint", "type": { "type": "Number" } }, { - "id": 11, + "id": 12, "name": "skills", "type": { "type": "Interface", @@ -5286,7 +5332,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 12, + "id": 13, "name": "fightSkills", "type": { "type": "Interface", @@ -5299,7 +5345,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 13, + "id": 14, "name": "heroPos", "type": { "type": "Interface", @@ -5312,21 +5358,21 @@ export const serviceProto: ServiceProto = { } }, { - "id": 14, + "id": 15, "name": "ghId", "type": { "type": "String" } }, { - "id": 15, + "id": 16, "name": "ghName", "type": { "type": "String" } }, { - "id": 16, + "id": 17, "name": "ghLevel", "type": { "type": "Reference", @@ -5334,7 +5380,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 17, + "id": 18, "name": "ghwz", "type": { "type": "Interface", @@ -5348,7 +5394,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 18, + "id": 19, "name": "ghExitTime", "type": { "type": "Number" @@ -5356,7 +5402,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 19, + "id": 20, "name": "loginTime", "type": { "type": "Number" @@ -5364,7 +5410,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 20, + "id": 21, "name": "logoutTime", "type": { "type": "Number" @@ -5372,7 +5418,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 21, + "id": 22, "name": "cTime", "type": { "type": "Number" @@ -5380,7 +5426,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 22, + "id": 23, "name": "loginDays", "type": { "type": "Number" @@ -5388,7 +5434,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 23, + "id": 24, "name": "serverName", "type": { "type": "String" @@ -5396,7 +5442,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 24, + "id": 25, "name": "sid", "type": { "type": "Number" @@ -5404,7 +5450,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 25, + "id": 26, "name": "onlineTime", "type": { "type": "Number" @@ -5412,7 +5458,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 26, + "id": 27, "name": "newonlinetime", "type": { "type": "Number" @@ -5420,7 +5466,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 27, + "id": 28, "name": "isNpc", "type": { "type": "Boolean" @@ -5428,7 +5474,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 28, + "id": 29, "name": "matrix", "type": { "type": "Interface", @@ -5442,7 +5488,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 29, + "id": 30, "name": "matrixPos", "type": { "type": "Interface", @@ -5462,7 +5508,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 30, + "id": 31, "name": "selectMatrix", "type": { "type": "String" @@ -5470,7 +5516,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 31, + "id": 32, "name": "fightHeros", "type": { "type": "Array", @@ -5481,7 +5527,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 32, + "id": 33, "name": "helpHeros", "type": { "type": "Array", @@ -5558,7 +5604,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 33, + "id": 34, "name": "changeNameNum", "type": { "type": "Number" @@ -5566,7 +5612,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 34, + "id": 35, "name": "peijianUnlock", "type": { "type": "Interface", @@ -5580,7 +5626,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 35, + "id": 36, "name": "headFrames", "type": { "type": "Interface", @@ -5594,7 +5640,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 36, + "id": 37, "name": "chatFrames", "type": { "type": "Interface", @@ -22942,6 +22988,29 @@ export const serviceProto: ServiceProto = { }, { "id": 5, + "name": "upModel", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "String" + } + }, + { + "id": 1, + "name": "time", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 6, "name": "model", "type": { "type": "Interface", @@ -22970,14 +23039,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 6, + "id": 7, "name": "renown", "type": { "type": "Number" } }, { - "id": 7, + "id": 8, "name": "wxcLv", "type": { "type": "Interface", @@ -23003,14 +23072,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 8, + "id": 9, "name": "mapId", "type": { "type": "Number" } }, { - "id": 9, + "id": 10, "name": "shoucangping", "type": { "type": "Interface", @@ -23023,14 +23092,14 @@ export const serviceProto: ServiceProto = { } }, { - "id": 10, + "id": 11, "name": "useTujianLvPoint", "type": { "type": "Number" } }, { - "id": 11, + "id": 12, "name": "skills", "type": { "type": "Interface", @@ -23043,7 +23112,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 12, + "id": 13, "name": "fightSkills", "type": { "type": "Interface", @@ -23056,7 +23125,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 13, + "id": 14, "name": "heroPos", "type": { "type": "Interface", @@ -23069,21 +23138,21 @@ export const serviceProto: ServiceProto = { } }, { - "id": 14, + "id": 15, "name": "ghId", "type": { "type": "String" } }, { - "id": 15, + "id": 16, "name": "ghName", "type": { "type": "String" } }, { - "id": 16, + "id": 17, "name": "ghLevel", "type": { "type": "Reference", @@ -23091,7 +23160,7 @@ export const serviceProto: ServiceProto = { } }, { - "id": 17, + "id": 18, "name": "ghwz", "type": { "type": "Interface", @@ -23105,7 +23174,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 18, + "id": 19, "name": "ghExitTime", "type": { "type": "Number" @@ -23113,7 +23182,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 19, + "id": 20, "name": "loginTime", "type": { "type": "Number" @@ -23121,7 +23190,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 20, + "id": 21, "name": "logoutTime", "type": { "type": "Number" @@ -23129,7 +23198,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 21, + "id": 22, "name": "cTime", "type": { "type": "Number" @@ -23137,7 +23206,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 22, + "id": 23, "name": "loginDays", "type": { "type": "Number" @@ -23145,7 +23214,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 23, + "id": 24, "name": "serverName", "type": { "type": "String" @@ -23153,7 +23222,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 24, + "id": 25, "name": "sid", "type": { "type": "Number" @@ -23161,7 +23230,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 25, + "id": 26, "name": "onlineTime", "type": { "type": "Number" @@ -23169,7 +23238,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 26, + "id": 27, "name": "newonlinetime", "type": { "type": "Number" @@ -23177,7 +23246,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 27, + "id": 28, "name": "isNpc", "type": { "type": "Boolean" @@ -23185,7 +23254,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 28, + "id": 29, "name": "matrix", "type": { "type": "Interface", @@ -23199,7 +23268,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 29, + "id": 30, "name": "matrixPos", "type": { "type": "Interface", @@ -23219,7 +23288,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 30, + "id": 31, "name": "selectMatrix", "type": { "type": "String" @@ -23227,7 +23296,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 31, + "id": 32, "name": "fightHeros", "type": { "type": "Array", @@ -23238,7 +23307,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 32, + "id": 33, "name": "helpHeros", "type": { "type": "Array", @@ -23315,7 +23384,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 33, + "id": 34, "name": "changeNameNum", "type": { "type": "Number" @@ -23323,7 +23392,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 34, + "id": 35, "name": "peijianUnlock", "type": { "type": "Interface", @@ -23337,7 +23406,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 35, + "id": 36, "name": "headFrames", "type": { "type": "Interface", @@ -23351,7 +23420,7 @@ export const serviceProto: ServiceProto = { "optional": true }, { - "id": 36, + "id": 37, "name": "chatFrames", "type": { "type": "Interface", diff --git a/src/shared/protocols/user/PtlLogin.ts b/src/shared/protocols/user/PtlLogin.ts index 3ac09f0..49f56e3 100644 --- a/src/shared/protocols/user/PtlLogin.ts +++ b/src/shared/protocols/user/PtlLogin.ts @@ -19,7 +19,7 @@ export type ResLogin = { /** * 开服天数 */ - openDay:number; + openDay: number; /**当前时间 */ curTime: number; /**是否第一次登录 */ @@ -94,6 +94,13 @@ export type playerAppend = { }; /**名字 */ name: string; + /**正在使用的造型 */ + upModel: { + /**id */ + id: string, + /**到期时间戳 -1:永久 */ + time: number; + }; /**造型 */ model: { [k: string]: { diff --git a/src/shared/public/hero.ts b/src/shared/public/hero.ts index 03a3c99..94af102 100644 --- a/src/shared/public/hero.ts +++ b/src/shared/public/hero.ts @@ -70,6 +70,14 @@ export class HeroShared { } } } + + if (otherBuff.model) { + for (let [id, item] of Object.entries(otherBuff.model)) { + if (item.time == -1 || item.time > G.time) { + PublicShared.mergeProperty(buff, G.gc.playerModel[id].buff); + } + } + } } //计算装备属性 diff --git a/src/shared/public/user.ts b/src/shared/public/user.ts index 086fed9..fe19f59 100644 --- a/src/shared/public/user.ts +++ b/src/shared/public/user.ts @@ -1,25 +1,42 @@ - - export class UserShared { /**获取头像之类id */ static getInfoId(type: 'head' | 'headFrame' | 'chatFrame' | 'model', id: string, pos?: string) { return Array.from(arguments).filter(s => s != '').join('_'); } + + // todo active始终为空,暂时获取对应的avtive,解决打包上线的圣诞版本, + // 后续要理清数据格式,填入playerinfo的active,包括user/infoOpen接口的返回 + static getActive(fmtId, player, type, id?) { + switch (type) { + case 'head': + return {[fmtId]: player.head?.time} + case 'headFrame': + return {[fmtId]: player.headFrames[id]} + case 'chatFrame': + return {[fmtId]: player.chatFrames[id]} + case 'model': + return {[fmtId]: player.model?.[id]?.time} + } + return {} + } + /** - * 判断头像之类是否激活 + * 判断头像之类是否激活 * @param id 请使用 UserShared.getInfo 转化后的id */ - static chechIsActive(fmtId: string, collection: Partial<{ lv: number, vip: number, lsyx: k_v, active: k_v; }>) { + static chechIsActive(fmtId: string, collection: Partial<{ lv: number, vip: number, lsyx: k_v, model: k_v, active: k_v; }>) { - const [type, id, pos] = fmtId.split('_'); + const [type, id] = fmtId.split('_'); const jsonName = 'player' + type.slice(0, 1).toLocaleUpperCase() + type.slice(1); const json = G.gc[jsonName] as any; - const conf: _gcType['playerHead'][''] = pos ? json[pos][id] : json[id]; + const conf: _gcType['playerHead'] = json[id]; if (conf.cond[0] == 'lv') return collection.lv >= conf.cond[1]; else if (conf.cond[0] == 'vip') return collection.vip >= conf.cond[1]; else if (conf.cond[0] == 'hero') return collection.lsyx[conf.cond[1]] > 0; - else if (conf.cond[0] == 'time') return collection.active[fmtId] == -1 || collection.active[fmtId] > G.time; + // else if (conf.cond[0] == 'time') return collection.active[fmtId] == -1 || collection.active[fmtId] > G.time; + else if (conf.cond[0] == 'time') return conf.cond[1] == -1 || collection.active?.[fmtId] > G.time; + else if (conf.cond[0] == 'model') return Object.values(collection.model).find(i => i.id == conf.cond[1]); else return false; } } \ No newline at end of file diff --git a/tsbufferIndex.js b/tsbufferIndex.js new file mode 100644 index 0000000..f9ac364 --- /dev/null +++ b/tsbufferIndex.js @@ -0,0 +1,1122 @@ +/*! + * TSBuffer Validator v2.1.1 + * ----------------------------------------- + * MIT LICENSE + * KingWorks (C) Copyright 2022 + * https://github.com/k8w/tsbuffer-validator + */ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +require('k8w-extend-native'); +var tslib = require('tslib'); +var tsbufferSchema = require('tsbuffer-schema'); + +var ProtoHelper = /** @class */ (function () { + function ProtoHelper(proto) { + //this._schemaWithUuids = []; + this._uuidIndex = 1; + //this._unionPropertiesCache = {}; + //this._flatInterfaceSchemaCache = {}; + this.proto = proto; + } + /** 将ReferenceTypeSchema层层转换为它最终实际引用的类型 */ + ProtoHelper.prototype.parseReference = function (schema) { + // Reference + if (schema.type === tsbufferSchema.SchemaType.Reference) { + var parsedSchema = this.proto[schema.target]; + if (!parsedSchema) { + throw new Error("Cannot find reference target: ".concat(schema.target)); + } + if (this.isTypeReference(parsedSchema)) { + return this.parseReference(parsedSchema); + } + else { + return parsedSchema; + } + } + // IndexedAccess + else if (schema.type === tsbufferSchema.SchemaType.IndexedAccess) { + if (!this.isInterface(schema.objectType)) { + throw new Error("Error objectType: ".concat(schema.objectType.type)); + } + // find prop item + var flat = this.getFlatInterfaceSchema(schema.objectType); + var propItem = flat.properties.find(function (v) { return v.name === schema.index; }); + var propType = void 0; + if (propItem) { + propType = propItem.type; + } + else { + if (flat.indexSignature) { + propType = flat.indexSignature.type; + } + else { + throw new Error("Error index: ".concat(schema.index)); + } + } + // optional -> | undefined + if (propItem && propItem.optional && // 引用的字段是optional + (propItem.type.type !== tsbufferSchema.SchemaType.Union // 自身不为Union + // 或自身为Union,但没有undefined成员条件 + || propItem.type.members.findIndex(function (v) { return v.type.type === tsbufferSchema.SchemaType.Literal && v.type.literal === undefined; }) === -1)) { + propType = { + type: tsbufferSchema.SchemaType.Union, + members: [ + { id: 0, type: propType }, + { + id: 1, + type: { + type: tsbufferSchema.SchemaType.Literal, + literal: undefined + } + } + ] + }; + } + return this.isTypeReference(propType) ? this.parseReference(propType) : propType; + } + else if (schema.type === tsbufferSchema.SchemaType.Keyof) { + var flatInterface = this.getFlatInterfaceSchema(schema.target); + return { + type: tsbufferSchema.SchemaType.Union, + members: flatInterface.properties.map(function (v, i) { return ({ + id: i, + type: { + type: tsbufferSchema.SchemaType.Literal, + literal: v.name + } + }); }) + }; + } + else { + return schema; + } + }; + ProtoHelper.prototype.isInterface = function (schema, excludeReference) { + if (excludeReference === void 0) { excludeReference = false; } + if (!excludeReference && this.isTypeReference(schema)) { + var parsed = this.parseReference(schema); + return this.isInterface(parsed, excludeReference); + } + else { + return schema.type === tsbufferSchema.SchemaType.Interface || this.isMappedType(schema) && this.parseMappedType(schema).type === tsbufferSchema.SchemaType.Interface; + } + }; + ProtoHelper.prototype.isMappedType = function (schema) { + return schema.type === tsbufferSchema.SchemaType.Pick || + schema.type === tsbufferSchema.SchemaType.Partial || + schema.type === tsbufferSchema.SchemaType.Omit || + schema.type === tsbufferSchema.SchemaType.Overwrite; + }; + ProtoHelper.prototype.isTypeReference = function (schema) { + return schema.type === tsbufferSchema.SchemaType.Reference || schema.type === tsbufferSchema.SchemaType.IndexedAccess || schema.type === tsbufferSchema.SchemaType.Keyof; + }; + ProtoHelper.prototype._getSchemaUuid = function (schema) { + var schemaWithUuid = schema; + if (!schemaWithUuid.uuid) { + //schemaWithUuid.uuid = this._schemaWithUuids.push(schemaWithUuid); + schemaWithUuid.uuid = this._uuidIndex; + this._uuidIndex++; + } + return schemaWithUuid.uuid; + }; + ProtoHelper.prototype.getUnionProperties = function (schema) { + return this._addUnionProperties([], schema.members.map(function (v) { return v.type; }));; + + // var uuid = this._getSchemaUuid(schema); + // if (!this._unionPropertiesCache[uuid]) { + // this._unionPropertiesCache[uuid] = this._addUnionProperties([], schema.members.map(function (v) { return v.type; })); + // } + // return this._unionPropertiesCache[uuid]; + }; + /** + * unionProperties: 在Union或Intersection类型中,出现在任意member中的字段 + */ + ProtoHelper.prototype._addUnionProperties = function (unionProperties, schemas) { + for (var i = 0, len = schemas.length; i < len; ++i) { + var schema = this.parseReference(schemas[i]); + // Interface及其Ref 加入interfaces + if (this.isInterface(schema)) { + var flat = this.getFlatInterfaceSchema(schema); + flat.properties.forEach(function (v) { + unionProperties.binaryInsert(v.name, true); + }); + if (flat.indexSignature) { + var key = "[[".concat(flat.indexSignature.keyType, "]]"); + unionProperties.binaryInsert(key, true); + } + } + // Intersection/Union 递归合并unionProperties + else if (schema.type === tsbufferSchema.SchemaType.Intersection || schema.type === tsbufferSchema.SchemaType.Union) { + this._addUnionProperties(unionProperties, schema.members.map(function (v) { return v.type; })); + } + else if (this.isMappedType(schema)) { + this._addUnionProperties(unionProperties, [this.parseMappedType(schema)]); + } + } + return unionProperties; + }; + /** + * 将unionProperties 扩展到 InterfaceTypeSchema中(optional的any类型) + * 以此来跳过对它们的检查(用于Intersection/Union) + */ + ProtoHelper.prototype.applyUnionProperties = function (schema, unionProperties) { + var newSchema = tslib.__assign(tslib.__assign({}, schema), { properties: schema.properties.slice() }); + var _loop_1 = function (prop) { + if (prop === '[[String]]') { + newSchema.indexSignature = newSchema.indexSignature || { + keyType: tsbufferSchema.SchemaType.String, + type: { type: tsbufferSchema.SchemaType.Any } + }; + } + else if (prop === '[[Number]]') { + newSchema.indexSignature = newSchema.indexSignature || { + keyType: tsbufferSchema.SchemaType.Number, + type: { type: tsbufferSchema.SchemaType.Any } + }; + } + else if (!schema.properties.find(function (v) { return v.name === prop; })) { + newSchema.properties.push({ + id: -1, + name: prop, + optional: true, + type: { + type: tsbufferSchema.SchemaType.Any + } + }); + } + }; + for (var _i = 0, unionProperties_1 = unionProperties; _i < unionProperties_1.length; _i++) { + var prop = unionProperties_1[_i]; + _loop_1(prop); + } + return newSchema; + }; + /** + * 将interface及其引用转换为展平的schema + */ + ProtoHelper.prototype.getFlatInterfaceSchema = function (schema) { + let res; + if (this.isTypeReference(schema)) { + var parsed = this.parseReference(schema); + if (parsed.type !== tsbufferSchema.SchemaType.Interface) { + throw new Error("Cannot flatten non interface type: ".concat(parsed.type)); + } + res = this.getFlatInterfaceSchema(parsed); + } + else if (schema.type === tsbufferSchema.SchemaType.Interface) { + res = this._flattenInterface(schema); + } + else if (this.isMappedType(schema)) { + res = this._flattenMappedType(schema); + } + else { + // @ts-expect-error + throw new Error('Invalid interface type: ' + schema.type); + } + return res; + + // var uuid = this._getSchemaUuid(schema); + // // from cache + // if (this._flatInterfaceSchemaCache[uuid]) { + // return this._flatInterfaceSchemaCache[uuid]; + // } + // if (this.isTypeReference(schema)) { + // var parsed = this.parseReference(schema); + // if (parsed.type !== tsbufferSchema.SchemaType.Interface) { + // throw new Error("Cannot flatten non interface type: ".concat(parsed.type)); + // } + // this._flatInterfaceSchemaCache[uuid] = this.getFlatInterfaceSchema(parsed); + // } + // else if (schema.type === tsbufferSchema.SchemaType.Interface) { + // this._flatInterfaceSchemaCache[uuid] = this._flattenInterface(schema); + // } + // else if (this.isMappedType(schema)) { + // this._flatInterfaceSchemaCache[uuid] = this._flattenMappedType(schema); + // } + // else { + // // @ts-expect-error + // throw new Error('Invalid interface type: ' + schema.type); + // } + // return this._flatInterfaceSchemaCache[uuid]; + }; + /** + * 展平interface + */ + ProtoHelper.prototype._flattenInterface = function (schema) { + var properties = {}; + var indexSignature; + // 自身定义的properties和indexSignature优先级最高 + if (schema.properties) { + for (var _i = 0, _a = schema.properties; _i < _a.length; _i++) { + var prop = _a[_i]; + properties[prop.name] = { + optional: prop.optional, + type: prop.type + }; + } + } + if (schema.indexSignature) { + indexSignature = schema.indexSignature; + } + // extends的优先级次之,补全没有定义的字段 + if (schema.extends) { + for (var _b = 0, _c = schema.extends; _b < _c.length; _b++) { + var extend = _c[_b]; + // 解引用 + var parsedExtRef = this.parseReference(extend.type); + if (this.isMappedType(parsedExtRef)) { + parsedExtRef = this._flattenMappedType(parsedExtRef); + } + if (!this.isInterface(parsedExtRef)) { + throw new Error('SchemaError: extends must from interface but from ' + parsedExtRef.type); + } + // 递归展平extends + var flatenExtendsSchema = this.getFlatInterfaceSchema(parsedExtRef); + // properties + if (flatenExtendsSchema.properties) { + for (var _d = 0, _e = flatenExtendsSchema.properties; _d < _e.length; _d++) { + var prop = _e[_d]; + if (!properties[prop.name]) { + properties[prop.name] = { + optional: prop.optional, + type: prop.type + }; + } + } + } + // indexSignature + if (flatenExtendsSchema.indexSignature && !indexSignature) { + indexSignature = flatenExtendsSchema.indexSignature; + } + } + } + return { + type: tsbufferSchema.SchemaType.Interface, + properties: Object.entries(properties).map(function (v, i) { return ({ + id: i, + name: v[0], + optional: v[1].optional, + type: v[1].type + }); }), + indexSignature: indexSignature + }; + }; + /** 将MappedTypeSchema转换为展平的Interface + */ + ProtoHelper.prototype._flattenMappedType = function (schema) { + // target 解引用 + var target; + if (this.isTypeReference(schema.target)) { + var parsed = this.parseReference(schema.target); + target = parsed; + } + else { + target = schema.target; + } + var flatTarget; + // 内层仍然为MappedType 递归之 + if (target.type === tsbufferSchema.SchemaType.Pick || target.type === tsbufferSchema.SchemaType.Partial || target.type === tsbufferSchema.SchemaType.Omit || target.type === tsbufferSchema.SchemaType.Overwrite) { + flatTarget = this._flattenMappedType(target); + } + else if (target.type === tsbufferSchema.SchemaType.Interface) { + flatTarget = this._flattenInterface(target); + } + else { + throw new Error("Invalid target.type: ".concat(target.type)); + } + // 开始执行Mapped逻辑 + if (schema.type === tsbufferSchema.SchemaType.Pick) { + var properties = []; + var _loop_2 = function (key) { + var propItem = flatTarget.properties.find(function (v) { return v.name === key; }); + if (propItem) { + properties.push({ + id: properties.length, + name: key, + optional: propItem.optional, + type: propItem.type + }); + } + else if (flatTarget.indexSignature) { + properties.push({ + id: properties.length, + name: key, + type: flatTarget.indexSignature.type + }); + } + }; + for (var _i = 0, _a = schema.keys; _i < _a.length; _i++) { + var key = _a[_i]; + _loop_2(key); + } + return { + type: tsbufferSchema.SchemaType.Interface, + properties: properties + }; + } + else if (schema.type === tsbufferSchema.SchemaType.Partial) { + for (var _b = 0, _c = flatTarget.properties; _b < _c.length; _b++) { + var v = _c[_b]; + v.optional = true; + } + return flatTarget; + } + else if (schema.type === tsbufferSchema.SchemaType.Omit) { + var _loop_3 = function (key) { + flatTarget.properties.removeOne(function (v) { return v.name === key; }); + }; + for (var _d = 0, _e = schema.keys; _d < _e.length; _d++) { + var key = _e[_d]; + _loop_3(key); + } + return flatTarget; + } + else if (schema.type === tsbufferSchema.SchemaType.Overwrite) { + var overwrite = this.getFlatInterfaceSchema(schema.overwrite); + if (overwrite.indexSignature) { + flatTarget.indexSignature = overwrite.indexSignature; + } + var _loop_4 = function (prop) { + flatTarget.properties.removeOne(function (v) { return v.name === prop.name; }); + flatTarget.properties.push(prop); + }; + for (var _f = 0, _g = overwrite.properties; _f < _g.length; _f++) { + var prop = _g[_f]; + _loop_4(prop); + } + return flatTarget; + } + else { + throw new Error("Unknown type: ".concat(schema.type)); + } + }; + ProtoHelper.prototype.parseMappedType = function (schema) { + // 解嵌套,例如:Pick>> + var parents = []; + var child = schema; + do { + parents.push(child); + child = this.parseReference(child.target); + } while (this.isMappedType(child)); + // 最内层是 interface,直接返回(validator 会验证 key 匹配) + if (child.type === tsbufferSchema.SchemaType.Interface) { + return child; + } + // PickOmit === PickOmit | PickOmit + else if (child.type === tsbufferSchema.SchemaType.Union || child.type === tsbufferSchema.SchemaType.Intersection) { + var newSchema = { + type: child.type, + members: child.members.map(function (v) { + // 从里面往外装 + var type = v.type; + for (var i = parents.length - 1; i > -1; --i) { + var parent_1 = parents[i]; + type = tslib.__assign(tslib.__assign({}, parent_1), { target: type }); + } + return { + id: v.id, + type: type + }; + }) + }; + return newSchema; + } + else { + throw new Error("Unsupported pattern ".concat(schema.type, "<").concat(child.type, ">")); + } + }; + return ProtoHelper; +}()); + +var _a; +/** @internal */ +var ErrorType; +(function (ErrorType) { + ErrorType["TypeError"] = "TypeError"; + ErrorType["InvalidScalarType"] = "InvalidScalarType"; + ErrorType["TupleOverLength"] = "TupleOverLength"; + ErrorType["InvalidEnumValue"] = "InvalidEnumValue"; + ErrorType["InvalidLiteralValue"] = "InvalidLiteralValue"; + ErrorType["MissingRequiredProperty"] = "MissingRequiredProperty"; + ErrorType["ExcessProperty"] = "ExcessProperty"; + ErrorType["InvalidNumberKey"] = "InvalidNumberKey"; + ErrorType["UnionTypesNotMatch"] = "UnionTypesNotMatch"; + ErrorType["UnionMembersNotMatch"] = "UnionMembersNotMatch"; + ErrorType["CustomError"] = "CustomError"; +})(ErrorType || (ErrorType = {})); +/** @internal */ +var ErrorMsg = (_a = {}, + _a[ErrorType.TypeError] = function (expect, actual) { return "Expected type to be `".concat(expect, "`, actually `").concat(actual, "`."); }, + _a[ErrorType.InvalidScalarType] = function (value, scalarType) { return "`".concat(value, "` is not a valid `").concat(scalarType, "`."); }, + _a[ErrorType.TupleOverLength] = function (valueLength, schemaLength) { return "Value has ".concat(valueLength, " elements but schema allows only ").concat(schemaLength, "."); }, + _a[ErrorType.InvalidEnumValue] = function (value) { return "`".concat(value, "` is not a valid enum member."); }, + _a[ErrorType.InvalidLiteralValue] = function (expected, actual) { return "Expected to equals `".concat(stringify(expected), "`, actually `").concat(stringify(actual), "`"); }, + _a[ErrorType.MissingRequiredProperty] = function (propName) { return "Missing required property `".concat(propName, "`."); }, + _a[ErrorType.ExcessProperty] = function (propName) { return "Excess property `".concat(propName, "` should not exists."); }, + _a[ErrorType.InvalidNumberKey] = function (key) { return "`".concat(key, "` is not a valid key, the key here should be a `number`."); }, + // Union + _a[ErrorType.UnionTypesNotMatch] = function (value, types) { return "`".concat(stringify(value), "` is not matched to `").concat(types.join(' | '), "`"); }, + _a[ErrorType.UnionMembersNotMatch] = function (memberErrors) { return "No union member matched, detail:\n".concat(memberErrors.map(function (v, i) { return " <".concat(i, "> ").concat(v.errMsg); }).join('\n')); }, + _a[ErrorType.CustomError] = function (errMsg) { return errMsg; }, + _a); +/** @internal */ +function stringify(value) { + if (typeof value === 'string') { + var output = JSON.stringify(value); + return "'" + output.substr(1, output.length - 2) + "'"; + } + return JSON.stringify(value); +} + +/** @internal */ +var ValidateResultError = /** @class */ (function () { + function ValidateResultError(error) { + this.isSucc = false; + this.error = error; + } + Object.defineProperty(ValidateResultError.prototype, "errMsg", { + get: function () { + return ValidateResultError.getErrMsg(this.error); + }, + enumerable: false, + configurable: true + }); + ValidateResultError.getErrMsg = function (error) { + var _a; + var errMsg = ErrorMsg[error.type].apply(ErrorMsg, error.params); + if ((_a = error.inner) === null || _a === void 0 ? void 0 : _a.property.length) { + return "Property `".concat(error.inner.property.join('.'), "`: ").concat(errMsg); + } + else { + return errMsg; + } + }; + return ValidateResultError; +}()); +/** @internal */ +var ValidateResultUtil = /** @class */ (function () { + function ValidateResultUtil() { + } + ValidateResultUtil.error = function (type) { + var params = []; + for (var _i = 1; _i < arguments.length; _i++) { + params[_i - 1] = arguments[_i]; + } + return new ValidateResultError({ + type: type, + params: params + }); + }; + ValidateResultUtil.innerError = function (property, value, schema, error) { + var _a; + if (error.error.inner) { + if (typeof property === 'string') { + error.error.inner.property.unshift(property); + } + else { + (_a = error.error.inner.property).unshift.apply(_a, property); + } + } + else { + error.error.inner = { + property: typeof property === 'string' ? [property] : property, + value: value, + schema: schema + }; + } + return error; + }; + ValidateResultUtil.succ = { isSucc: true }; + return ValidateResultUtil; +}()); + +var typedArrays = { + Int8Array: Int8Array, + Int16Array: Int16Array, + Int32Array: Int32Array, + BigInt64Array: typeof BigInt64Array !== 'undefined' ? BigInt64Array : undefined, + Uint8Array: Uint8Array, + Uint16Array: Uint16Array, + Uint32Array: Uint32Array, + BigUint64Array: typeof BigUint64Array !== 'undefined' ? BigUint64Array : undefined, + Float32Array: Float32Array, + Float64Array: Float64Array +}; +/** + * TSBuffer Schema Validator + * @public + */ +var TSBufferValidator = /** @class */ (function () { + function TSBufferValidator(proto, options) { + /** + * Default options + */ + this.options = { + excessPropertyChecks: true, + strictNullChecks: false, + cloneProto: true + }; + if (options) { + this.options = tslib.__assign(tslib.__assign({}, this.options), options); + } + this.proto = this.options.cloneProto ? Object.merge({}, proto) : proto; + this.protoHelper = new ProtoHelper(this.proto); + } + /** + * Validate whether the value is valid to the schema + * @param value - Value to be validated. + * @param schemaId - Schema or schema ID. + * For example, the schema ID for type `Test` in `a/b.ts` may be `a/b/Test`. + */ + TSBufferValidator.prototype.validate = function (value, schemaOrId, options) { + var _a, _b; + var schema; + var schemaId; + // Get schema + if (typeof schemaOrId === 'string') { + schemaId = schemaOrId; + schema = this.proto[schemaId]; + if (!schema) { + throw new Error("Cannot find schema: ".concat(schemaId)); + } + } + else { + schema = schemaOrId; + } + // Merge default options + return this._validate(value, schema, tslib.__assign(tslib.__assign({}, options), { excessPropertyChecks: (_a = options === null || options === void 0 ? void 0 : options.excessPropertyChecks) !== null && _a !== void 0 ? _a : this.options.excessPropertyChecks, strictNullChecks: (_b = options === null || options === void 0 ? void 0 : options.strictNullChecks) !== null && _b !== void 0 ? _b : this.options.strictNullChecks })); + }; + TSBufferValidator.prototype._validate = function (value, schema, options) { + var _a; + var vRes; + // Validate + switch (schema.type) { + case tsbufferSchema.SchemaType.Boolean: + vRes = this._validateBooleanType(value, schema); + break; + case tsbufferSchema.SchemaType.Number: + vRes = this._validateNumberType(value, schema); + break; + case tsbufferSchema.SchemaType.String: + vRes = this._validateStringType(value, schema); + break; + case tsbufferSchema.SchemaType.Array: + vRes = this._validateArrayType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Tuple: + vRes = this._validateTupleType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Enum: + vRes = this._validateEnumType(value, schema); + break; + case tsbufferSchema.SchemaType.Any: + vRes = this._validateAnyType(value); + break; + case tsbufferSchema.SchemaType.Literal: + vRes = this._validateLiteralType(value, schema, (_a = options === null || options === void 0 ? void 0 : options.strictNullChecks) !== null && _a !== void 0 ? _a : this.options.strictNullChecks); + break; + case tsbufferSchema.SchemaType.Object: + vRes = this._validateObjectType(value, schema); + break; + case tsbufferSchema.SchemaType.Interface: + vRes = this._validateInterfaceType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Buffer: + vRes = this._validateBufferType(value, schema); + break; + case tsbufferSchema.SchemaType.IndexedAccess: + case tsbufferSchema.SchemaType.Reference: + case tsbufferSchema.SchemaType.Keyof: + vRes = this._validateReferenceType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Union: + vRes = this._validateUnionType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Intersection: + vRes = this._validateIntersectionType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Pick: + case tsbufferSchema.SchemaType.Omit: + case tsbufferSchema.SchemaType.Partial: + case tsbufferSchema.SchemaType.Overwrite: + vRes = this._validateMappedType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Date: + vRes = this._validateDateType(value); + break; + case tsbufferSchema.SchemaType.NonNullable: + vRes = this._validateNonNullableType(value, schema, options); + break; + case tsbufferSchema.SchemaType.Custom: + var res = schema.validate(value); + vRes = res.isSucc ? ValidateResultUtil.succ : ValidateResultUtil.error(ErrorType.CustomError, res.errMsg); + break; + // 错误的type + default: + // @ts-expect-error + throw new Error("Unsupported schema type: ".concat(schema.type)); + } + //vRes = ValidateResultUtil.succ; + // prune + if (options === null || options === void 0 ? void 0 : options.prune) { + // don't need prune, return original value + if (options.prune.output === undefined) { + options.prune.output = value; + } + // output to parent + if (options.prune.parent) { + options.prune.parent.value[options.prune.parent.key] = options.prune.output; + } + } + return vRes; + }; + /** + * 修剪 Object,移除 Schema 中未定义的 Key + * 需要确保 value 类型合法 + * @param value - value to be validated + * @param schemaOrId -Schema or schema ID. + * @returns Validate result and pruned value. if validate failed, `pruneOutput` would be undefined. + */ + TSBufferValidator.prototype.prune = function (value, schemaOrId, options) { + var _a; + var schema = typeof schemaOrId === 'string' ? this.proto[schemaOrId] : schemaOrId; + if (!schema) { + throw new Error('Cannot find schema: ' + schemaOrId); + } + var prune = {}; + var vRes = this._validate(value, schema, tslib.__assign(tslib.__assign({}, options), { prune: prune, excessPropertyChecks: false, strictNullChecks: (_a = options === null || options === void 0 ? void 0 : options.strictNullChecks) !== null && _a !== void 0 ? _a : this.options.strictNullChecks })); + if (vRes.isSucc) { + vRes.pruneOutput = prune.output; + } + return vRes; + }; + TSBufferValidator.prototype._validateBooleanType = function (value, schema) { + var type = this._getTypeof(value); + if (type === 'boolean') { + return ValidateResultUtil.succ; + } + else { + return ValidateResultUtil.error(ErrorType.TypeError, 'boolean', type); + } + }; + TSBufferValidator.prototype._validateNumberType = function (value, schema) { + // 默认为double + var scalarType = schema.scalarType || 'double'; + // Wrong Type + var type = this._getTypeof(value); + var rightType = scalarType.indexOf('big') > -1 ? 'bigint' : 'number'; + if (type !== rightType) { + return ValidateResultUtil.error(ErrorType.TypeError, rightType, type); + } + // scalarType类型检测 + // 整形却为小数 + if (scalarType !== 'double' && type === 'number' && !Number.isInteger(value)) { + return ValidateResultUtil.error(ErrorType.InvalidScalarType, value, scalarType); + } + // 无符号整形却为负数 + if (scalarType.indexOf('uint') > -1 && value < 0) { + return ValidateResultUtil.error(ErrorType.InvalidScalarType, value, scalarType); + } + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._validateStringType = function (value, schema) { + var type = this._getTypeof(value); + return type === 'string' ? ValidateResultUtil.succ : ValidateResultUtil.error(ErrorType.TypeError, 'string', type); + }; + TSBufferValidator.prototype._validateArrayType = function (value, schema, options) { + // is Array type + var type = this._getTypeof(value); + if (type !== tsbufferSchema.SchemaType.Array) { + return ValidateResultUtil.error(ErrorType.TypeError, tsbufferSchema.SchemaType.Array, type); + } + // prune output + var prune = options.prune; + if (prune) { + prune.output = Array.from({ length: value.length }); + } + // validate elementType + for (var i = 0; i < value.length; ++i) { + var elemValidateResult = this._validate(value[i], schema.elementType, tslib.__assign(tslib.__assign({}, options), { prune: (prune === null || prune === void 0 ? void 0 : prune.output) ? { + parent: { + value: prune.output, + key: i + } + } : undefined })); + if (!elemValidateResult.isSucc) { + return ValidateResultUtil.innerError('' + i, value[i], schema.elementType, elemValidateResult); + } + } + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._validateTupleType = function (value, schema, options) { + // is Array type + var type = this._getTypeof(value); + if (type !== tsbufferSchema.SchemaType.Array) { + return ValidateResultUtil.error(ErrorType.TypeError, tsbufferSchema.SchemaType.Array, type); + } + var prune = options.prune; + // validate length + // excessPropertyChecks 与 prune互斥 + if (!prune && options.excessPropertyChecks && value.length > schema.elementTypes.length) { + return ValidateResultUtil.error(ErrorType.TupleOverLength, value.length, schema.elementTypes.length); + } + // prune output + if (prune) { + prune.output = Array.from({ length: Math.min(value.length, schema.elementTypes.length) }); + } + // validate elementType + for (var i = 0; i < schema.elementTypes.length; ++i) { + // MissingRequiredProperty: NotOptional && is undefined + if (value[i] === undefined || value[i] === null && !options.strictNullChecks) { + var canBeNull = this._canBeNull(schema.elementTypes[i]); + var canBeUndefined = schema.optionalStartIndex !== undefined && i >= schema.optionalStartIndex || this._canBeUndefined(schema.elementTypes[i]); + var isOptional = canBeUndefined || !options.strictNullChecks && canBeNull; + // skip undefined property + if (isOptional) { + // Prune null & undefined->null + if (prune === null || prune === void 0 ? void 0 : prune.output) { + if (value[i] === null && canBeNull + || value[i] === undefined && !canBeUndefined && canBeNull) { + prune.output[i] = null; + } + } + continue; + } + else { + return ValidateResultUtil.error(ErrorType.MissingRequiredProperty, i); + } + } + // element type check + var elemValidateResult = this._validate(value[i], schema.elementTypes[i], { + prune: (prune === null || prune === void 0 ? void 0 : prune.output) ? { + parent: { + value: prune.output, + key: i + } + } : undefined, + strictNullChecks: options.strictNullChecks, + excessPropertyChecks: options.excessPropertyChecks + }); + if (!elemValidateResult.isSucc) { + return ValidateResultUtil.innerError('' + i, value[i], schema.elementTypes[i], elemValidateResult); + } + } + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._canBeUndefined = function (schema) { + var _this = this; + if (schema.type === tsbufferSchema.SchemaType.Union) { + return schema.members.some(function (v) { return _this._canBeUndefined(v.type); }); + } + if (schema.type === tsbufferSchema.SchemaType.Literal && schema.literal === undefined) { + return true; + } + return false; + }; + TSBufferValidator.prototype._canBeNull = function (schema) { + var _this = this; + if (schema.type === tsbufferSchema.SchemaType.Union) { + return schema.members.some(function (v) { return _this._canBeNull(v.type); }); + } + if (schema.type === tsbufferSchema.SchemaType.Literal && schema.literal === null) { + return true; + } + return false; + }; + TSBufferValidator.prototype._validateEnumType = function (value, schema) { + // must be string or number + var type = this._getTypeof(value); + if (type !== 'string' && type !== 'number') { + return ValidateResultUtil.error(ErrorType.TypeError, 'string | number', type); + } + // 有值与预设相同 + if (schema.members.some(function (v) { return v.value === value; })) { + return ValidateResultUtil.succ; + } + else { + return ValidateResultUtil.error(ErrorType.InvalidEnumValue, value); + } + }; + TSBufferValidator.prototype._validateAnyType = function (value) { + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._validateLiteralType = function (value, schema, strictNullChecks) { + // 非strictNullChecks严格模式,null undefined同等对待 + if (!strictNullChecks && (schema.literal === null || schema.literal === undefined)) { + return value === null || value === undefined ? + ValidateResultUtil.succ + : ValidateResultUtil.error(ErrorType.InvalidLiteralValue, schema.literal, value); + } + return value === schema.literal ? + ValidateResultUtil.succ + : ValidateResultUtil.error(ErrorType.InvalidLiteralValue, schema.literal, value); + }; + TSBufferValidator.prototype._validateObjectType = function (value, schema) { + var type = this._getTypeof(value); + return type === 'Object' || type === 'Array' ? ValidateResultUtil.succ : ValidateResultUtil.error(ErrorType.TypeError, 'Object', type); + }; + TSBufferValidator.prototype._validateInterfaceType = function (value, schema, options) { + var type = this._getTypeof(value); + if (type !== 'Object') { + return ValidateResultUtil.error(ErrorType.TypeError, 'Object', type); + } + // 先展平 + var flatSchema = this.protoHelper.getFlatInterfaceSchema(schema); + // From union or intersecton type + if (options.unionProperties) { + flatSchema = this.protoHelper.applyUnionProperties(flatSchema, options.unionProperties); + } + return this._validateFlatInterface(value, flatSchema, options); + }; + TSBufferValidator.prototype._validateMappedType = function (value, schema, options) { + var parsed = this.protoHelper.parseMappedType(schema); + if (parsed.type === tsbufferSchema.SchemaType.Interface) { + return this._validateInterfaceType(value, schema, options); + } + else if (parsed.type === tsbufferSchema.SchemaType.Union) { + return this._validateUnionType(value, parsed, options); + } + else if (parsed.type === tsbufferSchema.SchemaType.Intersection) { + return this._validateIntersectionType(value, parsed, options); + } + // @ts-expect-error + throw new Error("Invalid ".concat(schema.type, " target type: ").concat(parsed.type)); + }; + TSBufferValidator.prototype._validateFlatInterface = function (value, schema, options) { + // interfaceSignature强制了key必须是数字的情况 + if (schema.indexSignature && schema.indexSignature.keyType === tsbufferSchema.SchemaType.Number) { + for (var key in value) { + if (!this._isNumberKey(key)) { + return ValidateResultUtil.error(ErrorType.InvalidNumberKey, key); + } + } + } + var prune = options.prune; + if (prune) { + prune.output = {}; + } + // Excess property check (与prune互斥) + if (!prune && options.excessPropertyChecks && !schema.indexSignature) { + var validProperties_1 = schema.properties.map(function (v) { return v.name; }); + var firstExcessProperty = Object.keys(value).find(function (v) { return validProperties_1.indexOf(v) === -1; }); + if (firstExcessProperty) { + return ValidateResultUtil.error(ErrorType.ExcessProperty, firstExcessProperty); + } + } + // 校验properties + if (schema.properties) { + for (var _i = 0, _a = schema.properties; _i < _a.length; _i++) { + var property = _a[_i]; + // MissingRequiredProperty: is undefined && !isOptional + if (value[property.name] === undefined || value[property.name] === null && !options.strictNullChecks) { + var canBeNull = this._canBeNull(property.type); + var canBeUndefined = property.optional || this._canBeUndefined(property.type); + var isOptional = canBeUndefined || !options.strictNullChecks && canBeNull; + // skip undefined optional property + if (isOptional) { + // Prune null & undefined->null + if (prune === null || prune === void 0 ? void 0 : prune.output) { + if (value[property.name] === null && canBeNull + || value[property.name] === undefined && !canBeUndefined && canBeNull) { + prune.output[property.name] = null; + } + } + continue; + } + else { + return ValidateResultUtil.error(ErrorType.MissingRequiredProperty, property.name); + } + } + // property本身验证 + var vRes = this._validate(value[property.name], property.type, { + prune: (prune === null || prune === void 0 ? void 0 : prune.output) && property.id > -1 ? { + parent: { + value: prune.output, + key: property.name + } + } : undefined, + strictNullChecks: options.strictNullChecks, + excessPropertyChecks: options.excessPropertyChecks + }); + if (!vRes.isSucc) { + return ValidateResultUtil.innerError(property.name, value[property.name], property.type, vRes); + } + } + } + // 检测indexSignature + if (schema.indexSignature) { + for (var key in value) { + // only prune is (property is pruned already) + // let memberPrune: ValidatePruneOptions | undefined = schema.properties.some(v => v.name === key) ? undefined : {}; + // validate each field + var vRes = this._validate(value[key], schema.indexSignature.type, { + prune: (prune === null || prune === void 0 ? void 0 : prune.output) ? { + parent: { + value: prune.output, + key: key + } + } : undefined, + strictNullChecks: options.strictNullChecks, + excessPropertyChecks: options.excessPropertyChecks + }); + if (!vRes.isSucc) { + return ValidateResultUtil.innerError(key, value[key], schema.indexSignature.type, vRes); + } + } + } + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._validateBufferType = function (value, schema) { + var _a, _b; + var type = this._getTypeof(value); + if (type !== 'Object') { + return ValidateResultUtil.error(ErrorType.TypeError, schema.arrayType || 'ArrayBuffer', type); + } + else if (schema.arrayType) { + var typeArrayClass = typedArrays[schema.arrayType]; + if (!typeArrayClass) { + throw new Error("Error TypedArray type: ".concat(schema.arrayType)); + } + return value instanceof typeArrayClass ? ValidateResultUtil.succ : ValidateResultUtil.error(ErrorType.TypeError, schema.arrayType, (_a = value === null || value === void 0 ? void 0 : value.constructor) === null || _a === void 0 ? void 0 : _a.name); + } + else { + return value instanceof ArrayBuffer ? ValidateResultUtil.succ : ValidateResultUtil.error(ErrorType.TypeError, 'ArrayBuffer', (_b = value === null || value === void 0 ? void 0 : value.constructor) === null || _b === void 0 ? void 0 : _b.name); + } + }; + TSBufferValidator.prototype._validateReferenceType = function (value, schema, options) { + return this._validate(value, this.protoHelper.parseReference(schema), options); + }; + TSBufferValidator.prototype._validateUnionType = function (value, schema, options) { + var _this = this; + options.unionProperties = options.unionProperties || this.protoHelper.getUnionProperties(schema); + var isObjectPrune = false; + var prune = options.prune; + if (prune && value && Object.getPrototypeOf(value) === Object.prototype) { + isObjectPrune = true; + prune.output = {}; + } + // 有一成功则成功 + var isSomeSucc = false; + var memberErrors = []; + for (var i = 0; i < schema.members.length; ++i) { + var member = schema.members[i]; + var memberType = this.protoHelper.isTypeReference(member.type) ? this.protoHelper.parseReference(member.type) : member.type; + var memberPrune = prune ? {} : undefined; + var vRes = this._validate(value, memberType, tslib.__assign(tslib.__assign({}, options), { prune: memberPrune })); + if (vRes.isSucc) { + isSomeSucc = true; + // if prune object: must prune all members + if (isObjectPrune) { + prune.output = tslib.__assign(tslib.__assign({}, prune.output), memberPrune.output); + } + // not prune object: stop checking after 1st member matched + else { + break; + } + } + else { + memberErrors.push(vRes); + } + } + // 有一成功则成功; + if (isSomeSucc) { + return ValidateResultUtil.succ; + } + // 全部失败,则失败 + else { + // All member error is the same, return the first + var msg0_1 = memberErrors[0].errMsg; + if (memberErrors.every(function (v) { return v.errMsg === msg0_1; })) { + return memberErrors[0]; + } + // mutual exclusion: return the only one + var nonLiteralErrors = memberErrors.filter(function (v) { return v.error.type !== ErrorType.InvalidLiteralValue; }); + if (nonLiteralErrors.length === 1) { + return nonLiteralErrors[0]; + } + // All member error without inner: show simple msg + if (memberErrors.every(function (v) { return !v.error.inner && (v.error.type === ErrorType.TypeError || v.error.type === ErrorType.InvalidLiteralValue); })) { + var valueType = this._getTypeof(value); + var expectedTypes = memberErrors.map(function (v) { return v.error.type === ErrorType.TypeError ? v.error.params[0] : _this._getTypeof(v.error.params[0]); }).distinct(); + // Expected type A|B|C, actually type D + if (expectedTypes.indexOf(valueType) === -1) { + return ValidateResultUtil.error(ErrorType.TypeError, expectedTypes.join(' | '), this._getTypeof(value)); + } + // `'D'` is not matched to `'A'|'B'|'C'` + if (valueType !== 'Object' && valueType !== tsbufferSchema.SchemaType.Array) { + var types = memberErrors.map(function (v) { return v.error.type === ErrorType.TypeError ? v.error.params[0] : stringify(v.error.params[0]); }).distinct(); + return ValidateResultUtil.error(ErrorType.UnionTypesNotMatch, value, types); + } + } + // other errors + return ValidateResultUtil.error(ErrorType.UnionMembersNotMatch, memberErrors); + } + }; + TSBufferValidator.prototype._validateIntersectionType = function (value, schema, options) { + options.unionProperties = options.unionProperties || this.protoHelper.getUnionProperties(schema); + var isObjectPrune = false; + var prune = options.prune; + if (prune && value && Object.getPrototypeOf(value) === Object.prototype) { + prune.output = {}; + isObjectPrune = true; + } + // 有一失败则失败 + for (var i = 0, len = schema.members.length; i < len; ++i) { + // 验证member + var memberType = schema.members[i].type; + memberType = this.protoHelper.isTypeReference(memberType) ? this.protoHelper.parseReference(memberType) : memberType; + var memberPrune = prune ? {} : undefined; + var vRes = this._validate(value, memberType, tslib.__assign(tslib.__assign({}, options), { prune: memberPrune })); + // 有一失败则失败 + if (!vRes.isSucc) { + return vRes; + } + if (isObjectPrune) { + prune.output = tslib.__assign(tslib.__assign({}, prune.output), memberPrune.output); + } + } + // 全成功则成功 + return ValidateResultUtil.succ; + }; + TSBufferValidator.prototype._validateDateType = function (value) { + if (value instanceof Date) { + return ValidateResultUtil.succ; + } + else { + return ValidateResultUtil.error(ErrorType.TypeError, 'Date', this._getTypeof(value)); + } + }; + TSBufferValidator.prototype._validateNonNullableType = function (value, schema, options) { + var type = this._getTypeof(value); + if ((type === 'null' || type === 'undefined') && schema.target.type !== 'Any') { + return ValidateResultUtil.error(ErrorType.TypeError, 'NonNullable', type); + } + return this._validate(value, schema.target, options); + }; + TSBufferValidator.prototype._isNumberKey = function (key) { + var int = parseInt(key); + return !(isNaN(int) || ('' + int) !== key); + }; + TSBufferValidator.prototype._getTypeof = function (value) { + var type = typeof value; + if (type === 'object') { + if (value === null) { + return 'null'; + } + else if (Array.isArray(value)) { + return tsbufferSchema.SchemaType.Array; + } + else { + return 'Object'; + } + } + return type; + }; + return TSBufferValidator; +}()); + +exports.ProtoHelper = ProtoHelper; +exports.TSBufferValidator = TSBufferValidator;