Merge branch 'dev' of http://git.legu.cc/qixin/HJ_Server into dev
This commit is contained in:
commit
dda879b037
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,5 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
/.idea
|
/.idea
|
||||||
/.vscode
|
|
||||||
/dist
|
/dist
|
||||||
/doc
|
/doc
|
||||||
|
|
||||||
|
50
.vscode/launch.json
vendored
Normal file
50
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
// 使用 IntelliSense 了解相关属性。
|
||||||
|
// 悬停以查看现有属性的描述。
|
||||||
|
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "消息服",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"${workspaceRoot}/src/index.ts",
|
||||||
|
"-serverType",
|
||||||
|
"msg",
|
||||||
|
"-logModel",
|
||||||
|
"debug"
|
||||||
|
],
|
||||||
|
"runtimeArgs": [
|
||||||
|
"--nolazy",
|
||||||
|
"-r",
|
||||||
|
"ts-node/register"
|
||||||
|
],
|
||||||
|
"sourceMaps": true,
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"internalConsoleOptions": "neverOpen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "跨服",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"${workspaceRoot}/src/index.ts",
|
||||||
|
"-serverType",
|
||||||
|
"cross",
|
||||||
|
"-logModel",
|
||||||
|
"debug"
|
||||||
|
],
|
||||||
|
"runtimeArgs": [
|
||||||
|
"--nolazy",
|
||||||
|
"-r",
|
||||||
|
"ts-node/register"
|
||||||
|
],
|
||||||
|
"sourceMaps": true,
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"internalConsoleOptions": "neverOpen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -24,7 +24,6 @@ export default async function (call: ApiCall<Reqdisable, Resdisable>) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let res = await G.mongodb.collection('user').updateOne({uid}, {$set: data});
|
let res = await G.mongodb.collection('user').updateOne({uid}, {$set: data});
|
||||||
//G.redis.set('user', uid, typeStr, value);
|
|
||||||
setGud(uid, data);
|
setGud(uid, data);
|
||||||
let result = res.modifiedCount > 0 ? 0 : 1;
|
let result = res.modifiedCount > 0 ? 0 : 1;
|
||||||
//3. 返回结果
|
//3. 返回结果
|
||||||
|
@ -120,7 +120,6 @@ export default async function (call: ApiCall<ReqBingo, ResBingo>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (shell[0] == 'heroMaxLv') {
|
} else if (shell[0] == 'heroMaxLv') {
|
||||||
//let heros = await G.redis.get('hero', call.uid);
|
|
||||||
|
|
||||||
let s = await G.mongodb.collection('hero').find({
|
let s = await G.mongodb.collection('hero').find({
|
||||||
uid: call.uid
|
uid: call.uid
|
||||||
|
@ -12,7 +12,7 @@ export default async function (call: ApiCall<ReqFight, ResFight>) {
|
|||||||
let change: Partial<ResOpen> = {};
|
let change: Partial<ResOpen> = {};
|
||||||
let data = await DxltFun.getData(call);
|
let data = await DxltFun.getData(call);
|
||||||
|
|
||||||
if (data.killBoss >= G.gc.dxlt_com.dayFightLayer) return call.error(globalThis.lng.dixialeitai_2);
|
if (data.killBoss >= G.gc.dxlt_com.dayFightLayer) return call.error(globalThis.lng.dixialeitai_13);
|
||||||
if (G.gc.dxlt_layer[data.curLayer].type != 1) return call.error(globalThis.lng.dixialeitai_3);
|
if (G.gc.dxlt_layer[data.curLayer].type != 1) return call.error(globalThis.lng.dixialeitai_3);
|
||||||
if (data.over) return call.error(globalThis.lng.dixialeitai_4);
|
if (data.over) return call.error(globalThis.lng.dixialeitai_4);
|
||||||
if (!data.heros[call.req]) return call.error(globalThis.lng.dixialeitai_5);
|
if (!data.heros[call.req]) return call.error(globalThis.lng.dixialeitai_5);
|
||||||
|
@ -41,7 +41,6 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
} else {
|
} else {
|
||||||
call.succ(data);
|
call.succ(data);
|
||||||
}
|
}
|
||||||
|
G.ioredis.set(`dxlt:${call.uid}`, JSON.stringify(data));
|
||||||
G.redis.set('dxlt', call.uid, data);
|
|
||||||
G.mongodb.collection('dxlt').updateOne({ uid: call.uid }, { $set: { ...data } });
|
G.mongodb.collection('dxlt').updateOne({ uid: call.uid }, { $set: { ...data } });
|
||||||
}
|
}
|
@ -24,7 +24,6 @@ export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
|||||||
await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: call.conn.uid, type: 'usertasklog' },
|
await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({ uid: call.conn.uid, type: 'usertasklog' },
|
||||||
{ $set: { maxequiplv: maxequiplv, equipcolor: color } }, { upsert: true })
|
{ $set: { maxequiplv: maxequiplv, equipcolor: color } }, { upsert: true })
|
||||||
|
|
||||||
//G.redis.set('equip', call.uid, kvList);
|
|
||||||
|
|
||||||
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_equip').findOne({ uid: call.conn.uid, type: 'lshd_equip' });
|
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_equip').findOne({ uid: call.conn.uid, type: 'lshd_equip' });
|
||||||
let { uid, _id, type, ...equips } = (recLshd || {});
|
let { uid, _id, type, ...equips } = (recLshd || {});
|
||||||
|
@ -26,10 +26,10 @@ export async function playerCanReceive(call: ApiCall, callError : boolean = true
|
|||||||
}
|
}
|
||||||
activityId = activityInfo.hdid;
|
activityId = activityInfo.hdid;
|
||||||
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
||||||
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey);
|
const hasReceivedStr = await G.crossioredis.get(hasReceivedKey);
|
||||||
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
||||||
const remaining = activityInfo.data['totalmoney'] - hasReceived;
|
const remaining = activityInfo.data['totalmoney'] - hasReceived;
|
||||||
const showOffResult = await G.iorediscross.lrange(showOffListKeyPrefix + activityId, 0, -1);
|
const showOffResult = await G.crossioredis.lrange(showOffListKeyPrefix + activityId, 0, -1);
|
||||||
const showOffList = showOffResult.map(result => JSON.parse(result));
|
const showOffList = showOffResult.map(result => JSON.parse(result));
|
||||||
const zeroTime = PublicShared.getToDayZeroTime();
|
const zeroTime = PublicShared.getToDayZeroTime();
|
||||||
const vipScore = await ActionLog.getDayLog(call.uid, 'pay');
|
const vipScore = await ActionLog.getDayLog(call.uid, 'pay');
|
||||||
|
@ -71,12 +71,12 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
|||||||
}
|
}
|
||||||
const activityData = canReceiveResult.activityInfo.data;
|
const activityData = canReceiveResult.activityInfo.data;
|
||||||
// 更新 redis 领取记录之前先加锁, 防止多领
|
// 更新 redis 领取记录之前先加锁, 防止多领
|
||||||
const lockResult = await G.iorediscross.setnx(hasGotLockKey, 1);
|
const lockResult = await G.crossioredis.setnx(hasGotLockKey, 1);
|
||||||
if (lockResult) {
|
if (lockResult) {
|
||||||
await G.iorediscross.expire(hasGotLockKey, 1); // 设置 ttl 避免死锁
|
await G.crossioredis.expire(hasGotLockKey, 1); // 设置 ttl 避免死锁
|
||||||
const activityId = call.req.activityId;
|
const activityId = call.req.activityId;
|
||||||
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
||||||
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey);
|
const hasReceivedStr = await G.crossioredis.get(hasReceivedKey);
|
||||||
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
||||||
const remaining = activityData['totalmoney'] - hasReceived;
|
const remaining = activityData['totalmoney'] - hasReceived;
|
||||||
if (remaining <= 0) {
|
if (remaining <= 0) {
|
||||||
@ -86,8 +86,8 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
|||||||
} else {
|
} else {
|
||||||
const { group, maxAmount } = randomWithWeight(activityData['groupConf']['base']['arr']);
|
const { group, maxAmount } = randomWithWeight(activityData['groupConf']['base']['arr']);
|
||||||
const gotAmount = calcDiamondGot(remaining, group, maxAmount);
|
const gotAmount = calcDiamondGot(remaining, group, maxAmount);
|
||||||
await G.iorediscross.incrby(hasReceivedKey, Math.abs(gotAmount)); // 添加已领取的额度
|
await G.crossioredis.incrby(hasReceivedKey, Math.abs(gotAmount)); // 添加已领取的额度
|
||||||
await G.iorediscross.del(hasGotLockKey); // 移除锁
|
await G.crossioredis.del(hasGotLockKey); // 移除锁
|
||||||
await PlayerFun.sendPrize(call, [{ 'a': 'attr', 't': 'rmbmoney', 'n': gotAmount }]);
|
await PlayerFun.sendPrize(call, [{ 'a': 'attr', 't': 'rmbmoney', 'n': gotAmount }]);
|
||||||
const showOff = gotAmount >= activityData['groupConf']['base']['loglimit'];
|
const showOff = gotAmount >= activityData['groupConf']['base']['loglimit'];
|
||||||
call.succ({ // 领取核心逻辑完成, 请求可以返回了
|
call.succ({ // 领取核心逻辑完成, 请求可以返回了
|
||||||
@ -108,8 +108,8 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
|||||||
name: call.conn.gud.name, gotAmount, serverID: call.conn.gud.sid
|
name: call.conn.gud.name, gotAmount, serverID: call.conn.gud.sid
|
||||||
});
|
});
|
||||||
const showOffListKey = showOffListKeyPrefix + activityId;
|
const showOffListKey = showOffListKeyPrefix + activityId;
|
||||||
await G.iorediscross.lpush(showOffListKey, msg);
|
await G.crossioredis.lpush(showOffListKey, msg);
|
||||||
await G.iorediscross.ltrim(showOffListKey, 0, 49); // 限制列表保存 50 条消息, 避免无限增长
|
await G.crossioredis.ltrim(showOffListKey, 0, 49); // 限制列表保存 50 条消息, 避免无限增长
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -4,13 +4,13 @@ import {HuoDongFun} from "../../../public/huodongfun";
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 消费竞赛
|
* 消费竞赛
|
||||||
* redis缓存120秒
|
* redis缓存60秒
|
||||||
* 返回活动日期内的
|
* 返回活动日期内的
|
||||||
* @param call
|
* @param call
|
||||||
*/
|
*/
|
||||||
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
|
||||||
let ioList = await G.ioredis.get(`rank:xiaofeijingsai`);
|
let ioList = await G.crossioredis.get(`rank:xiaofeijingsai`);
|
||||||
if (ioList) {
|
if (ioList) {
|
||||||
let myData = await getMyData(call, JSON.parse(ioList))
|
let myData = await getMyData(call, JSON.parse(ioList))
|
||||||
return call.succ({list: JSON.parse(ioList), myData})
|
return call.succ({list: JSON.parse(ioList), myData})
|
||||||
@ -21,28 +21,27 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
|
|
||||||
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 100
|
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 100
|
||||||
|
|
||||||
let rmbuse = await G.mongodb.collection('rmbuse').aggregate([
|
let rmbuse = await G.crossmongodb.collection('rmbuse').find({
|
||||||
{$match: {isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}},
|
time: {
|
||||||
{$group: {_id: "$uid", total: {$sum: "$change"}}},
|
$gte: _hd.stime,
|
||||||
{$sort: {total: 1}},
|
$lte: _hd.etime + 10
|
||||||
{$limit: limit}
|
}
|
||||||
]).toArray()
|
}).sort({change: 1}).limit(limit).toArray()
|
||||||
|
|
||||||
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.total)}))
|
|
||||||
|
|
||||||
|
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)}))
|
||||||
|
|
||||||
let rankList = sortRankList(_hd.data.rank, list)
|
let rankList = sortRankList(_hd.data.rank, list)
|
||||||
|
|
||||||
let users = await G.mongodb.collection('user').find({uid: {$in: rankList.map(i => i._id).filter(i => i._id != 'system')}}).toArray()
|
let users = await G.crossmongodb.collection('huodong_user').find({uid: {$in: rankList.map(i => i._id).filter(i => i._id != 'system')}}).toArray()
|
||||||
|
|
||||||
rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i._id) || {}}))
|
rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i._id) || {}}))
|
||||||
|
|
||||||
// 活动结束前半小时,缓存过期时间改为10秒
|
// 活动结束前半小时,缓存过期时间改为10秒
|
||||||
let exTime = (G.time + 1800) > _hd.etime ? 10 : 120
|
let exTime = (G.time + 1800) > _hd.etime ? 10 : 60
|
||||||
|
|
||||||
G.ioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList));
|
G.crossioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList));
|
||||||
|
|
||||||
let myData = await getMyData(call, rankList, _hd)
|
let myData = await getMyData(call, rankList)
|
||||||
|
|
||||||
call.succ({list: rankList, myData})
|
call.succ({list: rankList, myData})
|
||||||
}
|
}
|
||||||
@ -69,19 +68,14 @@ export function sortRankList(rank, list) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取自己的信息
|
// 获取自己的信息
|
||||||
async function getMyData(call, rankList, _hd?) {
|
async function getMyData(call, rankList) {
|
||||||
let myData = rankList.find(i => i._id == call.uid)
|
let myData = rankList.find(i => i._id == call.uid)
|
||||||
if (myData) return myData
|
if (myData) return myData
|
||||||
|
|
||||||
if (!_hd) {
|
let myCut: any = await G.crossmongodb.collection('rmbuse').findOne({uid: call.uid})
|
||||||
_hd = (await HuoDongFun.gethdList(call, 11))[0]
|
|
||||||
}
|
|
||||||
let myCut = (await G.mongodb.collection('rmbuse').aggregate([
|
|
||||||
{$match: {uid: call.uid, isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}},
|
|
||||||
{$group: {_id: "$uid", total: {$sum: "$change"}}}
|
|
||||||
]).toArray())[0]
|
|
||||||
|
|
||||||
let myUser = await G.mongodb.collection('user').findOne({uid: call.uid})
|
let myUser = await G.mongodb.collection('user').findOne({uid: call.uid})
|
||||||
|
G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, myUser, {upsert: true})
|
||||||
|
|
||||||
if (!myCut) {
|
if (!myCut) {
|
||||||
myCut = {_id: myUser.uid, total: 0}
|
myCut = {_id: myUser.uid, total: 0}
|
||||||
|
35
src/api_s2c/event/yuandan/ApiDMRec.ts
Normal file
35
src/api_s2c/event/yuandan/ApiDMRec.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqDMRec, ResDMRec} from "../../../shared/protocols/event/yuandan/PtlDMRec";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
import {PublicShared} from "../../../shared/public/public";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqDMRec, ResDMRec>) {
|
||||||
|
// 查询活动是否存在
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
|
||||||
|
if (!_hd) return call.errorCode(-1)
|
||||||
|
|
||||||
|
// 扣除免费次数或相应货币
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
|
||||||
|
let rec = data?.gameNum
|
||||||
|
|
||||||
|
if (rec && rec >= _hd.data?.gamefree) {
|
||||||
|
await PlayerFun.checkNeedIsMeet(call, _hd.data.gameneed);
|
||||||
|
await PlayerFun.cutNeed(call, _hd.data.gameneed);
|
||||||
|
}
|
||||||
|
|
||||||
|
let prize = []
|
||||||
|
if (call.req.id) {
|
||||||
|
prize = PublicShared.randomDropGroup('1', 1, {'1': _hd.data.game});
|
||||||
|
await PlayerFun.sendPrize(call, prize);
|
||||||
|
}
|
||||||
|
|
||||||
|
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
|
||||||
|
$inc: {[`gameNum`]: 1},
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
call.succ({prize})
|
||||||
|
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
|
||||||
|
}
|
36
src/api_s2c/event/yuandan/ApiDZRec.ts
Normal file
36
src/api_s2c/event/yuandan/ApiDZRec.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqDZRec, ResDZRec} from "../../../shared/protocols/event/yuandan/PtlDZRec";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqDZRec, ResDZRec>) {
|
||||||
|
// 查询活动是否有当前领奖的免费选项
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
|
||||||
|
let gift = _hd?.data?.gift?.find(i => i.free && i.id == call.req.id)
|
||||||
|
if (!gift) return call.errorCode(-1)
|
||||||
|
|
||||||
|
// 超出限购次数
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
|
||||||
|
let rec = data?.gift?.[call.req.id]
|
||||||
|
if (rec && rec >= gift.buynum) return call.errorCode(-2)
|
||||||
|
|
||||||
|
// 奖励不符合,严格判断
|
||||||
|
let dlzList = R.flatten(gift.dlz.map(i => R.values(i)))
|
||||||
|
call.req.dlz.map(i => {
|
||||||
|
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
|
||||||
|
if (!item) call.errorCode(-4)
|
||||||
|
})
|
||||||
|
|
||||||
|
let prize = [...gift.prize, ...call.req.dlz]
|
||||||
|
|
||||||
|
await PlayerFun.sendPrize(call, prize);
|
||||||
|
|
||||||
|
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
|
||||||
|
$set: {[`gift.${gift.id}`]: prize},
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
call.succ({[gift.id]: prize})
|
||||||
|
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
|
||||||
|
}
|
29
src/api_s2c/event/yuandan/ApiExchange.ts
Normal file
29
src/api_s2c/event/yuandan/ApiExchange.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqExchange, ResExchange} from "../../../shared/protocols/event/yuandan/PtlExchange";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqExchange, ResExchange>) {
|
||||||
|
// 礼包不存在
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
|
||||||
|
let gift = _hd?.data?.duihuan?.find(i => i.id == call.req.id)
|
||||||
|
if (!gift) return call.errorCode(-1)
|
||||||
|
|
||||||
|
// 超出限购次数
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
|
||||||
|
let rec = data?.exchange?.[call.req.id]
|
||||||
|
if (rec && rec >= gift?.buyNum) return call.errorCode(-2)
|
||||||
|
|
||||||
|
await PlayerFun.checkNeedIsMeet(call, gift.need);
|
||||||
|
await PlayerFun.cutNeed(call, gift.need)
|
||||||
|
await PlayerFun.sendPrize(call, gift.prize);
|
||||||
|
|
||||||
|
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
|
||||||
|
$inc: {[`exchange.${gift.id}`]: 1},
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
call.succ({})
|
||||||
|
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
|
||||||
|
}
|
16
src/api_s2c/event/yuandan/ApiOpen.ts
Normal file
16
src/api_s2c/event/yuandan/ApiOpen.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqOpen, ResOpen} from "../../../shared/protocols/event/yuandan/PtlOpen";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PayFun} from "../../../public/pay";
|
||||||
|
import {Yuandanfun} from "./fun";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
let _hd = await Yuandanfun.getCon(call)
|
||||||
|
|
||||||
|
let payIds = _hd.data.gift.filter(i => i.payid).map(i => i.payid)
|
||||||
|
|
||||||
|
call.succ({
|
||||||
|
data: await Yuandanfun.getData(call, _hd.hdid),
|
||||||
|
payLog: await PayFun.getPayLogs(call.uid, payIds)
|
||||||
|
})
|
||||||
|
}
|
37
src/api_s2c/event/yuandan/ApiTaskRec.ts
Normal file
37
src/api_s2c/event/yuandan/ApiTaskRec.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { ApiCall } from "tsrpc";
|
||||||
|
import { ReqTaskRec, ResTaskRec } from "../../../shared/protocols/event/yuandan/PtlTaskRec";
|
||||||
|
import {Yuandanfun, Yuandanfun as Christmasfun} from "./fun";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqTaskRec, ResTaskRec>) {
|
||||||
|
let _hd = await Christmasfun.getCon(call)
|
||||||
|
let taskid = call.req.taskid;
|
||||||
|
let _con = _hd.data.task[taskid];
|
||||||
|
if (!_con) {
|
||||||
|
// 任务id 不存在
|
||||||
|
return call.error('', { code: -1, message: globalThis.lng.yangchengmubiao_2 })
|
||||||
|
}
|
||||||
|
let _mydata = await Yuandanfun.getData(call, _hd.hdid)
|
||||||
|
if (_mydata.taskval[taskid] < _con.pval) {
|
||||||
|
// 任务未完成
|
||||||
|
return call.error('', { code: -2, message: globalThis.lng.yangchengmubiao_3 })
|
||||||
|
}
|
||||||
|
if (_mydata.taskfinish.includes(taskid)) {
|
||||||
|
// 任务已领取
|
||||||
|
return call.error('', { code: -3, message: globalThis.lng.yangchengmubiao_4 })
|
||||||
|
}
|
||||||
|
_mydata.taskfinish.push(taskid)
|
||||||
|
let _setData = {}
|
||||||
|
_setData["taskfinish"] = _mydata.taskfinish
|
||||||
|
await Yuandanfun.setData(call.uid, _hd.hdid, { $set: _setData })
|
||||||
|
let _prize = _con.prize
|
||||||
|
|
||||||
|
await PlayerFun.sendPrize(call, _prize);
|
||||||
|
let changedata = { data: _mydata, prize: _prize}
|
||||||
|
// 推送红点
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['huodonghd']);
|
||||||
|
call.succ(changedata);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
44
src/api_s2c/event/yuandan/ApiZLRec.ts
Normal file
44
src/api_s2c/event/yuandan/ApiZLRec.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqZLRec, ResZLRec} from "../../../shared/protocols/event/yuandan/PtlZLRec";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
import {Yuandanfun} from "./fun";
|
||||||
|
import {PublicShared} from "../../../shared/public/public";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqZLRec, ResZLRec>) {
|
||||||
|
let _hd = await Yuandanfun.getCon(call)
|
||||||
|
if (!_hd) return call.errorCode(-1)
|
||||||
|
|
||||||
|
// 查询是否存在当前传入id的礼品
|
||||||
|
let gift = _hd?.data?.qiandao?.[call.req.id]
|
||||||
|
if (!gift) return call.errorCode(-2)
|
||||||
|
|
||||||
|
// 奖励已领取
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
|
||||||
|
let rec = data?.qiandao?.[call.req.id]
|
||||||
|
if (rec) return call.errorCode(-3)
|
||||||
|
|
||||||
|
if (data && data.qiandaoTime && PublicShared.chkSameDate(data.qiandaoTime, G.time)) {
|
||||||
|
return call.errorCode(-4)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 奖励不符合,严格判断
|
||||||
|
let dlzList = R.flatten(gift.dlz.map(i => R.values(i)))
|
||||||
|
call.req.dlz.map(i => {
|
||||||
|
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
|
||||||
|
if (!item) call.errorCode(-5)
|
||||||
|
})
|
||||||
|
|
||||||
|
let prize = [...gift.prize, ...call.req.dlz]
|
||||||
|
|
||||||
|
await PlayerFun.sendPrize(call, prize);
|
||||||
|
|
||||||
|
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
|
||||||
|
$set: {[`qiandao.${call.req.id}`]: prize, qiandaoTime: G.time},
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
call.succ({[call.req.id]: prize})
|
||||||
|
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
|
||||||
|
}
|
116
src/api_s2c/event/yuandan/fun.ts
Normal file
116
src/api_s2c/event/yuandan/fun.ts
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import {ApiCall} from 'tsrpc';
|
||||||
|
import {HuoDongFun} from '../../../public/huodongfun';
|
||||||
|
import {christmas} from '../../../shared/protocols/event/christmas/PtlOpen';
|
||||||
|
import {PublicShared} from '../../../shared/public/public';
|
||||||
|
import {PayFun} from "../../../public/pay";
|
||||||
|
|
||||||
|
export class Yuandanfun {
|
||||||
|
/**配置 */
|
||||||
|
static async getCon(call: ApiCall) {
|
||||||
|
return (await HuoDongFun.gethdList(call, 14))[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**获取我的数据 */
|
||||||
|
static async getData(call: ApiCall, hdid: number) {
|
||||||
|
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${hdid}`).findOne({uid: call.uid, type: `yuandan${hdid}`})
|
||||||
|
|
||||||
|
if (!data || !data.refreshTime || !PublicShared.chkSameDate(data.refreshTime, G.time)) {
|
||||||
|
// 刷新每日任务
|
||||||
|
data = (await G.mongodb.cEvent(`yuandan${hdid}`).findOneAndUpdate({uid: call.uid, type: `yuandan${hdid}`}, {
|
||||||
|
$set: {
|
||||||
|
gameNum: 0,
|
||||||
|
gift: {},
|
||||||
|
exchange: {},
|
||||||
|
taskfinish: [],
|
||||||
|
taskval: await this.getTaskVal(call),
|
||||||
|
qiandaoTime: data?.qiandaoTime || 0,
|
||||||
|
refreshTime: G.time
|
||||||
|
},
|
||||||
|
}, {upsert: true, returnDocument: 'after'})).value
|
||||||
|
this.refreshPayLog(call)
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
static async refreshPayLog(call: ApiCall) {
|
||||||
|
let _hd = await this.getCon(call)
|
||||||
|
let payIds = _hd?.data?.gift?.filter(i=>i.payId).map(i=>i.payId)
|
||||||
|
PayFun.delPayLog(call.uid, ...payIds.map(i => {
|
||||||
|
return {payId: i, val: []}
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**获取所有taskid 及对应的值 */
|
||||||
|
static async getTaskVal(call: ApiCall) {
|
||||||
|
let _initCon = await this.getCon(call)
|
||||||
|
let _tasks = _initCon.data.task
|
||||||
|
let _res = {}
|
||||||
|
for (let index = 0; index < Object.keys(_tasks).length; index++) {
|
||||||
|
const element = Object.keys(_tasks)[index];
|
||||||
|
let _tmp = _tasks[element]
|
||||||
|
_tmp["id"] = element
|
||||||
|
// 每日登录直接完成
|
||||||
|
if (_tmp.stype == "128") {
|
||||||
|
_res[element] = 1
|
||||||
|
} else {
|
||||||
|
_res[element] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _res
|
||||||
|
}
|
||||||
|
|
||||||
|
/**设置数据 */
|
||||||
|
static async setData(uid: string, hdid: number, set: {}) {
|
||||||
|
await G.mongodb.cEvent(`yuandan${hdid}`).updateOne(
|
||||||
|
{uid: uid, type: `yuandan${hdid}`},
|
||||||
|
set
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**设置任务 */
|
||||||
|
static async setTaskVal(call: ApiCall, stype: number, val: number, chkCall: Function, chkval: number = 0, isinc: number = 0, alchangeVal: Function, arg) {
|
||||||
|
// 活动过期,不计数
|
||||||
|
let _hd = await this.getCon(call)
|
||||||
|
if (!_hd) return
|
||||||
|
|
||||||
|
// let _mydata = await Christmasfun.getMyData(call, hdid)
|
||||||
|
let _tasks = _hd.data.task
|
||||||
|
|
||||||
|
let _setData = {
|
||||||
|
$inc: {},
|
||||||
|
$set: {}
|
||||||
|
}
|
||||||
|
let isset = 0
|
||||||
|
for (let indextask = 0; indextask < Object.keys(_tasks).length; indextask++) {
|
||||||
|
const ele = Object.keys(_tasks)[indextask];
|
||||||
|
// 具体任务配置
|
||||||
|
let _taskCon = _tasks[ele]
|
||||||
|
if (_taskCon.stype != stype) continue
|
||||||
|
|
||||||
|
let _pval = _taskCon.pval
|
||||||
|
// 不符合任务要求
|
||||||
|
if (!(await chkCall(_taskCon["cond"], chkval, arg))) continue
|
||||||
|
|
||||||
|
// 根据需求改写
|
||||||
|
val = await alchangeVal(call, _taskCon, val, arg)
|
||||||
|
|
||||||
|
isset = 1
|
||||||
|
if (isinc == 1) { // 累加
|
||||||
|
_setData["$inc"][`taskval.${ele}`] = val
|
||||||
|
} else {
|
||||||
|
_setData["$set"][`taskval.${ele}`] = val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置任务
|
||||||
|
if (isset == 1) {
|
||||||
|
await G.mongodb.collection('event').updateOne(
|
||||||
|
{uid: call.uid, type: `yuandan${_hd.hdid}`},
|
||||||
|
_setData
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -15,10 +15,21 @@ export default async function (call: ApiCall<ReqBuy, ResBuy>) {
|
|||||||
let conf = _hdinfo.data.gift[call.req.index];
|
let conf = _hdinfo.data.gift[call.req.index];
|
||||||
if (!conf || conf.payId) return call.errorCode(-1);
|
if (!conf || conf.payId) return call.errorCode(-1);
|
||||||
|
|
||||||
let selectPrize = conf.prize.map((v, i) => v[call.req.prizeIndex[i]]).filter(p => !!p);
|
let data = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType})
|
||||||
if (selectPrize.length < conf.prize.length) return call.errorCode(-2);
|
let rec = data?.rec?.[call.req.index]
|
||||||
|
if (rec) return call.errorCode(-3)
|
||||||
|
|
||||||
|
// 奖励不符合,严格判断
|
||||||
|
let dlzList = R.flatten(conf.dlz.map(i => R.values(i)))
|
||||||
|
call.req.dlz.map(i => {
|
||||||
|
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
|
||||||
|
if (!item) call.errorCode(-4)
|
||||||
|
})
|
||||||
|
|
||||||
|
let event = (await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }));
|
||||||
|
|
||||||
|
let buyNum = R.values(event?.rec)?.length || 0
|
||||||
|
|
||||||
let buyNum = (await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }))?.record?.[call.req.index] || 0;
|
|
||||||
if (buyNum >= conf.buyNum) return call.errorCode(-3);
|
if (buyNum >= conf.buyNum) return call.errorCode(-3);
|
||||||
|
|
||||||
if (conf.need.length > 0) {
|
if (conf.need.length > 0) {
|
||||||
@ -26,15 +37,15 @@ export default async function (call: ApiCall<ReqBuy, ResBuy>) {
|
|||||||
await PlayerFun.cutNeed(call, conf.need);
|
await PlayerFun.cutNeed(call, conf.need);
|
||||||
}
|
}
|
||||||
|
|
||||||
await PlayerFun.sendPrize(call, selectPrize);
|
let prize = [...conf.prize,...call.req.dlz]
|
||||||
|
|
||||||
G.mongodb.cEvent(_dbType).updateOne(
|
await PlayerFun.sendPrize(call, prize);
|
||||||
{ uid: call.uid, type: _dbType },
|
|
||||||
{ $inc: G.mongodb.createTreeObj({ key: `record.${call.req.index}`, val: 1 }) },
|
await G.mongodb.cEvent(_dbType).updateOne({uid: call.uid, type: _dbType}, {
|
||||||
{ upsert: true }
|
$set: {[`rec.${call.req.index}`]: prize},
|
||||||
);
|
}, {upsert: true})
|
||||||
|
|
||||||
call.succ({
|
call.succ({
|
||||||
prize: selectPrize
|
prize: prize
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -13,7 +13,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType });
|
let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType });
|
||||||
|
|
||||||
call.succ({
|
call.succ({
|
||||||
record: db?.record || {},
|
rec: db?.rec || {},
|
||||||
hdinfo: _hdinfo
|
hdinfo: _hdinfo
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -8,4 +8,11 @@ export default async function (call: ApiCall<ReqhdGetList, ReshdGetList>) {
|
|||||||
let _hdList = await HuoDongFun.gethdList(call)
|
let _hdList = await HuoDongFun.gethdList(call)
|
||||||
|
|
||||||
call.succ({hdlist: _hdList});
|
call.succ({hdlist: _hdList});
|
||||||
|
|
||||||
|
// 消费竞赛是跨服活动,活动开启时,同步当前用户信息到跨服数据库
|
||||||
|
G.huodong.xfjs = !!_hdList.find(i => i.htype == 11);
|
||||||
|
if (G.huodong.xfjs) {
|
||||||
|
let myUser = await G.mongodb.collection('user').findOne({uid: call.uid})
|
||||||
|
G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, {$set: myUser}, {upsert: true})
|
||||||
|
}
|
||||||
}
|
}
|
@ -15,16 +15,13 @@ export default async function (call: ApiCall<ReqList, ResList>) {
|
|||||||
]).toArray();
|
]).toArray();
|
||||||
break;
|
break;
|
||||||
case 'friend':
|
case 'friend':
|
||||||
//res = await G.redis.gets('user', ...my.data.friendList.map(uid => [uid] as [string]))
|
|
||||||
res = (await G.mongodb.find('user',{uid:{$in:my.data.friendList}})) as any;
|
res = (await G.mongodb.find('user',{uid:{$in:my.data.friendList}})) as any;
|
||||||
break;
|
break;
|
||||||
case 'apply':
|
case 'apply':
|
||||||
// 预防申请列表出现脏数据(过滤已添加好友)
|
// 预防申请列表出现脏数据(过滤已添加好友)
|
||||||
//res = await G.redis.gets('user', ...);
|
|
||||||
res = (await G.mongodb.find('user',{uid:{$in: my.data.applyList.filter(uid => my.data.friendList.indexOf(uid) == -1) }})) as any
|
res = (await G.mongodb.find('user',{uid:{$in: my.data.applyList.filter(uid => my.data.friendList.indexOf(uid) == -1) }})) as any
|
||||||
break;
|
break;
|
||||||
case 'black':
|
case 'black':
|
||||||
//res = await G.redis.gets('user', ...my.data.blacklist.map(uid => [uid] as [string]))
|
|
||||||
res = (await G.mongodb.find('user',{uid:{$in: my.data.blacklist}})) as any;
|
res = (await G.mongodb.find('user',{uid:{$in: my.data.blacklist}})) as any;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ export default async function (call: ApiCall<ReqApplyList, ResApplyList>) {
|
|||||||
let GHdata = await call.conn.gonghui
|
let GHdata = await call.conn.gonghui
|
||||||
|
|
||||||
if (GHdata.data.applyList?.length > 0) {
|
if (GHdata.data.applyList?.length > 0) {
|
||||||
//let players = await G.redis.gets('user', ...GHdata.data.applyList.map(a => [a.uid] as [string]));
|
|
||||||
let uids = GHdata.data.applyList.map((i)=>i.uid);
|
let uids = GHdata.data.applyList.map((i)=>i.uid);
|
||||||
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ export default async function (call: ApiCall<ReqFbOpen, ResFbOpen>) {
|
|||||||
if (call.req.fbId != gh.data.fuben.id) {
|
if (call.req.fbId != gh.data.fuben.id) {
|
||||||
let md = await G.mongodb.collection('gonghuiFb').findOne({ ghId: gh.data._id, fbId: call.req.fbId });
|
let md = await G.mongodb.collection('gonghuiFb').findOne({ ghId: gh.data._id, fbId: call.req.fbId });
|
||||||
let uids = Object.keys(md.rankList);
|
let uids = Object.keys(md.rankList);
|
||||||
//let players = await G.redis.gets('user', ...uids.map(uid => [uid] as [string]));
|
|
||||||
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
||||||
res.rankList = players.map(p => {
|
res.rankList = players.map(p => {
|
||||||
return {
|
return {
|
||||||
@ -22,7 +21,6 @@ export default async function (call: ApiCall<ReqFbOpen, ResFbOpen>) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
let uids = Object.keys(gh.data.fuben.dps);
|
let uids = Object.keys(gh.data.fuben.dps);
|
||||||
//let players = await G.redis.gets('user', ...uids.map(uid => [uid] as [string]));
|
|
||||||
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
let players = (await G.mongodb.find('user',{uid:{$in: uids}})) as any;
|
||||||
res.rankList = players.map(p => {
|
res.rankList = players.map(p => {
|
||||||
return {
|
return {
|
||||||
|
@ -29,12 +29,8 @@ export async function getFinished(conn: BaseConnection, types: string[]) {
|
|||||||
else if (type == 'use_attr_rmbmoney') obj[type] = await ActionLog.getRetainLog(conn.uid, 'use_attr_rmbmoney');
|
else if (type == 'use_attr_rmbmoney') obj[type] = await ActionLog.getRetainLog(conn.uid, 'use_attr_rmbmoney');
|
||||||
else if (type == 'zccg') obj[type] = (await G.mongodb.collection('pata').findOne({ uid: conn.uid }))?.lv || 0;
|
else if (type == 'zccg') obj[type] = (await G.mongodb.collection('pata').findOne({ uid: conn.uid }))?.lv || 0;
|
||||||
else if (type == 'equip_star_5') {
|
else if (type == 'equip_star_5') {
|
||||||
//let equips = await G.redis.get('equip', conn.uid);
|
|
||||||
//obj[type] = Object.values(equips).filter(e => e.star >= 5).length;
|
|
||||||
obj[type] = await G.mongodb.collection('equip').count({ uid: conn.uid, star: { $gte: 5 } });
|
obj[type] = await G.mongodb.collection('equip').count({ uid: conn.uid, star: { $gte: 5 } });
|
||||||
} else if (type == 'peijian_colour_5') {
|
} else if (type == 'peijian_colour_5') {
|
||||||
//let peijians = await G.redis.get('peijian', conn.uid);
|
|
||||||
//obj[type] = Object.values(peijians).filter(p => G.gc.peijian[p.peijianId].colour >= 5).length;
|
|
||||||
obj[type] = await G.mongodb.collection('peijian').count({ uid: conn.uid, peijianId: { $in: peijianGteColor5ID } });
|
obj[type] = await G.mongodb.collection('peijian').count({ uid: conn.uid, peijianId: { $in: peijianGteColor5ID } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,6 @@ export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
|||||||
await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({uid: call.conn.uid, type: 'usertasklog'},
|
await G.mongodb.collection('playerInfo', 'usertasklog').updateOne({uid: call.conn.uid, type: 'usertasklog'},
|
||||||
{$set: {maxherolv: maxherolv, herocolor: color}}, {upsert: true});
|
{$set: {maxherolv: maxherolv, herocolor: color}}, {upsert: true});
|
||||||
|
|
||||||
//G.redis.set('hero', call.uid, kvList);
|
|
||||||
|
|
||||||
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_hero').findOne({
|
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_hero').findOne({
|
||||||
uid: call.conn.uid,
|
uid: call.conn.uid,
|
||||||
type: 'lshd_hero'
|
type: 'lshd_hero'
|
||||||
|
@ -36,23 +36,3 @@ export default async function (call: ApiCall<ReqLvUp, ResLvUp, ServiceType>) {
|
|||||||
|
|
||||||
kfjsFun.setHeroLvCount(call)
|
kfjsFun.setHeroLvCount(call)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// export default async function (call: ApiCall<ReqLvUp, ResLvUp, ServiceType>) {
|
|
||||||
// let hero = await G.redis.get('hero', call.uid, call.req.id);
|
|
||||||
// if (!hero) return call.errorCode(-1);
|
|
||||||
// if (hero.lv >= call.conn.gud.lv * 3) return call.errorCode(-2);
|
|
||||||
//
|
|
||||||
// let need = HeroShared.getHeroLvUpNeed(hero.heroId, hero.lv);
|
|
||||||
// await PlayerFun.checkNeedIsMeet(call, need);
|
|
||||||
// await PlayerFun.cutNeed(call, need);
|
|
||||||
// await HeroFun.changeHeroAttr(call, hero, {
|
|
||||||
// lv: hero.lv + 1
|
|
||||||
// });
|
|
||||||
// event_cszl_record(call.conn.gud, hero.heroId, hero.lv, 'lv')
|
|
||||||
//
|
|
||||||
// HongDianChange.sendChangeKey(call.uid, ['taskhd', 'huodonghd']);
|
|
||||||
//
|
|
||||||
// call.succ({ lv: hero.lv });
|
|
||||||
// }
|
|
@ -221,27 +221,6 @@ export class HongDianFun {
|
|||||||
let prize = G.gc.pata[_myData.lv - 1]?.sdprize;
|
let prize = G.gc.pata[_myData.lv - 1]?.sdprize;
|
||||||
_res.val.saodang.show = max - (_myData.saodangNum || 0) > 0 && !!prize
|
_res.val.saodang.show = max - (_myData.saodangNum || 0) > 0 && !!prize
|
||||||
_res.show = _res.show || _res.val.saodang.show
|
_res.show = _res.show || _res.val.saodang.show
|
||||||
// 商店判断
|
|
||||||
// 个人爬塔商店购买情况
|
|
||||||
// let shopData = await G.redis.get('shop', call.uid, '7'); // 商店编号7,未理清商店id存放的数据表,后续该出尽量改为数据库读取
|
|
||||||
|
|
||||||
// 12.12策划确定爬塔id7的商店移除,此处商店不再需要红点
|
|
||||||
// let shopData = await ShopFun.getShopData(call.uid, "7")
|
|
||||||
// if (shopData) {
|
|
||||||
// let {buyNum, shopItems} = shopData
|
|
||||||
// // 获取爬塔商店商品
|
|
||||||
// for (let index in shopItems) {
|
|
||||||
// let x = shopItems[index]
|
|
||||||
// if (x.needZCCG > 0 && x.needZCCG < _myData.lv && (buyNum && !buyNum[index])) {
|
|
||||||
// // 验证是否达到购买条件
|
|
||||||
// let isOk = await (await PlayerFun.checkNeedIsMeet(call, x.buyNeed, false)).isOk
|
|
||||||
// if (isOk) {
|
|
||||||
// _res.show = true
|
|
||||||
// _res.val.shopItems.show = true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,6 +348,10 @@ export class HuoDongHongDianFun {
|
|||||||
// 检测 htype 10 破冰活动红点
|
// 检测 htype 10 破冰活动红点
|
||||||
ishd = await this.pobinglibao(call, element)
|
ishd = await this.pobinglibao(call, element)
|
||||||
}
|
}
|
||||||
|
if (element.htype == 14) {
|
||||||
|
// 检测 htype 10 破冰活动红点
|
||||||
|
ishd = await this.yuandan(call, element)
|
||||||
|
}
|
||||||
|
|
||||||
// 此活动有红点
|
// 此活动有红点
|
||||||
if (ishd.show) {
|
if (ishd.show) {
|
||||||
@ -383,7 +366,7 @@ export class HuoDongHongDianFun {
|
|||||||
|
|
||||||
/**破冰礼包红点 */
|
/**破冰礼包红点 */
|
||||||
static async pobinglibao(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
|
static async pobinglibao(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
|
||||||
let gift = _hd?.data?.gift?.find(i => i.id == call.req.id)
|
let gift = _hd?.data?.gift?.find(i => i.free == true && !i.payId)
|
||||||
if (!gift) return {show: false}
|
if (!gift) return {show: false}
|
||||||
|
|
||||||
let payLog = await PayFun.getPayLog(call.uid, gift.payId)
|
let payLog = await PayFun.getPayLog(call.uid, gift.payId)
|
||||||
@ -397,6 +380,25 @@ export class HuoDongHongDianFun {
|
|||||||
return {show: true}
|
return {show: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**元旦活动红点 */
|
||||||
|
static async yuandan(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
|
||||||
|
|
||||||
|
let gift = _hd?.data?.gift?.find(i => i.free && !i.payId)
|
||||||
|
|
||||||
|
// 取奖励列表,判断是否有可领取奖励
|
||||||
|
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
|
||||||
|
|
||||||
|
if (gift && !data?.gift?.[gift.id]) return {show: true}
|
||||||
|
|
||||||
|
if (data?.gameNum < _hd.data.gamefree) return {show: true}
|
||||||
|
|
||||||
|
if (!PublicShared.chkSameDate(data?.qiandaoTime || 0, G.time)) {
|
||||||
|
return {show: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {show: false}
|
||||||
|
}
|
||||||
|
|
||||||
/**开服狂欢红点 */
|
/**开服狂欢红点 */
|
||||||
static async kfkhHongDian(call: ApiCall) {
|
static async kfkhHongDian(call: ApiCall) {
|
||||||
let _res: hongdianVal = {
|
let _res: hongdianVal = {
|
||||||
@ -850,7 +852,7 @@ export class HuoDongHongDianFun {
|
|||||||
static async zixuanlibaoHongDian(call: ApiCall, hdCon: ReqAddHuoDong): Promise<hongdianVal> {
|
static async zixuanlibaoHongDian(call: ApiCall, hdCon: ReqAddHuoDong): Promise<hongdianVal> {
|
||||||
let _dbType: `zixuanlibao${number}` = `zixuanlibao${hdCon.hdid}`
|
let _dbType: `zixuanlibao${number}` = `zixuanlibao${hdCon.hdid}`
|
||||||
let db = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType});
|
let db = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType});
|
||||||
if (!db?.record?.[0]) {
|
if (!db?.rec) {
|
||||||
return {show: true}
|
return {show: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,21 +4,6 @@ import { ReqGetList, ResGetList } from "../../shared/protocols/item/PtlGetList";
|
|||||||
import { getItemList } from "../../public/item";
|
import { getItemList } from "../../public/item";
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
||||||
// let list: ResGetList['list'] = {};
|
|
||||||
// let kvList: k_v<RedisCollections2['item']> = {};
|
|
||||||
// let arrList = await G.mongodb.collection('item').find({ uid: call.uid,num:{$ne:0}}).toArray();
|
|
||||||
|
|
||||||
// arrList.forEach(v => {
|
|
||||||
// let d = G.mongodb.conversionIdObj(v);
|
|
||||||
// kvList[G.formatRedisKey(d.itemId)] = d;
|
|
||||||
// list[d.itemId] = d;
|
|
||||||
// });
|
|
||||||
|
|
||||||
//去掉item Redis相关
|
|
||||||
//G.redis.set('item', call.uid, kvList);
|
|
||||||
|
|
||||||
//call.conn.item = list;
|
|
||||||
|
|
||||||
let list = await getItemList(call.uid);
|
let list = await getItemList(call.uid);
|
||||||
call.succ({
|
call.succ({
|
||||||
list: list
|
list: list
|
||||||
|
@ -20,9 +20,6 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
{$set: {resetTime: G.time, receivedArr: [], buyFightNum: 0, useFightNum: 0}},
|
{$set: {resetTime: G.time, receivedArr: [], buyFightNum: 0, useFightNum: 0}},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// G.redis.set('jjc', call.uid, data);
|
|
||||||
|
|
||||||
data.recordWin = data.recordWin || 0;
|
data.recordWin = data.recordWin || 0;
|
||||||
let enemy = await JJCFun.randomEnemy(call.uid)
|
let enemy = await JJCFun.randomEnemy(call.uid)
|
||||||
|
|
||||||
@ -30,4 +27,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
...data,
|
...data,
|
||||||
...enemy
|
...enemy
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
JJCFun.checkUpdatePlayer()
|
||||||
|
|
||||||
|
}
|
@ -13,8 +13,6 @@ export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
|||||||
list[d._id] = d;
|
list[d._id] = d;
|
||||||
});
|
});
|
||||||
|
|
||||||
// G.redis.set('shiwu', call.uid, kvList);
|
|
||||||
|
|
||||||
call.succ({
|
call.succ({
|
||||||
list: list
|
list: list
|
||||||
});
|
});
|
||||||
|
@ -11,7 +11,7 @@ export default async function (call: ApiCall<ReqBuy, ResBuy>) {
|
|||||||
|
|
||||||
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
||||||
|
|
||||||
let shopData = await ShopFun.getShopData(uid, shopId);
|
let shopData = await ShopFun.getShopData(uid, shopId, call.conn.gud.lv);
|
||||||
|
|
||||||
let shopItem = shopData.shopItems[index];
|
let shopItem = shopData.shopItems[index];
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
|||||||
|
|
||||||
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
||||||
|
|
||||||
let shopData = await ShopFun.getShopData(uid, shopId)
|
let shopData = await ShopFun.getShopData(uid, shopId, call.conn.gud.lv)
|
||||||
|
|
||||||
call.succ(shopData);
|
call.succ(shopData);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { ApiCall } from "tsrpc";
|
import {ApiCall} from "tsrpc";
|
||||||
import { PlayerFun } from '../../public/player';
|
import {PlayerFun} from '../../public/player';
|
||||||
import { ShopFun } from '../../public/shop';
|
import {ShopFun} from '../../public/shop';
|
||||||
import { ReqRefresh, ResRefresh } from "../../shared/protocols/shop/PtlRefresh";
|
import {ReqRefresh, ResRefresh} from "../../shared/protocols/shop/PtlRefresh";
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqRefresh, ResRefresh>) {
|
export default async function (call: ApiCall<ReqRefresh, ResRefresh>) {
|
||||||
let shopId = call.req.shopId;
|
let shopId = call.req.shopId;
|
||||||
@ -9,7 +9,7 @@ export default async function (call: ApiCall<ReqRefresh, ResRefresh>) {
|
|||||||
|
|
||||||
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
let uid = shopId != "2" ? call.uid : call.conn.gud.ghId
|
||||||
|
|
||||||
let shopData = await ShopFun.getShopData(uid, shopId);
|
let shopData = await ShopFun.getShopData(uid, shopId, call.conn.gud.lv);
|
||||||
|
|
||||||
if (!shopData) return call.error(globalThis.lng.shop_1);
|
if (!shopData) return call.error(globalThis.lng.shop_1);
|
||||||
|
|
||||||
@ -46,6 +46,6 @@ export default async function (call: ApiCall<ReqRefresh, ResRefresh>) {
|
|||||||
|
|
||||||
await ShopFun.changeShopData(uid, shopId, change);
|
await ShopFun.changeShopData(uid, shopId, change);
|
||||||
|
|
||||||
let { buyNum, shopItems, ...ops } = change;
|
let {buyNum, shopItems, ...ops} = change;
|
||||||
call.succ({buyNum: buyNum, shopItems: shopItems, ...ops});
|
call.succ({buyNum: buyNum, shopItems: shopItems, ...ops});
|
||||||
}
|
}
|
@ -128,8 +128,6 @@ async function doLogin(call: ApiCall<ReqLogin, ResLogin>) {
|
|||||||
return call.error(lng.user_10);
|
return call.error(lng.user_10);
|
||||||
}
|
}
|
||||||
|
|
||||||
//去掉userRedis相关
|
|
||||||
//await G.redis.set('user', gud.uid, gud);
|
|
||||||
await initGud(gud.uid, gud);
|
await initGud(gud.uid, gud);
|
||||||
|
|
||||||
// 修复公会id
|
// 修复公会id
|
||||||
|
@ -20,4 +20,9 @@ export default async function (call: ApiCall<ReqPing, ResPing>) {
|
|||||||
onlineTime: onlineTime,
|
onlineTime: onlineTime,
|
||||||
openDay: PublicShared.getOpenServerDay()
|
openDay: PublicShared.getOpenServerDay()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
G.server.sendMsgByUid(call.uid, 'msg_s2c/PlayerChange', {
|
||||||
|
jinbi: call.conn.gud.jinbi,
|
||||||
|
rmbmoney: call.conn.gud.rmbmoney
|
||||||
|
});
|
||||||
}
|
}
|
@ -7,7 +7,16 @@ import { ReqDldFight, ResDldFight } from "../../shared/protocols/wzry/PtlDldFigh
|
|||||||
import { PublicShared } from "../../shared/public/public";
|
import { PublicShared } from "../../shared/public/public";
|
||||||
import { HongDianChange } from "../hongdian/fun";
|
import { HongDianChange } from "../hongdian/fun";
|
||||||
|
|
||||||
|
const maxScore = 269; // 积分上限
|
||||||
|
const lockPrefix = 'lock:DldFight:';
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqDldFight, ResDldFight>) {
|
export default async function (call: ApiCall<ReqDldFight, ResDldFight>) {
|
||||||
|
const lockKey = lockPrefix + call.uid;
|
||||||
|
const gotLock = await G.ioredis.setnx(lockKey, 1);
|
||||||
|
if (!gotLock) {
|
||||||
|
return call.errorCode(-101); // -101 并发请求, 告知客户端稍后再试 request_too_fast
|
||||||
|
}
|
||||||
|
await G.ioredis.expire(lockKey, 1); // 设置 ttl 避免死锁
|
||||||
let status = await WangZheRongYaofun.getWangZheStatus();
|
let status = await WangZheRongYaofun.getWangZheStatus();
|
||||||
if (status.status != 3) {
|
if (status.status != 3) {
|
||||||
// 未到大乱斗时间
|
// 未到大乱斗时间
|
||||||
@ -41,6 +50,10 @@ export default async function (call: ApiCall<ReqDldFight, ResDldFight>) {
|
|||||||
|
|
||||||
let _jifen = _myFight.jifen;
|
let _jifen = _myFight.jifen;
|
||||||
_myFight.jifen = _myFight.jifen + await WangZheRongYaofun.getMyScore(dldfight);
|
_myFight.jifen = _myFight.jifen + await WangZheRongYaofun.getMyScore(dldfight);
|
||||||
|
// 添加积分上限 (策划要求)
|
||||||
|
if (_myFight.jifen > maxScore) {
|
||||||
|
_myFight.jifen = maxScore;
|
||||||
|
}
|
||||||
|
|
||||||
// 设置数据
|
// 设置数据
|
||||||
let _r = await WangZheRongYaofun.setWzryDldFight(call, _myFight);
|
let _r = await WangZheRongYaofun.setWzryDldFight(call, _myFight);
|
||||||
@ -69,7 +82,7 @@ export default async function (call: ApiCall<ReqDldFight, ResDldFight>) {
|
|||||||
_mydata.jifen = _myFight.jifen;
|
_mydata.jifen = _myFight.jifen;
|
||||||
|
|
||||||
HongDianChange.sendChangeKey(call.uid, ['wzryhd']);
|
HongDianChange.sendChangeKey(call.uid, ['wzryhd']);
|
||||||
|
await G.ioredis.del(lockKey);
|
||||||
call.succ({
|
call.succ({
|
||||||
mydata: _mydata,
|
mydata: _mydata,
|
||||||
result: result,
|
result: result,
|
||||||
|
@ -44,10 +44,10 @@ export function clusterPublish(key: string, data: any) {
|
|||||||
* 在集群的N个进程中,只运行一次,在业务逻辑中也可使用
|
* 在集群的N个进程中,只运行一次,在业务逻辑中也可使用
|
||||||
*/
|
*/
|
||||||
export function clusterRunOnce(fun) {
|
export function clusterRunOnce(fun) {
|
||||||
console.log(`${process.pid}环境变量pm_id===>${process.env.pm_id}`);
|
// console.log(`${process.pid}环境变量pm_id===>${process.env.pm_id}`);
|
||||||
if (process.env.pm_id == null || process.env.pm_id === '0') {
|
if (process.env.pm_id == null || process.env.pm_id === '0') {
|
||||||
//非pm2启动的,或是pm2下启动的第一个进程
|
//非pm2启动的,或是pm2下启动的第一个进程
|
||||||
console.log("run clusterRunOnce1 ===>", process.pid)
|
// console.log("run clusterRunOnce1 ===>", process.pid)
|
||||||
fun();
|
fun();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ export function clusterRunOnce(fun) {
|
|||||||
|
|
||||||
if (firstPid == process.pid) {
|
if (firstPid == process.pid) {
|
||||||
//pm2的其中一个进程
|
//pm2的其中一个进程
|
||||||
console.log("run clusterRunOnce2 ===>", process.pid)
|
// console.log("run clusterRunOnce2 ===>", process.pid)
|
||||||
fun();
|
fun();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -242,12 +242,10 @@ BaseConnection.prototype.refreshPower = async function (this: BaseConnection<Ser
|
|||||||
if(power > this.gud?.maxpower){
|
if(power > this.gud?.maxpower){
|
||||||
//记录历史最大战力
|
//记录历史最大战力
|
||||||
//this.gud.maxpower = power;
|
//this.gud.maxpower = power;
|
||||||
//G.redis.set('user', this.uid, 'maxpower', power);
|
|
||||||
dbUpdate['maxpower'] = power;
|
dbUpdate['maxpower'] = power;
|
||||||
}
|
}
|
||||||
|
|
||||||
//this.gud.power = power;
|
//this.gud.power = power;
|
||||||
//G.redis.set('user', this.uid, 'power', power);
|
|
||||||
setGud(this.uid,dbUpdate);
|
setGud(this.uid,dbUpdate);
|
||||||
|
|
||||||
G.mongodb.collection('user').updateOne({ uid: this.uid }, { $set: dbUpdate });
|
G.mongodb.collection('user').updateOne({ uid: this.uid }, { $set: dbUpdate });
|
||||||
|
33
src/fix_patch/patch_test.ts
Normal file
33
src/fix_patch/patch_test.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { patchFun, patchInit } from "../patch";
|
||||||
|
|
||||||
|
class Path{
|
||||||
|
@patchFun
|
||||||
|
async fun1(a:any) {
|
||||||
|
//这里执行脚本的内容,加了patchFun的函数,不允许重复执行
|
||||||
|
console.log("这是第1个脚本里内容");
|
||||||
|
return 12
|
||||||
|
}
|
||||||
|
|
||||||
|
@patchFun
|
||||||
|
async fun2(a:any) {
|
||||||
|
//这里执行脚本的内容,加了patchFun的函数,不允许重复执行
|
||||||
|
console.log("这是第2个脚本里内容");
|
||||||
|
return 12
|
||||||
|
}
|
||||||
|
|
||||||
|
async run(){
|
||||||
|
await this.fun1(1);
|
||||||
|
await this.fun2(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main(){
|
||||||
|
await patchInit()
|
||||||
|
let patch = new Path();
|
||||||
|
await patch.run();
|
||||||
|
setInterval(() => {
|
||||||
|
console.log(new Date().format("MM-dd hh:mm:ss"));
|
||||||
|
}, 1000);
|
||||||
|
console.log("逻辑执行完成,等待退出");
|
||||||
|
}
|
||||||
|
main();
|
@ -1,22 +1,22 @@
|
|||||||
import EventEmitter from 'events';
|
import EventEmitter from 'events';
|
||||||
import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs';
|
import {existsSync, readdirSync, readFileSync, writeFileSync} from 'fs';
|
||||||
import { parse } from 'json5';
|
import {parse} from 'json5';
|
||||||
import * as mathjs from 'mathjs';
|
import * as mathjs from 'mathjs';
|
||||||
import { join, resolve } from 'path';
|
import {join, resolve} from 'path';
|
||||||
import { argv, env } from 'process';
|
import {argv, env} from 'process';
|
||||||
import { HttpServer, WsClient, WsServer } from 'tsrpc';
|
import {HttpServer, WsClient, WsServer} from 'tsrpc';
|
||||||
import { ServiceType as ServiceTypeCross } from './cross/protocols/serviceProto';
|
import {ServiceType as ServiceTypeCross} from './cross/protocols/serviceProto';
|
||||||
import { MyEvent } from './event';
|
import {MyEvent} from './event';
|
||||||
import { addListener, gEventType } from './globalListener';
|
import {addListener, gEventType} from './globalListener';
|
||||||
import localConfig from './localConfig';
|
import localConfig from './localConfig';
|
||||||
import { ServiceType as ServiceTypeHttp } from './monopoly/protocols/serviceProto';
|
import {ServiceType as ServiceTypeHttp} from './monopoly/protocols/serviceProto';
|
||||||
import { SchedulerManage } from './public/scheduler/scheduler';
|
import {SchedulerManage} from './public/scheduler/scheduler';
|
||||||
import { _mongodb } from './setMongodb';
|
import {_mongodb} from './setMongodb';
|
||||||
import { redisJsonFun } from './setRedis';
|
import {redisJsonFun} from './setRedis';
|
||||||
import { ResGetList } from './shared/protocols/pay/PtlGetList';
|
import {ResGetList} from './shared/protocols/pay/PtlGetList';
|
||||||
import { ServiceType as ServiceTypeWs } from './shared/protocols/serviceProto';
|
import {ServiceType as ServiceTypeWs} from './shared/protocols/serviceProto';
|
||||||
import { PublicShared } from './shared/public/public';
|
import {PublicShared} from './shared/public/public';
|
||||||
import { clusterRunOnce } from './clusterUtils';
|
import {clusterRunOnce} from './clusterUtils';
|
||||||
import * as ramda from 'ramda'
|
import * as ramda from 'ramda'
|
||||||
import Redis from 'ioredis';
|
import Redis from 'ioredis';
|
||||||
|
|
||||||
@ -33,22 +33,24 @@ declare global {
|
|||||||
type atn = { a: string, t: string | number | any, n: number; colour?: number; shiwuBuff?: any; };
|
type atn = { a: string, t: string | number | any, n: number; colour?: number; shiwuBuff?: any; };
|
||||||
|
|
||||||
/**类型过滤 */
|
/**类型过滤 */
|
||||||
type FilterConditionally<Source, Condition> = Pick<
|
type FilterConditionally<Source, Condition> = Pick<Source,
|
||||||
Source,
|
|
||||||
{
|
{
|
||||||
[K in keyof Source]: Source[K] extends Condition ? K : never
|
[K in keyof Source]: Source[K] extends Condition ? K : never
|
||||||
}[keyof Source]
|
}[keyof Source]>;
|
||||||
>;
|
|
||||||
|
|
||||||
interface Array<T> {
|
interface Array<T> {
|
||||||
/**数组随机取值 */
|
/**数组随机取值 */
|
||||||
random(): T;
|
random(): T;
|
||||||
|
|
||||||
/**取一个数组在当前数组中的交集 */
|
/**取一个数组在当前数组中的交集 */
|
||||||
intersection(other: T[]): T[];
|
intersection(other: T[]): T[];
|
||||||
|
|
||||||
/**取一个数组在当前数组中的差集 */
|
/**取一个数组在当前数组中的差集 */
|
||||||
difference(other: T[]): T[];
|
difference(other: T[]): T[];
|
||||||
|
|
||||||
/**数组是否存在重复元素 */
|
/**数组是否存在重复元素 */
|
||||||
isDuplication(): boolean;
|
isDuplication(): boolean;
|
||||||
|
|
||||||
/**打乱数组 */
|
/**打乱数组 */
|
||||||
shuffle(): this;
|
shuffle(): this;
|
||||||
}
|
}
|
||||||
@ -69,9 +71,9 @@ class _G {
|
|||||||
/**服务器日志模式 error | debug*/
|
/**服务器日志模式 error | debug*/
|
||||||
logModel: string;
|
logModel: string;
|
||||||
} = {
|
} = {
|
||||||
serverType: 'msg',
|
serverType: 'msg',
|
||||||
logModel: 'error'
|
logModel: 'error'
|
||||||
};
|
};
|
||||||
/**当前时间对象 */
|
/**当前时间对象 */
|
||||||
date: Date;
|
date: Date;
|
||||||
/**当前时间戳 */
|
/**当前时间戳 */
|
||||||
@ -93,7 +95,7 @@ class _G {
|
|||||||
/**ioredis连接对象 */
|
/**ioredis连接对象 */
|
||||||
ioredis: Redis;
|
ioredis: Redis;
|
||||||
/** 跨服 ioredis 连接对象 */
|
/** 跨服 ioredis 连接对象 */
|
||||||
iorediscross: Redis;
|
crossioredis: Redis;
|
||||||
/**mongodb连接对象 */
|
/**mongodb连接对象 */
|
||||||
mongodb: _mongodb;
|
mongodb: _mongodb;
|
||||||
/**crossmongodb连接对象 */
|
/**crossmongodb连接对象 */
|
||||||
@ -102,6 +104,11 @@ class _G {
|
|||||||
/**所有玩家的充值记录 */
|
/**所有玩家的充值记录 */
|
||||||
allPlayerPayLog: k_v<ResGetList['list']> = {};
|
allPlayerPayLog: k_v<ResGetList['list']> = {};
|
||||||
|
|
||||||
|
/**跨服活动——消费竞赛的开启状态 */
|
||||||
|
huodong = {
|
||||||
|
xfjs: false
|
||||||
|
};
|
||||||
|
|
||||||
private event = new EventEmitter();
|
private event = new EventEmitter();
|
||||||
|
|
||||||
/**映射开服时间 */
|
/**映射开服时间 */
|
||||||
@ -115,7 +122,7 @@ class _G {
|
|||||||
off(type: any, callback: any, caller?: any): void;
|
off(type: any, callback: any, caller?: any): void;
|
||||||
emit(type: any, ...args: any[]): void;
|
emit(type: any, ...args: any[]): void;
|
||||||
debug(): any;
|
debug(): any;
|
||||||
removeAllListeners(type?:any):void;
|
removeAllListeners(type?: any): void;
|
||||||
} {
|
} {
|
||||||
return MyEvent as any;
|
return MyEvent as any;
|
||||||
}
|
}
|
||||||
@ -142,10 +149,10 @@ class _G {
|
|||||||
}
|
}
|
||||||
|
|
||||||
on<T extends keyof gEventType>(event: T, callback: gEventType[T]) {
|
on<T extends keyof gEventType>(event: T, callback: gEventType[T]) {
|
||||||
return this.event.on(event, (...args)=>{
|
return this.event.on(event, (...args) => {
|
||||||
try{
|
try {
|
||||||
callback.call(this, ...args);
|
callback.call(this, ...args);
|
||||||
}catch(e){
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -166,7 +173,7 @@ class _G {
|
|||||||
if (file.endsWith('.json5')) {
|
if (file.endsWith('.json5')) {
|
||||||
let json = parse(readFileSync(join(jsonPath, file), 'utf-8'));
|
let json = parse(readFileSync(join(jsonPath, file), 'utf-8'));
|
||||||
this.gc[file.split('.')[0]] = json;
|
this.gc[file.split('.')[0]] = json;
|
||||||
} else if(file.endsWith('.json')) {
|
} else if (file.endsWith('.json')) {
|
||||||
let json = JSON.parse(readFileSync(join(jsonPath, file), 'utf-8'));
|
let json = JSON.parse(readFileSync(join(jsonPath, file), 'utf-8'));
|
||||||
this.gc[file.split('.')[0]] = json;
|
this.gc[file.split('.')[0]] = json;
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,8 @@ export type gEventType = {
|
|||||||
Class_task_156: (eventname, call, val, chkVal) => void;
|
Class_task_156: (eventname, call, val, chkVal) => void;
|
||||||
/**每日获取vip经验 */
|
/**每日获取vip经验 */
|
||||||
Class_task_157: (eventname, call, val, chkVal) => void;
|
Class_task_157: (eventname, call, val, chkVal) => void;
|
||||||
|
/**今日参与{1}次抓娃娃小游戏 */
|
||||||
|
Class_task_158: (eventname, call, val, chkVal) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function addListener() {
|
export function addListener() {
|
||||||
@ -162,9 +164,6 @@ export function addListener() {
|
|||||||
XstaskFun.uidTask[uid] = null;
|
XstaskFun.uidTask[uid] = null;
|
||||||
delete XstaskFun.uidTask[uid];
|
delete XstaskFun.uidTask[uid];
|
||||||
}
|
}
|
||||||
|
|
||||||
//离线时更新该玩家的登出时间
|
|
||||||
//G.redis.set('user', uid, 'logoutTime', G.time);
|
|
||||||
setGud(uid,{ logoutTime: G.time });
|
setGud(uid,{ logoutTime: G.time });
|
||||||
G.mongodb.collection('user').updateOne({ uid: uid }, { $set: { logoutTime: G.time } });
|
G.mongodb.collection('user').updateOne({ uid: uid }, { $set: { logoutTime: G.time } });
|
||||||
});
|
});
|
||||||
|
@ -16,7 +16,7 @@ export async function initIORedis() {
|
|||||||
G.ioredis = new Redis(G.argv.serverType == 'cross' ? G.config.crossRedisUrl : G.config.redisUrl,{
|
G.ioredis = new Redis(G.argv.serverType == 'cross' ? G.config.crossRedisUrl : G.config.redisUrl,{
|
||||||
keyPrefix: preKey,
|
keyPrefix: preKey,
|
||||||
});
|
});
|
||||||
G.iorediscross = new Redis(G.config.crossRedisUrl,{
|
G.crossioredis = new Redis(G.config.crossRedisUrl,{
|
||||||
keyPrefix: "cross_",
|
keyPrefix: "cross_",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -138,5 +138,25 @@
|
|||||||
"sicon": "icon_hspj",
|
"sicon": "icon_hspj",
|
||||||
"describe": "intr_attr_describe_15",
|
"describe": "intr_attr_describe_15",
|
||||||
"advancedEffects": ""
|
"advancedEffects": ""
|
||||||
|
},
|
||||||
|
"weiwang": {
|
||||||
|
"id": "weiwang",
|
||||||
|
"name": "intr_attr_name_16",
|
||||||
|
"undefined": "影响力",
|
||||||
|
"colour": 4,
|
||||||
|
"icon": "icon_weiwang",
|
||||||
|
"sicon": "icon_weiwang",
|
||||||
|
"describe": "intr_attr_describe_16",
|
||||||
|
"advancedEffects": ""
|
||||||
|
},
|
||||||
|
"yuandanyouxi": {
|
||||||
|
"id": "yuandanyouxi",
|
||||||
|
"name": "intr_attr_name_17",
|
||||||
|
"undefined": "元旦游戏币",
|
||||||
|
"colour": 5,
|
||||||
|
"icon": "icon_xnjb",
|
||||||
|
"sicon": "icon_xnjb",
|
||||||
|
"describe": "intr_attr_describe_17",
|
||||||
|
"advancedEffects": "ani_xiangzikuang"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -39,9 +39,9 @@
|
|||||||
],
|
],
|
||||||
//段位奖励
|
//段位奖励
|
||||||
danPrize: [
|
danPrize: [
|
||||||
{ star: [49, 49], prize: [{ a: 'item', t: '605', n:3 },{ a: 'item', t: '29', n:10 },{ a: 'item', t: '38', n:3 },{ a: 'item', t: '40', n:1 }] },
|
{ star: [49, 49], prize: [{ a: 'item', t: '605', n:3 },{ a: 'item', t: '29', n:10 },{ a: 'item', t: '631', n:3 },{ a: 'item', t: '40', n:1 }] },
|
||||||
{ star: [39, 48], prize: [{ a: 'item', t: '605', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '38', n:2 }] },
|
{ star: [39, 48], prize: [{ a: 'item', t: '605', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '631', n:2 }] },
|
||||||
{ star: [29, 38], prize: [{ a: 'item', t: '606', n:3 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '38', n:1 }] },
|
{ star: [29, 38], prize: [{ a: 'item', t: '606', n:3 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '631', n:1 }] },
|
||||||
{ star: [21, 28], prize: [{ a: 'item', t: '606', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:1000 }] },
|
{ star: [21, 28], prize: [{ a: 'item', t: '606', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:1000 }] },
|
||||||
{ star: [13, 20], prize: [{ a: 'item', t: '606', n:1 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:800 }] },
|
{ star: [13, 20], prize: [{ a: 'item', t: '606', n:1 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:800 }] },
|
||||||
{ star: [7, 12], prize: [{ a: 'item', t: '29', n:10 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:600 }] },
|
{ star: [7, 12], prize: [{ a: 'item', t: '29', n:10 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:600 }] },
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 30
|
"npc": 60001
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"allStar": 1,
|
"allStar": 1,
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 30
|
"npc": 60002
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"allStar": 2,
|
"allStar": 2,
|
||||||
@ -60,7 +60,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 30
|
"npc": 60003
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"allStar": 3,
|
"allStar": 3,
|
||||||
@ -81,7 +81,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 30
|
"npc": 60004
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"allStar": 4,
|
"allStar": 4,
|
||||||
@ -102,7 +102,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 31
|
"npc": 60005
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"allStar": 5,
|
"allStar": 5,
|
||||||
@ -123,7 +123,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 31
|
"npc": 60006
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"allStar": 6,
|
"allStar": 6,
|
||||||
@ -144,7 +144,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 31
|
"npc": 60007
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"allStar": 7,
|
"allStar": 7,
|
||||||
@ -165,7 +165,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 31
|
"npc": 60008
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"allStar": 8,
|
"allStar": 8,
|
||||||
@ -186,7 +186,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 32
|
"npc": 60009
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"allStar": 9,
|
"allStar": 9,
|
||||||
@ -207,7 +207,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 32
|
"npc": 60010
|
||||||
},
|
},
|
||||||
"10": {
|
"10": {
|
||||||
"allStar": 10,
|
"allStar": 10,
|
||||||
@ -228,7 +228,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 32
|
"npc": 60011
|
||||||
},
|
},
|
||||||
"11": {
|
"11": {
|
||||||
"allStar": 11,
|
"allStar": 11,
|
||||||
@ -249,7 +249,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 32
|
"npc": 60012
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"allStar": 12,
|
"allStar": 12,
|
||||||
@ -270,7 +270,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 33
|
"npc": 60013
|
||||||
},
|
},
|
||||||
"13": {
|
"13": {
|
||||||
"allStar": 13,
|
"allStar": 13,
|
||||||
@ -291,7 +291,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 33
|
"npc": 60014
|
||||||
},
|
},
|
||||||
"14": {
|
"14": {
|
||||||
"allStar": 14,
|
"allStar": 14,
|
||||||
@ -312,7 +312,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 33
|
"npc": 60015
|
||||||
},
|
},
|
||||||
"15": {
|
"15": {
|
||||||
"allStar": 15,
|
"allStar": 15,
|
||||||
@ -333,7 +333,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 33
|
"npc": 60016
|
||||||
},
|
},
|
||||||
"16": {
|
"16": {
|
||||||
"allStar": 16,
|
"allStar": 16,
|
||||||
@ -354,7 +354,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 34
|
"npc": 60017
|
||||||
},
|
},
|
||||||
"17": {
|
"17": {
|
||||||
"allStar": 17,
|
"allStar": 17,
|
||||||
@ -375,7 +375,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 34
|
"npc": 60018
|
||||||
},
|
},
|
||||||
"18": {
|
"18": {
|
||||||
"allStar": 18,
|
"allStar": 18,
|
||||||
@ -396,7 +396,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 34
|
"npc": 60019
|
||||||
},
|
},
|
||||||
"19": {
|
"19": {
|
||||||
"allStar": 19,
|
"allStar": 19,
|
||||||
@ -417,7 +417,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 34
|
"npc": 60020
|
||||||
},
|
},
|
||||||
"20": {
|
"20": {
|
||||||
"allStar": 20,
|
"allStar": 20,
|
||||||
@ -438,7 +438,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 35
|
"npc": 60021
|
||||||
},
|
},
|
||||||
"21": {
|
"21": {
|
||||||
"allStar": 21,
|
"allStar": 21,
|
||||||
@ -459,7 +459,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 35
|
"npc": 60022
|
||||||
},
|
},
|
||||||
"22": {
|
"22": {
|
||||||
"allStar": 22,
|
"allStar": 22,
|
||||||
@ -480,7 +480,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 35
|
"npc": 60023
|
||||||
},
|
},
|
||||||
"23": {
|
"23": {
|
||||||
"allStar": 23,
|
"allStar": 23,
|
||||||
@ -501,7 +501,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 35
|
"npc": 60024
|
||||||
},
|
},
|
||||||
"24": {
|
"24": {
|
||||||
"allStar": 24,
|
"allStar": 24,
|
||||||
@ -522,7 +522,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 36
|
"npc": 60025
|
||||||
},
|
},
|
||||||
"25": {
|
"25": {
|
||||||
"allStar": 25,
|
"allStar": 25,
|
||||||
@ -543,7 +543,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 36
|
"npc": 60026
|
||||||
},
|
},
|
||||||
"26": {
|
"26": {
|
||||||
"allStar": 26,
|
"allStar": 26,
|
||||||
@ -564,7 +564,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 36
|
"npc": 60027
|
||||||
},
|
},
|
||||||
"27": {
|
"27": {
|
||||||
"allStar": 27,
|
"allStar": 27,
|
||||||
@ -585,7 +585,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 36
|
"npc": 60028
|
||||||
},
|
},
|
||||||
"28": {
|
"28": {
|
||||||
"allStar": 28,
|
"allStar": 28,
|
||||||
@ -606,7 +606,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 37
|
"npc": 60029
|
||||||
},
|
},
|
||||||
"29": {
|
"29": {
|
||||||
"allStar": 29,
|
"allStar": 29,
|
||||||
@ -627,7 +627,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 37
|
"npc": 60030
|
||||||
},
|
},
|
||||||
"30": {
|
"30": {
|
||||||
"allStar": 30,
|
"allStar": 30,
|
||||||
@ -648,7 +648,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 37
|
"npc": 60031
|
||||||
},
|
},
|
||||||
"31": {
|
"31": {
|
||||||
"allStar": 31,
|
"allStar": 31,
|
||||||
@ -669,7 +669,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 37
|
"npc": 60032
|
||||||
},
|
},
|
||||||
"32": {
|
"32": {
|
||||||
"allStar": 32,
|
"allStar": 32,
|
||||||
@ -690,7 +690,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 38
|
"npc": 60033
|
||||||
},
|
},
|
||||||
"33": {
|
"33": {
|
||||||
"allStar": 33,
|
"allStar": 33,
|
||||||
@ -711,7 +711,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 38
|
"npc": 60034
|
||||||
},
|
},
|
||||||
"34": {
|
"34": {
|
||||||
"allStar": 34,
|
"allStar": 34,
|
||||||
@ -732,7 +732,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 38
|
"npc": 60035
|
||||||
},
|
},
|
||||||
"35": {
|
"35": {
|
||||||
"allStar": 35,
|
"allStar": 35,
|
||||||
@ -753,7 +753,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 38
|
"npc": 60036
|
||||||
},
|
},
|
||||||
"36": {
|
"36": {
|
||||||
"allStar": 36,
|
"allStar": 36,
|
||||||
@ -774,7 +774,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 39
|
"npc": 60037
|
||||||
},
|
},
|
||||||
"37": {
|
"37": {
|
||||||
"allStar": 37,
|
"allStar": 37,
|
||||||
@ -795,7 +795,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 39
|
"npc": 60038
|
||||||
},
|
},
|
||||||
"38": {
|
"38": {
|
||||||
"allStar": 38,
|
"allStar": 38,
|
||||||
@ -816,7 +816,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 39
|
"npc": 60039
|
||||||
},
|
},
|
||||||
"39": {
|
"39": {
|
||||||
"allStar": 39,
|
"allStar": 39,
|
||||||
@ -837,7 +837,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 39
|
"npc": 60040
|
||||||
},
|
},
|
||||||
"40": {
|
"40": {
|
||||||
"allStar": 40,
|
"allStar": 40,
|
||||||
@ -858,7 +858,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 40
|
"npc": 60041
|
||||||
},
|
},
|
||||||
"41": {
|
"41": {
|
||||||
"allStar": 41,
|
"allStar": 41,
|
||||||
@ -879,7 +879,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 40
|
"npc": 60042
|
||||||
},
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"allStar": 42,
|
"allStar": 42,
|
||||||
@ -900,7 +900,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 40
|
"npc": 60043
|
||||||
},
|
},
|
||||||
"43": {
|
"43": {
|
||||||
"allStar": 43,
|
"allStar": 43,
|
||||||
@ -921,7 +921,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 40
|
"npc": 60044
|
||||||
},
|
},
|
||||||
"44": {
|
"44": {
|
||||||
"allStar": 44,
|
"allStar": 44,
|
||||||
@ -942,7 +942,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 41
|
"npc": 60045
|
||||||
},
|
},
|
||||||
"45": {
|
"45": {
|
||||||
"allStar": 45,
|
"allStar": 45,
|
||||||
@ -963,7 +963,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 41
|
"npc": 60046
|
||||||
},
|
},
|
||||||
"46": {
|
"46": {
|
||||||
"allStar": 46,
|
"allStar": 46,
|
||||||
@ -984,7 +984,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 41
|
"npc": 60047
|
||||||
},
|
},
|
||||||
"47": {
|
"47": {
|
||||||
"allStar": 47,
|
"allStar": 47,
|
||||||
@ -1005,7 +1005,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 41
|
"npc": 60048
|
||||||
},
|
},
|
||||||
"48": {
|
"48": {
|
||||||
"allStar": 48,
|
"allStar": 48,
|
||||||
@ -1026,7 +1026,7 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 41
|
"npc": 60049
|
||||||
},
|
},
|
||||||
"49": {
|
"49": {
|
||||||
"allStar": 49,
|
"allStar": 49,
|
||||||
@ -1047,6 +1047,6 @@
|
|||||||
"n": 100
|
"n": 100
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"npc": 42
|
"npc": 60050
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10669,7 +10669,7 @@
|
|||||||
},
|
},
|
||||||
"attr^shengdanExp": {
|
"attr^shengdanExp": {
|
||||||
"itemId": "attr^shengdanExp",
|
"itemId": "attr^shengdanExp",
|
||||||
"name": "圣诞战令经验",
|
"name": "圣诞积分",
|
||||||
"i18nKey": "intr_attr_name_13",
|
"i18nKey": "intr_attr_name_13",
|
||||||
"detailI18nKey": "intr_attr_describe_13",
|
"detailI18nKey": "intr_attr_describe_13",
|
||||||
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
@ -10690,7 +10690,7 @@
|
|||||||
},
|
},
|
||||||
"attr^shengdanBullet": {
|
"attr^shengdanBullet": {
|
||||||
"itemId": "attr^shengdanBullet",
|
"itemId": "attr^shengdanBullet",
|
||||||
"name": "圣诞打靶币",
|
"name": "圣诞喷漆",
|
||||||
"i18nKey": "intr_attr_name_14",
|
"i18nKey": "intr_attr_name_14",
|
||||||
"detailI18nKey": "intr_attr_describe_14",
|
"detailI18nKey": "intr_attr_describe_14",
|
||||||
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
@ -10711,7 +10711,7 @@
|
|||||||
},
|
},
|
||||||
"attr^jingxuanbi": {
|
"attr^jingxuanbi": {
|
||||||
"itemId": "attr^jingxuanbi",
|
"itemId": "attr^jingxuanbi",
|
||||||
"name": "每日精选兑换币",
|
"name": "黑市票券",
|
||||||
"i18nKey": "intr_attr_name_15",
|
"i18nKey": "intr_attr_name_15",
|
||||||
"detailI18nKey": "intr_attr_describe_15",
|
"detailI18nKey": "intr_attr_describe_15",
|
||||||
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
@ -10729,5 +10729,47 @@
|
|||||||
"sellMaxCp": 500,
|
"sellMaxCp": 500,
|
||||||
"rarity": 4
|
"rarity": 4
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"attr^weiwang": {
|
||||||
|
"itemId": "attr^weiwang",
|
||||||
|
"name": "影响力",
|
||||||
|
"i18nKey": "intr_attr_name_16",
|
||||||
|
"detailI18nKey": "intr_attr_describe_16",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "attr",
|
||||||
|
"typeName": "货币",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attr^yuandanyouxi": {
|
||||||
|
"itemId": "attr^yuandanyouxi",
|
||||||
|
"name": "新年庆典币",
|
||||||
|
"i18nKey": "intr_attr_name_17",
|
||||||
|
"detailI18nKey": "intr_attr_describe_17",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "attr",
|
||||||
|
"typeName": "货币",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1413,7 +1413,7 @@
|
|||||||
"triggerType": "openCond",
|
"triggerType": "openCond",
|
||||||
"typeId": "dixialeitai_paiqian",
|
"typeId": "dixialeitai_paiqian",
|
||||||
"Type": "finger",
|
"Type": "finger",
|
||||||
"path": "Canvas/draw/uiRoot/uiView_dixialeitai_paiqian/dixialeitai_paiqian/ScrollView/view/content/list/item/ItemClass",
|
"path": "Canvas/draw/uiRoot/uiView_dixialeitai_paiqian/dixialeitai_paiqian/dxlt_txdb/ScrollView/view/content/list/item/ItemClass",
|
||||||
"undefined": "点击第一个干部",
|
"undefined": "点击第一个干部",
|
||||||
"initiative": 1,
|
"initiative": 1,
|
||||||
"location": 1,
|
"location": 1,
|
||||||
|
@ -2398,7 +2398,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_1',
|
payId: 'ycmb_2_1',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 600},{'a': 'item', 't': '4', 'n': 10} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'item', 't': '4', 'n': 5},{'a': 'item', 't': '4', 'n': 5} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 2,
|
index: 2,
|
||||||
@ -2406,7 +2406,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_2',
|
payId: 'ycmb_2_2',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1360},{'a': 'item', 't': '4', 'n': 20} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'item', 't': '4', 'n': 10},{'a': 'item', 't': '4', 'n': 10} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 3,
|
index: 3,
|
||||||
@ -2414,7 +2414,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_3',
|
payId: 'ycmb_2_3',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 2560},{'a': 'item', 't': '4', 'n': 50} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'item', 't': '4', 'n': 25},{'a': 'item', 't': '4', 'n': 25} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 4,
|
index: 4,
|
||||||
@ -2422,7 +2422,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_4',
|
payId: 'ycmb_2_4',
|
||||||
buyNum: 3,
|
buyNum: 3,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6560},{'a': 'item', 't': '4', 'n': 100} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'item', 't': '4', 'n': 50},{'a': 'item', 't': '4', 'n': 50} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 4,
|
index: 4,
|
||||||
@ -2430,7 +2430,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_5',
|
payId: 'ycmb_2_5',
|
||||||
buyNum: 10,
|
buyNum: 10,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 12960},{'a': 'item', 't': '4', 'n': 200} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'item', 't': '4', 'n': 100},{'a': 'item', 't': '4', 'n': 100} ]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
|
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
|
||||||
@ -2546,7 +2546,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_1',
|
payId: 'ycmb_2_1',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 600},{'a': 'item', 't': '4', 'n': 10} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'item', 't': '4', 'n': 5},{'a': 'item', 't': '4', 'n': 5} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 2,
|
index: 2,
|
||||||
@ -2554,7 +2554,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_2',
|
payId: 'ycmb_2_2',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1360},{'a': 'item', 't': '4', 'n': 20} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'item', 't': '4', 'n': 10},{'a': 'item', 't': '4', 'n': 10} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 3,
|
index: 3,
|
||||||
@ -2562,7 +2562,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_3',
|
payId: 'ycmb_2_3',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 2560},{'a': 'item', 't': '4', 'n': 50} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'item', 't': '4', 'n': 25},{'a': 'item', 't': '4', 'n': 25} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 4,
|
index: 4,
|
||||||
@ -2570,7 +2570,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_4',
|
payId: 'ycmb_2_4',
|
||||||
buyNum: 3,
|
buyNum: 3,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6560},{'a': 'item', 't': '4', 'n': 100} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'item', 't': '4', 'n': 50},{'a': 'item', 't': '4', 'n': 50} ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index: 4,
|
index: 4,
|
||||||
@ -2578,7 +2578,7 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'ycmb_2_5',
|
payId: 'ycmb_2_5',
|
||||||
buyNum: 10,
|
buyNum: 10,
|
||||||
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 12960},{'a': 'item', 't': '4', 'n': 200} ]
|
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'item', 't': '4', 'n': 100},{'a': 'item', 't': '4', 'n': 100} ]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
|
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
|
||||||
@ -2892,9 +2892,12 @@
|
|||||||
free: true,
|
free: true,
|
||||||
payId: '',
|
payId: '',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 30}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 30}],
|
dlz: [
|
||||||
[ {a: 'attr', t: 'jinbi', n: 50000}, {a: 'item', t: '1', n: 50000} ]
|
{
|
||||||
|
"1":{a: 'attr', t: 'jinbi', n: 50000},
|
||||||
|
"2":{a: 'item', t: '1', n: 50000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2902,43 +2905,69 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao6',
|
payId: 'zixuanlibao6',
|
||||||
buyNum: 1,
|
buyNum: 1,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 60}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 60} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '2', n: 60}, {a: 'item', t: '12', n: 50} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 1500}, {a: 'item', t: '1', n: 100000} ]
|
"1":{a: 'item', t: '2', n: 60},
|
||||||
|
"2":{a: 'item', t: '12', n: 50}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 1500},
|
||||||
|
"2":{a: 'item', t: '1', n: 100000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
need: [],
|
need: [],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao30',
|
payId: 'zixuanlibao30',
|
||||||
buyNum: 2,
|
buyNum: 2,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 300}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 300} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '2', n: 200}, {a: 'item', t: '12', n: 100} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 7000}, {a: 'item', t: '1', n: 200000} ]
|
"1":{a: 'item', t: '2', n: 200},
|
||||||
|
"2":{a: 'item', t: '12', n: 100}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 7000},
|
||||||
|
"2":{a: 'item', t: '1', n: 200000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
need: [],
|
need: [],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao68',
|
payId: 'zixuanlibao68',
|
||||||
buyNum: 2,
|
buyNum: 2,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 680}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 680} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '18', n: 100}, {a: 'item', t: '21', n: 200}, {a: 'item', t: '9', n: 1000} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 15000}, {a: 'item', t: '1', n: 300000} ]
|
"1":{a: 'item', t: '18', n: 100},
|
||||||
|
"2":{a: 'item', t: '21', n: 200},
|
||||||
|
"3":{a: 'item', t: '9', n: 1000}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 15000},
|
||||||
|
"2":{a: 'item', t: '1', n: 300000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
need: [],
|
need: [],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao128',
|
payId: 'zixuanlibao128',
|
||||||
buyNum: 2,
|
buyNum: 2,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 1280}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 1280} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '18', n: 200}, {a: 'item', t: '9', n: 2000}, {a: 'item', t: '10', n: 200} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 20000}, {a: 'item', t: '1', n: 500000} ]
|
"1":{a: 'item', t: '18', n: 200},
|
||||||
|
"2":{a: 'item', t: '9', n: 2000},
|
||||||
|
"3":{a: 'item', t: '10', n: 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 20000},
|
||||||
|
"2":{a: 'item', t: '1', n: 500000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2946,10 +2975,17 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao328',
|
payId: 'zixuanlibao328',
|
||||||
buyNum: 3,
|
buyNum: 3,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 3280}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 3280} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '600', n: 20}, {a: 'item', t: '601', n: 20}, {a: 'item', t: '616', n: 40} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 50000}, {a: 'item', t: '1', n: 700000} ]
|
"1":{a: 'item', t: '600', n: 20},
|
||||||
|
"2":{a: 'item', t: '601', n: 20},
|
||||||
|
"3":{a: 'item', t: '616', n: 40}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 50000},
|
||||||
|
"2":{a: 'item', t: '1', n: 700000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2957,10 +2993,17 @@
|
|||||||
free: false,
|
free: false,
|
||||||
payId: 'zixuanlibao648',
|
payId: 'zixuanlibao648',
|
||||||
buyNum: 3,
|
buyNum: 3,
|
||||||
prize: [
|
prize: [{a: 'attr', t: 'rmbmoney', n: 6480}],
|
||||||
[ {a: 'attr', t: 'rmbmoney', n: 6480} ],
|
dlz: [
|
||||||
[ {a: 'item', t: '600', n: 40}, {a: 'item', t: '601', n: 40}, {a: 'item', t: '616', n: 80} ],
|
{
|
||||||
[ {a: 'item', t: '27', n: 100000}, {a: 'item', t: '1', n: 1000000} ]
|
"1":{a: 'item', t: '600', n: 40},
|
||||||
|
"2":{a: 'item', t: '601', n: 40},
|
||||||
|
"3":{a: 'item', t: '616', n: 80}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1":{a: 'item', t: '27', n: 100000},
|
||||||
|
"2":{a: 'item', t: '1', n: 1000000}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -4283,5 +4326,594 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"hdid" : 14000, // 唯一活动id 元旦活动
|
||||||
|
"htype" : 14,
|
||||||
|
"stype" : 1400,
|
||||||
|
"ttype" : 4, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
||||||
|
"stime" : 60,
|
||||||
|
"rtime" : 90,
|
||||||
|
"etime" : 90,
|
||||||
|
"name" : "xnhd_tips_1",
|
||||||
|
"icon" : "icon_xfdj",
|
||||||
|
"showtime" : "根据玩家注册时间,游戏返回时复写",
|
||||||
|
"data" : {
|
||||||
|
//任务
|
||||||
|
"task" : {
|
||||||
|
"1": {
|
||||||
|
"pval" : 1,
|
||||||
|
"stype" : "128",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 4,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "rmbmoney",
|
||||||
|
"n" : 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 100000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_1"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"pval" : 300,
|
||||||
|
"stype" : "116",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 5,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "600",
|
||||||
|
"n" : 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 500000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_2"
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"pval" : 1000,
|
||||||
|
"stype" : "116",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 2,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 300
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "600",
|
||||||
|
"n" : 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 1000000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_3"
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"pval" : 2000,
|
||||||
|
"stype" : "116",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 1,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 150
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "6",
|
||||||
|
"n" : 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 200000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_4"
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"pval" : 3,
|
||||||
|
"stype" : "142",
|
||||||
|
"cond": [2],
|
||||||
|
"tiaozhuan": 6,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "2",
|
||||||
|
"n" : 500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 200000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_5"
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"pval" : 3,
|
||||||
|
"stype" : "122",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 7,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "12",
|
||||||
|
"n" : 400
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 200000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_6"
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"pval" : 1,
|
||||||
|
"stype" : "155",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 8,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "rmbmoney",
|
||||||
|
"n" : 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 100000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_7"
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"pval" : 1,
|
||||||
|
"stype" : "127",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 10,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "21",
|
||||||
|
"n" : 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 100000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_8"
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"pval" : 1,
|
||||||
|
"stype" : "154",
|
||||||
|
"cond": [],
|
||||||
|
"tiaozhuan": 11,
|
||||||
|
"prize" : [
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanExp",
|
||||||
|
"n" : 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "shengdanBullet",
|
||||||
|
"n" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "attr",
|
||||||
|
"t" : "jinbi",
|
||||||
|
"n" : 100000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a" : "item",
|
||||||
|
"t" : "1",
|
||||||
|
"n" : 100000
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"des" : "intr_cszl_des_9"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//玩游戏需要消耗
|
||||||
|
"gameneed": [{"a": "attr", "t":"yuandanyouxi", "n": 1}],
|
||||||
|
//游戏奖品池
|
||||||
|
"game": [
|
||||||
|
//P是权重
|
||||||
|
//gailv是显示的概率
|
||||||
|
{"a": "item", "t":"1", "n": 10000000, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"12", "n": 1000, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"2", "n": 2000, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"18", "n": 100, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"18", "n": 200, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"18", "n": 300, "p": 10, "gailv": 10},
|
||||||
|
{"a": "item", "t":"18", "n": 400, "p": 10, "gailv": 10}
|
||||||
|
],
|
||||||
|
//免费玩游戏次数
|
||||||
|
"gamefree": 3,
|
||||||
|
//钻石兑换
|
||||||
|
"duihuan": [
|
||||||
|
{id:1, need: [{a: 'attr', t: 'rmbmoney', n: 1000}], prize: [{a: 'item', t: '610', n: 1},{a: 'item', t: '2', n: 500},{a: 'item', t: '1', n: 1000}], buyNum: 2 },
|
||||||
|
{id:2, need: [{a: 'attr', t: 'rmbmoney', n: 2000}], prize: [{a: 'item', t: '610', n: 2},{a: 'item', t: '2', n: 600},{a: 'item', t: '1', n: 550}], buyNum: 1 },
|
||||||
|
{id:3, need: [{a: 'attr', t: 'rmbmoney', n: 3000}], prize: [{a: 'item', t: '610', n: 3},{a: 'item', t: '2', n: 700},{a: 'item', t: '1', n: 230}], buyNum: 1 },
|
||||||
|
{id:4, need: [{a: 'attr', t: 'rmbmoney', n: 4000}], prize: [{a: 'item', t: '610', n: 4},{a: 'item', t: '2', n: 800},{a: 'item', t: '1', n: 690}], buyNum: 3 },
|
||||||
|
{id:5, need: [{a: 'attr', t: 'rmbmoney', n: 5000}], prize: [{a: 'item', t: '610', n: 5},{a: 'item', t: '2', n: 900},{a: 'item', t: '1', n: 3300}], buyNum: 5 },
|
||||||
|
{id:6, need: [{a: 'attr', t: 'rmbmoney', n: 6000}], prize: [{a: 'item', t: '610', n: 6},{a: 'item', t: '2', n: 1000},{a: 'item', t: '1', n: 130}], buyNum: 6 }
|
||||||
|
],
|
||||||
|
//活动礼包
|
||||||
|
"gift": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"free": true,
|
||||||
|
"payId": "",
|
||||||
|
"buynum": 1,
|
||||||
|
//固定奖励
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 100}],
|
||||||
|
"des" : "intr_cszl_des_10",
|
||||||
|
//自选池
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "attr", "t":"jinbi", "n": 100000},
|
||||||
|
"2": {"a": "item", "t":"1", "n": 50000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_1",
|
||||||
|
"buynum": 2,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 120}],
|
||||||
|
"des" : "intr_cszl_des_11",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"2", "n": 400},
|
||||||
|
"2": {"a": "item", "t":"12", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "attr", "t":"jinbi", "n": 1000000},
|
||||||
|
"2": {"a": "item", "t":"1", "n": 500000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_2",
|
||||||
|
"buynum": 2,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 300}],
|
||||||
|
"des" : "intr_cszl_des_12",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_3",
|
||||||
|
"buynum": 5,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 680}],
|
||||||
|
"des" : "intr_cszl_des_12",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_4",
|
||||||
|
"buynum": 9,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 1280}],
|
||||||
|
"des" : "intr_cszl_des_13",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 10},
|
||||||
|
"2": {"a": "item", "t":"605", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"606", "n": 1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 10},
|
||||||
|
"2": {"a": "item", "t":"605", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"606", "n": 1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"1", "n": 5000000},
|
||||||
|
"2": {"a": "attr", "t":"jinbi", "n": 10000000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_5",
|
||||||
|
"buynum": 9,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 3280}],
|
||||||
|
"des" : "intr_cszl_des_14",
|
||||||
|
"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}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"free": false,
|
||||||
|
"payId": "xnhd_libao_6",
|
||||||
|
"buynum": 9,
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 6480}],
|
||||||
|
"des" : "intr_cszl_des_14",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 30},
|
||||||
|
"2": {"a": "item", "t":"5002", "n": 20},
|
||||||
|
"3": {"a": "item", "t":"5004", "n": 20}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 30},
|
||||||
|
"2": {"a": "item", "t":"5002", "n": 20},
|
||||||
|
"3": {"a": "item", "t":"5004", "n": 20}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"605", "n": 4},
|
||||||
|
"2": {"a": "item", "t":"606", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"18", "n": 1000},
|
||||||
|
"4": {"a": "item", "t":"23", "n": 1000000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
],
|
||||||
|
//签到奖励
|
||||||
|
"qiandao": {
|
||||||
|
"1": {
|
||||||
|
//固定奖励
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 100}],
|
||||||
|
"des" : "intr_cszl_des_10",
|
||||||
|
//自选池
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "attr", "t":"jinbi", "n": 100000},
|
||||||
|
"2": {"a": "item", "t":"1", "n": 50000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 120}],
|
||||||
|
"des" : "intr_cszl_des_11",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"2", "n": 400},
|
||||||
|
"2": {"a": "item", "t":"12", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "attr", "t":"jinbi", "n": 1000000},
|
||||||
|
"2": {"a": "item", "t":"1", "n": 500000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 300}],
|
||||||
|
"des" : "intr_cszl_des_12",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"9", "n": 500},
|
||||||
|
"2": {"a": "item", "t":"10", "n": 100}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 680}],
|
||||||
|
"des" : "intr_cszl_des_12",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"615", "n": 1},
|
||||||
|
"2": {"a": "item", "t":"18", "n": 200}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 1280}],
|
||||||
|
"des" : "intr_cszl_des_13",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 10},
|
||||||
|
"2": {"a": "item", "t":"605", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"606", "n": 1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 10},
|
||||||
|
"2": {"a": "item", "t":"605", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"606", "n": 1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"1", "n": 5000000},
|
||||||
|
"2": {"a": "attr", "t":"jinbi", "n": 10000000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 3280}],
|
||||||
|
"des" : "intr_cszl_des_14",
|
||||||
|
"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}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"prize": [{"a": "attr", "t":"rmbmoney", "n": 6480}],
|
||||||
|
"des" : "intr_cszl_des_14",
|
||||||
|
"dlz": [
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 30},
|
||||||
|
"2": {"a": "item", "t":"5002", "n": 20},
|
||||||
|
"3": {"a": "item", "t":"5004", "n": 20}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"600", "n": 30},
|
||||||
|
"2": {"a": "item", "t":"5002", "n": 20},
|
||||||
|
"3": {"a": "item", "t":"5004", "n": 20}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"1": {"a": "item", "t":"605", "n": 4},
|
||||||
|
"2": {"a": "item", "t":"606", "n": 2},
|
||||||
|
"3": {"a": "item", "t":"18", "n": 1000},
|
||||||
|
"4": {"a": "item", "t":"23", "n": 1000000}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
@ -804,7 +804,7 @@
|
|||||||
"40": {
|
"40": {
|
||||||
"id": 40,
|
"id": 40,
|
||||||
"name": "intr_item_name_40",
|
"name": "intr_item_name_40",
|
||||||
"undefined": "丛林狩猎霸主级玩家的特殊身份标识",
|
"undefined": "丛林狩猎霸主级玩家的特殊身份标识,使用后持续7天",
|
||||||
"type": 7,
|
"type": 7,
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"colour": 5,
|
"colour": 5,
|
||||||
@ -1230,6 +1230,16 @@
|
|||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "4013",
|
"t": "4013",
|
||||||
"n": 1
|
"n": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "item",
|
||||||
|
"t": "4002",
|
||||||
|
"n": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "item",
|
||||||
|
"t": "4012",
|
||||||
|
"n": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"payId": "",
|
"payId": "",
|
||||||
@ -2087,30 +2097,15 @@
|
|||||||
"useNeed": [],
|
"useNeed": [],
|
||||||
"usePrize": [],
|
"usePrize": [],
|
||||||
"selecPrize": [
|
"selecPrize": [
|
||||||
{
|
|
||||||
"a": "hero",
|
|
||||||
"t": "5001",
|
|
||||||
"n": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"a": "hero",
|
"a": "hero",
|
||||||
"t": "5002",
|
"t": "5002",
|
||||||
"n": 1
|
"n": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"a": "hero",
|
|
||||||
"t": "5003",
|
|
||||||
"n": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"a": "hero",
|
"a": "hero",
|
||||||
"t": "5004",
|
"t": "5004",
|
||||||
"n": 1
|
"n": 1
|
||||||
},
|
|
||||||
{
|
|
||||||
"a": "hero",
|
|
||||||
"t": "5005",
|
|
||||||
"n": 1
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"payId": "",
|
"payId": "",
|
||||||
@ -2889,10 +2884,7 @@
|
|||||||
"type": 3,
|
"type": 3,
|
||||||
"sort": 3,
|
"sort": 3,
|
||||||
"colour": 6,
|
"colour": 6,
|
||||||
"way": [
|
"way": [],
|
||||||
9,
|
|
||||||
75
|
|
||||||
],
|
|
||||||
"go": "",
|
"go": "",
|
||||||
"icon": "icon_gbsp_5002",
|
"icon": "icon_gbsp_5002",
|
||||||
"describe": "intr_item_describe_5002",
|
"describe": "intr_item_describe_5002",
|
||||||
@ -2933,10 +2925,7 @@
|
|||||||
"type": 3,
|
"type": 3,
|
||||||
"sort": 3,
|
"sort": 3,
|
||||||
"colour": 6,
|
"colour": 6,
|
||||||
"way": [
|
"way": [],
|
||||||
9,
|
|
||||||
75
|
|
||||||
],
|
|
||||||
"go": "",
|
"go": "",
|
||||||
"icon": "icon_gbsp_5004",
|
"icon": "icon_gbsp_5004",
|
||||||
"describe": "intr_item_describe_5004",
|
"describe": "intr_item_describe_5004",
|
||||||
@ -4024,6 +4013,7 @@
|
|||||||
"50010": {
|
"50010": {
|
||||||
"id": 50010,
|
"id": 50010,
|
||||||
"name": "playerheadFrame_name_24",
|
"name": "playerheadFrame_name_24",
|
||||||
|
"undefined": "使用后解锁头像框“披星戴月”",
|
||||||
"type": 7,
|
"type": 7,
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"colour": 4,
|
"colour": 4,
|
||||||
|
3450
src/json/npc.json
3450
src/json/npc.json
File diff suppressed because it is too large
Load Diff
@ -1378,5 +1378,18 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"lv": 15
|
"lv": 15
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"weiwang": {
|
||||||
|
"name": "weiwang",
|
||||||
|
"undefined": "威望",
|
||||||
|
"and": {
|
||||||
|
"lv": 15
|
||||||
|
},
|
||||||
|
"or": {},
|
||||||
|
"time": 0,
|
||||||
|
"tips": "openCond_tips_96",
|
||||||
|
"display": {
|
||||||
|
"lv": 15
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
8000
src/json/pata.json
8000
src/json/pata.json
File diff suppressed because it is too large
Load Diff
@ -630,7 +630,7 @@
|
|||||||
{
|
{
|
||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "1",
|
"t": "1",
|
||||||
"n": 1000000
|
"n": 2000000
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -661,7 +661,7 @@
|
|||||||
{
|
{
|
||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "1",
|
"t": "1",
|
||||||
"n": 2000000
|
"n": 5000000
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -764,7 +764,7 @@
|
|||||||
{
|
{
|
||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "1",
|
"t": "1",
|
||||||
"n": 12000000
|
"n": 30000000
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -4246,7 +4246,7 @@
|
|||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_mingwang_4",
|
"name": "pay_name_mingwang_4",
|
||||||
"undefined": "名望礼包_128元",
|
"undefined": "名望礼包_128元",
|
||||||
"time": -1,
|
"time": 86400,
|
||||||
"buys": 1,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4265,8 +4265,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_1",
|
"name": "pay_name_wkdlibao_1",
|
||||||
"undefined": "周末礼包_1元",
|
"undefined": "期间限定_1元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4285,8 +4285,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_2",
|
"name": "pay_name_wkdlibao_2",
|
||||||
"undefined": "周末礼包_6元",
|
"undefined": "期间限定_6元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4305,8 +4305,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_3",
|
"name": "pay_name_wkdlibao_3",
|
||||||
"undefined": "周末礼包_30元",
|
"undefined": "期间限定_30元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4325,8 +4325,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_4",
|
"name": "pay_name_wkdlibao_4",
|
||||||
"undefined": "周末礼包_68元",
|
"undefined": "期间限定_68元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4345,8 +4345,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_5",
|
"name": "pay_name_wkdlibao_5",
|
||||||
"undefined": "周末礼包_128元",
|
"undefined": "期间限定_128元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4365,8 +4365,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_6",
|
"name": "pay_name_wkdlibao_6",
|
||||||
"undefined": "周末礼包_328元",
|
"undefined": "期间限定_328元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -4385,8 +4385,8 @@
|
|||||||
"prize": [],
|
"prize": [],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
"name": "pay_name_wkdlibao_7",
|
"name": "pay_name_wkdlibao_7",
|
||||||
"undefined": "周末礼包_648元",
|
"undefined": "期间限定_648元",
|
||||||
"time": 86400,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
@ -6473,5 +6473,205 @@
|
|||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_1": {
|
||||||
|
"id": "xnhd_libao_1",
|
||||||
|
"money": 0.5,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_1",
|
||||||
|
"undefined": "新年活动_1",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_2": {
|
||||||
|
"id": "xnhd_libao_2",
|
||||||
|
"money": 1,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_2",
|
||||||
|
"undefined": "新年活动_2",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_3": {
|
||||||
|
"id": "xnhd_libao_3",
|
||||||
|
"money": 6,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 60
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_3",
|
||||||
|
"undefined": "新年活动_3",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_4": {
|
||||||
|
"id": "xnhd_libao_4",
|
||||||
|
"money": 18,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 180
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_4",
|
||||||
|
"undefined": "新年活动_4",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_5": {
|
||||||
|
"id": "xnhd_libao_5",
|
||||||
|
"money": 30,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 300
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_5",
|
||||||
|
"undefined": "新年活动_5",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_6": {
|
||||||
|
"id": "xnhd_libao_6",
|
||||||
|
"money": 68,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 680
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_6",
|
||||||
|
"undefined": "新年活动_6",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_7": {
|
||||||
|
"id": "xnhd_libao_7",
|
||||||
|
"money": 128,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 1280
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_7",
|
||||||
|
"undefined": "新年活动_7",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_8": {
|
||||||
|
"id": "xnhd_libao_8",
|
||||||
|
"money": 198,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 1980
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_8",
|
||||||
|
"undefined": "新年活动_8",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_9": {
|
||||||
|
"id": "xnhd_libao_9",
|
||||||
|
"money": 328,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 3280
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_9",
|
||||||
|
"undefined": "新年活动_9",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"xnhd_libao_10": {
|
||||||
|
"id": "xnhd_libao_10",
|
||||||
|
"money": 648,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 6480
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_xnhd_libao_10",
|
||||||
|
"undefined": "新年活动_10",
|
||||||
|
"time": -1,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -241,7 +241,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
0.6
|
0.006
|
||||||
],
|
],
|
||||||
"suit": 0,
|
"suit": 0,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -403,7 +403,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.2
|
0.012
|
||||||
],
|
],
|
||||||
"suit": 0,
|
"suit": 0,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -590,7 +590,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 1,
|
"suit": 1,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -782,7 +782,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 2,
|
"suit": 2,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -974,7 +974,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 3,
|
"suit": 3,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -1166,7 +1166,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 4,
|
"suit": 4,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -1358,7 +1358,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 5,
|
"suit": 5,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -1550,7 +1550,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 6,
|
"suit": 6,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -1742,7 +1742,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 7,
|
"suit": 7,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -1934,7 +1934,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
1.8
|
0.018
|
||||||
],
|
],
|
||||||
"suit": 8,
|
"suit": 8,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -2126,7 +2126,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 1,
|
"suit": 1,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -2318,7 +2318,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 2,
|
"suit": 2,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -2510,7 +2510,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 3,
|
"suit": 3,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -2702,7 +2702,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 4,
|
"suit": 4,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -2894,7 +2894,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 5,
|
"suit": 5,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -3086,7 +3086,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 6,
|
"suit": 6,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
@ -3278,7 +3278,7 @@
|
|||||||
"conversion": [],
|
"conversion": [],
|
||||||
"buff": [
|
"buff": [
|
||||||
"baoshangpro",
|
"baoshangpro",
|
||||||
3
|
0.03
|
||||||
],
|
],
|
||||||
"suit": 7,
|
"suit": 7,
|
||||||
"rmPrize": [
|
"rmPrize": [
|
||||||
|
File diff suppressed because it is too large
Load Diff
5002
src/json/renown_chanchu.json
Normal file
5002
src/json/renown_chanchu.json
Normal file
File diff suppressed because it is too large
Load Diff
362
src/json/renown_level.json
Normal file
362
src/json/renown_level.json
Normal file
@ -0,0 +1,362 @@
|
|||||||
|
{
|
||||||
|
"1": {
|
||||||
|
"id": 1,
|
||||||
|
"renownlevel": 1,
|
||||||
|
"maxlevel": 250,
|
||||||
|
"cost": 5,
|
||||||
|
"atk": 2,
|
||||||
|
"def": 1,
|
||||||
|
"hp": 8
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"id": 2,
|
||||||
|
"renownlevel": 2,
|
||||||
|
"maxlevel": 500,
|
||||||
|
"cost": 6,
|
||||||
|
"atk": 2,
|
||||||
|
"def": 1,
|
||||||
|
"hp": 9
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"id": 3,
|
||||||
|
"renownlevel": 3,
|
||||||
|
"maxlevel": 750,
|
||||||
|
"cost": 7,
|
||||||
|
"atk": 2,
|
||||||
|
"def": 1,
|
||||||
|
"hp": 10
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"id": 4,
|
||||||
|
"renownlevel": 4,
|
||||||
|
"maxlevel": 1000,
|
||||||
|
"cost": 9,
|
||||||
|
"atk": 4,
|
||||||
|
"def": 2,
|
||||||
|
"hp": 11
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"id": 5,
|
||||||
|
"renownlevel": 5,
|
||||||
|
"maxlevel": 1250,
|
||||||
|
"cost": 11,
|
||||||
|
"atk": 4,
|
||||||
|
"def": 2,
|
||||||
|
"hp": 12
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"id": 6,
|
||||||
|
"renownlevel": 6,
|
||||||
|
"maxlevel": 1500,
|
||||||
|
"cost": 13,
|
||||||
|
"atk": 4,
|
||||||
|
"def": 2,
|
||||||
|
"hp": 13
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"id": 7,
|
||||||
|
"renownlevel": 7,
|
||||||
|
"maxlevel": 1750,
|
||||||
|
"cost": 15,
|
||||||
|
"atk": 6,
|
||||||
|
"def": 3,
|
||||||
|
"hp": 14
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"id": 8,
|
||||||
|
"renownlevel": 8,
|
||||||
|
"maxlevel": 2000,
|
||||||
|
"cost": 17,
|
||||||
|
"atk": 6,
|
||||||
|
"def": 3,
|
||||||
|
"hp": 15
|
||||||
|
},
|
||||||
|
"9": {
|
||||||
|
"id": 9,
|
||||||
|
"renownlevel": 9,
|
||||||
|
"maxlevel": 2500,
|
||||||
|
"cost": 19,
|
||||||
|
"atk": 6,
|
||||||
|
"def": 3,
|
||||||
|
"hp": 16
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"id": 10,
|
||||||
|
"renownlevel": 10,
|
||||||
|
"maxlevel": 3000,
|
||||||
|
"cost": 21,
|
||||||
|
"atk": 8,
|
||||||
|
"def": 4,
|
||||||
|
"hp": 17
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"id": 11,
|
||||||
|
"renownlevel": 11,
|
||||||
|
"maxlevel": 3500,
|
||||||
|
"cost": 23,
|
||||||
|
"atk": 8,
|
||||||
|
"def": 4,
|
||||||
|
"hp": 18
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"id": 12,
|
||||||
|
"renownlevel": 12,
|
||||||
|
"maxlevel": 4000,
|
||||||
|
"cost": 25,
|
||||||
|
"atk": 8,
|
||||||
|
"def": 4,
|
||||||
|
"hp": 19
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"id": 13,
|
||||||
|
"renownlevel": 13,
|
||||||
|
"maxlevel": 4500,
|
||||||
|
"cost": 27,
|
||||||
|
"atk": 10,
|
||||||
|
"def": 5,
|
||||||
|
"hp": 20
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"id": 14,
|
||||||
|
"renownlevel": 14,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 30,
|
||||||
|
"atk": 10,
|
||||||
|
"def": 5,
|
||||||
|
"hp": 21
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"id": 15,
|
||||||
|
"renownlevel": 15,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 33,
|
||||||
|
"atk": 10,
|
||||||
|
"def": 5,
|
||||||
|
"hp": 21
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"id": 16,
|
||||||
|
"renownlevel": 16,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 36,
|
||||||
|
"atk": 12,
|
||||||
|
"def": 6,
|
||||||
|
"hp": 22
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"id": 17,
|
||||||
|
"renownlevel": 17,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 39,
|
||||||
|
"atk": 12,
|
||||||
|
"def": 6,
|
||||||
|
"hp": 22
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"id": 18,
|
||||||
|
"renownlevel": 18,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 42,
|
||||||
|
"atk": 12,
|
||||||
|
"def": 6,
|
||||||
|
"hp": 22
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"id": 19,
|
||||||
|
"renownlevel": 19,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 45,
|
||||||
|
"atk": 14,
|
||||||
|
"def": 7,
|
||||||
|
"hp": 23
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"id": 20,
|
||||||
|
"renownlevel": 20,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 48,
|
||||||
|
"atk": 14,
|
||||||
|
"def": 7,
|
||||||
|
"hp": 23
|
||||||
|
},
|
||||||
|
"21": {
|
||||||
|
"id": 21,
|
||||||
|
"renownlevel": 21,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 51,
|
||||||
|
"atk": 14,
|
||||||
|
"def": 7,
|
||||||
|
"hp": 23
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"id": 22,
|
||||||
|
"renownlevel": 22,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 54,
|
||||||
|
"atk": 14,
|
||||||
|
"def": 7,
|
||||||
|
"hp": 23
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"id": 23,
|
||||||
|
"renownlevel": 23,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 57,
|
||||||
|
"atk": 16,
|
||||||
|
"def": 8,
|
||||||
|
"hp": 24
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"id": 24,
|
||||||
|
"renownlevel": 24,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 60,
|
||||||
|
"atk": 16,
|
||||||
|
"def": 8,
|
||||||
|
"hp": 24
|
||||||
|
},
|
||||||
|
"25": {
|
||||||
|
"id": 25,
|
||||||
|
"renownlevel": 25,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 63,
|
||||||
|
"atk": 16,
|
||||||
|
"def": 8,
|
||||||
|
"hp": 24
|
||||||
|
},
|
||||||
|
"26": {
|
||||||
|
"id": 26,
|
||||||
|
"renownlevel": 26,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 66,
|
||||||
|
"atk": 16,
|
||||||
|
"def": 8,
|
||||||
|
"hp": 24
|
||||||
|
},
|
||||||
|
"27": {
|
||||||
|
"id": 27,
|
||||||
|
"renownlevel": 27,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 69,
|
||||||
|
"atk": 16,
|
||||||
|
"def": 8,
|
||||||
|
"hp": 24
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"id": 28,
|
||||||
|
"renownlevel": 28,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 72,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 9,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"29": {
|
||||||
|
"id": 29,
|
||||||
|
"renownlevel": 29,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 75,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 9,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"30": {
|
||||||
|
"id": 30,
|
||||||
|
"renownlevel": 30,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 78,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 9,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"31": {
|
||||||
|
"id": 31,
|
||||||
|
"renownlevel": 31,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 81,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 9,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"32": {
|
||||||
|
"id": 32,
|
||||||
|
"renownlevel": 32,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 84,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 9,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"33": {
|
||||||
|
"id": 33,
|
||||||
|
"renownlevel": 33,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 87,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"34": {
|
||||||
|
"id": 34,
|
||||||
|
"renownlevel": 34,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 90,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"35": {
|
||||||
|
"id": 35,
|
||||||
|
"renownlevel": 35,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 93,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"36": {
|
||||||
|
"id": 36,
|
||||||
|
"renownlevel": 36,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 97,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"37": {
|
||||||
|
"id": 37,
|
||||||
|
"renownlevel": 37,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 101,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"38": {
|
||||||
|
"id": 38,
|
||||||
|
"renownlevel": 38,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 105,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"39": {
|
||||||
|
"id": 39,
|
||||||
|
"renownlevel": 39,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 109,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
},
|
||||||
|
"40": {
|
||||||
|
"id": 40,
|
||||||
|
"renownlevel": 40,
|
||||||
|
"maxlevel": 5000,
|
||||||
|
"cost": 113,
|
||||||
|
"atk": 18,
|
||||||
|
"def": 10,
|
||||||
|
"hp": 25
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
"1": {
|
"1": {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"type": 1,
|
"type": 1,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_zhsd",
|
"name": "wsw_wz_zhsd",
|
||||||
"undefined": "杂货店",
|
"undefined": "杂货店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -46,6 +47,7 @@
|
|||||||
"2": {
|
"2": {
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"type": 5,
|
"type": 5,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_slsd",
|
"name": "wsw_wz_slsd",
|
||||||
"undefined": "势力商店",
|
"undefined": "势力商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -84,6 +86,7 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"type": 6,
|
"type": 6,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_zzsd",
|
"name": "wsw_wz_zzsd",
|
||||||
"undefined": "战争商店",
|
"undefined": "战争商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -125,6 +128,7 @@
|
|||||||
"4": {
|
"4": {
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"type": 7,
|
"type": 7,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_spsd",
|
"name": "wsw_wz_spsd",
|
||||||
"undefined": "饰品商店",
|
"undefined": "饰品商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -169,6 +173,7 @@
|
|||||||
"5": {
|
"5": {
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"type": 2,
|
"type": 2,
|
||||||
|
"version": 1,
|
||||||
"name": "intr_shop_name_5",
|
"name": "intr_shop_name_5",
|
||||||
"undefined": "杂货",
|
"undefined": "杂货",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -208,6 +213,7 @@
|
|||||||
"6": {
|
"6": {
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"type": 2,
|
"type": 2,
|
||||||
|
"version": 1,
|
||||||
"name": "intr_shop_name_6",
|
"name": "intr_shop_name_6",
|
||||||
"undefined": "紫装",
|
"undefined": "紫装",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -264,6 +270,7 @@
|
|||||||
"8": {
|
"8": {
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"type": 3,
|
"type": 3,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_rcsc",
|
"name": "wsw_wz_rcsc",
|
||||||
"undefined": "人才市场",
|
"undefined": "人才市场",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -327,6 +334,7 @@
|
|||||||
"9": {
|
"9": {
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"type": 4,
|
"type": 4,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_pjsd",
|
"name": "wsw_wz_pjsd",
|
||||||
"undefined": "配件商店",
|
"undefined": "配件商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -384,6 +392,7 @@
|
|||||||
"10": {
|
"10": {
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"type": 8,
|
"type": 8,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_rysd",
|
"name": "wsw_wz_rysd",
|
||||||
"undefined": "荣誉商店",
|
"undefined": "荣誉商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -427,6 +436,7 @@
|
|||||||
"11": {
|
"11": {
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"type": 9,
|
"type": 9,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_jgsd",
|
"name": "wsw_wz_jgsd",
|
||||||
"undefined": "军功商店",
|
"undefined": "军功商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -468,6 +478,7 @@
|
|||||||
"12": {
|
"12": {
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"type": 11,
|
"type": 11,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_ltsd",
|
"name": "wsw_wz_ltsd",
|
||||||
"undefined": "擂台商店",
|
"undefined": "擂台商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
@ -499,6 +510,7 @@
|
|||||||
"13": {
|
"13": {
|
||||||
"id": 13,
|
"id": 13,
|
||||||
"type": 12,
|
"type": 12,
|
||||||
|
"version": 1,
|
||||||
"name": "wsw_wz_mrjxdh",
|
"name": "wsw_wz_mrjxdh",
|
||||||
"undefined": "每日精选兑换商店",
|
"undefined": "每日精选兑换商店",
|
||||||
"openCond": [
|
"openCond": [
|
||||||
|
@ -393,8 +393,8 @@
|
|||||||
"payId": [
|
"payId": [
|
||||||
"lv15"
|
"lv15"
|
||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 10800,
|
||||||
"displayCD": 3600,
|
"displayCD": 10800,
|
||||||
"scale": 3000,
|
"scale": 3000,
|
||||||
"icon": "djlb"
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
@ -408,8 +408,8 @@
|
|||||||
"payId": [
|
"payId": [
|
||||||
"lv25"
|
"lv25"
|
||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 10800,
|
||||||
"displayCD": 3600,
|
"displayCD": 10800,
|
||||||
"scale": 3000,
|
"scale": 3000,
|
||||||
"icon": "djlb"
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
|
@ -1213,6 +1213,7 @@ type gc_shop = k_v<{
|
|||||||
'npcImg': number
|
'npcImg': number
|
||||||
/** 商店看板娘说话 */
|
/** 商店看板娘说话 */
|
||||||
'npcText': string
|
'npcText': string
|
||||||
|
'version': string | number
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
type gc_shopcom = k_v<{
|
type gc_shopcom = k_v<{
|
||||||
|
@ -131,6 +131,7 @@ class Lng {
|
|||||||
dixialeitai_10 = "dixialeitai_10";
|
dixialeitai_10 = "dixialeitai_10";
|
||||||
dixialeitai_11 = "dixialeitai_11";
|
dixialeitai_11 = "dixialeitai_11";
|
||||||
dixialeitai_12 = "dixialeitai_12";
|
dixialeitai_12 = "dixialeitai_12";
|
||||||
|
dixialeitai_13 = "dixialeitai_13";
|
||||||
|
|
||||||
email_1 = "email_1";
|
email_1 = "email_1";
|
||||||
email_2 = "email_2";
|
email_2 = "email_2";
|
||||||
|
@ -23,6 +23,7 @@ import {ResOpen as ResOpenKaifujingsai} from '../shared/protocols/kaifujingsai/P
|
|||||||
import {ResOpen as ResOpenZhoumolibao} from '../shared/protocols/event/zhoumolibao/PtlOpen';
|
import {ResOpen as ResOpenZhoumolibao} from '../shared/protocols/event/zhoumolibao/PtlOpen';
|
||||||
import {ResOpen as ResOpenPobinglibao} from '../shared/protocols/event/pobinglibao/PtlOpen';
|
import {ResOpen as ResOpenPobinglibao} from '../shared/protocols/event/pobinglibao/PtlOpen';
|
||||||
import {ResOpen as ResOpenLeiChongLiBao} from '../shared/protocols/event/leichonglibao/PtlOpen';
|
import {ResOpen as ResOpenLeiChongLiBao} from '../shared/protocols/event/leichonglibao/PtlOpen';
|
||||||
|
import {event as ResOpenYuandan} from '../shared/protocols/event/yuandan/PtlOpen';
|
||||||
|
|
||||||
export type eventType = {
|
export type eventType = {
|
||||||
shouchong: {
|
shouchong: {
|
||||||
@ -57,6 +58,7 @@ export type eventType = {
|
|||||||
payForDiamond: {
|
payForDiamond: {
|
||||||
[time: number]: number
|
[time: number]: number
|
||||||
}
|
}
|
||||||
|
|
||||||
} & {
|
} & {
|
||||||
[k: `${number}jijin`]: ResOpenYuedujijin;
|
[k: `${number}jijin`]: ResOpenYuedujijin;
|
||||||
[k: `yangchengmubiao${number}`]: yangchengmubiao;
|
[k: `yangchengmubiao${number}`]: yangchengmubiao;
|
||||||
@ -67,6 +69,7 @@ export type eventType = {
|
|||||||
[k: `leijichongzhi${number}`]: Omit<ResOpenLeijichongzhi, 'payNum'>;
|
[k: `leijichongzhi${number}`]: Omit<ResOpenLeijichongzhi, 'payNum'>;
|
||||||
[k: `qiridenglu${number}`]: Pick<ResOpenQiridenglu, 'recPrize'>;
|
[k: `qiridenglu${number}`]: Pick<ResOpenQiridenglu, 'recPrize'>;
|
||||||
[k: `leichonglibao${number}`]: ResOpenLeiChongLiBao & { opentime: number };
|
[k: `leichonglibao${number}`]: ResOpenLeiChongLiBao & { opentime: number };
|
||||||
|
[k: `yuandan${number}`]: ResOpenYuandan;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CollectionEvent<T extends keyof eventType> = {
|
export type CollectionEvent<T extends keyof eventType> = {
|
||||||
|
@ -4,4 +4,5 @@ import {ResOpen} from '../shared/protocols/shop/PtlOpen';
|
|||||||
export type CollectionShop = ResOpen & {
|
export type CollectionShop = ResOpen & {
|
||||||
uid: string; // 玩家uid
|
uid: string; // 玩家uid
|
||||||
shopId: string; // 商店id
|
shopId: string; // 商店id
|
||||||
|
version: string | number;
|
||||||
};
|
};
|
@ -133,4 +133,6 @@ export type MongodbCollections = {
|
|||||||
fightLog: CollectionFightLog
|
fightLog: CollectionFightLog
|
||||||
shop: CollectionShop
|
shop: CollectionShop
|
||||||
pushgift:CollectionPushGift
|
pushgift:CollectionPushGift
|
||||||
|
|
||||||
|
huodong_user: CollectionUser;
|
||||||
};
|
};
|
68
src/patch.ts
Normal file
68
src/patch.ts
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import { extendType } from "./extends";
|
||||||
|
import { ctor } from "./global";
|
||||||
|
import { initIORedis } from "./ioredis";
|
||||||
|
import { initGcType } from "./jsonType";
|
||||||
|
import { createLng } from "./lng";
|
||||||
|
import { initMongoDB } from "./setMongodb";
|
||||||
|
import { initRedis } from "./setRedis";
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
var scriptName = path.basename(__filename);
|
||||||
|
|
||||||
|
export function patchFun(target: any, key: string, descriptor: PropertyDescriptor) {
|
||||||
|
let scriptName;
|
||||||
|
try {
|
||||||
|
throw new Error();
|
||||||
|
} catch (e) {
|
||||||
|
let caller = (e.stack.split("\n").slice(2)[0].split("\\").slice(-2));
|
||||||
|
scriptName = caller[1].split(':')[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!scriptName){
|
||||||
|
console.log('获取不到脚本名');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const originalMethod = descriptor.value;
|
||||||
|
descriptor.value = function(...args: any[]) {
|
||||||
|
//@ts-ignore
|
||||||
|
G.mongodb.collection("_patch_run_log").findOne({ fileName: scriptName, funName: key }).then(async runed=>{
|
||||||
|
if(runed){
|
||||||
|
console.log(`脚本${scriptName}已经执行过${key}方法,跳过`);
|
||||||
|
return (null as any);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`调用了${scriptName}脚本里的${key}方法,参数为:${args}`);
|
||||||
|
const result = await originalMethod.apply(this, args);
|
||||||
|
console.log(`执行结果为:${result}`);
|
||||||
|
|
||||||
|
//@ts-ignore
|
||||||
|
await G.mongodb.collection("_patch_run_log").insertOne({
|
||||||
|
"fileName": scriptName,
|
||||||
|
"funName": key as any,
|
||||||
|
"ctime":Date.now(),
|
||||||
|
"res":result
|
||||||
|
});
|
||||||
|
return (result as any);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function patchInit() {
|
||||||
|
await patchStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function patchStart() {
|
||||||
|
//扩展框架
|
||||||
|
extendType();
|
||||||
|
//游戏配置提示文件
|
||||||
|
initGcType();
|
||||||
|
//连接mongodb
|
||||||
|
await initMongoDB();
|
||||||
|
//连接redis
|
||||||
|
await initRedis();
|
||||||
|
await initIORedis();
|
||||||
|
}
|
||||||
|
// //定义全局变量
|
||||||
|
ctor();
|
||||||
|
//创建语言包
|
||||||
|
createLng();
|
@ -7,15 +7,15 @@ export class DxltFun {
|
|||||||
/**修改数据 */
|
/**修改数据 */
|
||||||
static async changeData(call: ApiCall, change: Partial<ResOpen>) {
|
static async changeData(call: ApiCall, change: Partial<ResOpen>) {
|
||||||
|
|
||||||
Object.entries(change).forEach(v => {
|
let data = await this.getData(call);
|
||||||
G.redis.set('dxlt', call.uid, v[0] as any, v[1]);
|
Object.assign(data, change);
|
||||||
});
|
G.ioredis.set(`dxlt:${call.uid}`, JSON.stringify(data));
|
||||||
G.mongodb.collection('dxlt').updateOne({ uid: call.uid }, { $set: { ...change } });
|
|
||||||
|
|
||||||
|
G.mongodb.collection('dxlt').updateOne({ uid: call.uid }, { $set: { ...change } });
|
||||||
return change;
|
return change;
|
||||||
}
|
}
|
||||||
static async getData(call: ApiCall) {
|
static async getData(call: ApiCall) {
|
||||||
return await G.redis.get('dxlt', call.uid);
|
return JSON.parse(await G.ioredis.get(`dxlt:${call.uid}`)) ;
|
||||||
}
|
}
|
||||||
/**回退层数 */
|
/**回退层数 */
|
||||||
static backLayer(data: ResOpen) {
|
static backLayer(data: ResOpen) {
|
||||||
|
@ -53,22 +53,7 @@ export class EmailFun {
|
|||||||
if (email.uid == "system" && email.prizeData) _email.prizeData.isGet = _email.prizelist.includes(uid);
|
if (email.uid == "system" && email.prizeData) _email.prizeData.isGet = _email.prizelist.includes(uid);
|
||||||
|
|
||||||
delete _email.readlist;
|
delete _email.readlist;
|
||||||
// let emailRead = await G.redis.get('email', uid, _email._id, 'emailRead');
|
|
||||||
// let emailRead = await G.redis.get('email', uid, _email._id, 'emailRead');
|
|
||||||
|
|
||||||
// if (email.uid != "system") {
|
|
||||||
//
|
|
||||||
// } else {
|
|
||||||
// // 全服邮件 数据操作
|
|
||||||
// if (email?.dellist?.indexOf(uid) == -1 && gud?.cTime && gud.cTime <= email.createTime) {
|
|
||||||
// if (_email.prizeData) _email.prizeData.isGet = email?.prizelist.indexOf(uid) != -1
|
|
||||||
// kvList[G.formatRedisKey(_email._id)] = _email;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// G.redis.set('email', uid, kvList);
|
|
||||||
|
|
||||||
let lng = await G.redis.rawGet(`user:lng:${uid}`)
|
let lng = await G.redis.rawGet(`user:lng:${uid}`)
|
||||||
|
|
||||||
return Object.values(kvList).map(i => ({
|
return Object.values(kvList).map(i => ({
|
||||||
@ -76,9 +61,6 @@ export class EmailFun {
|
|||||||
title: i.lngTitle ? (i.lngTitle[lng] || i.lngTitle['ja']) : i.title,
|
title: i.lngTitle ? (i.lngTitle[lng] || i.lngTitle['ja']) : i.title,
|
||||||
content: i.lngContent ? (i.lngContent[lng] || i.lngContent['ja']) : i.content
|
content: i.lngContent ? (i.lngContent[lng] || i.lngContent['ja']) : i.content
|
||||||
}));
|
}));
|
||||||
// } else {
|
|
||||||
// return Object.values(await G.redis.get('email', uid));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**领取邮件 */
|
/**领取邮件 */
|
||||||
@ -89,7 +71,6 @@ export class EmailFun {
|
|||||||
let change: k_v<boolean> = {};
|
let change: k_v<boolean> = {};
|
||||||
let oids = _ids.map(id => {
|
let oids = _ids.map(id => {
|
||||||
change[id] = true;
|
change[id] = true;
|
||||||
// G.redis.set('email', uid, id, 'prizeData', 'isGet', true);
|
|
||||||
return G.mongodb.conversionId(id);
|
return G.mongodb.conversionId(id);
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -111,11 +92,6 @@ export class EmailFun {
|
|||||||
|
|
||||||
// 更改邮件状态为已读-仅限没有奖励的邮件
|
// 更改邮件状态为已读-仅限没有奖励的邮件
|
||||||
static async readEmail(uid: string, id: string) {
|
static async readEmail(uid: string, id: string) {
|
||||||
// G.mongodb.collection('email').updateMany({ uid: uid, id: {$in: ids}}, {$set: { emailRead: true}})
|
|
||||||
// 查询系统邮件,
|
|
||||||
// let systemEmail = await G.mongodb.collection('email').find({ uid: "system", id: {$in: ids}});
|
|
||||||
// console.log(systemEmail)
|
|
||||||
// G.redis.set('email', uid, id, 'emailRead', true);
|
|
||||||
G.mongodb.collection('email').updateOne(G.mongodb.conversionIdObj({
|
G.mongodb.collection('email').updateOne(G.mongodb.conversionIdObj({
|
||||||
uid: uid, _id: id
|
uid: uid, _id: id
|
||||||
}), {$set: {emailRead: true}});
|
}), {$set: {emailRead: true}});
|
||||||
@ -151,11 +127,6 @@ export class EmailFun {
|
|||||||
/**增加 跨服定时器发送邮件 直接写入数据 (跨服定时器执行检测时会报错)*/
|
/**增加 跨服定时器发送邮件 直接写入数据 (跨服定时器执行检测时会报错)*/
|
||||||
static async addEmail(email: ReqEmail & { createTime?: number; }, isCross: boolean = false) {
|
static async addEmail(email: ReqEmail & { createTime?: number; }, isCross: boolean = false) {
|
||||||
let {prize, uid, ...e} = email;
|
let {prize, uid, ...e} = email;
|
||||||
// if (!isCross) {
|
|
||||||
// let existUid = await G.redis.hGet('player:uids', uid)
|
|
||||||
// if (!existUid) return '玩家uid不存在: ' + uid;
|
|
||||||
// }
|
|
||||||
|
|
||||||
let lng = await G.redis.rawGet(`user:lng:${uid}`)
|
let lng = await G.redis.rawGet(`user:lng:${uid}`)
|
||||||
|
|
||||||
let sendEmail: MsgEmail = {
|
let sendEmail: MsgEmail = {
|
||||||
@ -218,7 +189,6 @@ export class EmailFun {
|
|||||||
if (isCross) return _id
|
if (isCross) return _id
|
||||||
|
|
||||||
sendEmail._id = _id;
|
sendEmail._id = _id;
|
||||||
// G.redis.set('email', uid, _id, sendEmail);
|
|
||||||
G.server.sendMsgByUid(uid, 'msg_s2c/Email', sendEmail);
|
G.server.sendMsgByUid(uid, 'msg_s2c/Email', sendEmail);
|
||||||
|
|
||||||
return _id;
|
return _id;
|
||||||
@ -260,8 +230,6 @@ export class EmailFun {
|
|||||||
})).insertedId.toHexString();
|
})).insertedId.toHexString();
|
||||||
sendEmail._id = _id;
|
sendEmail._id = _id;
|
||||||
|
|
||||||
// let conns = G.server.connections;
|
|
||||||
// G.redis.set('email', uid, _id, sendEmail);
|
|
||||||
G.server.broadcastMsg('msg_s2c/Email', sendEmail);
|
G.server.broadcastMsg('msg_s2c/Email', sendEmail);
|
||||||
|
|
||||||
return _id;
|
return _id;
|
||||||
|
@ -27,9 +27,6 @@ export class EquipFun {
|
|||||||
|
|
||||||
Object.assign(equip, change);
|
Object.assign(equip, change);
|
||||||
|
|
||||||
// for (let k in change) {
|
|
||||||
// G.redis.set('equip', call.uid, equip._id, k as keyof CollectionEquip, change[k]);
|
|
||||||
// }
|
|
||||||
G.mongodb.collection('equip').updateOne({uid: call.uid, _id: new ObjectId(equip._id)}, {$set: {...change}});
|
G.mongodb.collection('equip').updateOne({uid: call.uid, _id: new ObjectId(equip._id)}, {$set: {...change}});
|
||||||
call.addEventMsg('msg_s2c/EquipChange', equip._id, change);
|
call.addEventMsg('msg_s2c/EquipChange', equip._id, change);
|
||||||
}
|
}
|
||||||
|
@ -135,16 +135,9 @@ export class FightFun {
|
|||||||
|
|
||||||
G.mongodb.collection('fightLog').insertOne({uid, type, ...result})
|
G.mongodb.collection('fightLog').insertOne({uid, type, ...result})
|
||||||
|
|
||||||
// if (await G.redis.type('fightLog', type, uid) == null) await G.redis.set('fightLog', type, uid, []);
|
|
||||||
|
|
||||||
// G.redis.arrAppend('fightLog', type, uid, result).then(len => {
|
|
||||||
// if (len > maxLen) G.redis.arrPop('fightLog', type, uid, 0);
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static async readLog(uid: string, type: string, len = 20) {
|
static async readLog(uid: string, type: string, len = 20) {
|
||||||
// return await G.redis.get('fightLog', type, uid) || [];
|
|
||||||
|
|
||||||
return await G.mongodb.collection('fightLog').find({uid, type}).limit(len).toArray() || []
|
return await G.mongodb.collection('fightLog').find({uid, type}).limit(len).toArray() || []
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -31,14 +31,21 @@ export class GH {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**更改isFightBoss状态 */
|
/**更改isFightBoss状态 */
|
||||||
changeIsFightBoss(bool = false) {
|
async changeIsFightBoss(bool = false) {
|
||||||
G.redis.hSet('gonghui:isFightBoss', this.data._id, bool)
|
const key = 'gonghui:isFightBoss:' + this.data._id;
|
||||||
|
if (bool) {
|
||||||
|
await G.ioredis.setnx(key, 1);
|
||||||
|
await G.ioredis.expire(key, 1);
|
||||||
|
} else {
|
||||||
|
await G.ioredis.del(key);
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
/**获取isFightBoss状态 */
|
/**获取isFightBoss状态 */
|
||||||
async getIsFightBoss(): Promise<boolean> {
|
async getIsFightBoss(): Promise<boolean> {
|
||||||
return await G.redis.hGet('gonghui:isFightBoss', this.data._id) || false
|
const key = 'gonghui:isFightBoss:' + this.data._id;
|
||||||
|
return await G.ioredis.get(key)? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,7 +192,6 @@ export class GH {
|
|||||||
* 公会申请审批
|
* 公会申请审批
|
||||||
*/
|
*/
|
||||||
async apply(...p: string[]) {
|
async apply(...p: string[]) {
|
||||||
//let players = await G.redis.gets('user', ...p.map(u => [u] as [string]));
|
|
||||||
let players = await G.mongodb.find('user',{uid:{$in:p}});
|
let players = await G.mongodb.find('user',{uid:{$in:p}});
|
||||||
|
|
||||||
for (let i=0;i<players.length;i++) {
|
for (let i=0;i<players.length;i++) {
|
||||||
@ -203,8 +209,6 @@ export class GH {
|
|||||||
* 获取公会成员列表
|
* 获取公会成员列表
|
||||||
*/
|
*/
|
||||||
async getAllPlayers() {
|
async getAllPlayers() {
|
||||||
//let players = await G.redis.gets('user', ...this.data.players.map(p => [p.uid] as [string]));
|
|
||||||
// let players = await G.mongodb.find('user',{uid:{$in: this.data.players}});
|
|
||||||
let uids = this.data.players.map(p => p.uid);
|
let uids = this.data.players.map(p => p.uid);
|
||||||
let players = await G.mongodb.collection('user').find({uid:{$in: uids}}).toArray();
|
let players = await G.mongodb.collection('user').find({uid:{$in: uids}}).toArray();
|
||||||
|
|
||||||
|
@ -133,7 +133,6 @@ export class GHManage {
|
|||||||
}
|
}
|
||||||
this.countInterval = 0;
|
this.countInterval = 0;
|
||||||
let list:k_v<GH> = await this.getGHList()
|
let list:k_v<GH> = await this.getGHList()
|
||||||
// let list = await G.redis.hGetAll('key')
|
|
||||||
Object.entries(list).forEach(v => {
|
Object.entries(list).forEach(v => {
|
||||||
let [_id, gh] = v;
|
let [_id, gh] = v;
|
||||||
if (gh.data?.tanhe && G.time >= gh.data.tanhe.time) {
|
if (gh.data?.tanhe && G.time >= gh.data.tanhe.time) {
|
||||||
|
@ -18,11 +18,10 @@ export async function clearGud(uid) {
|
|||||||
G.ioredis.del(`gudVersion:${uid}_pid`);
|
G.ioredis.del(`gudVersion:${uid}_pid`);
|
||||||
G.ioredis.del(`gudVersion:${uid}_ver`);
|
G.ioredis.del(`gudVersion:${uid}_ver`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(await G.redis.type('tanxian', uid)){
|
//清空Redis缓存
|
||||||
console.log('清空tanxian Redis',uid);
|
G.ioredis.del(`tanxian:${uid}`);
|
||||||
G.redis.del("tanxian",uid);
|
G.ioredis.del(`dxlt:${uid}`);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,10 +24,6 @@ export class HeroFun {
|
|||||||
hero.zhanli = HeroShared.getHeroZhanLi(hero, call.otherBuff, Object.values(call.conn.gud.heroPos).indexOf(hero._id));
|
hero.zhanli = HeroShared.getHeroZhanLi(hero, call.otherBuff, Object.values(call.conn.gud.heroPos).indexOf(hero._id));
|
||||||
change.zhanli = hero.zhanli;
|
change.zhanli = hero.zhanli;
|
||||||
|
|
||||||
// for (let k in change) {
|
|
||||||
// await G.redis.set('hero', call.uid, hero._id, k as any, change[k]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
await G.mongodb.collection('hero').updateOne({uid: call.uid, _id: new ObjectId(hero._id)}, {
|
await G.mongodb.collection('hero').updateOne({uid: call.uid, _id: new ObjectId(hero._id)}, {
|
||||||
$set: {
|
$set: {
|
||||||
...change
|
...change
|
||||||
@ -41,13 +37,10 @@ export class HeroFun {
|
|||||||
|
|
||||||
/**获取英雄 */
|
/**获取英雄 */
|
||||||
static async getHero(call: call, oid: string) {
|
static async getHero(call: call, oid: string) {
|
||||||
//let data = await G.redis.get('hero', call.uid, oid);
|
let {_id, ...info} = await G.mongodb.collection("hero").findOne({
|
||||||
//if (!data) { // 如果redis中的hero数据被清理掉 直接查询数据库
|
_id: G.mongodb.conversionId(oid)
|
||||||
let {_id, ...info} = await G.mongodb.collection("hero").findOne({
|
})
|
||||||
_id: G.mongodb.conversionId(oid)
|
let data = Object.assign({_id: _id.toHexString()}, info)
|
||||||
})
|
|
||||||
let data = Object.assign({_id: _id.toHexString()}, info)
|
|
||||||
//}
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,6 +87,45 @@ export class JJCFun {
|
|||||||
return rankList
|
return rankList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 每10分钟刷新前一千名玩家的用户数据
|
||||||
|
* @param min
|
||||||
|
* @param max
|
||||||
|
* @param uTimeOffset
|
||||||
|
* @param isUpdate 是否更新数据
|
||||||
|
*/
|
||||||
|
static async checkUpdatePlayer(min: number = 0, max: number = 1000, uTimeOffset: number = 600, isUpdate: boolean = true) {
|
||||||
|
// 获取指定排名用户uid
|
||||||
|
let sortInfo = await this.getRankListUid(min, max)
|
||||||
|
if (!sortInfo.length) return []
|
||||||
|
let updateArr = []
|
||||||
|
|
||||||
|
let users = await G.redis.hGetAll('rank:jjc:data')
|
||||||
|
|
||||||
|
for (let i = 0; i < sortInfo.length; i++) {
|
||||||
|
let uid = sortInfo[i]
|
||||||
|
let rankInfo = users[uid]
|
||||||
|
if (!rankInfo?.player) continue
|
||||||
|
// 比对utime,判断是否更新数据
|
||||||
|
if (!rankInfo.player.isNpc) {
|
||||||
|
if (!rankInfo.utime || (rankInfo.utime && rankInfo.utime < (G.time - uTimeOffset))) {
|
||||||
|
updateArr.push(rankInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 更新数据
|
||||||
|
if (isUpdate && updateArr.length > 0) {
|
||||||
|
let playerArrInfo = await G.mongodb.collection("user").find({uid: {$in: updateArr.map(i => i.uid)}}).toArray()
|
||||||
|
for (let i = 0; i < playerArrInfo.length; i++) {
|
||||||
|
let playerInfo = playerArrInfo[i]
|
||||||
|
let index = updateArr.findIndex(x => x.player.uid == playerInfo.uid)
|
||||||
|
updateArr[index].player = playerInfo
|
||||||
|
updateArr[index].utime = G.time
|
||||||
|
this.updatePlayerData(playerInfo.uid, updateArr[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定范围排名的用户,仅返回uid[]
|
* 获取指定范围排名的用户,仅返回uid[]
|
||||||
* @param min
|
* @param min
|
||||||
|
@ -74,9 +74,9 @@ export class LingZhuLaiXifun {
|
|||||||
// 隔天清零
|
// 隔天清零
|
||||||
if (_myData && PublicShared.chkSameDate(_myData.time, G.time)) {
|
if (_myData && PublicShared.chkSameDate(_myData.time, G.time)) {
|
||||||
_res = {
|
_res = {
|
||||||
num: _myData.num,
|
num: _myData.num || 0,
|
||||||
time: _myData.time,
|
time: _myData.time || G.time,
|
||||||
maxdps: _myData.maxdps
|
maxdps: _myData.maxdps || {}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_res = {
|
_res = {
|
||||||
|
@ -31,6 +31,8 @@ export class PayFun {
|
|||||||
let obj: payLog = {time: G.time, type: type};
|
let obj: payLog = {time: G.time, type: type};
|
||||||
if (conf.time != -1) obj.eTime = time + conf.time;
|
if (conf.time != -1) obj.eTime = time + conf.time;
|
||||||
|
|
||||||
|
obj.args = payArgs
|
||||||
|
|
||||||
if (payId == 'G123SendGift') {
|
if (payId == 'G123SendGift') {
|
||||||
obj.popup_id = payArgs.popup_id
|
obj.popup_id = payArgs.popup_id
|
||||||
obj.template_id = payArgs.template_id
|
obj.template_id = payArgs.template_id
|
||||||
@ -189,7 +191,6 @@ export class PayFun {
|
|||||||
let conf: any = await this.getConf(payId, payArgs);
|
let conf: any = await this.getConf(payId, payArgs);
|
||||||
|
|
||||||
let prize = [...conf.prize];
|
let prize = [...conf.prize];
|
||||||
//let player = await G.redis.get('user', uid);
|
|
||||||
let player = await getGud(uid);
|
let player = await getGud(uid);
|
||||||
|
|
||||||
if (conf.firstPayPrize.length > 0) {
|
if (conf.firstPayPrize.length > 0) {
|
||||||
@ -207,19 +208,20 @@ export class PayFun {
|
|||||||
payArgs: payArgs,
|
payArgs: payArgs,
|
||||||
orderNo: orderNo
|
orderNo: orderNo
|
||||||
}
|
}
|
||||||
if (payId.indexOf('zixuanlibao') != -1) {
|
//改为统一方法,此处自选不这样用
|
||||||
// 后端唯一标识 htype 4 自选/定制 礼包
|
// if (payId.indexOf('zixuanlibao') != -1) {
|
||||||
// @ts-ignore
|
// // 后端唯一标识 htype 4 自选/定制 礼包
|
||||||
let _hdList = await HuoDongFun.gethdList(call, 4)
|
// // @ts-ignore
|
||||||
_hdList.forEach(ele => {
|
// let _hdList = await HuoDongFun.gethdList(call, 4)
|
||||||
let selectPrize = ele.data.gift.find(v => v.payId == payId)?.prize;
|
// _hdList.forEach(ele => {
|
||||||
if (prize) {
|
// let selectPrize = ele.data.gift.find(v => v.payId == payId)?.prize;
|
||||||
let index = payArgs instanceof Array ? payArgs : [];
|
// if (prize) {
|
||||||
let select = selectPrize.map((v, i) => v[index[i]] ? v[index[i]] : v[0]);
|
// let index = payArgs instanceof Array ? payArgs : [];
|
||||||
prize.push(...select);
|
// let select = selectPrize.map((v, i) => v[index[i]] ? v[index[i]] : v[0]);
|
||||||
}
|
// prize.push(...select);
|
||||||
})
|
// }
|
||||||
}
|
// })
|
||||||
|
// }
|
||||||
if (payId.indexOf('ycmb') != -1) {
|
if (payId.indexOf('ycmb') != -1) {
|
||||||
// @ts-ignore // 养成活动充值礼包
|
// @ts-ignore // 养成活动充值礼包
|
||||||
let _hdids = await YangChengMuBiaofun.getCon(call);
|
let _hdids = await YangChengMuBiaofun.getCon(call);
|
||||||
@ -236,11 +238,26 @@ export class PayFun {
|
|||||||
let conf = await zmlbGetConf(call, {payId})
|
let conf = await zmlbGetConf(call, {payId})
|
||||||
prize.push(...conf.prize)
|
prize.push(...conf.prize)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* todo 不要轻易改动这个方法,不允许集成业务逻辑在内部
|
||||||
|
* todo 此方法仅仅是支付成功后的发奖
|
||||||
|
* todo 如果有业务逻辑通过事件驱动,在支付成功后emit事件
|
||||||
|
* todo 下面这个方法不应该这样写
|
||||||
|
*/
|
||||||
//圣诞节活动充值
|
//圣诞节活动充值
|
||||||
try{
|
try {
|
||||||
await Christmasfun.payChristmas(payId, call);
|
await Christmasfun.payChristmas(payId, call);
|
||||||
}catch (e) {
|
} catch (e) {
|
||||||
console.log("Christmasfun.payChristmas Error",e);
|
console.log("Christmasfun.payChristmas Error", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (payArgs && payArgs?.htype && payArgs?.selectList) {
|
||||||
|
let selectPrize = await G.ioredis.get(`pay:${payId}:${player.uid}`);
|
||||||
|
if (selectPrize) {
|
||||||
|
prize.push(...JSON.parse(selectPrize))
|
||||||
|
G.ioredis.del(`pay:${payId}:${player.uid}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let isReplaceConf = await this.checkBuysAfterPay(uid, payId, conf, payArgs, player)
|
let isReplaceConf = await this.checkBuysAfterPay(uid, payId, conf, payArgs, player)
|
||||||
@ -400,6 +417,33 @@ export class PayFun {
|
|||||||
if (conf.time != -1 && buyLog.slice(-1)[0]?.eTime > G.time && conf.buys == 0 && payId.indexOf('wkdlibao') == -1) {
|
if (conf.time != -1 && buyLog.slice(-1)[0]?.eTime > G.time && conf.buys == 0 && payId.indexOf('wkdlibao') == -1) {
|
||||||
return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -2});
|
return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -2});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 活动相关的自选礼包,目前htype 4、14支持此方法
|
||||||
|
* payArgs里传相应参数,selectList选择的奖励列表
|
||||||
|
* 往后所有自选类型,走这个方法,配置格式同4、14
|
||||||
|
*/
|
||||||
|
if (payArgs && payArgs?.htype && payArgs?.selectList) {
|
||||||
|
let call = this.getCall(player)
|
||||||
|
// @ts-ignore
|
||||||
|
let _hdInfo = (await HuoDongFun.gethdList(call, payArgs.htype))[0]
|
||||||
|
// 活动类购买不符合条件返回-5
|
||||||
|
if (!_hdInfo) G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -5})
|
||||||
|
let giftInfo = _hdInfo.data.gift.find(v => v.payId == payId);
|
||||||
|
if (!giftInfo) G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -5})
|
||||||
|
|
||||||
|
let dlzPrize = R.flatten(giftInfo.dlz.map(i => R.values(i)))
|
||||||
|
let selectPrize = payArgs.selectList.map(v => {
|
||||||
|
let sPrize = dlzPrize.find(o => o.a == v.a && o.t == v.t && o.n == v.n)
|
||||||
|
// 严格判断,自选奖励不存在奖励列表,返回-6
|
||||||
|
if (!sPrize) return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -6});
|
||||||
|
return sPrize
|
||||||
|
})
|
||||||
|
// 自选奖励过判断后,存入redis,6小时内支付有效 todo 6小时可能有些长
|
||||||
|
let prize = [...giftInfo.prize, ...selectPrize]
|
||||||
|
G.ioredis.setex(`pay:${payId}:${player.uid}`, 21600, JSON.stringify(prize));
|
||||||
|
}
|
||||||
|
|
||||||
//针对每日礼包的单独处理
|
//针对每日礼包的单独处理
|
||||||
let zeroTime = PublicShared.getToDayZeroTime(G.time)
|
let zeroTime = PublicShared.getToDayZeroTime(G.time)
|
||||||
if (payId.indexOf('136Gift') != -1 && payId != '136GiftAll') {
|
if (payId.indexOf('136Gift') != -1 && payId != '136GiftAll') {
|
||||||
@ -456,6 +500,7 @@ export class PayFun {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 当玩家购买过有时间期效性的礼包 并且在生效期内每天有邮件奖励时 每天首次登陆时根据时间补发邮件 玩家每天首次登陆会进入检查
|
* 当玩家购买过有时间期效性的礼包 并且在生效期内每天有邮件奖励时 每天首次登陆时根据时间补发邮件 玩家每天首次登陆会进入检查
|
||||||
|
* @param player
|
||||||
* @param lastTime 上一次登陆时间
|
* @param lastTime 上一次登陆时间
|
||||||
* @param curTime 每日首次登陆时间
|
* @param curTime 每日首次登陆时间
|
||||||
*/
|
*/
|
||||||
|
@ -214,7 +214,6 @@ export class PlayerFun {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async changeAttrLog(uid: string, change, atn, before) {
|
static async changeAttrLog(uid: string, change, atn, before) {
|
||||||
|
|
||||||
let data = {
|
let data = {
|
||||||
uid,
|
uid,
|
||||||
before,
|
before,
|
||||||
@ -225,12 +224,16 @@ export class PlayerFun {
|
|||||||
atn
|
atn
|
||||||
}
|
}
|
||||||
G.mongodb.collection('rmbuse').insertOne(data);
|
G.mongodb.collection('rmbuse').insertOne(data);
|
||||||
|
// 消费竞赛开启时写入跨服数据库
|
||||||
|
if (G.huodong.xfjs && !data.isAdd) {
|
||||||
|
G.crossmongodb.collection('rmbuse').updateOne({uid: data.uid}, {
|
||||||
|
time: G.time,
|
||||||
|
$inc: {change: data.change}
|
||||||
|
}, {upsert: true});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static async changeAttr(uid: string, change: Partial<player>) {
|
static async changeAttr(uid: string, change: Partial<player>) {
|
||||||
//for (let k in change) {
|
|
||||||
//G.redis.set('user', uid, k as any, change[k]);
|
|
||||||
//}
|
|
||||||
setGud(uid, change);
|
setGud(uid, change);
|
||||||
|
|
||||||
G.mongodb.collection('user').updateOne({uid: uid}, {$set: change});
|
G.mongodb.collection('user').updateOne({uid: uid}, {$set: change});
|
||||||
@ -307,9 +310,6 @@ export class PlayerFun {
|
|||||||
firstTime: upObj.update.$setOnInsert.firstTime,
|
firstTime: upObj.update.$setOnInsert.firstTime,
|
||||||
lastTime: upObj.update.$setOnInsert.firstTime
|
lastTime: upObj.update.$setOnInsert.firstTime
|
||||||
};
|
};
|
||||||
//去掉item Redis相关
|
|
||||||
//G.redis.set('item', call.uid, atn.t, data);
|
|
||||||
|
|
||||||
G.mongodb.collection('item').updateOne(upObj.filter, upObj.update, upObj.options);
|
G.mongodb.collection('item').updateOne(upObj.filter, upObj.update, upObj.options);
|
||||||
call.addEventMsg('msg_s2c/ItemChange', atn.t, data);
|
call.addEventMsg('msg_s2c/ItemChange', atn.t, data);
|
||||||
addGameLog(call.uid, "_itemChange", {"additem": 1}, {
|
addGameLog(call.uid, "_itemChange", {"additem": 1}, {
|
||||||
@ -320,26 +320,14 @@ export class PlayerFun {
|
|||||||
} else {
|
} else {
|
||||||
if (item.num + atn.n <= 0) {
|
if (item.num + atn.n <= 0) {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
//去掉item Redis相关
|
|
||||||
//G.redis.del('item', call.uid, atn.t),
|
|
||||||
|
|
||||||
G.mongodb.collection('item').deleteOne({uid: call.uid, itemId: atn.t})
|
G.mongodb.collection('item').deleteOne({uid: call.uid, itemId: atn.t})
|
||||||
]);
|
]);
|
||||||
//await G.redis.del('item', call.uid, atn.t);
|
|
||||||
//await G.mongodb.collection('item').deleteOne({uid: call.uid, itemId: atn.t});
|
|
||||||
call.addEventMsg('msg_s2c/ItemChange', atn.t, {num: 0});
|
call.addEventMsg('msg_s2c/ItemChange', atn.t, {num: 0});
|
||||||
addGameLog(call.uid, "_itemChange", {"delitem": 1}, {"itemId": atn.t})
|
addGameLog(call.uid, "_itemChange", {"delitem": 1}, {"itemId": atn.t})
|
||||||
} else {
|
} else {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
////去掉item Redis相关
|
|
||||||
//G.redis.set('item', call.uid, atn.t, 'lastTime', upObj.update.$set.lastTime),
|
|
||||||
//G.redis.numIncrBy('item', call.uid, atn.t, 'num', atn.n),
|
|
||||||
|
|
||||||
G.mongodb.collection('item').updateOne(upObj.filter, upObj.update, upObj.options)
|
G.mongodb.collection('item').updateOne(upObj.filter, upObj.update, upObj.options)
|
||||||
]);
|
]);
|
||||||
// await G.redis.set('item', call.uid, atn.t, 'lastTime', upObj.update.$set.lastTime);
|
|
||||||
// await G.redis.numIncrBy('item', call.uid, atn.t, 'num', atn.n);
|
|
||||||
// await G.mongodb.collection('item').updateOne(upObj.filter, upObj.update, upObj.options);
|
|
||||||
call.addEventMsg('msg_s2c/ItemChange', atn.t, {
|
call.addEventMsg('msg_s2c/ItemChange', atn.t, {
|
||||||
num: item.num + atn.n,
|
num: item.num + atn.n,
|
||||||
lastTime: upObj.update.$set.lastTime
|
lastTime: upObj.update.$set.lastTime
|
||||||
@ -381,11 +369,6 @@ export class PlayerFun {
|
|||||||
let id = result.insertedIds[key].toHexString();
|
let id = result.insertedIds[key].toHexString();
|
||||||
let {_id, ...ops} = v;
|
let {_id, ...ops} = v;
|
||||||
|
|
||||||
// G.redis.set('equip', call.uid, id, {
|
|
||||||
// _id: id,
|
|
||||||
// ...ops
|
|
||||||
// });
|
|
||||||
|
|
||||||
Wjjl.setVal(call.uid, `has_equip_color_${G.gc.equip[ops.equipId].colour}`, 1, false);
|
Wjjl.setVal(call.uid, `has_equip_color_${G.gc.equip[ops.equipId].colour}`, 1, false);
|
||||||
|
|
||||||
call.addEventMsg('msg_s2c/EquipChange', id, {
|
call.addEventMsg('msg_s2c/EquipChange', id, {
|
||||||
@ -458,19 +441,6 @@ export class PlayerFun {
|
|||||||
let id = result.insertedIds[key].toHexString();
|
let id = result.insertedIds[key].toHexString();
|
||||||
let {_id, ...ops} = v;
|
let {_id, ...ops} = v;
|
||||||
|
|
||||||
//https://www.codenong.com/53116318/
|
|
||||||
//新号创建时,hero下默认没有uid开头的key,这里会触发(error) ERR missing key at non-terminal path level错误
|
|
||||||
//hero/apiGetList里会G.redis.set('hero', call.uid, kvList);
|
|
||||||
//在这之后再执行下面的代码则不会报错
|
|
||||||
|
|
||||||
// if (await G.redis.type('hero', call.uid) != null) {
|
|
||||||
// G.redis.set('hero', call.uid, id, {
|
|
||||||
// _id: id,
|
|
||||||
// ...ops
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
call.addEventMsg('msg_s2c/HeroChange', id, {
|
call.addEventMsg('msg_s2c/HeroChange', id, {
|
||||||
_id: id,
|
_id: id,
|
||||||
...ops
|
...ops
|
||||||
@ -541,12 +511,6 @@ export class PlayerFun {
|
|||||||
insertData.forEach((v, key) => {
|
insertData.forEach((v, key) => {
|
||||||
let id = result.insertedIds[key].toHexString();
|
let id = result.insertedIds[key].toHexString();
|
||||||
let {_id, ...ops} = v;
|
let {_id, ...ops} = v;
|
||||||
|
|
||||||
// G.redis.set('shiwu', call.uid, id, {
|
|
||||||
// _id: id,
|
|
||||||
// ...ops
|
|
||||||
// });
|
|
||||||
|
|
||||||
call.addEventMsg('msg_s2c/ShiwuChange', id, {
|
call.addEventMsg('msg_s2c/ShiwuChange', id, {
|
||||||
_id: id,
|
_id: id,
|
||||||
...ops
|
...ops
|
||||||
@ -565,7 +529,6 @@ export class PlayerFun {
|
|||||||
*/
|
*/
|
||||||
static async cutShiwu(call: call, _idArr: string[]) {
|
static async cutShiwu(call: call, _idArr: string[]) {
|
||||||
for (let _id of _idArr) {
|
for (let _id of _idArr) {
|
||||||
// G.redis.del('shiwu', call.uid, _id);
|
|
||||||
G.mongodb.collection('shiwu').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
G.mongodb.collection('shiwu').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
||||||
call.addEventMsg('msg_s2c/ShiwuChange', _id, {num: 0});
|
call.addEventMsg('msg_s2c/ShiwuChange', _id, {num: 0});
|
||||||
addGameLog(call.uid, "_cutShiwu", {}, {_id: _id})
|
addGameLog(call.uid, "_cutShiwu", {}, {_id: _id})
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { rankType, ResOpen } from '../../shared/protocols/rank/PtlOpen';
|
import { rankType, ResOpen } from '../../shared/protocols/rank/PtlOpen';
|
||||||
import { rankInfo } from '../../shared/protocols/type';
|
import { rankInfo } from '../../shared/protocols/type';
|
||||||
import { player } from '../../shared/protocols/user/type';
|
|
||||||
import { Queue } from '../../shared/public/queue';
|
import { Queue } from '../../shared/public/queue';
|
||||||
import { RankClslCross } from './rank_clsl';
|
import { RankClslCross } from './rank_clsl';
|
||||||
//import { RankHbzbJfsCross, RankHbzbJfsLocal, RankHbzbZbsCross } from './rank_hbzb_jfs';
|
//import { RankHbzbJfsCross, RankHbzbJfsLocal, RankHbzbZbsCross } from './rank_hbzb_jfs';
|
||||||
@ -12,21 +11,17 @@ import { RankTujian } from './rank_tujian';
|
|||||||
import { RankWzryCross } from './rank_wzry';
|
import { RankWzryCross } from './rank_wzry';
|
||||||
import { RankXszm } from './rank_xszm';
|
import { RankXszm } from './rank_xszm';
|
||||||
import { RankZccg } from './rank_zccg';
|
import { RankZccg } from './rank_zccg';
|
||||||
import { sortEd } from '../../module/redis'
|
|
||||||
import * as util from 'util'
|
import * as util from 'util'
|
||||||
import {RankKfjs} from "./rank_kfjs";
|
import { RankKfjs } from "./rank_kfjs";
|
||||||
|
|
||||||
import { clusterRunOnce } from '../../clusterUtils';
|
import { clusterRunOnce } from '../../clusterUtils';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export abstract class Rank {
|
export abstract class Rank {
|
||||||
static list: Partial<{
|
static list: Partial<{
|
||||||
qjzzd: RankQjzzd;
|
qjzzd: RankQjzzd;
|
||||||
zhanli: RankPower;
|
zhanli: RankPower;
|
||||||
tanxian: RankTanXian;
|
tanxian: RankTanXian;
|
||||||
//hbzbLocal: RankHbzbJfsLocal;
|
|
||||||
// hbzbCross: RankHbzbJfsCross;
|
|
||||||
// hbzbZbsCross: RankHbzbZbsCross;
|
|
||||||
slzd1: RankSlzd1;
|
slzd1: RankSlzd1;
|
||||||
slzd2: RankSlzd2;
|
slzd2: RankSlzd2;
|
||||||
slzd3: RankSlzd3;
|
slzd3: RankSlzd3;
|
||||||
@ -41,17 +36,12 @@ export abstract class Rank {
|
|||||||
kfjs: RankKfjs
|
kfjs: RankKfjs
|
||||||
}> = {};
|
}> = {};
|
||||||
|
|
||||||
// list: rankInfo[];
|
|
||||||
queue = new Queue();
|
queue = new Queue();
|
||||||
findKey = 'uid';
|
findKey = 'uid';
|
||||||
countMaxNum = 50;
|
countMaxNum = 50;
|
||||||
utimeTTL = 60;
|
utimeTTL = 60;
|
||||||
|
|
||||||
abstract getType(): rankType;
|
abstract getType(): rankType;
|
||||||
// abstract compare(other: rankInfo, cur: rankInfo): boolean;
|
|
||||||
// abstract compareSort(a: rankInfo, b: rankInfo): number;
|
|
||||||
// abstract getRankList(uid: string, obj?: {gud?:player, min?: number, max?:number}): Promise<ResOpen['']>;
|
|
||||||
// abstract getValArr(info: rankInfo): number|string; // 运算后的积分值,排名依据
|
|
||||||
|
|
||||||
// 获取rank数据, 注:可能重写,具体根据type类型判断
|
// 获取rank数据, 注:可能重写,具体根据type类型判断
|
||||||
async getRankList(uid: string, { min, max }): Promise<{ rankList: rankInfo[]; myRank: rankInfo; }> {
|
async getRankList(uid: string, { min, max }): Promise<{ rankList: rankInfo[]; myRank: rankInfo; }> {
|
||||||
@ -65,13 +55,18 @@ export abstract class Rank {
|
|||||||
myRank: {
|
myRank: {
|
||||||
rank,
|
rank,
|
||||||
player: data?.player || conn?.gud || {},
|
player: data?.player || conn?.gud || {},
|
||||||
valArr: [ score ]
|
valArr: [score]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// 积分, 排名依据, ,注:可能重写,具体根据type类型判断
|
/**
|
||||||
getValArr(info: rankInfo):number|string {
|
* 根据RankInfo数据,获取用于排名的积分值得
|
||||||
|
* 注:可能重写,具体根据type类型判断
|
||||||
|
* @param info
|
||||||
|
* @returns 积分值
|
||||||
|
*/
|
||||||
|
getValArr(info: rankInfo): number | string {
|
||||||
return info?.valArr[0] || 0
|
return info?.valArr[0] || 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,15 +74,19 @@ export abstract class Rank {
|
|||||||
compare(other: rankInfo, cur: rankInfo): boolean {
|
compare(other: rankInfo, cur: rankInfo): boolean {
|
||||||
return cur.valArr[0] > other.valArr[0];
|
return cur.valArr[0] > other.valArr[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// rankList排序,注:可能重写,具体根据type类型判断
|
// rankList排序,注:可能重写,具体根据type类型判断
|
||||||
compareSort(a: rankInfo, b: rankInfo): number {
|
compareSort(a: rankInfo, b: rankInfo): number {
|
||||||
return b.valArr[0] - a.valArr[0];
|
return b.valArr[0] - a.valArr[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
// 页码转换为min,max
|
* 页面转换,根据page和offset转换出min和max
|
||||||
static pageToMin (page, offset) {
|
* @param page 页面
|
||||||
|
* @param offset 每页数量
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static pageToMin(page: number, offset: number) {
|
||||||
let res = {
|
let res = {
|
||||||
min: page * offset,
|
min: page * offset,
|
||||||
max: page * offset + offset
|
max: page * offset + offset
|
||||||
@ -95,9 +94,16 @@ export abstract class Rank {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回排行榜DB连接对象
|
||||||
|
*/
|
||||||
get db() {
|
get db() {
|
||||||
return G.mongodb.collection('rankList');
|
return G.mongodb.collection('rankList');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回排行榜类型
|
||||||
|
*/
|
||||||
get type() {
|
get type() {
|
||||||
return this.getType();
|
return this.getType();
|
||||||
}
|
}
|
||||||
@ -107,10 +113,16 @@ export abstract class Rank {
|
|||||||
this.cotr();
|
this.cotr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据type,获取redis Data的key
|
||||||
|
*/
|
||||||
get getRedisKey() {
|
get getRedisKey() {
|
||||||
return util.format('rank:%s:data', this.getType())
|
return util.format('rank:%s:data', this.getType())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据type,获取redis Sort的key
|
||||||
|
*/
|
||||||
get getRedisKeySort() {
|
get getRedisKeySort() {
|
||||||
return util.format('rank:%s:sort', this.getType())
|
return util.format('rank:%s:sort', this.getType())
|
||||||
}
|
}
|
||||||
@ -119,152 +131,252 @@ export abstract class Rank {
|
|||||||
async cotr() {
|
async cotr() {
|
||||||
clusterRunOnce(async () => {
|
clusterRunOnce(async () => {
|
||||||
// redis已存在则不初始化
|
// redis已存在则不初始化
|
||||||
if(await this.getRankLen() > 0) return
|
//if(await this.getRankLen() > 0) return
|
||||||
this.db.find({ type: this.type }).toArray().then(listArr => {
|
|
||||||
|
//将db里的数据,写入到 rank:xxx:sort里
|
||||||
|
//写入的单条数据为: {uid:score}
|
||||||
|
this.db.find({ type: this.type }, {
|
||||||
|
projection: {
|
||||||
|
"idKey": 1,
|
||||||
|
"type": 1,
|
||||||
|
"data.valArr": 1,
|
||||||
|
"utime": 1
|
||||||
|
}
|
||||||
|
}).toArray().then(listArr => {
|
||||||
// 写入初始化数据
|
// 写入初始化数据
|
||||||
listArr = listArr || [];
|
listArr = listArr || [];
|
||||||
listArr.forEach(item => {
|
listArr.forEach(item => {
|
||||||
if(item.idKey && item.data) this.setRankData(item.idKey, item.data)
|
if (item.idKey && item.data) this.setRankData(item.idKey, item.data)
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.getRankListRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新数据与排名
|
/**
|
||||||
async setRankData(idKey: string, data: rankInfo) {
|
* 更新玩家的积分
|
||||||
let key = this.getRedisKey
|
* @param uid uid,在rank里通常保存于idKey这个字段
|
||||||
|
* @param data 积分数据,主要是需要里面的data.valArr字段
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async setRankData(uid: string, data: rankInfo) {
|
||||||
let keySort = this.getRedisKeySort
|
let keySort = this.getRedisKeySort
|
||||||
data.utime = G.time
|
|
||||||
// data
|
// let key = this.getRedisKey
|
||||||
G.redis.hSet(key, idKey, data)
|
// G.redis.hSet(key, idKey, data)
|
||||||
// sort
|
|
||||||
let valArr = await this.getValArr(data)
|
/**积分 */
|
||||||
G.redis.zAdd(keySort, <sortEd>{value: idKey, score: valArr})
|
let score = await this.getValArr(data)
|
||||||
return
|
//G.redis.zAdd(keySort, <sortEd>{value: idKey, score: valArr})
|
||||||
|
await G.ioredis.zadd(keySort, score, uid)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取单个用户的数据
|
/**
|
||||||
async getRankData(idKey: string) {
|
* 获取单个用户的数据
|
||||||
let key = this.getRedisKey
|
* @param uid uid
|
||||||
let data = await G.redis.hGet(key, idKey)
|
* @returns
|
||||||
if(!data || data.utime < (G.time - this.utimeTTL)) {
|
*/
|
||||||
let type = this.getType()
|
async getRankData(uid: string) {
|
||||||
let res = await this.db.findOne({isKey: idKey, type})
|
let data: rankInfo;
|
||||||
if(res) {
|
let res = await this.db.findOne({ "idKey": uid, "type": this.getType() })
|
||||||
data = G.mongodb.conversionIdObj(res)
|
|
||||||
this.setRankData(idKey, data.data)
|
if (res?.data && res.data.utime + 60 > G.time) {
|
||||||
}
|
data = (G.mongodb.conversionIdObj(res)).data;
|
||||||
|
} else if (res?.data) {
|
||||||
|
let player = await G.mongodb.collection("user").findOne({ uid: uid }, { projection: { _id: 0 } });
|
||||||
|
|
||||||
|
data = Object.assign(res.data, { player: player });
|
||||||
|
this.db.updateOne({ idKey: uid, type: this.getType() }, { $set: { "data.player": data.player, "data.utime": G.time } });
|
||||||
}
|
}
|
||||||
if(data) return data
|
return data;
|
||||||
return undefined || {}
|
|
||||||
|
// let key = this.getRedisKey
|
||||||
|
// let data = await G.redis.hGet(key, idKey)
|
||||||
|
// if(!data || data.utime < (G.time - this.utimeTTL)) {
|
||||||
|
// let type = this.getType()
|
||||||
|
// let res = await this.db.findOne({isKey: idKey, type}) //<--isKey??意味着整个rank从来不会更新,res永远是空
|
||||||
|
// if(res) {
|
||||||
|
// data = G.mongodb.conversionIdObj(res)
|
||||||
|
// this.setRankData(idKey, data.data)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if(data) return data
|
||||||
|
// return undefined || {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取单个用户的分数
|
/**
|
||||||
async getRankScore(idKey:string): Promise<number> {
|
* 获取单个用户的排序分数
|
||||||
let score = await G.redis.zScore(this.getRedisKeySort, idKey)
|
* @param uid
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async getRankScore(uid: string): Promise<number> {
|
||||||
|
let score = await G.redis.zScore(this.getRedisKeySort, uid)
|
||||||
return score || 0
|
return score || 0
|
||||||
}
|
|
||||||
|
|
||||||
// 获取单个用户的排名 *降序
|
|
||||||
async getRankSortByOne(idKey: string):Promise<number> {
|
|
||||||
let rank = await G.redis.zRevRank(this.getRedisKeySort, idKey)
|
|
||||||
return rank === 0 || rank > 0 ? rank: -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取单个指定排名的用户数据 *降序
|
/**
|
||||||
|
* 从redis中获取单个用户的排名 *降序
|
||||||
|
* @param uid
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async getRankSortByOne(uid: string): Promise<number> {
|
||||||
|
let rank = await G.redis.zRevRank(this.getRedisKeySort, uid)
|
||||||
|
return rank === 0 || rank > 0 ? rank : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从redis中获取单个指定排名的用户数据 *降序
|
||||||
async getRankSortDataByOne(rank: number): Promise<rankInfo> {
|
async getRankSortDataByOne(rank: number): Promise<rankInfo> {
|
||||||
let rankList:rankInfo[] = await this.getRankListRange(rank, rank + 1)
|
let rankList: rankInfo[] = await this.getRankListRange(rank, rank + 1)
|
||||||
let rankInfo = rankList && rankList.length > 0 ? rankList[0] : {} as rankInfo
|
let rankInfo = rankList && rankList.length > 0 ? rankList[0] : {} as rankInfo
|
||||||
return rankInfo
|
return rankInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取排名长度
|
// 获取排名长度
|
||||||
async getRankLen() {
|
// async getRankLen() {
|
||||||
return await G.redis.hLen(this.getRedisKey)
|
// return await G.redis.hLen(this.getRedisKey)
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 获取指定排名范围的数据 *降序
|
/**
|
||||||
async getRankListRange(min:number = 0, max:number = 50): Promise<rankInfo[]> {
|
* 获取指定排名范围的数据 *降序
|
||||||
let idKeys = await this.getRankListIdKeyRange(min, max)
|
* @param min
|
||||||
if(idKeys && idKeys.length > 0) {
|
* @param max
|
||||||
let res = await G.redis.hmGet(this.getRedisKey, idKeys)
|
* @returns
|
||||||
res = await this.checkData(res)
|
*/
|
||||||
return res.sort(this.compareSort)
|
async getRankListRange(min: number = 0, max: number = 50): Promise<rankInfo[]> {
|
||||||
}
|
let uids = await this.getRankListIdKeyRange(min, max)
|
||||||
return []
|
if (uids && uids.length > 0) {
|
||||||
}
|
let res = await this.db.find({ idKey: { $in: uids }, type: this.getType() }).toArray()
|
||||||
|
|
||||||
// 获取指定排名范围的idKey *降序
|
|
||||||
async getRankListIdKeyRange(min:number = 0, max: number = 50): Promise<string[]> {
|
|
||||||
let idKeys = await G.redis.zRevRange(this.getRedisKeySort, min, max - 1)
|
|
||||||
return idKeys || []
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取指定类型的全部rank列表,返回为积分排序后的数组
|
switch (this.getType()) {
|
||||||
async getRankListAll(): Promise<rankInfo[]> {
|
default: // 排行数据更新逻辑 默认更新playerInfo
|
||||||
let res = await G.redis.hGetAll(this.getRedisKey)
|
let updateUids = [];
|
||||||
if(res) {
|
res = res.map(item => {
|
||||||
// 如果是用户数据,则比对utime,更新数据
|
// 没有player 或者 player 过期
|
||||||
// res = await this.checkData(res)
|
if (!item.data?.player || item.data.utime + 60 < G.time) {
|
||||||
return Object.values(res).sort(this.compareSort)
|
updateUids.push(item.idKey);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
let newUserArr = await G.mongodb.collection('user').find(
|
||||||
|
{ uid: { $in: updateUids } }, { projection: { _id: 0 } }
|
||||||
|
).toArray();
|
||||||
|
|
||||||
|
newUserArr.forEach(item => {
|
||||||
|
// 每次遍历查找?
|
||||||
|
let index = res.findIndex(x => x.idKey == item.uid);
|
||||||
|
|
||||||
|
res[index].data.player = item;
|
||||||
|
this.db.updateOne({ idKey: item.uid, type: this.getType() }, { $set: { "data.player": item } });
|
||||||
|
|
||||||
|
// 跟新redis score
|
||||||
|
this.setRankData(item.uid, res[index].data as any);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.map(ele => ele.data).sort(this.compareSort) as any;
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按排名获取全部的idKey
|
/**
|
||||||
|
* 从redis中获取指定排名范围的uid集合 *降序
|
||||||
|
* @param min
|
||||||
|
* @param max
|
||||||
|
* @returns uid集合数组
|
||||||
|
*/
|
||||||
|
async getRankListIdKeyRange(min: number = 0, max: number = 50): Promise<string[]> {
|
||||||
|
let uids = await G.redis.zRevRange(this.getRedisKeySort, min, max - 1)
|
||||||
|
return uids || []
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类型的全部rank列表,返回为积分排序后的数组
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async getRankListAll(): Promise<rankInfo[]> {
|
||||||
|
// let res = await G.redis.hGetAll(this.getRedisKey)
|
||||||
|
let res = (await this.db.find({ type: this.getType() }).toArray()).map(ele => ele.data);
|
||||||
|
if (res) {
|
||||||
|
// 如果是用户数据,则比对utime,更新数据
|
||||||
|
// res = await this.checkData(res)
|
||||||
|
return res.sort(this.compareSort)
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按排名获取全部的idKey
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
async getRankListIdKeyAll(): Promise<string[]> {
|
async getRankListIdKeyAll(): Promise<string[]> {
|
||||||
let res = this.getRankListIdKeyRange(0, -1)
|
let res = this.getRankListIdKeyRange(0, -1)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证数据的过期时间,更新数据
|
// 验证数据的过期时间,更新数据
|
||||||
async checkData(rankList: rankInfo[]): Promise<rankInfo[]> {
|
// async checkData(rankList: rankInfo[]): Promise<rankInfo[]> {
|
||||||
let updateUid = []
|
// let updateUid = []
|
||||||
rankList.forEach((value,key) => {
|
// rankList.forEach((value,key) => {
|
||||||
// 仅针对用户表,公会表暂不考虑
|
// // 仅针对用户表,公会表暂不考虑
|
||||||
if(rankList[key].player?.uid && (rankList[key].utime || 0) < (G.time - this.utimeTTL)) {
|
// if(rankList[key].player?.uid && (rankList[key].utime || 0) < (G.time - this.utimeTTL)) {
|
||||||
// 更新数据
|
// // 更新数据
|
||||||
updateUid.push(rankList[key].player.uid)
|
// updateUid.push(rankList[key].player.uid)
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
if(updateUid.length > 0) {
|
// if(updateUid.length > 0) {
|
||||||
let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
|
// let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
|
||||||
// let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string]))
|
// // let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string]))
|
||||||
// let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
|
// // let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
|
||||||
newUserArr.forEach(item => {
|
// newUserArr.forEach(item => {
|
||||||
let index = rankList.findIndex( x => x.player.uid == item.uid);
|
// let index = rankList.findIndex( x => x.player.uid == item.uid);
|
||||||
rankList[index].player = item;
|
// rankList[index].player = item;
|
||||||
this.setRankData(item.uid, rankList[index]);
|
// this.setRankData(item.uid, rankList[index]);
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
return rankList
|
// return rankList
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除指定idk的排名数据
|
||||||
|
* @param idKey
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
async delRankData(idKey: string) {
|
||||||
|
// G.redis.hDel(this.getRedisKey, idKey)
|
||||||
|
G.redis.zRem(this.getRedisKeySort, idKey);
|
||||||
|
this.db.updateOne({ idKey: idKey, type: this.getType() }, {
|
||||||
|
$set: { idKey: `del_${idKey}` }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async delRankData(idKey:string) {
|
/**
|
||||||
G.redis.hDel(this.getRedisKey, idKey)
|
* 原逻辑前50(countMaxNum)名才更新数据(上榜),多余的数据会删除。
|
||||||
G.redis.zRem(this.getRedisKeySort, idKey)
|
* @param info
|
||||||
}
|
* @returns
|
||||||
|
*/
|
||||||
// 原逻辑前50(countMaxNum)名才更新数据(上榜),多余的数据会删除。
|
|
||||||
async addNew(info: rankInfo) {
|
async addNew(info: rankInfo) {
|
||||||
//this.queue.enqueue(async () => {
|
//this.queue.enqueue(async () => {
|
||||||
await this.setRankData(info.player[this.findKey], info)
|
await this.setRankData(info.player[this.findKey], info)
|
||||||
await this.db.updateOne({ type: this.type, idKey: info.player[this.findKey] }, { $set: { data: info } }, { upsert: true });
|
await this.db.updateOne({ type: this.type, idKey: info.player[this.findKey] }, { $set: { data: info } }, { upsert: true });
|
||||||
// 删除第50名以后的数据,(排名从0开始计算)
|
// 删除第50名以后的数据,(排名从0开始计算)
|
||||||
// let idKeys:string[] = await this.getRankListIdKeyRange(50, -1)
|
// let idKeys:string[] = await this.getRankListIdKeyRange(50, -1)
|
||||||
// idKeys.forEach(idKey => {
|
// idKeys.forEach(idKey => {
|
||||||
// this.db.deleteOne({ type: this.type, idKey: idKey });
|
// this.db.deleteOne({ type: this.type, idKey: idKey });
|
||||||
// this.delRankData(idKey)
|
// this.delRankData(idKey)
|
||||||
// })
|
// })
|
||||||
//});
|
//});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 清空相关rank数据
|
// 清空相关rank数据
|
||||||
async clear() {
|
async clear() {
|
||||||
this.queue.enqueue(async () => {
|
this.queue.enqueue(async () => {
|
||||||
|
// G.redis.rawDel(this.getRedisKey)
|
||||||
|
G.redis.rawDel(this.getRedisKeySort);
|
||||||
await this.db.deleteMany({ type: this.type });
|
await this.db.deleteMany({ type: this.type });
|
||||||
G.redis.rawDel(this.getRedisKey)
|
|
||||||
G.redis.rawDel(this.getRedisKeySort)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -47,9 +47,6 @@ export class SchedulerNewDayLocalCtor extends Scheduler {
|
|||||||
...add
|
...add
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// for (let k in add) {
|
|
||||||
// G.redis.set('user', gud.uid, k as any, add[k] as any);
|
|
||||||
// }
|
|
||||||
setGud(gud.uid,add);
|
setGud(gud.uid,add);
|
||||||
}
|
}
|
||||||
G.server.sendMsgByUid(gud.uid, 'msg_s2c/PlayerChange', gud)
|
G.server.sendMsgByUid(gud.uid, 'msg_s2c/PlayerChange', gud)
|
||||||
|
@ -545,41 +545,6 @@ export class SchedulerWzryendDel extends SchedulerWzryAutoBaoMing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// export class SchedulerWzrycrossEmail extends SchedulerWzryAutoBaoMing {
|
|
||||||
// id: schedulerType = 'crosseamil_wzry';
|
|
||||||
// //每天晚上的20:15分,从跨服里拉取邮件数据到本地
|
|
||||||
// time = 72900;
|
|
||||||
// name = '拉跨服邮件到本服定时器(每天20:15)';
|
|
||||||
// type = 'day';
|
|
||||||
//
|
|
||||||
// async start() {
|
|
||||||
// let _res = await G.clientCross.callApi('wzry/WzFightData', { uid: '', isemail: true });
|
|
||||||
// if (_res.isSucc && Object.keys(_res.res.crossEmail).length) {
|
|
||||||
// let crossEmail = _res.res.crossEmail
|
|
||||||
// let delEmail = []
|
|
||||||
// for (let index = 0; index < crossEmail.length; index++) {
|
|
||||||
// const element = crossEmail[index];
|
|
||||||
// let _prize = element?.prizeData?.prize || []
|
|
||||||
// if (element?.prizeData) delete element.prizeData
|
|
||||||
// element["prize"] = _prize
|
|
||||||
// if (element.uid == "system") {
|
|
||||||
// delEmail.push(element._id)
|
|
||||||
// delete element._id
|
|
||||||
// EmailFun.addQuanFuEmail(element)
|
|
||||||
//
|
|
||||||
// } else if ( await G.redis.hGet('player:uids', element.uid)) {
|
|
||||||
// delEmail.push(element._id)
|
|
||||||
// delete element._id
|
|
||||||
// EmailFun.addEmail(element)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// await G.clientCross.callApi('wzry/UpdateFight', { uid: '', isdelemail: { isdel: true, email: delEmail } })
|
|
||||||
// }
|
|
||||||
// await this.record();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 分组
|
// 分组
|
||||||
export async function wzrygroup(userList) {
|
export async function wzrygroup(userList) {
|
||||||
let _u = shuffle(userList)
|
let _u = shuffle(userList)
|
||||||
|
@ -38,14 +38,15 @@ export class Scheduler_xfjs_Local_Ctor extends Scheduler {
|
|||||||
if (!_hd) return
|
if (!_hd) return
|
||||||
|
|
||||||
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || 100
|
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || 100
|
||||||
let rmbuse = await G.mongodb.collection('rmbuse').aggregate([
|
|
||||||
{$match: {isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}},
|
|
||||||
{$group: {_id: "$uid", total: {$sum: "$change"}}},
|
|
||||||
{$sort: {total: 1}},
|
|
||||||
{$limit: limit}
|
|
||||||
]).toArray()
|
|
||||||
|
|
||||||
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.total)}))
|
let rmbuse = await G.crossmongodb.collection('rmbuse').find({
|
||||||
|
time: {
|
||||||
|
$gte: _hd.stime,
|
||||||
|
$lte: _hd.etime + 10
|
||||||
|
}
|
||||||
|
}).sort({change: 1}).limit(limit).toArray()
|
||||||
|
|
||||||
|
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)}))
|
||||||
|
|
||||||
let ranklist = sortRankList(_hd.data.rank, list)
|
let ranklist = sortRankList(_hd.data.rank, list)
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ export class Scheduler_xfjs_Local_Ctor extends Scheduler {
|
|||||||
let users = R.slice(i.rank[0] - 1, i.rank[1])(ranklist)
|
let users = R.slice(i.rank[0] - 1, i.rank[1])(ranklist)
|
||||||
users.map(v => {
|
users.map(v => {
|
||||||
if (v._id == 'system') return
|
if (v._id == 'system') return
|
||||||
|
if (G.config.serverId != users.sid) return;
|
||||||
EmailFun.addEmail({
|
EmailFun.addEmail({
|
||||||
uid: v._id,
|
uid: v._id,
|
||||||
type: 'system',
|
type: 'system',
|
||||||
|
@ -66,10 +66,6 @@ export class ShiwuFun {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (let k in change) {
|
|
||||||
// G.redis.set('shiwu', call.uid, shiwu._id, k as keyof shiwuType, change[k]);
|
|
||||||
// }
|
|
||||||
G.mongodb.collection('shiwu').updateOne(
|
G.mongodb.collection('shiwu').updateOne(
|
||||||
{uid: call.uid, _id: new ObjectId(shiwu._id)}, {$set: {...change}}
|
{uid: call.uid, _id: new ObjectId(shiwu._id)}, {$set: {...change}}
|
||||||
);
|
);
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import {CollectionShop} from '../module/collection_shop';
|
import { CollectionShop } from '../module/collection_shop';
|
||||||
import {ResOpen, shopItem} from '../shared/protocols/shop/PtlOpen';
|
import { ResOpen, shopItem } from '../shared/protocols/shop/PtlOpen';
|
||||||
import {PublicShared} from '../shared/public/public';
|
import { PublicShared } from '../shared/public/public';
|
||||||
import {ShiwuFun} from './shiwu';
|
import { ShiwuFun } from './shiwu';
|
||||||
|
|
||||||
type shopData = ResOpen;
|
type shopData = ResOpen;
|
||||||
type changeData = {
|
type changeData = {
|
||||||
[k in keyof shopData]: shopData[k]
|
[k in keyof (shopData & { version?: number | string })]: (shopData & { version?: number | string })[k]
|
||||||
};
|
};
|
||||||
|
|
||||||
export class ShopFun {
|
export class ShopFun {
|
||||||
@ -47,24 +47,14 @@ export class ShopFun {
|
|||||||
return shopItems.filter(s => s.openDay <= sDay);
|
return shopItems.filter(s => s.openDay <= sDay);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**修改商店数据 */
|
|
||||||
// static async changeShopData(rId: string, shopId: string, shopData: Partial<shopData>, change: Partial<changeData>) {
|
|
||||||
//
|
|
||||||
// Object.assign(shopData, change);
|
|
||||||
//
|
|
||||||
// for (let k in change) {
|
|
||||||
// G.redis.set('shop', rId, shopId, k as keyof CollectionShop, change[k]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
static async changeShopData(uid: string, shopId: string, change: Partial<changeData>) {
|
static async changeShopData(uid: string, shopId: string, change: Partial<changeData>) {
|
||||||
let where = {uid: uid, shopId: shopId}
|
let where = { uid: uid, shopId: shopId }
|
||||||
G.mongodb.collection("shop").updateOne(where, {$set: change})
|
G.mongodb.collection("shop").updateOne(where, { $set: change })
|
||||||
}
|
}
|
||||||
|
|
||||||
static async initShopData(uid: string, shopId: string) {
|
static async initShopData(uid: string, shopId: string) {
|
||||||
let gud = await G.mongodb.collection("user").findOne({uid: uid}, {
|
let gud = await G.mongodb.collection("user").findOne({ uid: uid }, {
|
||||||
projection: {lv: 1, _id: 0}
|
projection: { lv: 1, _id: 0 }
|
||||||
})
|
})
|
||||||
let lv = gud?.lv || 1;
|
let lv = gud?.lv || 1;
|
||||||
|
|
||||||
@ -79,7 +69,7 @@ export class ShopFun {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (await G.mongodb.collection("shop").findOneAndUpdate(
|
return (await G.mongodb.collection("shop").findOneAndUpdate(
|
||||||
{uid: uid, shopId: shopId},
|
{ uid: uid, shopId: shopId },
|
||||||
{
|
{
|
||||||
$set: {
|
$set: {
|
||||||
buyNum: {},
|
buyNum: {},
|
||||||
@ -90,11 +80,11 @@ export class ShopFun {
|
|||||||
lastFreeRefreshTime: G.time
|
lastFreeRefreshTime: G.time
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{upsert: true, returnDocument: 'after'}
|
{ upsert: true, returnDocument: 'after' }
|
||||||
)).value
|
)).value
|
||||||
}
|
}
|
||||||
|
|
||||||
static async getShopData(uid: string, shopId: string) {
|
static async getShopData(uid: string, shopId: string, lv: number) {
|
||||||
let where = {
|
let where = {
|
||||||
uid: uid,
|
uid: uid,
|
||||||
shopId: shopId
|
shopId: shopId
|
||||||
@ -111,22 +101,16 @@ export class ShopFun {
|
|||||||
if (shopConf.freeRefreshInterval > 0 && G.time - shopData.lastFreeRefreshTime >= shopConf.freeRefreshInterval) {
|
if (shopConf.freeRefreshInterval > 0 && G.time - shopData.lastFreeRefreshTime >= shopConf.freeRefreshInterval) {
|
||||||
shopData.useFreeRefreshNum = 0;
|
shopData.useFreeRefreshNum = 0;
|
||||||
shopData.lastFreeRefreshTime = G.time;
|
shopData.lastFreeRefreshTime = G.time;
|
||||||
await this.changeShopData(uid, shopId, {useFreeRefreshNum: 0, lastFreeRefreshTime: G.time});
|
await this.changeShopData(uid, shopId, { useFreeRefreshNum: 0, lastFreeRefreshTime: G.time });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shopConf.version && shopConf.version != shopData.version) {
|
||||||
|
shopData.shopItems = this.getShopItems(shopId, lv);
|
||||||
|
await this.changeShopData(uid, shopId, { shopItems: shopData.shopItems, version: shopConf.version });
|
||||||
}
|
}
|
||||||
|
|
||||||
return shopData
|
return shopData
|
||||||
}
|
}
|
||||||
|
|
||||||
/**修改工会商店数据 */
|
|
||||||
// static async changeGHShopData(call: ApiCall, shopId: string, shopData: Partial<shopData>, change: Partial<changeData>) {
|
|
||||||
//
|
|
||||||
// Object.assign(shopData, change);
|
|
||||||
//
|
|
||||||
// for (let k in change) {
|
|
||||||
// G.redis.set('shop', call.conn.gud.ghId, shopId, k as keyof CollectionShop, change[k]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
static async changeGHShopData(ghid: string, shopId: string, change: Partial<changeData>) {
|
static async changeGHShopData(ghid: string, shopId: string, change: Partial<changeData>) {
|
||||||
this.changeShopData(ghid, shopId, change)
|
this.changeShopData(ghid, shopId, change)
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
import { ApiCall } from 'tsrpc';
|
import {ApiCall} from 'tsrpc';
|
||||||
import { ResOpen } from '../shared/protocols/tanxian/PtlOpen';
|
import {ResOpen} from '../shared/protocols/tanxian/PtlOpen';
|
||||||
import { TeQuanFun } from './tequan';
|
import {TeQuanFun} from './tequan';
|
||||||
|
|
||||||
type dataChange = Partial<ResOpen>;
|
type dataChange = Partial<ResOpen>;
|
||||||
|
|
||||||
export class TanXianFun {
|
export class TanXianFun {
|
||||||
/**修改探险数据 */
|
/**修改探险数据 */
|
||||||
static async changeData(call: ApiCall, change: dataChange) {
|
static async changeData(call: ApiCall, change: dataChange) {
|
||||||
|
G.mongodb.collection('tanxian').updateOne({uid: call.uid}, {$set: {...change}});
|
||||||
G.mongodb.collection('tanxian').updateOne({ uid: call.uid }, { $set: { ...change } });
|
let data = await this.getData(call);
|
||||||
|
Object.assign(data, change);
|
||||||
for (let k in change) {
|
G.ioredis.setex(`tanxian:${call.uid}`, 600, JSON.stringify(data));
|
||||||
G.redis.set('tanxian', call.uid, k as any, change[k]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**获取探险数据 */
|
/**获取探险数据 */
|
||||||
static async getData(call: ApiCall, cache = true) {
|
static async getData(call: ApiCall, cache = true) {
|
||||||
if (cache && await G.redis.type('tanxian', call.uid) != null) return await G.redis.get('tanxian', call.uid);
|
let cacheData = await G.ioredis.get(`tanxian:${call.uid}`);
|
||||||
let { _id, uid, ...data } = await G.mongodb.collection('tanxian').findOne({ uid: call.uid });
|
if (cacheData && cache) return JSON.parse(cacheData);
|
||||||
|
let {_id, uid, ...data} = await G.mongodb.collection('tanxian').findOne({uid: call.uid});
|
||||||
if (!data.eventTime) {
|
if (!data.eventTime) {
|
||||||
data.eventTime = G.time;
|
data.eventTime = G.time;
|
||||||
G.mongodb.collection('tanxian').updateOne({ uid: call.uid }, { $set: { eventTime: G.time } });
|
G.mongodb.collection('tanxian').updateOne({uid: call.uid}, {$set: {eventTime: G.time}});
|
||||||
}
|
}
|
||||||
|
G.ioredis.setex(`tanxian:${call.uid}`, 600, JSON.stringify(data));
|
||||||
await G.redis.set('tanxian', call.uid, data);
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**获取快速探险次数 */
|
/**获取快速探险次数 */
|
||||||
static async getFastGuaJiNum(call: ApiCall) {
|
static async getFastGuaJiNum(call: ApiCall) {
|
||||||
let num = G.gc.tanxian_com.fastGuaJiNum + await TeQuanFun.getTxFreeNum(call);
|
let num = G.gc.tanxian_com.fastGuaJiNum + await TeQuanFun.getTxFreeNum(call);
|
||||||
@ -37,9 +37,10 @@ export class TanXianFun {
|
|||||||
}
|
}
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**获取最后领取奖励的id与sort后的数组*/
|
/**获取最后领取奖励的id与sort后的数组*/
|
||||||
static getLastMapId(receivePrizeConfId: string[]) {
|
static getLastMapId(receivePrizeConfId: string[]) {
|
||||||
if(!receivePrizeConfId) receivePrizeConfId = []
|
if (!receivePrizeConfId) receivePrizeConfId = []
|
||||||
receivePrizeConfId = receivePrizeConfId.sort((a, b) => ~~a - ~~b);
|
receivePrizeConfId = receivePrizeConfId.sort((a, b) => ~~a - ~~b);
|
||||||
let receiveLastId = receivePrizeConfId.length > 0 ? receivePrizeConfId[receivePrizeConfId.length - 1] : '0';// 获取当前的领取进度
|
let receiveLastId = receivePrizeConfId.length > 0 ? receivePrizeConfId[receivePrizeConfId.length - 1] : '0';// 获取当前的领取进度
|
||||||
return {receiveLastId, receivePrizeConfId}
|
return {receiveLastId, receivePrizeConfId}
|
||||||
|
@ -838,6 +838,11 @@ export class TaskAllEmitFun {
|
|||||||
G.emit("Class_task_153", 'Class_task_153', node.call, _val, 0);
|
G.emit("Class_task_153", 'Class_task_153', node.call, _val, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (node.call.service.name == 'event/yuandan/DMRec' && node.return.isSucc) {
|
||||||
|
// 今日参与{1}次抓娃娃小游戏
|
||||||
|
G.emit("Class_task_158", 'Class_task_158', node.call, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PeijianChange"] && node.call.eventMsg["msg_s2c/PeijianChange"]) {
|
if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PeijianChange"] && node.call.eventMsg["msg_s2c/PeijianChange"]) {
|
||||||
let _change = node.call.eventMsg["msg_s2c/PeijianChange"];
|
let _change = node.call.eventMsg["msg_s2c/PeijianChange"];
|
||||||
|
@ -13,6 +13,7 @@ import {weixiuchangType} from "../shared/protocols/weixiuchang/type";
|
|||||||
import {FunWeiXiuChang} from "./weixiuchang";
|
import {FunWeiXiuChang} from "./weixiuchang";
|
||||||
import {JJCFun} from "./jjc";
|
import {JJCFun} from "./jjc";
|
||||||
import {getGud} from "./gud";
|
import {getGud} from "./gud";
|
||||||
|
import {Yuandanfun} from "../api_s2c/event/yuandan/fun";
|
||||||
|
|
||||||
let _classNameFunc = {}
|
let _classNameFunc = {}
|
||||||
/**
|
/**
|
||||||
@ -76,6 +77,8 @@ export module manager {
|
|||||||
YangChengMuBiaofun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
|
YangChengMuBiaofun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
|
||||||
// 圣诞活动任务计数
|
// 圣诞活动任务计数
|
||||||
Christmasfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
|
Christmasfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
|
||||||
|
// 元旦活动任务计数
|
||||||
|
Yuandanfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 任务数值, 和检测值,看情况需要上层复写
|
// 任务数值, 和检测值,看情况需要上层复写
|
||||||
@ -820,6 +823,16 @@ export module manager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 第60个任务 今日参与{1}次抓娃娃小游戏
|
||||||
|
export class Class_task_158 extends BaseClass {
|
||||||
|
stype = 158
|
||||||
|
isinc = 1
|
||||||
|
|
||||||
|
async initVal(call: ApiCall, con) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,10 +202,6 @@ export class UserFun {
|
|||||||
...add
|
...add
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// for (let k in add) {
|
|
||||||
// G.redis.set('user', gud.uid, k as any, add[k] as any);
|
|
||||||
// }
|
|
||||||
setGud(gud.uid, add);
|
setGud(gud.uid, add);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,18 +262,12 @@ export class UserFun {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async getGud(uid: string) {
|
static async getGud(uid: string) {
|
||||||
//return await G.redis.get('user', uid);
|
|
||||||
return await getGud(uid);
|
return await getGud(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**激活头像框 */
|
/**激活头像框 */
|
||||||
static async activeHeadFrame(uid: string, k: string, v: number) {
|
static async activeHeadFrame(uid: string, k: string, v: number) {
|
||||||
let gud: player;
|
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);
|
gud = await getGud(uid);
|
||||||
|
|
||||||
let change = false;
|
let change = false;
|
||||||
@ -325,11 +315,6 @@ export class UserFun {
|
|||||||
/**激活聊天框 */
|
/**激活聊天框 */
|
||||||
static async activeChatFrame(uid: string, k: string, v: number) {
|
static async activeChatFrame(uid: string, k: string, v: number) {
|
||||||
let gud: player;
|
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);
|
gud = await getGud(uid);
|
||||||
|
|
||||||
let change = false;
|
let change = false;
|
||||||
@ -377,11 +362,6 @@ export class UserFun {
|
|||||||
/**激活造型 */
|
/**激活造型 */
|
||||||
static async activeModel(uid: string, k: string, v: number) {
|
static async activeModel(uid: string, k: string, v: number) {
|
||||||
let gud: player;
|
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);
|
gud = await getGud(uid);
|
||||||
|
|
||||||
let change = false;
|
let change = false;
|
||||||
|
@ -179,7 +179,7 @@ export class WangZheRongYaofun {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (win_num > 1) {
|
if (win_num > 1) {
|
||||||
return _score + win_num - 1
|
return _score + win_num
|
||||||
}
|
}
|
||||||
return _score
|
return _score
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,9 @@ const indexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[] }> =
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: {uid: 1}
|
key: {uid: 1}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: {type: 1}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
pata: [
|
pata: [
|
||||||
@ -435,7 +438,12 @@ const crossIndexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[]
|
|||||||
{
|
{
|
||||||
key: {zkey: 1}
|
key: {zkey: 1}
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
|
huodong_user: [
|
||||||
|
{
|
||||||
|
key: {uid: 1}, unique: true,
|
||||||
|
}
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function initMongoDB() {
|
export async function initMongoDB() {
|
||||||
|
@ -77,8 +77,9 @@ async function clearRedis() {
|
|||||||
G.redis.fromatKey('hero'),
|
G.redis.fromatKey('hero'),
|
||||||
G.redis.fromatKey('equip'),
|
G.redis.fromatKey('equip'),
|
||||||
G.redis.fromatKey('shiwu'),
|
G.redis.fromatKey('shiwu'),
|
||||||
//G.redis.fromatKey('gbtx'),
|
G.redis.fromatKey('tanxian'),
|
||||||
//G.redis.fromatKey('dxlt'),
|
G.redis.fromatKey('gbtx'),
|
||||||
|
G.redis.fromatKey('dxlt'),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,13 +94,6 @@ export async function startAfter() {
|
|||||||
arr.forEach(async u => G.redis.hSet('player:uids', u.uid, 1))
|
arr.forEach(async u => G.redis.hSet('player:uids', u.uid, 1))
|
||||||
});
|
});
|
||||||
|
|
||||||
// G.mongodb.collection('payLog').find({}).toArray().then(arr => {
|
|
||||||
// arr.forEach(a => {
|
|
||||||
// let { _id, uid, ...logs } = a;
|
|
||||||
// G.redis.hSet('player:payLog', uid, logs)
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
|
|
||||||
} else if (G.argv.serverType == 'cross') {
|
} else if (G.argv.serverType == 'cross') {
|
||||||
|
|
||||||
RankKbzz.init();
|
RankKbzz.init();
|
||||||
|
14
src/setWs.ts
14
src/setWs.ts
@ -136,7 +136,7 @@ function setWs(server: WsServer<ServiceType>) {
|
|||||||
|
|
||||||
//处理API锁,极限情况下只锁10s,防止死锁
|
//处理API锁,极限情况下只锁10s,防止死锁
|
||||||
//在下方postApiReturnFlow里会解锁
|
//在下方postApiReturnFlow里会解锁
|
||||||
if (call.conn.apiLock[call.service.name] && new Date().getTime() - call.conn.requstApiTime[call.service.name] < 10000) {
|
if (call.conn.apiLock[call.service.name] && new Date().getTime() - call.conn.apiLock[call.service.name] < 10000) {
|
||||||
call.error('', {code: -100, message: '', time: 0});
|
call.error('', {code: -100, message: '', time: 0});
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -182,18 +182,6 @@ function setWs(server: WsServer<ServiceType>) {
|
|||||||
if (node.call.service.name == 'user/Login' && node.return.isSucc) {
|
if (node.call.service.name == 'user/Login' && node.return.isSucc) {
|
||||||
//玩家uid已经登陆在线 通知账号在其他地方登录
|
//玩家uid已经登陆在线 通知账号在其他地方登录
|
||||||
const uid = node.return.res.gud.uid;
|
const uid = node.return.res.gud.uid;
|
||||||
// const loginConn = server.uid_connections[uid];
|
|
||||||
|
|
||||||
// let checkPid = await G.redis.hGet("uid2processId", uid);
|
|
||||||
// if (checkPid && ~~checkPid == process.pid && loginConn) {
|
|
||||||
// // 本进程踢线
|
|
||||||
// loginConn.sendMsg('msg_s2c/OtherLogin', loginConn.ip).then(v => {
|
|
||||||
// loginConn.close('otherLogin');
|
|
||||||
// });
|
|
||||||
// } else if (checkPid) {
|
|
||||||
// // 跨进程踢线,注意这里是异步的
|
|
||||||
// await G.server.sendMsgByUid(uid, 'msg_s2c/OtherLogin', '1', String(process.pid));
|
|
||||||
// }
|
|
||||||
server.uid_connections[uid] = node.call.conn;
|
server.uid_connections[uid] = node.call.conn;
|
||||||
setUidProcessId(uid);
|
setUidProcessId(uid);
|
||||||
}
|
}
|
||||||
|
12
src/shared/protocols/event/yuandan/PtlDMRec.ts
Normal file
12
src/shared/protocols/event/yuandan/PtlDMRec.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import {prizeType} from "../../type";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 元旦达摩领奖
|
||||||
|
*/
|
||||||
|
export type ReqDMRec = {
|
||||||
|
id: 1 | 0
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResDMRec = {
|
||||||
|
prize: prizeType[]
|
||||||
|
}
|
11
src/shared/protocols/event/yuandan/PtlDZRec.ts
Normal file
11
src/shared/protocols/event/yuandan/PtlDZRec.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* 元旦定制领奖
|
||||||
|
*/
|
||||||
|
export type ReqDZRec = {
|
||||||
|
id: string
|
||||||
|
dlz: { a: string, t: string, n: number }[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResDZRec = {
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
11
src/shared/protocols/event/yuandan/PtlExchange.ts
Normal file
11
src/shared/protocols/event/yuandan/PtlExchange.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* 元旦兑换领奖
|
||||||
|
*/
|
||||||
|
export type ReqExchange = {
|
||||||
|
id: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResExchange = {
|
||||||
|
|
||||||
|
}
|
22
src/shared/protocols/event/yuandan/PtlOpen.ts
Normal file
22
src/shared/protocols/event/yuandan/PtlOpen.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* 元旦
|
||||||
|
*/
|
||||||
|
export type ReqOpen = {}
|
||||||
|
|
||||||
|
export type ResOpen = {
|
||||||
|
data: any
|
||||||
|
payLog: any
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type event = {
|
||||||
|
qiandao: { [k: string]: any };
|
||||||
|
gift: { [k: string]: any };
|
||||||
|
taskfinish: string[];
|
||||||
|
taskval: { [k: string]: any }
|
||||||
|
exchange: { [k: string]: any }
|
||||||
|
gameNum: number
|
||||||
|
refreshTime: number;
|
||||||
|
qiandaoTime: number;
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
10
src/shared/protocols/event/yuandan/PtlTaskRec.ts
Normal file
10
src/shared/protocols/event/yuandan/PtlTaskRec.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* 元旦任务领奖
|
||||||
|
*/
|
||||||
|
export type ReqTaskRec = {
|
||||||
|
taskid: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResTaskRec = {
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
12
src/shared/protocols/event/yuandan/PtlZLRec.ts
Normal file
12
src/shared/protocols/event/yuandan/PtlZLRec.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* 元旦赠礼领奖
|
||||||
|
*/
|
||||||
|
export type ReqZLRec = {
|
||||||
|
id: string,
|
||||||
|
dlz: { a: string, t: string, n: number }[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResZLRec = {
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
@ -1,10 +1,10 @@
|
|||||||
/**
|
/**
|
||||||
* 周末礼包领奖
|
* 周末礼包领奖
|
||||||
*/
|
*/
|
||||||
export interface ReqReceive {
|
export type ReqReceive = {
|
||||||
id: string
|
id: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ResReceive {
|
export type ResReceive = {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { prizeType } from '../../type';
|
import {prizeType} from '../../type';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 购买自选礼包
|
* 购买自选礼包
|
||||||
@ -7,7 +7,7 @@ export type ReqBuy = {
|
|||||||
/**礼包index */
|
/**礼包index */
|
||||||
index: number;
|
index: number;
|
||||||
/**礼包的每个奖励index */
|
/**礼包的每个奖励index */
|
||||||
prizeIndex: number[];
|
dlz: prizeType[]
|
||||||
hdid: number
|
hdid: number
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user