Merge remote-tracking branch 'origin/release' into bugfix
This commit is contained in:
commit
7354ad9ae8
@ -1,41 +1,34 @@
|
|||||||
import { ApiCall } from "tsrpc";
|
import {ApiCall} from "tsrpc";
|
||||||
import { PayFun } from '../../../public/pay';
|
import {PayFun} from '../../../public/pay';
|
||||||
import { PlayerFun } from '../../../public/player';
|
import {PlayerFun} from '../../../public/player';
|
||||||
import { ReqRec, ResRec } from "../../../shared/protocols/event/136Gift/PtlRec";
|
import {ReqRec, ResRec} from "../../../shared/protocols/event/136Gift/PtlRec";
|
||||||
import { prizeType } from '../../../shared/protocols/type';
|
import {prizeType} from '../../../shared/protocols/type';
|
||||||
import { PublicShared } from '../../../shared/public/public';
|
import {PublicShared} from '../../../shared/public/public';
|
||||||
import { HongDianChange } from "../../hongdian/fun";
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 黑市每日礼包改版,此接口只领取免费礼包
|
||||||
|
* @param call
|
||||||
|
*/
|
||||||
export default async function (call: ApiCall<ReqRec, ResRec>) {
|
export default async function (call: ApiCall<ReqRec, ResRec>) {
|
||||||
let conf = G.gc.dixiaheishi['136Gift'][call.req.index];
|
let conf = G.gc.dixiaheishi['136Gift'][call.req.index];
|
||||||
let buyLog = await PayFun.getPayLog(call.uid, G.gc.dixiaheishi['136Gift'][0].payId);
|
if (!conf || conf.payId) return call.error('', {code: -1});
|
||||||
let buy60 = buyLog.slice(-1)[0]?.eTime >= G.time;
|
// if (!buy60 && conf.payId) return call.error('', { code: -2 });
|
||||||
if (!conf) return call.error('', { code: -1 });
|
|
||||||
if (!buy60 && conf.payId) return call.error('', { code: -2 });
|
|
||||||
|
|
||||||
let prize: prizeType[] = [];
|
let prize: prizeType[] = [];
|
||||||
let pushIndex: number[] = [];
|
let pushIndex: number[] = [];
|
||||||
let db = await G.mongodb.cEvent('136Gift').findOne({ uid: call.uid, type: '136Gift' });
|
let db = await G.mongodb.cEvent('136Gift').findOne({uid: call.uid, type: '136Gift'});
|
||||||
|
|
||||||
if (call.req.index == 0) {
|
if (db.recIndex.includes(call.req.index)) return call.error('', {code: -3});
|
||||||
G.gc.dixiaheishi['136Gift'].forEach((c, i) => {
|
prize.push(...(conf.payId ? G.gc.pay[conf.payId].prize : conf.prize));
|
||||||
if (i == 0 || !c.payId || db.recIndex.includes(i)) return;
|
pushIndex.push(call.req.index);
|
||||||
pushIndex.push(i);
|
|
||||||
prize.push(...G.gc.pay[c.payId].prize);
|
|
||||||
});
|
|
||||||
if (pushIndex.length < 1) return call.error('', { code: -4 });
|
|
||||||
} else {
|
|
||||||
if (db.recIndex.includes(call.req.index)) return call.error('', { code: -3 });
|
|
||||||
prize.push(...(conf.payId ? G.gc.pay[conf.payId].prize : conf.prize));
|
|
||||||
pushIndex.push(call.req.index);
|
|
||||||
}
|
|
||||||
|
|
||||||
prize = PublicShared.mergePrize(prize);
|
prize = PublicShared.mergePrize(prize);
|
||||||
await PlayerFun.sendPrize(call, prize);
|
await PlayerFun.sendPrize(call, prize);
|
||||||
|
|
||||||
G.mongodb.cEvent('136Gift').updateOne(
|
G.mongodb.cEvent('136Gift').updateOne(
|
||||||
{ uid: call.uid, type: '136Gift' },
|
{uid: call.uid, type: '136Gift'},
|
||||||
{ $push: { recIndex: { $each: pushIndex } } }
|
{$push: {recIndex: {$each: pushIndex}}}
|
||||||
);
|
);
|
||||||
|
|
||||||
// HongDianChange.sendChangeKey(call.uid, ['heishihd', 'heishiMrjx'])
|
// HongDianChange.sendChangeKey(call.uid, ['heishihd', 'heishiMrjx'])
|
||||||
|
21
src/api_s2c/event/leichonglibao/ApiOpen.ts
Normal file
21
src/api_s2c/event/leichonglibao/ApiOpen.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqOpen, ResOpen} from "../../../shared/protocols/event/leichonglibao/PtlOpen";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
let data = await G.mongodb.cEvent(`leichonglibao${call.req.hdid}`).findOne(
|
||||||
|
{type: `leichonglibao${call.req.hdid}`, uid: call.uid}
|
||||||
|
)
|
||||||
|
let change = {opentime: G.time}
|
||||||
|
if (!data) {
|
||||||
|
Object.assign(change, {sc: false, buy: []})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 每天open红点
|
||||||
|
G.mongodb.cEvent(`leichonglibao${call.req.hdid}`).updateOne(
|
||||||
|
{type: `leichonglibao${call.req.hdid}`, uid: call.uid}, {$set: change}, {upsert: true}
|
||||||
|
)
|
||||||
|
|
||||||
|
let temp = Object.assign((data || {}), change) as ResOpen & { opentime }
|
||||||
|
|
||||||
|
call.succ({sc: temp.sc, buy: temp.buy});
|
||||||
|
}
|
120
src/api_s2c/event/leichonglibao/ApiReceive.ts
Normal file
120
src/api_s2c/event/leichonglibao/ApiReceive.ts
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {ReqReceive, ResReceive} from "../../../shared/protocols/event/leichonglibao/PtlReceive";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {PublicShared} from "../../../shared/public/public";
|
||||||
|
|
||||||
|
export type LeiChongLiBaoData = {
|
||||||
|
intr: string
|
||||||
|
intr2: string
|
||||||
|
payRewardNum: number
|
||||||
|
dlz: { [key: string]: atn }[]
|
||||||
|
gift: {
|
||||||
|
id: string, name: string, need: atn[], free: boolean, payId: string, scale: number, buynum: number, prize: atn[]
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
||||||
|
let hdinfo = await HuoDongFun.gethdList(call, 12);
|
||||||
|
|
||||||
|
if (hdinfo.length <= 0) {
|
||||||
|
// 无此活动
|
||||||
|
return call.error('', {code: -1, message: globalThis.lng.huodong_open_1})
|
||||||
|
}
|
||||||
|
|
||||||
|
let hddata = hdinfo.filter(i => i.hdid == call.req.hdid)[0].data as LeiChongLiBaoData;
|
||||||
|
|
||||||
|
let data = await G.mongodb.cEvent(`leichonglibao${call.req.hdid}`).findOne(
|
||||||
|
{type: `leichonglibao${call.req.hdid}`, uid: call.uid}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (data.sc) {
|
||||||
|
// 自选奖励已领取
|
||||||
|
return call.error('', {code: -1, message: globalThis.lng.task_finsh_3})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.buy.length < hddata.payRewardNum) {
|
||||||
|
// 累计购买礼包次数不足
|
||||||
|
return call.error("", {code: -1, message: globalThis.lng.ljlibaotips_8})
|
||||||
|
}
|
||||||
|
|
||||||
|
let _prize: atn[] = [];
|
||||||
|
for (let i = 0; i < hddata.dlz.length; i++) {
|
||||||
|
_prize.push(hddata.dlz[i][call.req.select[i] || "1"])
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改领取标识
|
||||||
|
await G.mongodb.cEvent(`leichonglibao${call.req.hdid}`).updateOne(
|
||||||
|
{type: `leichonglibao${call.req.hdid}`, uid: call.uid}, {$set: {sc: true}}
|
||||||
|
)
|
||||||
|
|
||||||
|
PlayerFun.sendPrize(call, _prize)
|
||||||
|
call.succ({prize: _prize})
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function LeiChongLiBaoBuyGift(call: ApiCall, payId: string) {
|
||||||
|
let hdinfo = await HuoDongFun.gethdList(call, 12);
|
||||||
|
|
||||||
|
if (hdinfo.length <= 0) {
|
||||||
|
console.log(call.uid, "购买累充礼包 但是活动没有开启", payId);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let gift: LeiChongLiBaoData["gift"][0];
|
||||||
|
|
||||||
|
let hdid = hdinfo[0].hdid;
|
||||||
|
let hddata = hdinfo[0].data as LeiChongLiBaoData;
|
||||||
|
for (let g of hddata.gift) {
|
||||||
|
if (g.payId == payId) {
|
||||||
|
gift = g;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gift) return; // 不是购买累充礼包
|
||||||
|
|
||||||
|
let mydata = await G.mongodb.cEvent(`leichonglibao${hdid}`).findOne(
|
||||||
|
{type: `leichonglibao${hdid}`, uid: call.uid}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (mydata && mydata.buy.includes(gift.payId)) {
|
||||||
|
console.log(call.uid, "购买累充礼包 重复购买", payId);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let update;
|
||||||
|
if (mydata) {
|
||||||
|
update = {$push: {buy: payId}}
|
||||||
|
} else {
|
||||||
|
update = {$set: {opentime: G.time, sc: false, buy: [payId]}}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerFun.sendPrize(call, gift.prize)
|
||||||
|
G.mongodb.cEvent(`leichonglibao${hdid}`).updateOne(
|
||||||
|
{uid: call.uid, type: `leichonglibao${hdid}`}, update
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function LeiChongLiBaoGetHongDian(call: ApiCall) {
|
||||||
|
let hdinfo = await HuoDongFun.gethdList(call, 12);
|
||||||
|
|
||||||
|
if (hdinfo.length <= 0) {
|
||||||
|
return {show: false}
|
||||||
|
}
|
||||||
|
|
||||||
|
let hdid = hdinfo[0].hdid;
|
||||||
|
let hddata = hdinfo[0].data as LeiChongLiBaoData;
|
||||||
|
|
||||||
|
let mydata = await G.mongodb.cEvent(`leichonglibao${hdid}`).findOne(
|
||||||
|
{type: `leichonglibao${hdid}`, uid: call.uid}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!mydata || mydata.opentime < PublicShared.getToDayZeroTime()) {
|
||||||
|
return {show: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mydata.sc && mydata.buy.length >= hddata.payRewardNum) {
|
||||||
|
return {show: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {show: false}
|
||||||
|
}
|
69
src/api_s2c/event/payForDiamond/ApiCanReceive.ts
Normal file
69
src/api_s2c/event/payForDiamond/ApiCanReceive.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import { ApiCall } from "tsrpc";
|
||||||
|
import { HuoDongFun } from "../../../public/huodongfun";
|
||||||
|
import { ReqCanReceive, ResCanReceive } from '../../../shared/protocols/event/payForDiamond/PtlCanReceive';
|
||||||
|
import { PublicShared } from "../../../shared/public/public";
|
||||||
|
import { ActionLog } from "../../../public/actionLog/actionLog";
|
||||||
|
import { WithId, OptionalId } from "mongodb";
|
||||||
|
import { ReqAddHuoDong } from "../../../monopoly/protocols/PtlAddHuoDong";
|
||||||
|
|
||||||
|
const hasGotKeyPrefix = 'payForDiamond:hasGot:'; // 已领取额度
|
||||||
|
const showOffListKeyPrefix = 'payForDiamond:ShowOff:'; // 需要炫耀的玩家列表。 其中需要包含信息:玩家区服, 玩家玩家名称, 领到的数量
|
||||||
|
|
||||||
|
export async function playerCanReceive(call: ApiCall, callError : boolean = true) {
|
||||||
|
let activityId = call.req.activityId;
|
||||||
|
let activityInfo: WithId<OptionalId<ReqAddHuoDong>>;
|
||||||
|
if (!activityId) {
|
||||||
|
activityInfo = (await HuoDongFun.gethdList(call, 13))[0];
|
||||||
|
} else {
|
||||||
|
activityInfo = await HuoDongFun.getHdidInfo(call, activityId);
|
||||||
|
}
|
||||||
|
if (!activityInfo) {
|
||||||
|
if (callError) {
|
||||||
|
return call.error('', { code: -1, message: lng.huodong_open_1 });
|
||||||
|
} else {
|
||||||
|
return { result: false };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activityId = activityInfo.hdid;
|
||||||
|
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
||||||
|
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey);
|
||||||
|
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
||||||
|
const remaining = activityInfo.data['totalmoney'] - hasReceived;
|
||||||
|
const showOffResult = await G.iorediscross.lrange(showOffListKeyPrefix + activityId, 0, -1);
|
||||||
|
const showOffList = showOffResult.map(result => JSON.parse(result));
|
||||||
|
const zeroTime = PublicShared.getToDayZeroTime();
|
||||||
|
const vipScore = await ActionLog.getDayLog(call.uid, 'pay');
|
||||||
|
const price = activityInfo.data['price'];
|
||||||
|
if (!vipScore) {
|
||||||
|
return {
|
||||||
|
payNum: 0, remaining, result: false, activityInfo, showOffList, price, gotAmount: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const payNum = vipScore;
|
||||||
|
// 玩家充值未达标或者奖池余额耗尽则不能领取
|
||||||
|
if (payNum < price || remaining <= 0) {
|
||||||
|
return {
|
||||||
|
payNum, remaining, result: false, activityInfo, showOffList, price, gotAmount: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检查玩家今日是否已经领取
|
||||||
|
const playerActivityInfo = await G.mongodb.cEvent('payForDiamond').findOne({ uid: call.uid, type: 'payForDiamond' });
|
||||||
|
if (playerActivityInfo) {
|
||||||
|
if (playerActivityInfo[zeroTime]) {
|
||||||
|
return {
|
||||||
|
payNum, remaining, result: false, activityInfo, showOffList, price, gotAmount: playerActivityInfo[zeroTime]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
payNum, remaining, result: true, activityInfo, showOffList, price, gotAmount: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqCanReceive, ResCanReceive>) {
|
||||||
|
const canReceiveResult = await playerCanReceive(call);
|
||||||
|
if (canReceiveResult) {
|
||||||
|
const { payNum, remaining, result, showOffList, price, gotAmount } = canReceiveResult;
|
||||||
|
call.succ({ payNum, remaining, result, showOffList, price, gotAmount });
|
||||||
|
}
|
||||||
|
}
|
121
src/api_s2c/event/payForDiamond/ApiReceive.ts
Normal file
121
src/api_s2c/event/payForDiamond/ApiReceive.ts
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
import { ApiCall } from "tsrpc";
|
||||||
|
import { ReqReceive, ResReceive } from '../../../shared/protocols/event/payForDiamond/PtlReceive';
|
||||||
|
import { playerCanReceive } from './ApiCanReceive';
|
||||||
|
import { PublicShared } from "../../../shared/public/public";
|
||||||
|
import { PlayerFun } from "../../../public/player";
|
||||||
|
|
||||||
|
type diamondWeightGroup = {
|
||||||
|
weight: number;
|
||||||
|
numrange: [ min: number, max: number];
|
||||||
|
};
|
||||||
|
|
||||||
|
const hasGotKeyPrefix = 'payForDiamond:hasGot:'; // 已领取额度
|
||||||
|
const hasGotLockKey = "payForDiamond:lock"; // 更新锁, TTL 1s
|
||||||
|
const showOffListKeyPrefix = 'payForDiamond:ShowOff:'; // 需要炫耀的玩家列表。 其中需要包含信息:玩家区服, 玩家玩家名称, 领到的数量
|
||||||
|
/**
|
||||||
|
* @param groups 各分组及其权重
|
||||||
|
*/
|
||||||
|
function randomWithWeight(groups: diamondWeightGroup[]) {
|
||||||
|
let maxAmount: number;
|
||||||
|
let totalWeights = 0;
|
||||||
|
for (const group of groups) {
|
||||||
|
totalWeights += group.weight;
|
||||||
|
if (!maxAmount) {
|
||||||
|
maxAmount = group.numrange[1];
|
||||||
|
} else {
|
||||||
|
maxAmount = Math.max(maxAmount, group.numrange[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const randomValue = Math.random() * totalWeights; // 随机值落在[0, totalWeights) 之间
|
||||||
|
let currSum = 0;
|
||||||
|
for (const group of groups) {
|
||||||
|
if (currSum <= randomValue && randomValue < currSum + group.weight) {
|
||||||
|
return { group, maxAmount };
|
||||||
|
} else {
|
||||||
|
currSum += group.weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const length = groups.length;
|
||||||
|
return { group: groups[length - 1], maxAmount };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算玩家分得的钻石数量
|
||||||
|
* @param remaining
|
||||||
|
* @param group
|
||||||
|
* @param maxAmount
|
||||||
|
*/
|
||||||
|
function calcDiamondGot(remaining: number, group: diamondWeightGroup, maxAmount: number) {
|
||||||
|
const [min, max] = group.numrange;
|
||||||
|
const randomAmount = Math.floor(Math.random() * (max - min)) + min + 1; // max 值应能够取到, 故 +1
|
||||||
|
// 剩余数额小于组内随机得到的值, 全给吧
|
||||||
|
if (randomAmount > remaining) {
|
||||||
|
return remaining;
|
||||||
|
}
|
||||||
|
// 随机值大于最大值, 取最大值
|
||||||
|
if (randomAmount > maxAmount) {
|
||||||
|
return maxAmount;
|
||||||
|
}
|
||||||
|
return randomAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
||||||
|
const canReceiveResult = await playerCanReceive(call);
|
||||||
|
if (canReceiveResult) { // 该值不存在的情况已被函数直接返回 error, 无需再处理
|
||||||
|
if (!canReceiveResult.result) {
|
||||||
|
return call.succ({
|
||||||
|
amount: 0,
|
||||||
|
timesRemaining: 0,
|
||||||
|
showOff: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const activityData = canReceiveResult.activityInfo.data;
|
||||||
|
// 更新 redis 领取记录之前先加锁, 防止多领
|
||||||
|
const lockResult = await G.iorediscross.setnx(hasGotLockKey, 1);
|
||||||
|
if (lockResult) {
|
||||||
|
await G.iorediscross.expire(hasGotLockKey, 1); // 设置 ttl 避免死锁
|
||||||
|
const activityId = call.req.activityId;
|
||||||
|
const hasReceivedKey = hasGotKeyPrefix + activityId;
|
||||||
|
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey);
|
||||||
|
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
|
||||||
|
const remaining = activityData['totalmoney'] - hasReceived;
|
||||||
|
if (remaining <= 0) {
|
||||||
|
return call.succ({
|
||||||
|
amount: 0
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const { group, maxAmount } = randomWithWeight(activityData['groupConf']['base']['arr']);
|
||||||
|
const gotAmount = calcDiamondGot(remaining, group, maxAmount);
|
||||||
|
await G.iorediscross.incrby(hasReceivedKey, Math.abs(gotAmount)); // 添加已领取的额度
|
||||||
|
await G.iorediscross.del(hasGotLockKey); // 移除锁
|
||||||
|
await PlayerFun.sendPrize(call, [{ 'a': 'attr', 't': 'rmbmoney', 'n': gotAmount }]);
|
||||||
|
const showOff = gotAmount >= activityData['groupConf']['base']['loglimit'];
|
||||||
|
call.succ({ // 领取核心逻辑完成, 请求可以返回了
|
||||||
|
amount: gotAmount,
|
||||||
|
timesRemaining: 0,
|
||||||
|
showOff,
|
||||||
|
});
|
||||||
|
// 添加玩家领取记录
|
||||||
|
const zeroTime = PublicShared.getToDayZeroTime();
|
||||||
|
const setObj = {};
|
||||||
|
setObj[zeroTime] = gotAmount;
|
||||||
|
await G.mongodb.cEvent('payForDiamond').updateOne({ uid: call.uid, type: 'payForDiamond' }, {
|
||||||
|
$set: setObj
|
||||||
|
}, {upsert: true});
|
||||||
|
// 炫耀
|
||||||
|
if (showOff) {
|
||||||
|
const msg = JSON.stringify({
|
||||||
|
name: call.conn.gud.name, gotAmount, serverID: call.conn.gud.sid
|
||||||
|
});
|
||||||
|
const showOffListKey = showOffListKeyPrefix + activityId;
|
||||||
|
await G.iorediscross.lpush(showOffListKey, msg);
|
||||||
|
await G.ioredis.ltrim(showOffListKey, 0, 49); // 限制列表保存 50 条消息, 避免无限增长
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return call.succ({
|
||||||
|
amount: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
src/api_s2c/event/pobinglibao/ApiOpen.ts
Normal file
26
src/api_s2c/event/pobinglibao/ApiOpen.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqOpen, ResOpen} from "../../../shared/protocols/event/zhoumolibao/PtlOpen";
|
||||||
|
import {PayFun} from "../../../public/pay";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PublicShared} from "../../../shared/public/public";
|
||||||
|
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
let data = await G.mongodb.cEvent('pobinglibao').findOne({uid: call.uid, type: 'pobinglibao'})
|
||||||
|
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 10))[0]
|
||||||
|
if (!_hd) return call.errorCode(-1)
|
||||||
|
|
||||||
|
let payIds = _hd?.data?.gift?.filter(i => i.payId)?.map(i => i.payId)
|
||||||
|
|
||||||
|
let payLog: any = await PayFun.getPayLogs(call.uid, payIds)
|
||||||
|
|
||||||
|
for (let key in payLog) {
|
||||||
|
payLog[key]?.filter(i => i.time > _hd.stime && i.time < _hd.etime)
|
||||||
|
}
|
||||||
|
|
||||||
|
call.succ({
|
||||||
|
record: data?.record || {},
|
||||||
|
buyLog: payLog
|
||||||
|
})
|
||||||
|
}
|
33
src/api_s2c/event/pobinglibao/ApiReceive.ts
Normal file
33
src/api_s2c/event/pobinglibao/ApiReceive.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqReceive, ResReceive} from "../../../shared/protocols/event/pobinglibao/PtlReceive";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
import {PlayerFun} from "../../../public/player";
|
||||||
|
import {HongDianChange} from "../../hongdian/fun";
|
||||||
|
import {PayFun} from "../../../public/pay";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqReceive, ResReceive>) {
|
||||||
|
// 查询活动是否有当前领奖的免费选项
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 10))[0]
|
||||||
|
let gift = _hd?.data?.gift?.find(i => i.id == call.req.id)
|
||||||
|
if (!gift) return call.errorCode(-1)
|
||||||
|
|
||||||
|
let payLog = await PayFun.getPayLog(call.uid, gift.payId)
|
||||||
|
payLog = payLog?.filter(i => i.time >= _hd.stime && i.time <= _hd.etime) || []
|
||||||
|
if (!payLog || !payLog.length) return call.errorCode(-2)
|
||||||
|
|
||||||
|
|
||||||
|
// 取奖励列表,判断是否有可领取奖励
|
||||||
|
let data = await G.mongodb.cEvent('pobinglibao').findOne({uid: call.uid, type: 'pobinglibao'})
|
||||||
|
let rec = data?.record?.[call.req.id]?.length
|
||||||
|
if (rec && (rec >= 3 || data?.record?.[gift.id] == call.req.recId)) return call.errorCode(-3)
|
||||||
|
|
||||||
|
await PlayerFun.sendPrize(call, gift[call.req.recId]);
|
||||||
|
|
||||||
|
await G.mongodb.cEvent('pobinglibao').updateOne({uid: call.uid, type: 'pobinglibao'}, {
|
||||||
|
$push: {[`record.${gift.id}`]: call.req.recId},
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
call.succ({})
|
||||||
|
|
||||||
|
HongDianChange.sendChangeKey(call.uid, ['pobinglibao']);
|
||||||
|
}
|
91
src/api_s2c/event/xiaofeijingsai/ApiOpen.ts
Normal file
91
src/api_s2c/event/xiaofeijingsai/ApiOpen.ts
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqOpen, ResOpen} from "../../../shared/protocols/event/xiaofeijingsai/PtlOpen";
|
||||||
|
import {HuoDongFun} from "../../../public/huodongfun";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费竞赛
|
||||||
|
* redis缓存120秒
|
||||||
|
* 返回活动日期内的
|
||||||
|
* @param call
|
||||||
|
*/
|
||||||
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
|
||||||
|
let ioList = await G.ioredis.get(`rank:xiaofeijingsai`);
|
||||||
|
if (ioList) {
|
||||||
|
let myData = await getMyData(call, JSON.parse(ioList))
|
||||||
|
return call.succ({list: JSON.parse(ioList), myData})
|
||||||
|
}
|
||||||
|
|
||||||
|
let _hd = (await HuoDongFun.gethdList(call, 11))[0]
|
||||||
|
if (!_hd) return call.errorCode(-1)
|
||||||
|
|
||||||
|
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 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 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()
|
||||||
|
|
||||||
|
rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i._id) || {}}))
|
||||||
|
|
||||||
|
// 活动结束前半小时,缓存过期时间改为10秒
|
||||||
|
let exTime = (G.time + 1800) > _hd.etime ? 10 : 120
|
||||||
|
|
||||||
|
G.ioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList));
|
||||||
|
|
||||||
|
let myData = await getMyData(call, rankList, _hd)
|
||||||
|
|
||||||
|
call.succ({list: rankList, myData})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 需要满足消耗条件才能添加到排行榜,不满足的时候排行榜加system占位
|
||||||
|
* @param rank
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
export function sortRankList(rank, list) {
|
||||||
|
let rankList = []
|
||||||
|
let ccc = 0
|
||||||
|
rank.map(i => {
|
||||||
|
for (let k = i.rank[0] - 1; k < i.rank[1]; k++) {
|
||||||
|
if (list[k]?.total >= i.need[0].n) {
|
||||||
|
rankList.push({...list[k - ccc], rank: k})
|
||||||
|
} else {
|
||||||
|
rankList.push({_id: 'system', total: i.need[0].n, rank: k, player: {}})
|
||||||
|
ccc += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return R.sort((a, b) => a.rank - b.rank)(rankList)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取自己的信息
|
||||||
|
async function getMyData(call, rankList, _hd?) {
|
||||||
|
let myData = rankList.find(i => i._id == call.uid)
|
||||||
|
if (myData) return myData
|
||||||
|
|
||||||
|
if (!_hd) {
|
||||||
|
_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})
|
||||||
|
|
||||||
|
if (!myCut) {
|
||||||
|
myCut = {_id: myUser.uid, total: 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {player: myUser, ...myCut, total: R.negate(myCut.total), rank: -1}
|
||||||
|
}
|
@ -1,11 +1,12 @@
|
|||||||
import { ApiCall } from "tsrpc";
|
import {ApiCall} from "tsrpc";
|
||||||
import { RedisCollections2 } from '../../module/redis';
|
import {RedisCollections2} from '../../module/redis';
|
||||||
import { ReqGetList, ResGetList } from "../../shared/protocols/hero/PtlGetList";
|
import {ReqGetList, ResGetList} from "../../shared/protocols/hero/PtlGetList";
|
||||||
|
import {PeijianShared} from "../../shared/public/peijian";
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
||||||
let list: ResGetList['list'] = {};
|
let list: ResGetList['list'] = {};
|
||||||
//let kvList: k_v<RedisCollections2['hero']> = {};
|
//let kvList: k_v<RedisCollections2['hero']> = {};
|
||||||
let arrList = await G.mongodb.collection('hero').find({ uid: call.uid }).toArray();
|
let arrList = await G.mongodb.collection('hero').find({uid: call.uid}).toArray();
|
||||||
|
|
||||||
let heroCon = G.gc.hero;
|
let heroCon = G.gc.hero;
|
||||||
let color = {};
|
let color = {};
|
||||||
@ -19,14 +20,47 @@ export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
|||||||
if (!color[heroCon[v.heroId].colour]) color[heroCon[v.heroId].colour] = 0;
|
if (!color[heroCon[v.heroId].colour]) color[heroCon[v.heroId].colour] = 0;
|
||||||
color[heroCon[v.heroId].colour] += 1;
|
color[heroCon[v.heroId].colour] += 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 修复配件数据
|
||||||
|
let peijianids = [];
|
||||||
|
Object.values(list).map(hero => {
|
||||||
|
hero.peijian && Object.values(hero.peijian).map(
|
||||||
|
i => peijianids.push(G.mongodb.conversionId(PeijianShared.fmt(i)._id))
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
let peijians = (await G.mongodb.collection("peijian").find(
|
||||||
|
{uid: call.uid, _id: {$in: peijianids}}, {projection: {_id: 1}}
|
||||||
|
).toArray()).map(temp => G.mongodb.conversionId(temp._id));
|
||||||
|
|
||||||
|
let changes = {};
|
||||||
|
Object.values(list).map(hero => {
|
||||||
|
for (let pos in hero.peijian) {
|
||||||
|
if (!peijians.includes(PeijianShared.fmt(hero.peijian[pos])._id)) {
|
||||||
|
hero.peijian[pos] = "";
|
||||||
|
changes[hero._id] = hero.peijian;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
for (let oid in changes) {
|
||||||
|
// 修复数据
|
||||||
|
G.mongodb.collection("hero").updateOne(
|
||||||
|
G.mongodb.conversionIdObj({_id: oid}), {$set: {peijian: changes[oid]}}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// 记录玩家最大等级,颜色相关数据 注册任务用
|
// 记录玩家最大等级,颜色相关数据 注册任务用
|
||||||
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);
|
//G.redis.set('hero', call.uid, kvList);
|
||||||
|
|
||||||
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_hero').findOne({ uid: call.conn.uid, type: 'lshd_hero' });
|
let recLshd = await G.mongodb.collection('playerInfo', 'lshd_hero').findOne({
|
||||||
let { uid, _id, type, ...heros } = (recLshd || {});
|
uid: call.conn.uid,
|
||||||
|
type: 'lshd_hero'
|
||||||
|
});
|
||||||
|
let {uid, _id, type, ...heros} = (recLshd || {});
|
||||||
|
|
||||||
|
|
||||||
call.conn.lshd.hero = heros || {};
|
call.conn.lshd.hero = heros || {};
|
||||||
@ -34,6 +68,6 @@ export default async function (call: ApiCall<ReqGetList, ResGetList>) {
|
|||||||
list: list,
|
list: list,
|
||||||
pos: call.conn.heroPos,
|
pos: call.conn.heroPos,
|
||||||
lshd: heros || {},
|
lshd: heros || {},
|
||||||
gbzj: (await G.mongodb.cPlayerInfo('gbzj').findOne({ uid: call.uid, type: 'gbzj' }))?.rec || {}
|
gbzj: (await G.mongodb.cPlayerInfo('gbzj').findOne({uid: call.uid, type: 'gbzj'}))?.rec || {}
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -15,11 +15,13 @@ import {md_redPoint} from '../gongyu/mingdao/ApiOpen';
|
|||||||
import {HongDianFun, HuoDongHongDianFun} from "./fun";
|
import {HongDianFun, HuoDongHongDianFun} from "./fun";
|
||||||
import {FunWeiXiuChang} from "../../public/weixiuchang";
|
import {FunWeiXiuChang} from "../../public/weixiuchang";
|
||||||
import {getShouChongRedPoint} from "../event/shouchong/ApiReceive";
|
import {getShouChongRedPoint} from "../event/shouchong/ApiReceive";
|
||||||
|
import {LeiChongLiBaoGetHongDian} from "../event/leichonglibao/ApiReceive";
|
||||||
|
import { playerCanReceive } from '../event/payForDiamond/ApiCanReceive';
|
||||||
|
|
||||||
const defaultKeys: hongdianKey[] = ['jiuba', 'jiaotang', 'shouchong', 'clslhd', 'dixiaqianzhuanghd', 'gonghuihd', 'hbzbhd', 'jjchd', 'taskhd',
|
const defaultKeys: hongdianKey[] = ['jiuba', 'jiaotang', 'shouchong', 'clslhd', 'dixiaqianzhuanghd', 'gonghuihd', 'hbzbhd', 'jjchd', 'taskhd',
|
||||||
'xstaskhd', 'lingzhulaixihd', 'dxlthd', 'wzcjhd', 'slzdhd', 'qjzzdhd', 'kuangdonghd', 'qiandaohd', 'kaifukuanghuanhd', 'jijinhd', 'zhuishalinghd',
|
'xstaskhd', 'lingzhulaixihd', 'dxlthd', 'wzcjhd', 'slzdhd', 'qjzzdhd', 'kuangdonghd', 'qiandaohd', 'kaifukuanghuanhd', 'jijinhd', 'zhuishalinghd',
|
||||||
'yibaichouhd', 'huobanzhaomuhd', 'qirileichonghd', 'jierihd', 'kbzzhd', 'wzryhd', 'yuedujijin', 'mingdao', 'patahd',
|
'yibaichouhd', 'huobanzhaomuhd', 'qirileichonghd', 'jierihd', 'kbzzhd', 'wzryhd', 'yuedujijin', 'mingdao', 'patahd',
|
||||||
'heishihd', 'huodonghd', 'renown', 'weixiuchang', 'kaifujingsai', 'zhoumolibao'];
|
'heishihd', 'huodonghd', 'renown', 'weixiuchang', 'kaifujingsai', 'zhoumolibao', 'pobinglibao', 'leichonglibao', 'payForDiamond'];
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqGet, ResGet>) {
|
export default async function (call: ApiCall<ReqGet, ResGet>) {
|
||||||
|
|
||||||
@ -163,6 +165,13 @@ export default async function (call: ApiCall<ReqGet, ResGet>) {
|
|||||||
case 'zhoumolibao':
|
case 'zhoumolibao':
|
||||||
res[key] = await HongDianFun.zhoumolibao(call);
|
res[key] = await HongDianFun.zhoumolibao(call);
|
||||||
break;
|
break;
|
||||||
|
case "leichonglibao":
|
||||||
|
res[key] = await LeiChongLiBaoGetHongDian(call)
|
||||||
|
break;
|
||||||
|
case 'payForDiamond':
|
||||||
|
const receiveResult = await playerCanReceive(call, false);
|
||||||
|
res[key] = { show: receiveResult && receiveResult.result };
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,10 +327,7 @@ export class HuoDongHongDianFun {
|
|||||||
hdxq: {}
|
hdxq: {}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let _hdList = []
|
let _hdList = await HuoDongFun.gethdList(call)
|
||||||
for (let i = 0; i < 8; i++) {
|
|
||||||
_hdList.push(...await HuoDongFun.gethdList(call, i + 1))
|
|
||||||
}
|
|
||||||
// let _hdList = await HuoDongFun.gethdList(call)
|
// let _hdList = await HuoDongFun.gethdList(call)
|
||||||
for (let index = 0; index < _hdList.length; index++) {
|
for (let index = 0; index < _hdList.length; index++) {
|
||||||
const element = _hdList[index];
|
const element = _hdList[index];
|
||||||
@ -368,6 +365,10 @@ export class HuoDongHongDianFun {
|
|||||||
// 检测 htype 8 圣诞活动红点
|
// 检测 htype 8 圣诞活动红点
|
||||||
ishd = await this.christmasHongDian(call, element)
|
ishd = await this.christmasHongDian(call, element)
|
||||||
}
|
}
|
||||||
|
if (element.htype == 10) {
|
||||||
|
// 检测 htype 10 破冰活动红点
|
||||||
|
ishd = await this.pobinglibao(call, element)
|
||||||
|
}
|
||||||
|
|
||||||
// 此活动有红点
|
// 此活动有红点
|
||||||
if (ishd.show) {
|
if (ishd.show) {
|
||||||
@ -380,6 +381,22 @@ export class HuoDongHongDianFun {
|
|||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**破冰礼包红点 */
|
||||||
|
static async pobinglibao(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
|
||||||
|
let gift = _hd?.data?.gift?.find(i => i.id == call.req.id)
|
||||||
|
if (!gift) return {show: false}
|
||||||
|
|
||||||
|
let payLog = await PayFun.getPayLog(call.uid, gift.payId)
|
||||||
|
payLog = payLog?.filter(i => i.time >= _hd.stime && i.time <= _hd.etime) || []
|
||||||
|
if (!payLog || !payLog.length) return {show: false}
|
||||||
|
|
||||||
|
// 取奖励列表,判断是否有可领取奖励
|
||||||
|
let data = await G.mongodb.cEvent('pobinglibao').findOne({uid: call.uid, type: 'pobinglibao'})
|
||||||
|
let rec = data?.record?.[call.req.id].length
|
||||||
|
if (rec && (rec >= 3 || data?.record?.[gift.id] == call.req.recId)) return {show: false}
|
||||||
|
return {show: true}
|
||||||
|
}
|
||||||
|
|
||||||
/**开服狂欢红点 */
|
/**开服狂欢红点 */
|
||||||
static async kfkhHongDian(call: ApiCall) {
|
static async kfkhHongDian(call: ApiCall) {
|
||||||
let _res: hongdianVal = {
|
let _res: hongdianVal = {
|
||||||
|
@ -9,6 +9,7 @@ import {ReqLottery, ResLottery} from "../../shared/protocols/jiuba/PtlLottery";
|
|||||||
import {PublicShared} from '../../shared/public/public';
|
import {PublicShared} from '../../shared/public/public';
|
||||||
import {HongDianChange} from '../hongdian/fun';
|
import {HongDianChange} from '../hongdian/fun';
|
||||||
import {RankKfjs} from "../../public/rank/rank_kfjs";
|
import {RankKfjs} from "../../public/rank/rank_kfjs";
|
||||||
|
import {PushGiftFun} from "../../public/pushgift";
|
||||||
|
|
||||||
export default async function (call: ApiCall<ReqLottery, ResLottery>) {
|
export default async function (call: ApiCall<ReqLottery, ResLottery>) {
|
||||||
|
|
||||||
@ -142,4 +143,8 @@ export default async function (call: ApiCall<ReqLottery, ResLottery>) {
|
|||||||
valArr: [await rankKfjs.getRankScore(call.uid) + call.req.type]
|
valArr: [await rankKfjs.getRankScore(call.uid) + call.req.type]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 十连抽推送礼包
|
||||||
|
if (call.req.type == 10) {
|
||||||
|
PushGiftFun.chkRecruitGift(call.uid)
|
||||||
|
}
|
||||||
}
|
}
|
9
src/api_s2c/pushgift/ApiItemNoEnough.ts
Normal file
9
src/api_s2c/pushgift/ApiItemNoEnough.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqItemNoEnough, ResItemNoEnough} from "../../shared/protocols/pushgift/PtlItemNoEnough";
|
||||||
|
import {PushGiftFun} from "../../public/pushgift";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqItemNoEnough, ResItemNoEnough>) {
|
||||||
|
// 物品不足 前端拦截的 通知后端 检测推送礼包
|
||||||
|
PushGiftFun.chkItemGift(call.uid, {a: call.req.need.a, t: call.req.need.t, n: 0})
|
||||||
|
call.succ({})
|
||||||
|
}
|
30
src/api_s2c/pushgift/ApiOpen.ts
Normal file
30
src/api_s2c/pushgift/ApiOpen.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqOpen, ResOpen} from "../../shared/protocols/pushgift/PtlOpen";
|
||||||
|
import {PushGiftFun} from "../../public/pushgift";
|
||||||
|
import {Gift} from "../../module/collection_pushgift";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
|
||||||
|
let res: ResOpen = {gifts: []};
|
||||||
|
|
||||||
|
// 过滤过期的礼包 和购买完毕的礼包
|
||||||
|
(await PushGiftFun.getGift(call.uid)).forEach((gift) => {
|
||||||
|
if (gift.passTime > G.time && chkBuyNum(gift.id, gift)) {
|
||||||
|
res.gifts.push(gift)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
call.succ(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
function chkBuyNum(gift_id: string, gift_info: Gift) {
|
||||||
|
let conf = G.gc.tuisonglibao[gift_id];
|
||||||
|
for (let i = 0; i < conf.payId.length; i++) {
|
||||||
|
let pay = G.gc.pay[conf.payId[i]];
|
||||||
|
let buy = gift_info.buy.map(i => i != 0);
|
||||||
|
if (pay.buys > 0 && gift_info.buy[i] < pay.buys) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
10
src/api_s2c/user/ApiDot.ts
Normal file
10
src/api_s2c/user/ApiDot.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import {ApiCall} from "tsrpc";
|
||||||
|
import {ReqDot, ResDot} from "../../shared/protocols/user/PtlDot";
|
||||||
|
import {addGameDot} from "../../gameLog";
|
||||||
|
|
||||||
|
export default async function (call: ApiCall<ReqDot, ResDot>) {
|
||||||
|
|
||||||
|
addGameDot(call.uid, call.req.type, call.req.data)
|
||||||
|
|
||||||
|
call.succ({});
|
||||||
|
}
|
@ -132,6 +132,9 @@ async function doLogin(call: ApiCall<ReqLogin, ResLogin>) {
|
|||||||
//await G.redis.set('user', gud.uid, gud);
|
//await G.redis.set('user', gud.uid, gud);
|
||||||
await initGud(gud.uid, gud);
|
await initGud(gud.uid, gud);
|
||||||
|
|
||||||
|
// 修复公会id
|
||||||
|
await fixUnionData(gud);
|
||||||
|
|
||||||
//记录玩家所在的进程,change: 更换到处理完踢线操作在写入。
|
//记录玩家所在的进程,change: 更换到处理完踢线操作在写入。
|
||||||
// setUidProcessId(gud.uid);
|
// setUidProcessId(gud.uid);
|
||||||
|
|
||||||
@ -279,3 +282,18 @@ async function LoginFun(call: ApiCall<ReqLogin, ResLogin>) {
|
|||||||
// G.mongodb.collection("hero").findOneAndUpdate({_id: i._id}, {$set: {shiwu: shiwuChange}})
|
// G.mongodb.collection("hero").findOneAndUpdate({_id: i._id}, {$set: {shiwu: shiwuChange}})
|
||||||
// })
|
// })
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// 修复玩家退出公会 但是gud中残留公会id
|
||||||
|
async function fixUnionData(gud: ResLogin["gud"]) {
|
||||||
|
if (gud.ghId) {
|
||||||
|
let ghdata = await G.mongodb.collection("gonghui").findOne(
|
||||||
|
{_id: G.mongodb.conversionId(gud.ghId), 'players.uid': gud.uid}
|
||||||
|
)
|
||||||
|
if (!ghdata) {
|
||||||
|
gud.ghId = "";
|
||||||
|
gud.ghName = "";
|
||||||
|
gud.ghLevel = 0;
|
||||||
|
PlayerFun.changeAttr(gud.uid, {ghId: '', ghLevel: 0})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1932
src/fix_patch/patch_20231215.ts
Normal file
1932
src/fix_patch/patch_20231215.ts
Normal file
File diff suppressed because it is too large
Load Diff
43
src/fix_patch/patch_20231220.ts
Normal file
43
src/fix_patch/patch_20231220.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import {ctor} from "../global";
|
||||||
|
import {initMongoDB} from "../setMongodb";
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
await initMongoDB()
|
||||||
|
|
||||||
|
let datas = await G.mongodb.collection("event").find(
|
||||||
|
{type: {$in: ["yangchengmubiao100", "yangchengmubiao101"]}}
|
||||||
|
).toArray();
|
||||||
|
|
||||||
|
for (let i = 0; i < datas.length; i++) {
|
||||||
|
let add = 0;
|
||||||
|
let data = datas[i];
|
||||||
|
if (!Array.isArray(data.taskval)) continue;
|
||||||
|
let taskval: { [taskid: string]: number } = {};
|
||||||
|
for (let i = 0; i < data.taskval.length; i++) {
|
||||||
|
if (data.taskval[i] === null) continue;
|
||||||
|
|
||||||
|
if (typeof data.taskval[i] == "number") {
|
||||||
|
add = data.taskval[i];
|
||||||
|
} else {
|
||||||
|
taskval = Object.assign(taskval, data.taskval[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let taskid in taskval) {
|
||||||
|
taskval[taskid] = (taskval[taskid] || 0) + add;
|
||||||
|
}
|
||||||
|
await G.mongodb.collection("event").updateOne(
|
||||||
|
{uid: data.uid, type: data.type}, {$set: {taskval: taskval}}
|
||||||
|
)
|
||||||
|
console.log(`修复玩家${data.uid}人才计划数据完成...`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctor();
|
||||||
|
start().then(() => {
|
||||||
|
setInterval(() => {
|
||||||
|
console.log(new Date().format("MM-dd hh:mm:ss"));
|
||||||
|
}, 1000)
|
||||||
|
console.log("逻辑执行完成...等待退出!!!");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
import {ctor} from "./global";
|
import {ctor} from "../global";
|
||||||
import {initMongoDB} from "./setMongodb";
|
import {initMongoDB} from "../setMongodb";
|
||||||
import {yangchengmubiao} from "./shared/protocols/event/yangchengmubiao/PtlOpen";
|
import {yangchengmubiao} from "../shared/protocols/event/yangchengmubiao/PtlOpen";
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
await initMongoDB()
|
await initMongoDB()
|
126
src/fix_patch/patch_20231221_1.ts
Normal file
126
src/fix_patch/patch_20231221_1.ts
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
import {ctor} from "../global";
|
||||||
|
import {initMongoDB} from "../setMongodb";
|
||||||
|
import {yangchengmubiao} from "../shared/protocols/event/yangchengmubiao/PtlOpen";
|
||||||
|
import {number} from "mathjs";
|
||||||
|
import {PublicShared} from "../shared/public/public";
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
await initMongoDB()
|
||||||
|
|
||||||
|
const task = {
|
||||||
|
'2001': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 50,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2002': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 100,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2003': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '626', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 200,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2004': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 250,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2005': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 300,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2006': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 400,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2007': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 500,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let hdid = [100, 101];
|
||||||
|
let openday = PublicShared.getOpenServerDay();
|
||||||
|
let openhdlist = await G.mongodb.collection("hdinfo").find(
|
||||||
|
{hdid: {$in: hdid}, stime: {$lte: openday}, etime: {$gte: openday}}
|
||||||
|
).toArray();
|
||||||
|
|
||||||
|
// 没有开启的活动 返回
|
||||||
|
if (openhdlist.length <= 0) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
hdid = openhdlist.map(hd => hd.hdid);
|
||||||
|
}
|
||||||
|
|
||||||
|
let datas: yangchengmubiao[];
|
||||||
|
datas = await G.mongodb.cEvent(`yangchengmubiao${hdid[0]}`).find(
|
||||||
|
{type: `yangchengmubiao${hdid[0]}`}
|
||||||
|
).toArray();
|
||||||
|
|
||||||
|
for (let i = 0; i < datas.length; i++) {
|
||||||
|
let data = datas[i];
|
||||||
|
let finishid = new Set(data.finishid["2"]);
|
||||||
|
// 查找任务未完成 但设置了领奖标识
|
||||||
|
for (let taskid in task) {
|
||||||
|
let con = task[taskid];
|
||||||
|
let taskval = data.taskval || {};
|
||||||
|
if (finishid.has(number(taskid)) && (taskval[taskid] || 0) < con.pval) {
|
||||||
|
finishid.delete(number(taskid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 没有删除的
|
||||||
|
if (finishid.size == data.finishid["2"].length) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
await G.mongodb.collection("event").updateOne(
|
||||||
|
{"uid": data.uid, "type": data.type}, {$set: {"finishid.2": [...finishid]}}
|
||||||
|
)
|
||||||
|
console.log(`修复玩家${data.uid}人才计划${data.type}数据完成...`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctor();
|
||||||
|
start().then(() => {
|
||||||
|
let s = 0;
|
||||||
|
setInterval(() => {
|
||||||
|
s += 1;
|
||||||
|
console.log(new Date().format("MM-dd hh:mm:ss"));
|
||||||
|
if (s >= 3) process.exit(1);
|
||||||
|
}, 1000)
|
||||||
|
console.log("逻辑执行完成...等待退出!!!");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
98
src/fix_patch/patch_20231222.ts
Normal file
98
src/fix_patch/patch_20231222.ts
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
import {ctor} from "../global";
|
||||||
|
import {_mongodb} from "../setMongodb";
|
||||||
|
import {MongoClient} from "mongodb";
|
||||||
|
|
||||||
|
async function initMongoDB() {
|
||||||
|
console.log('connect mongodb ......');
|
||||||
|
let client = await MongoClient.connect(G.config.mongodbUrl);
|
||||||
|
G.mongodb = new _mongodb(client.db(G.config.dbName || ''));
|
||||||
|
console.log('connect mongodb succ');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
await initMongoDB()
|
||||||
|
|
||||||
|
const task = {
|
||||||
|
'2001': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 50,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2002': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 5}, {'a': 'item', 't': '626', 'n': 10}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 100,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2003': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '626', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 200,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2004': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 250,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2005': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '600', 'n': 20}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 300,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2006': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 400,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
},
|
||||||
|
'2007': {
|
||||||
|
'prize': [{'a': 'item', 't': '4', 'n': 10}, {'a': 'item', 't': '619', 'n': 1}],
|
||||||
|
'tujing': '',
|
||||||
|
'title': 'intr_yczm_day_des_2',
|
||||||
|
'type': 2,
|
||||||
|
'pval': 500,
|
||||||
|
'cond': [],
|
||||||
|
'stype': 118
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let hdid = [100, 101];
|
||||||
|
await G.mongodb.collection("hdinfo").updateMany(
|
||||||
|
{hdid: {$in: hdid}}, {$set: {"data.tasklist.2": task}}
|
||||||
|
)
|
||||||
|
console.log(`修复区服${G.config.serverId}人才计划活动数据完成...`);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctor();
|
||||||
|
start().then(() => {
|
||||||
|
let s = 0;
|
||||||
|
setInterval(() => {
|
||||||
|
s += 1;
|
||||||
|
console.log(new Date().format("MM-dd hh:mm:ss"));
|
||||||
|
if (s >= 3) process.exit(1);
|
||||||
|
}, 1000)
|
||||||
|
console.log("逻辑执行完成...等待退出!!!");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
22
src/fix_patch/patch_email_find.ts
Normal file
22
src/fix_patch/patch_email_find.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import {initMongoDB} from "../setMongodb";
|
||||||
|
import {ctor} from "../global";
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
await initMongoDB();
|
||||||
|
|
||||||
|
let emails = await G.mongodb.collection("email").find({
|
||||||
|
title: {$regex: "wzry"}
|
||||||
|
}).toArray();
|
||||||
|
|
||||||
|
for (let i = 0; i < emails.length; i++) {
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ctor();
|
||||||
|
start().then(() => {
|
||||||
|
setInterval(() => {
|
||||||
|
console.log(new Date().format("MM-dd hh:mm:ss"));
|
||||||
|
}, 1000)
|
||||||
|
console.log("逻辑执行完成...等待退出!!!");
|
||||||
|
});
|
@ -1,5 +1,5 @@
|
|||||||
import {ctor} from './global';
|
import {ctor} from '../global';
|
||||||
import {initMongoDB} from './setMongodb';
|
import {initMongoDB} from '../setMongodb';
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
//连接mongodb
|
//连接mongodb
|
@ -1,5 +1,5 @@
|
|||||||
import {ctor} from "./global";
|
import {ctor} from "../global";
|
||||||
import {initMongoDB} from "./setMongodb";
|
import {initMongoDB} from "../setMongodb";
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
await initMongoDB()
|
await initMongoDB()
|
47
src/fix_patch/patch_queryEmail.ts
Normal file
47
src/fix_patch/patch_queryEmail.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import fs from "fs";
|
||||||
|
import {MongoClient} from "mongodb";
|
||||||
|
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
let mongodbUrl = "mongodb://blacklagoon:lffu2bD%5eGn2%5eE%2bE7@blacklagoon-mongo-secondary.pro.g123-cpp.com:3717,blacklagoon-mongo-primary.pro.g123-cpp.com:3717?replicaSet=mgset-351738825"
|
||||||
|
//连接mongodb
|
||||||
|
let client = await MongoClient.connect(mongodbUrl);
|
||||||
|
|
||||||
|
console.log('链接成功');
|
||||||
|
|
||||||
|
let user2email: { [uid: string]: { [title: string]: { prize: any, get_num: number, unget_num: number } } } = {};
|
||||||
|
for (let i = 1; i < 49; i++) {
|
||||||
|
let dbName = `blacklagoon_s${i}`
|
||||||
|
console.log(dbName)
|
||||||
|
|
||||||
|
let mongodb = client.db(dbName);
|
||||||
|
let emails = await mongodb.collection("email").find({
|
||||||
|
title: {$regex: "wzry"}
|
||||||
|
}).toArray();
|
||||||
|
|
||||||
|
for (let i = 0; i < emails.length; i++) {
|
||||||
|
let email = emails[i];
|
||||||
|
if (!email.prizeData?.prize) continue;
|
||||||
|
if (!user2email[email.uid]) {
|
||||||
|
user2email[email.uid] = {};
|
||||||
|
}
|
||||||
|
if (!user2email[email.uid][email.title]) {
|
||||||
|
user2email[email.uid][email.title] = {
|
||||||
|
prize: email.prizeData.prize,
|
||||||
|
get_num: 0,
|
||||||
|
unget_num: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (email.prizeData.isGet) {
|
||||||
|
user2email[email.uid][email.title].get_num += 1;
|
||||||
|
} else {
|
||||||
|
user2email[email.uid][email.title].unget_num += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fs.writeFileSync('email.json', JSON.stringify(user2email, null, 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
start().then(() => {
|
||||||
|
process.exit()
|
||||||
|
});
|
@ -1,6 +1,6 @@
|
|||||||
import {ctor} from './global';
|
import {ctor} from '../global';
|
||||||
import {initMongoDB} from './setMongodb';
|
import {initMongoDB} from '../setMongodb';
|
||||||
import {initRedis} from './setRedis';
|
import {initRedis} from '../setRedis';
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
//连接mongodb
|
//连接mongodb
|
@ -44,3 +44,29 @@ export async function addGameLog(uid:string, type:string, req:any, data:any){
|
|||||||
console.error('addGameLog',e);
|
console.error('addGameLog',e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家游戏内打点
|
||||||
|
* @param uid 玩家uid
|
||||||
|
* @param type 日志类型
|
||||||
|
* @param data 日志内容
|
||||||
|
*/
|
||||||
|
|
||||||
|
export async function addGameDot(uid:string, type:string, data?:any){
|
||||||
|
try{
|
||||||
|
if(!logDB){
|
||||||
|
await connGameLogDB();
|
||||||
|
}
|
||||||
|
let log = {
|
||||||
|
uid,
|
||||||
|
type,
|
||||||
|
data
|
||||||
|
}
|
||||||
|
//事件时间
|
||||||
|
log['cTime'] = Math.floor(Date.now()/1000);
|
||||||
|
|
||||||
|
logDB.collection('gameDot').insertOne(log);
|
||||||
|
}catch(e){
|
||||||
|
console.error('addGameLog',e);
|
||||||
|
}
|
||||||
|
}
|
@ -92,6 +92,8 @@ class _G {
|
|||||||
redis: redisJsonFun;
|
redis: redisJsonFun;
|
||||||
/**ioredis连接对象 */
|
/**ioredis连接对象 */
|
||||||
ioredis: Redis;
|
ioredis: Redis;
|
||||||
|
/** 跨服 ioredis 连接对象 */
|
||||||
|
iorediscross: Redis;
|
||||||
/**mongodb连接对象 */
|
/**mongodb连接对象 */
|
||||||
mongodb: _mongodb;
|
mongodb: _mongodb;
|
||||||
/**crossmongodb连接对象 */
|
/**crossmongodb连接对象 */
|
||||||
|
@ -17,6 +17,8 @@ import { PublicShared } from './shared/public/public';
|
|||||||
import { setGud } from './public/gud';
|
import { setGud } from './public/gud';
|
||||||
import {checkResetBuyLog} from "./api_s2c/event/zhoumolibao/ApiOpen";
|
import {checkResetBuyLog} from "./api_s2c/event/zhoumolibao/ApiOpen";
|
||||||
import {Christmasfun} from "./api_s2c/event/christmas/fun";
|
import {Christmasfun} from "./api_s2c/event/christmas/fun";
|
||||||
|
import {PushGiftFun} from "./public/pushgift";
|
||||||
|
import {LeiChongLiBaoBuyGift} from "./api_s2c/event/leichonglibao/ApiReceive";
|
||||||
|
|
||||||
export type gEventType = {
|
export type gEventType = {
|
||||||
/**玩家断开连接 */
|
/**玩家断开连接 */
|
||||||
@ -200,6 +202,8 @@ export function addListener() {
|
|||||||
{ $inc: { payNum: conf.money } },
|
{ $inc: { payNum: conf.money } },
|
||||||
{ upsert: true }
|
{ upsert: true }
|
||||||
);
|
);
|
||||||
|
await PushGiftFun.buy(player.uid, payId) // 推送礼包
|
||||||
|
await LeiChongLiBaoBuyGift(call, payId) // 累充礼包
|
||||||
});
|
});
|
||||||
|
|
||||||
G.on("FIRST_LOGIN_EVERY_DAY", (gud, lastTime, curTime) => {
|
G.on("FIRST_LOGIN_EVERY_DAY", (gud, lastTime, curTime) => {
|
||||||
|
@ -16,4 +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,{
|
||||||
|
keyPrefix: "cross_",
|
||||||
|
});
|
||||||
}
|
}
|
@ -122,11 +122,21 @@
|
|||||||
"shengdanBullet": {
|
"shengdanBullet": {
|
||||||
"id": "shengdanBullet",
|
"id": "shengdanBullet",
|
||||||
"name": "intr_attr_name_14",
|
"name": "intr_attr_name_14",
|
||||||
"undefined": "圣诞子弹",
|
"undefined": "圣诞打靶币",
|
||||||
"colour": 5,
|
"colour": 5,
|
||||||
"icon": "icon_chegaipq",
|
"icon": "icon_chegaipq",
|
||||||
"sicon": "icon_chegaipq",
|
"sicon": "icon_chegaipq",
|
||||||
"describe": "intr_attr_describe_14",
|
"describe": "intr_attr_describe_14",
|
||||||
"advancedEffects": "ani_xiangzikuang"
|
"advancedEffects": "ani_xiangzikuang"
|
||||||
|
},
|
||||||
|
"jingxuanbi": {
|
||||||
|
"id": "jingxuanbi",
|
||||||
|
"name": "intr_attr_name_15",
|
||||||
|
"undefined": "每日精选兑换币",
|
||||||
|
"colour": 4,
|
||||||
|
"icon": "icon_hspj",
|
||||||
|
"sicon": "icon_hspj",
|
||||||
|
"describe": "intr_attr_describe_15",
|
||||||
|
"advancedEffects": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -33,10 +33,9 @@
|
|||||||
},
|
},
|
||||||
//136礼包
|
//136礼包
|
||||||
'136Gift': [
|
'136Gift': [
|
||||||
{ payId: '136Gift1', prize: [] },
|
|
||||||
{ prize: [{"a": "attr", "t": "rmbmoney", "n": 10},{"a": "item", "t": "12", "n": 10},{"a": "attr", "t": "jinbi", "n": 10000}] },
|
{ prize: [{"a": "attr", "t": "rmbmoney", "n": 10},{"a": "item", "t": "12", "n": 10},{"a": "attr", "t": "jinbi", "n": 10000}] },
|
||||||
{ payId: '136Gift2', prize: [] },
|
{ payId: '136Gift2', prize: [], bonus: [{"a": "attr", "t": "jingxuanbi", "n": 10}] },
|
||||||
{ payId: '136Gift3', prize: [] },
|
{ payId: '136Gift3', prize: [], bonus: [{"a": "attr", "t": "jingxuanbi", "n": 10}] },
|
||||||
{ payId: '136Gift4', prize: [] },
|
{ payId: '136Gift4', prize: [], bonus: [{"a": "attr", "t": "jingxuanbi", "n": 10}] },
|
||||||
],
|
],
|
||||||
}
|
}
|
@ -122,6 +122,88 @@
|
|||||||
"ARS": 110,
|
"ARS": 110,
|
||||||
"MOP": 8.99
|
"MOP": 8.99
|
||||||
},
|
},
|
||||||
|
"8": {
|
||||||
|
"CNY": 8,
|
||||||
|
"JPY": 160,
|
||||||
|
"USD": 1.49,
|
||||||
|
"AUD": 2.09,
|
||||||
|
"GBP": 1.09,
|
||||||
|
"CAD": 1.99,
|
||||||
|
"TWD": 40,
|
||||||
|
"EUR": 1.29,
|
||||||
|
"CHF": 1.49,
|
||||||
|
"CZK": 31,
|
||||||
|
"DKK": 9.09,
|
||||||
|
"HKD": 12,
|
||||||
|
"HUF": 470,
|
||||||
|
"NOK": 12.49,
|
||||||
|
"NZD": 2.09,
|
||||||
|
"PLN": 5.49,
|
||||||
|
"SEK": 12.99,
|
||||||
|
"SGD": 1.89,
|
||||||
|
"THB": 46.99,
|
||||||
|
"PHP": 72.99,
|
||||||
|
"MXN": 30.99,
|
||||||
|
"ILS": 4.79,
|
||||||
|
"RUB": 107.99,
|
||||||
|
"KRW": 1710,
|
||||||
|
"VND": 33600,
|
||||||
|
"IDR": 20900,
|
||||||
|
"CLP": 1150,
|
||||||
|
"MYR": 6.09,
|
||||||
|
"BRL": 7.49,
|
||||||
|
"AED": 5.49,
|
||||||
|
"BDT": 121.99,
|
||||||
|
"PEN": 5.99,
|
||||||
|
"RON": 6.09,
|
||||||
|
"SAR": 5.49,
|
||||||
|
"INR": 106.99,
|
||||||
|
"ISK": 190,
|
||||||
|
"BGN": 2.49,
|
||||||
|
"ARS": 320,
|
||||||
|
"MOP": 11.99
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"CNY": 10,
|
||||||
|
"JPY": 200,
|
||||||
|
"USD": 1.79,
|
||||||
|
"AUD": 2.69,
|
||||||
|
"GBP": 1.49,
|
||||||
|
"CAD": 2.39,
|
||||||
|
"TWD": 50,
|
||||||
|
"EUR": 1.59,
|
||||||
|
"CHF": 1.79,
|
||||||
|
"CZK": 38,
|
||||||
|
"DKK": 11.49,
|
||||||
|
"HKD": 14,
|
||||||
|
"HUF": 580,
|
||||||
|
"NOK": 15.99,
|
||||||
|
"NZD": 2.69,
|
||||||
|
"PLN": 6.99,
|
||||||
|
"SEK": 16.09,
|
||||||
|
"SGD": 2.29,
|
||||||
|
"THB": 58.99,
|
||||||
|
"PHP": 90.99,
|
||||||
|
"MXN": 38.99,
|
||||||
|
"ILS": 6.09,
|
||||||
|
"RUB": 134.99,
|
||||||
|
"KRW": 2130,
|
||||||
|
"VND": 41900,
|
||||||
|
"IDR": 26100,
|
||||||
|
"CLP": 1430,
|
||||||
|
"MYR": 7.49,
|
||||||
|
"BRL": 9.49,
|
||||||
|
"AED": 6.49,
|
||||||
|
"BDT": 152.99,
|
||||||
|
"PEN": 7.49,
|
||||||
|
"RON": 7.49,
|
||||||
|
"SAR": 6.99,
|
||||||
|
"INR": 133.99,
|
||||||
|
"ISK": 230,
|
||||||
|
"BGN": 3.09,
|
||||||
|
"ARS": 400,
|
||||||
|
"MOP": 14.99
|
||||||
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"CNY": 12,
|
"CNY": 12,
|
||||||
"JPY": 240,
|
"JPY": 240,
|
||||||
|
@ -2582,6 +2582,90 @@
|
|||||||
"rarity": 4
|
"rarity": 4
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"item^634": {
|
||||||
|
"itemId": "item^634",
|
||||||
|
"name": "紫橙干部碎片随机箱",
|
||||||
|
"i18nKey": "intr_item_name_634",
|
||||||
|
"detailI18nKey": "intr_item_describe_634",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^635": {
|
||||||
|
"itemId": "item^635",
|
||||||
|
"name": "紫橙装备碎片随机箱",
|
||||||
|
"i18nKey": "intr_item_name_635",
|
||||||
|
"detailI18nKey": "intr_item_describe_635",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 120,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^636": {
|
||||||
|
"itemId": "item^636",
|
||||||
|
"name": "紫橙红干部碎片随机箱",
|
||||||
|
"i18nKey": "intr_item_name_636",
|
||||||
|
"detailI18nKey": "intr_item_describe_636",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 244,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^637": {
|
||||||
|
"itemId": "item^637",
|
||||||
|
"name": "超级红色干部自选箱",
|
||||||
|
"i18nKey": "intr_item_name_637",
|
||||||
|
"detailI18nKey": "intr_item_describe_637",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 30000,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
"item^5001": {
|
"item^5001": {
|
||||||
"itemId": "item^5001",
|
"itemId": "item^5001",
|
||||||
"name": "莱薇碎片",
|
"name": "莱薇碎片",
|
||||||
@ -6845,6 +6929,489 @@
|
|||||||
"rarity": 2
|
"rarity": 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"item^50001": {
|
||||||
|
"itemId": "item^50001",
|
||||||
|
"name": "火力覆盖",
|
||||||
|
"i18nKey": "playerheadFrame_name_3",
|
||||||
|
"detailI18nKey": "intr_item_describe_50001",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50002": {
|
||||||
|
"itemId": "item^50002",
|
||||||
|
"name": "双枪",
|
||||||
|
"i18nKey": "playerheadFrame_name_4",
|
||||||
|
"detailI18nKey": "intr_item_describe_50002",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50003": {
|
||||||
|
"itemId": "item^50003",
|
||||||
|
"name": "武装炫耀",
|
||||||
|
"i18nKey": "playerheadFrame_name_6",
|
||||||
|
"detailI18nKey": "intr_item_describe_50003",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50004": {
|
||||||
|
"itemId": "item^50004",
|
||||||
|
"name": "血海",
|
||||||
|
"i18nKey": "playerheadFrame_name_7",
|
||||||
|
"detailI18nKey": "intr_item_describe_50004",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50005": {
|
||||||
|
"itemId": "item^50005",
|
||||||
|
"name": "破笼而出",
|
||||||
|
"i18nKey": "playerheadFrame_name_8",
|
||||||
|
"detailI18nKey": "intr_item_describe_50005",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50006": {
|
||||||
|
"itemId": "item^50006",
|
||||||
|
"name": "擂台",
|
||||||
|
"i18nKey": "playerheadFrame_name_9",
|
||||||
|
"detailI18nKey": "intr_item_describe_50006",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50007": {
|
||||||
|
"itemId": "item^50007",
|
||||||
|
"name": "破土而出",
|
||||||
|
"i18nKey": "playerheadFrame_name_10",
|
||||||
|
"detailI18nKey": "intr_item_describe_50007",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50008": {
|
||||||
|
"itemId": "item^50008",
|
||||||
|
"name": "赠礼",
|
||||||
|
"i18nKey": "playerheadFrame_name_11",
|
||||||
|
"detailI18nKey": "intr_item_describe_50008",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50009": {
|
||||||
|
"itemId": "item^50009",
|
||||||
|
"name": "圣诞氛围",
|
||||||
|
"i18nKey": "playerheadFrame_name_23",
|
||||||
|
"detailI18nKey": "intr_item_describe_50009",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50010": {
|
||||||
|
"itemId": "item^50010",
|
||||||
|
"name": "披星戴月",
|
||||||
|
"i18nKey": "playerheadFrame_name_24",
|
||||||
|
"detailI18nKey": "intr_item_describe_50010",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50101": {
|
||||||
|
"itemId": "item^50101",
|
||||||
|
"name": "冰天雪地",
|
||||||
|
"i18nKey": "playerChatFrame_name_6",
|
||||||
|
"detailI18nKey": "intr_item_describe_50101",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50102": {
|
||||||
|
"itemId": "item^50102",
|
||||||
|
"name": "海浪奔涌",
|
||||||
|
"i18nKey": "playerChatFrame_name_7",
|
||||||
|
"detailI18nKey": "intr_item_describe_50102",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50103": {
|
||||||
|
"itemId": "item^50103",
|
||||||
|
"name": "名扬四海",
|
||||||
|
"i18nKey": "playerheadFrame_name_15",
|
||||||
|
"detailI18nKey": "intr_item_describe_50103",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50104": {
|
||||||
|
"itemId": "item^50104",
|
||||||
|
"name": "圣诞快乐",
|
||||||
|
"i18nKey": "playerChatFrame_name_8",
|
||||||
|
"detailI18nKey": "intr_item_describe_50104",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50201": {
|
||||||
|
"itemId": "item^50201",
|
||||||
|
"name": "招贤纳士",
|
||||||
|
"i18nKey": "playerheadFrame_name_16",
|
||||||
|
"detailI18nKey": "intr_item_describe_50201",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50202": {
|
||||||
|
"itemId": "item^50202",
|
||||||
|
"name": "势如破竹",
|
||||||
|
"i18nKey": "playerheadFrame_name_17",
|
||||||
|
"detailI18nKey": "intr_item_describe_50202",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50203": {
|
||||||
|
"itemId": "item^50203",
|
||||||
|
"name": "被甲执兵",
|
||||||
|
"i18nKey": "playerheadFrame_name_18",
|
||||||
|
"detailI18nKey": "intr_item_describe_50203",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50204": {
|
||||||
|
"itemId": "item^50204",
|
||||||
|
"name": "锋芒毕露",
|
||||||
|
"i18nKey": "playerheadFrame_name_19",
|
||||||
|
"detailI18nKey": "intr_item_describe_50204",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50205": {
|
||||||
|
"itemId": "item^50205",
|
||||||
|
"name": "所向披靡",
|
||||||
|
"i18nKey": "playerheadFrame_name_20",
|
||||||
|
"detailI18nKey": "intr_item_describe_50205",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50206": {
|
||||||
|
"itemId": "item^50206",
|
||||||
|
"name": "传世藏品",
|
||||||
|
"i18nKey": "playerheadFrame_name_21",
|
||||||
|
"detailI18nKey": "intr_item_describe_50206",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50207": {
|
||||||
|
"itemId": "item^50207",
|
||||||
|
"name": "金戈铁马",
|
||||||
|
"i18nKey": "playerheadFrame_name_22",
|
||||||
|
"detailI18nKey": "intr_item_describe_50207",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50301": {
|
||||||
|
"itemId": "item^50301",
|
||||||
|
"name": "圣诞庆典:男",
|
||||||
|
"i18nKey": "playerModel_name_3",
|
||||||
|
"detailI18nKey": "intr_item_describe_50301",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"item^50302": {
|
||||||
|
"itemId": "item^50302",
|
||||||
|
"name": "圣诞庆典:女",
|
||||||
|
"i18nKey": "playerModel_name_4",
|
||||||
|
"detailI18nKey": "intr_item_describe_50302",
|
||||||
|
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
|
||||||
|
"value": 0,
|
||||||
|
"typeId": "item",
|
||||||
|
"typeName": "道具",
|
||||||
|
"isStoreSupported": true,
|
||||||
|
"isAiSupported": true,
|
||||||
|
"attributes": {
|
||||||
|
"storeDisplayPrice": null,
|
||||||
|
"storeCategory": "",
|
||||||
|
"setQuantity": 1,
|
||||||
|
"purchaseLimit": 0,
|
||||||
|
"sellMinCp": 100,
|
||||||
|
"sellMaxCp": 500,
|
||||||
|
"rarity": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
"equip^1001": {
|
"equip^1001": {
|
||||||
"itemId": "equip^1001",
|
"itemId": "equip^1001",
|
||||||
"name": "棉布头盔",
|
"name": "棉布头盔",
|
||||||
@ -10015,5 +10582,152 @@
|
|||||||
"sellMaxCp": 500,
|
"sellMaxCp": 500,
|
||||||
"rarity": 3
|
"rarity": 3
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"attr^nexp": {
|
||||||
|
"itemId": "attr^nexp",
|
||||||
|
"name": "主角经验",
|
||||||
|
"i18nKey": "intr_attr_name_3",
|
||||||
|
"detailI18nKey": "intr_attr_describe_3",
|
||||||
|
"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^rongyu": {
|
||||||
|
"itemId": "attr^rongyu",
|
||||||
|
"name": "荣誉勋章",
|
||||||
|
"i18nKey": "intr_attr_name_4",
|
||||||
|
"detailI18nKey": "intr_attr_describe_4",
|
||||||
|
"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^payExp": {
|
||||||
|
"itemId": "attr^payExp",
|
||||||
|
"name": "VIP经验",
|
||||||
|
"i18nKey": "intr_attr_name_5",
|
||||||
|
"detailI18nKey": "intr_attr_describe_5",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attr^guijinshu": {
|
||||||
|
"itemId": "attr^guijinshu",
|
||||||
|
"name": "贵金属",
|
||||||
|
"i18nKey": "intr_attr_name_6",
|
||||||
|
"detailI18nKey": "intr_attr_describe_6",
|
||||||
|
"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": 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attr^shengdanExp": {
|
||||||
|
"itemId": "attr^shengdanExp",
|
||||||
|
"name": "圣诞战令经验",
|
||||||
|
"i18nKey": "intr_attr_name_13",
|
||||||
|
"detailI18nKey": "intr_attr_describe_13",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attr^shengdanBullet": {
|
||||||
|
"itemId": "attr^shengdanBullet",
|
||||||
|
"name": "圣诞打靶币",
|
||||||
|
"i18nKey": "intr_attr_name_14",
|
||||||
|
"detailI18nKey": "intr_attr_describe_14",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attr^jingxuanbi": {
|
||||||
|
"itemId": "attr^jingxuanbi",
|
||||||
|
"name": "每日精选兑换币",
|
||||||
|
"i18nKey": "intr_attr_name_15",
|
||||||
|
"detailI18nKey": "intr_attr_describe_15",
|
||||||
|
"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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3978,7 +3978,7 @@
|
|||||||
"hdid" : 11000, // 唯一活动id 消费竞赛
|
"hdid" : 11000, // 唯一活动id 消费竞赛
|
||||||
"htype" : 11, // 后端唯一识别标识
|
"htype" : 11, // 后端唯一识别标识
|
||||||
"stype" : 1100, // 前端唯一识别标识(看前端需要是否修改)
|
"stype" : 1100, // 前端唯一识别标识(看前端需要是否修改)
|
||||||
"ttype" : 0, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
"ttype" : 4, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
||||||
"stime" : 0, // 活动开始天数
|
"stime" : 0, // 活动开始天数
|
||||||
"rtime" : 30, // 活动显示结束天数
|
"rtime" : 30, // 活动显示结束天数
|
||||||
"etime" : 30, // 活动实际结束
|
"etime" : 30, // 活动实际结束
|
||||||
@ -3988,27 +3988,31 @@
|
|||||||
"data" : {
|
"data" : {
|
||||||
//活动文本描述
|
//活动文本描述
|
||||||
intr: "xfjstips_1",
|
intr: "xfjstips_1",
|
||||||
intr: "xfjstips_2",
|
intr2: "xfjstips_2",
|
||||||
//排名
|
//奖励邮件标题
|
||||||
|
mailTitle: "intr_xfjs_mailTitle",
|
||||||
|
//奖励邮件内容
|
||||||
|
mailDes: "intr_xfjs_mailDes",
|
||||||
|
//排名
|
||||||
rank: [
|
rank: [
|
||||||
{
|
{
|
||||||
id: '1',
|
id: '1',
|
||||||
name: 'xfjstips_3',
|
name: 'xfjstips_3',
|
||||||
rank:[1],
|
rank:[1,1],
|
||||||
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 20000}],
|
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 20000}],
|
||||||
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '2',
|
id: '2',
|
||||||
name: 'xfjstips_4',
|
name: 'xfjstips_4',
|
||||||
rank:[2],
|
rank:[2,2],
|
||||||
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 18000}],
|
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 18000}],
|
||||||
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '3',
|
id: '3',
|
||||||
name: 'xfjstips_5',
|
name: 'xfjstips_5',
|
||||||
rank:[3],
|
rank:[3,3],
|
||||||
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 16000}],
|
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 16000}],
|
||||||
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
||||||
},
|
},
|
||||||
@ -4025,6 +4029,13 @@
|
|||||||
rank:[11,30],
|
rank:[11,30],
|
||||||
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 12000}],
|
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 12000}],
|
||||||
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '6',
|
||||||
|
name: 'xfjstips_8',
|
||||||
|
rank:[31,9999],
|
||||||
|
need: [{'a': 'attr', 't': 'rmbmoney', 'n': 12000}],
|
||||||
|
prize: [{'a': 'item', 't': '13', 'n': 600}]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -4033,7 +4044,7 @@
|
|||||||
"hdid" : 12000, // 唯一活动id 累计购买礼包
|
"hdid" : 12000, // 唯一活动id 累计购买礼包
|
||||||
"htype" : 12, // 后端唯一识别标识
|
"htype" : 12, // 后端唯一识别标识
|
||||||
"stype" : 1200, // 前端唯一识别标识(看前端需要是否修改)
|
"stype" : 1200, // 前端唯一识别标识(看前端需要是否修改)
|
||||||
"ttype" : 0, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
"ttype" : 4, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
||||||
"stime" : 0, // 活动开始天数
|
"stime" : 0, // 活动开始天数
|
||||||
"rtime" : 30, // 活动显示结束天数
|
"rtime" : 30, // 活动显示结束天数
|
||||||
"etime" : 30, // 活动实际结束
|
"etime" : 30, // 活动实际结束
|
||||||
@ -4041,17 +4052,14 @@
|
|||||||
"icon": "icon_ljlibao",
|
"icon": "icon_ljlibao",
|
||||||
"showtime" : "仅供参考,会复写正确值", // 自选礼包,如果存在多个活动,计费点不要设置一样;如果是一样,可能会存在付费一次,购买多次。
|
"showtime" : "仅供参考,会复写正确值", // 自选礼包,如果存在多个活动,计费点不要设置一样;如果是一样,可能会存在付费一次,购买多次。
|
||||||
"data" : {
|
"data" : {
|
||||||
//活动文本描述
|
|
||||||
intr: "ljlibaotips_1",
|
|
||||||
intr: "ljlibaotips_2",
|
|
||||||
//礼包
|
//礼包
|
||||||
gift: [
|
gift: [
|
||||||
{
|
{
|
||||||
id: '1',
|
id: '1',
|
||||||
name: 'ljlibaotips_3',
|
need:[],
|
||||||
need:[],
|
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_1',
|
payId: 'ljlibao_1',
|
||||||
|
//返利比
|
||||||
scale: 200,
|
scale: 200,
|
||||||
buynum: 1,
|
buynum: 1,
|
||||||
prize:[
|
prize:[
|
||||||
@ -4064,7 +4072,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '2',
|
id: '2',
|
||||||
name: 'ljlibaotips_4',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_2',
|
payId: 'ljlibao_2',
|
||||||
@ -4080,7 +4087,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '3',
|
id: '3',
|
||||||
name: 'ljlibaotips_5',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_3',
|
payId: 'ljlibao_3',
|
||||||
@ -4096,7 +4102,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '4',
|
id: '4',
|
||||||
name: 'ljlibaotips_6',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_4',
|
payId: 'ljlibao_4',
|
||||||
@ -4117,7 +4122,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '5',
|
id: '5',
|
||||||
name: 'ljlibaotips_7',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_5',
|
payId: 'ljlibao_5',
|
||||||
@ -4138,7 +4142,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '6',
|
id: '6',
|
||||||
name: 'ljlibaotips_8',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_6',
|
payId: 'ljlibao_6',
|
||||||
@ -4159,7 +4162,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '7',
|
id: '7',
|
||||||
name: 'ljlibaotips_9',
|
|
||||||
need:[],
|
need:[],
|
||||||
free: false,
|
free: false,
|
||||||
payId: 'ljlibao_7',
|
payId: 'ljlibao_7',
|
||||||
@ -4179,7 +4181,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
//买X次可以领大奖
|
||||||
|
payRewardNum: 5,
|
||||||
//自选框掉落池
|
//自选框掉落池
|
||||||
|
//配几组就显示有几个格子
|
||||||
|
//配置的是可选的道具
|
||||||
dlz: [
|
dlz: [
|
||||||
{
|
{
|
||||||
"1": {"a": "item", "t":"600", "n": 20},
|
"1": {"a": "item", "t":"600", "n": 20},
|
||||||
@ -4224,5 +4230,58 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hdid" : 13000, // 唯一活动id 充值分红包
|
||||||
|
"htype" : 13, // 后端唯一识别标识
|
||||||
|
"stype" : 1300, // 前端唯一识别标识(看前端需要是否修改)
|
||||||
|
"ttype" : 4, // 0 按照开服时间计算,1 玩家注册时间计算 4 屏蔽此活动
|
||||||
|
"stime" : 0, // 活动开始天数
|
||||||
|
"rtime" : 30, // 活动显示结束天数
|
||||||
|
"etime" : 30, // 活动实际结束
|
||||||
|
"name": "fenhongbao",
|
||||||
|
"icon": "icon_fenhongbao",
|
||||||
|
"showtime" : "仅供参考,会复写正确值", // 自选礼包,如果存在多个活动,计费点不要设置一样;如果是一样,可能会存在付费一次,购买多次。
|
||||||
|
"data" : {
|
||||||
|
//活动文本描述
|
||||||
|
intr: "zuanshihongbao_5",
|
||||||
|
//分红包所需最低钻石数
|
||||||
|
price: 1000,
|
||||||
|
reset: 0,
|
||||||
|
//奖池总数量
|
||||||
|
totalmoney: 100000,
|
||||||
|
groupConf: {
|
||||||
|
//档位
|
||||||
|
base: {
|
||||||
|
loglimit:2000,
|
||||||
|
arr:[
|
||||||
|
{
|
||||||
|
//权重
|
||||||
|
"weight": 50,
|
||||||
|
//获得范围
|
||||||
|
"numrange": [1000,1500]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
//权重
|
||||||
|
"weight": 30,
|
||||||
|
//获得范围
|
||||||
|
"numrange": [1500,2000]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
//权重
|
||||||
|
"weight": 15,
|
||||||
|
//获得范围
|
||||||
|
"numrange": [2000,3000]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
//权重
|
||||||
|
"weight": 5,
|
||||||
|
//获得范围
|
||||||
|
"numrange": [3000,8000]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -1365,5 +1365,18 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"lv": 15
|
"lv": 15
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"leigoulibao": {
|
||||||
|
"name": "leigoulibao",
|
||||||
|
"undefined": "累购礼包",
|
||||||
|
"and": {
|
||||||
|
"lv": 15
|
||||||
|
},
|
||||||
|
"or": {},
|
||||||
|
"time": 0,
|
||||||
|
"tips": "openCond_tips_96",
|
||||||
|
"display": {
|
||||||
|
"lv": 15
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -933,7 +933,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a": "hero",
|
"a": "hero",
|
||||||
"t": "4006",
|
"t": "4013",
|
||||||
"n": 1
|
"n": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -975,7 +975,7 @@
|
|||||||
{
|
{
|
||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "4",
|
"t": "4",
|
||||||
"n": 100
|
"n": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -2522,32 +2522,6 @@
|
|||||||
"fanLiBi": 200,
|
"fanLiBi": 200,
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
},
|
},
|
||||||
"136Gift1": {
|
|
||||||
"id": "136Gift1",
|
|
||||||
"money": 60,
|
|
||||||
"payExp": [
|
|
||||||
{
|
|
||||||
"a": "attr",
|
|
||||||
"t": "payExp",
|
|
||||||
"n": 600
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"prize": [
|
|
||||||
{
|
|
||||||
"a": "item",
|
|
||||||
"t": "14",
|
|
||||||
"n": 50
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"firstPayPrize": [],
|
|
||||||
"name": "pay_name_136Gift2",
|
|
||||||
"undefined": "136礼包打包购买",
|
|
||||||
"time": 604800,
|
|
||||||
"buys": 0,
|
|
||||||
"needVip": 0,
|
|
||||||
"front": {},
|
|
||||||
"currency": "CNY"
|
|
||||||
},
|
|
||||||
"136Gift2": {
|
"136Gift2": {
|
||||||
"id": "136Gift2",
|
"id": "136Gift2",
|
||||||
"money": 1,
|
"money": 1,
|
||||||
@ -2568,6 +2542,11 @@
|
|||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "12",
|
"t": "12",
|
||||||
"n": 100
|
"n": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -2581,42 +2560,6 @@
|
|||||||
},
|
},
|
||||||
"136Gift3": {
|
"136Gift3": {
|
||||||
"id": "136Gift3",
|
"id": "136Gift3",
|
||||||
"money": 3,
|
|
||||||
"payExp": [
|
|
||||||
{
|
|
||||||
"a": "attr",
|
|
||||||
"t": "payExp",
|
|
||||||
"n": 30
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"prize": [
|
|
||||||
{
|
|
||||||
"a": "attr",
|
|
||||||
"t": "rmbmoney",
|
|
||||||
"n": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"a": "item",
|
|
||||||
"t": "12",
|
|
||||||
"n": 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"a": "item",
|
|
||||||
"t": "600",
|
|
||||||
"n": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"firstPayPrize": [],
|
|
||||||
"name": "pay_name_136Gift4",
|
|
||||||
"undefined": "3元礼包",
|
|
||||||
"time": 86400,
|
|
||||||
"buys": 0,
|
|
||||||
"needVip": 0,
|
|
||||||
"front": {},
|
|
||||||
"currency": "CNY"
|
|
||||||
},
|
|
||||||
"136Gift4": {
|
|
||||||
"id": "136Gift4",
|
|
||||||
"money": 6,
|
"money": 6,
|
||||||
"payExp": [
|
"payExp": [
|
||||||
{
|
{
|
||||||
@ -2640,6 +2583,52 @@
|
|||||||
"a": "item",
|
"a": "item",
|
||||||
"t": "600",
|
"t": "600",
|
||||||
"n": 2
|
"n": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"firstPayPrize": [],
|
||||||
|
"name": "pay_name_136Gift4",
|
||||||
|
"undefined": "3元礼包",
|
||||||
|
"time": 86400,
|
||||||
|
"buys": 0,
|
||||||
|
"needVip": 0,
|
||||||
|
"front": {},
|
||||||
|
"currency": "CNY"
|
||||||
|
},
|
||||||
|
"136Gift4": {
|
||||||
|
"id": "136Gift4",
|
||||||
|
"money": 12,
|
||||||
|
"payExp": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "payExp",
|
||||||
|
"n": 120
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prize": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "rmbmoney",
|
||||||
|
"n": 240
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "item",
|
||||||
|
"t": "12",
|
||||||
|
"n": 500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "item",
|
||||||
|
"t": "600",
|
||||||
|
"n": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 8
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPayPrize": [],
|
"firstPayPrize": [],
|
||||||
@ -2653,12 +2642,12 @@
|
|||||||
},
|
},
|
||||||
"136GiftAll": {
|
"136GiftAll": {
|
||||||
"id": "136GiftAll",
|
"id": "136GiftAll",
|
||||||
"money": 60,
|
"money": 18,
|
||||||
"payExp": [
|
"payExp": [
|
||||||
{
|
{
|
||||||
"a": "attr",
|
"a": "attr",
|
||||||
"t": "payExp",
|
"t": "payExp",
|
||||||
"n": 600
|
"n": 180
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"prize": [],
|
"prize": [],
|
||||||
@ -2669,6 +2658,7 @@
|
|||||||
"buys": 0,
|
"buys": 0,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
|
"fanLiBi": 950,
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
},
|
},
|
||||||
"xianshizhaomu_gift_1": {
|
"xianshizhaomu_gift_1": {
|
||||||
@ -4119,7 +4109,7 @@
|
|||||||
"name": "pay_name_djlb_2",
|
"name": "pay_name_djlb_2",
|
||||||
"undefined": "枪油补充包",
|
"undefined": "枪油补充包",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 3,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4145,7 +4135,7 @@
|
|||||||
"name": "pay_name_djlb_1",
|
"name": "pay_name_djlb_1",
|
||||||
"undefined": "能量饮料补充包",
|
"undefined": "能量饮料补充包",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 2,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4171,7 +4161,7 @@
|
|||||||
"name": "pay_name_djlb_12",
|
"name": "pay_name_djlb_12",
|
||||||
"undefined": "弹壳补充包",
|
"undefined": "弹壳补充包",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 3,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4197,7 +4187,7 @@
|
|||||||
"name": "pay_name_djlb_18",
|
"name": "pay_name_djlb_18",
|
||||||
"undefined": "装备蓝图补充包",
|
"undefined": "装备蓝图补充包",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 3,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4217,7 +4207,7 @@
|
|||||||
"name": "pay_name_mingwang_2",
|
"name": "pay_name_mingwang_2",
|
||||||
"undefined": "名望礼包_68元",
|
"undefined": "名望礼包_68元",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4237,7 +4227,7 @@
|
|||||||
"name": "pay_name_mingwang_3",
|
"name": "pay_name_mingwang_3",
|
||||||
"undefined": "名望礼包_648元",
|
"undefined": "名望礼包_648元",
|
||||||
"time": 86400,
|
"time": 86400,
|
||||||
"buys": 0,
|
"buys": 2,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4257,7 +4247,7 @@
|
|||||||
"name": "pay_name_mingwang_4",
|
"name": "pay_name_mingwang_4",
|
||||||
"undefined": "名望礼包_128元",
|
"undefined": "名望礼包_128元",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4433,7 +4423,7 @@
|
|||||||
"name": "pay_name_guanqialibao_1",
|
"name": "pay_name_guanqialibao_1",
|
||||||
"undefined": "关卡礼包_6",
|
"undefined": "关卡礼包_6",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4469,7 +4459,7 @@
|
|||||||
"name": "pay_name_guanqialibao_2",
|
"name": "pay_name_guanqialibao_2",
|
||||||
"undefined": "关卡礼包_30",
|
"undefined": "关卡礼包_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4505,7 +4495,7 @@
|
|||||||
"name": "pay_name_guanqialibao_3",
|
"name": "pay_name_guanqialibao_3",
|
||||||
"undefined": "关卡礼包_68",
|
"undefined": "关卡礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4541,7 +4531,7 @@
|
|||||||
"name": "pay_name_guanqialibao_4",
|
"name": "pay_name_guanqialibao_4",
|
||||||
"undefined": "关卡礼包_68",
|
"undefined": "关卡礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4582,7 +4572,7 @@
|
|||||||
"name": "pay_name_daojulibao_1",
|
"name": "pay_name_daojulibao_1",
|
||||||
"undefined": "专属润滑剂不足_30",
|
"undefined": "专属润滑剂不足_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4623,7 +4613,7 @@
|
|||||||
"name": "pay_name_daojulibao_2",
|
"name": "pay_name_daojulibao_2",
|
||||||
"undefined": "专属润滑剂不足_68",
|
"undefined": "专属润滑剂不足_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4664,7 +4654,7 @@
|
|||||||
"name": "pay_name_daojulibao_3",
|
"name": "pay_name_daojulibao_3",
|
||||||
"undefined": "专属润滑剂不足_128",
|
"undefined": "专属润滑剂不足_128",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4705,7 +4695,7 @@
|
|||||||
"name": "pay_name_daojulibao_4",
|
"name": "pay_name_daojulibao_4",
|
||||||
"undefined": "配件零件不足_30",
|
"undefined": "配件零件不足_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4746,7 +4736,7 @@
|
|||||||
"name": "pay_name_daojulibao_5",
|
"name": "pay_name_daojulibao_5",
|
||||||
"undefined": "配件零件不足_68",
|
"undefined": "配件零件不足_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4787,7 +4777,7 @@
|
|||||||
"name": "pay_name_daojulibao_6",
|
"name": "pay_name_daojulibao_6",
|
||||||
"undefined": "配件零件不足_128",
|
"undefined": "配件零件不足_128",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4828,7 +4818,7 @@
|
|||||||
"name": "pay_name_daojulibao_7",
|
"name": "pay_name_daojulibao_7",
|
||||||
"undefined": "装备蓝图不足_30",
|
"undefined": "装备蓝图不足_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4869,7 +4859,7 @@
|
|||||||
"name": "pay_name_daojulibao_8",
|
"name": "pay_name_daojulibao_8",
|
||||||
"undefined": "装备蓝图不足_68",
|
"undefined": "装备蓝图不足_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4910,7 +4900,7 @@
|
|||||||
"name": "pay_name_daojulibao_9",
|
"name": "pay_name_daojulibao_9",
|
||||||
"undefined": "装备蓝图不足_128",
|
"undefined": "装备蓝图不足_128",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4951,7 +4941,7 @@
|
|||||||
"name": "pay_name_daojulibao_10",
|
"name": "pay_name_daojulibao_10",
|
||||||
"undefined": "调校合金不足_30",
|
"undefined": "调校合金不足_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -4992,7 +4982,7 @@
|
|||||||
"name": "pay_name_daojulibao_11",
|
"name": "pay_name_daojulibao_11",
|
||||||
"undefined": "调校合金不足_68",
|
"undefined": "调校合金不足_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5033,7 +5023,7 @@
|
|||||||
"name": "pay_name_daojulibao_12",
|
"name": "pay_name_daojulibao_12",
|
||||||
"undefined": "调校合金不足_128",
|
"undefined": "调校合金不足_128",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5064,7 +5054,7 @@
|
|||||||
"name": "pay_name_zhanbailibao_1",
|
"name": "pay_name_zhanbailibao_1",
|
||||||
"undefined": "战败礼包_68",
|
"undefined": "战败礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5095,7 +5085,7 @@
|
|||||||
"name": "pay_name_zhanbailibao_2",
|
"name": "pay_name_zhanbailibao_2",
|
||||||
"undefined": "战败礼包_68",
|
"undefined": "战败礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5126,7 +5116,7 @@
|
|||||||
"name": "pay_name_zhanbailibao_3",
|
"name": "pay_name_zhanbailibao_3",
|
||||||
"undefined": "战败礼包_68",
|
"undefined": "战败礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5157,7 +5147,7 @@
|
|||||||
"name": "pay_name_choukalibao_1",
|
"name": "pay_name_choukalibao_1",
|
||||||
"undefined": "抽卡礼包_68",
|
"undefined": "抽卡礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5188,7 +5178,7 @@
|
|||||||
"name": "pay_name_choukalibao_2",
|
"name": "pay_name_choukalibao_2",
|
||||||
"undefined": "抽卡礼包_68",
|
"undefined": "抽卡礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5219,7 +5209,7 @@
|
|||||||
"name": "pay_name_choukalibao_3",
|
"name": "pay_name_choukalibao_3",
|
||||||
"undefined": "抽卡礼包_68",
|
"undefined": "抽卡礼包_68",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5239,7 +5229,7 @@
|
|||||||
"name": "pay_name_shouchong_1",
|
"name": "pay_name_shouchong_1",
|
||||||
"undefined": "首充礼包_6",
|
"undefined": "首充礼包_6",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5259,7 +5249,7 @@
|
|||||||
"name": "pay_name_shouchong_2",
|
"name": "pay_name_shouchong_2",
|
||||||
"undefined": "首充礼包_30",
|
"undefined": "首充礼包_30",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
@ -5279,7 +5269,7 @@
|
|||||||
"name": "pay_name_shouchong_3",
|
"name": "pay_name_shouchong_3",
|
||||||
"undefined": "首充礼包_98",
|
"undefined": "首充礼包_98",
|
||||||
"time": -1,
|
"time": -1,
|
||||||
"buys": 0,
|
"buys": 1,
|
||||||
"needVip": 0,
|
"needVip": 0,
|
||||||
"front": {},
|
"front": {},
|
||||||
"currency": "CNY"
|
"currency": "CNY"
|
||||||
|
@ -511,7 +511,13 @@
|
|||||||
"freeRefreshInterval": 0,
|
"freeRefreshInterval": 0,
|
||||||
"freeRefreshNum": 0,
|
"freeRefreshNum": 0,
|
||||||
"shopItems": [
|
"shopItems": [
|
||||||
10001
|
10001,
|
||||||
|
10002,
|
||||||
|
10003,
|
||||||
|
10004,
|
||||||
|
10005,
|
||||||
|
10006,
|
||||||
|
10007
|
||||||
],
|
],
|
||||||
"showItem": [
|
"showItem": [
|
||||||
{
|
{
|
||||||
|
@ -6273,17 +6273,179 @@
|
|||||||
{
|
{
|
||||||
"id": 10001,
|
"id": 10001,
|
||||||
"a": "item",
|
"a": "item",
|
||||||
"t": 4,
|
"t": 617,
|
||||||
"n": 10,
|
"n": 1,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 6,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 150
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10002": [
|
||||||
|
{
|
||||||
|
"id": 10002,
|
||||||
|
"a": "item",
|
||||||
|
"t": 627,
|
||||||
|
"n": 1,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 5,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 60
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10003": [
|
||||||
|
{
|
||||||
|
"id": 10003,
|
||||||
|
"a": "item",
|
||||||
|
"t": 605,
|
||||||
|
"n": 1,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 5,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 18
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10004": [
|
||||||
|
{
|
||||||
|
"id": 10004,
|
||||||
|
"a": "item",
|
||||||
|
"t": 24,
|
||||||
|
"n": 2,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 5,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 6
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10005": [
|
||||||
|
{
|
||||||
|
"id": 10005,
|
||||||
|
"a": "item",
|
||||||
|
"t": 12,
|
||||||
|
"n": 200,
|
||||||
"p": 1,
|
"p": 1,
|
||||||
"colour": 4,
|
"colour": 4,
|
||||||
"buyNum": -1,
|
"buyNum": -1,
|
||||||
"openDay": 1,
|
"openDay": 1,
|
||||||
"buyNeed": [
|
"buyNeed": [
|
||||||
{
|
{
|
||||||
"a": "item",
|
"a": "attr",
|
||||||
"t": "15",
|
"t": "jingxuanbi",
|
||||||
"n": 2800
|
"n": 6
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10006": [
|
||||||
|
{
|
||||||
|
"id": 10006,
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jinbi",
|
||||||
|
"n": 1000000,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 3,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sale": 10,
|
||||||
|
"needVip": 0,
|
||||||
|
"needZCCG": 0,
|
||||||
|
"lv": [
|
||||||
|
1,
|
||||||
|
9999
|
||||||
|
],
|
||||||
|
"vipAddbuyNum": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"10007": [
|
||||||
|
{
|
||||||
|
"id": 10007,
|
||||||
|
"a": "item",
|
||||||
|
"t": 1,
|
||||||
|
"n": 500000,
|
||||||
|
"p": 1,
|
||||||
|
"colour": 3,
|
||||||
|
"buyNum": -1,
|
||||||
|
"openDay": 1,
|
||||||
|
"buyNeed": [
|
||||||
|
{
|
||||||
|
"a": "attr",
|
||||||
|
"t": "jingxuanbi",
|
||||||
|
"n": 5
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sale": 10,
|
"sale": 10,
|
||||||
|
@ -203,7 +203,7 @@
|
|||||||
"id": 11,
|
"id": 11,
|
||||||
"shopId": 13,
|
"shopId": 13,
|
||||||
"shopType": 12,
|
"shopType": 12,
|
||||||
"title": "wsw_wz_dhsd",
|
"title": "wsw_wz_mrjxdh",
|
||||||
"undefined": "兑换商店",
|
"undefined": "兑换商店",
|
||||||
"openCond": "shop_13",
|
"openCond": "shop_13",
|
||||||
"des": "intr_shop_des_13",
|
"des": "intr_shop_des_13",
|
||||||
@ -211,7 +211,7 @@
|
|||||||
"cost": [
|
"cost": [
|
||||||
{
|
{
|
||||||
"a": "attr",
|
"a": "attr",
|
||||||
"t": "rmbmoney",
|
"t": "jingxuanbi",
|
||||||
"n": 1
|
"n": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -8,11 +8,12 @@
|
|||||||
],
|
],
|
||||||
"payId": [
|
"payId": [
|
||||||
"guanqialibao_1",
|
"guanqialibao_1",
|
||||||
"guanqialibao_3"
|
"guanqialibao_2"
|
||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"id": 2,
|
"id": 2,
|
||||||
@ -23,11 +24,12 @@
|
|||||||
],
|
],
|
||||||
"payId": [
|
"payId": [
|
||||||
"guanqialibao_1",
|
"guanqialibao_1",
|
||||||
"guanqialibao_3"
|
"guanqialibao_2"
|
||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"id": 3,
|
"id": 3,
|
||||||
@ -43,7 +45,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@ -59,7 +62,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"id": 5,
|
"id": 5,
|
||||||
@ -75,7 +79,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"id": 6,
|
"id": 6,
|
||||||
@ -91,7 +96,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"id": 7,
|
"id": 7,
|
||||||
@ -107,7 +113,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"id": 8,
|
"id": 8,
|
||||||
@ -123,7 +130,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"id": 9,
|
"id": 9,
|
||||||
@ -139,7 +147,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"10": {
|
"10": {
|
||||||
"id": 10,
|
"id": 10,
|
||||||
@ -155,7 +164,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"11": {
|
"11": {
|
||||||
"id": 11,
|
"id": 11,
|
||||||
@ -171,7 +181,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"12": {
|
"12": {
|
||||||
"id": 12,
|
"id": 12,
|
||||||
@ -187,7 +198,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"13": {
|
"13": {
|
||||||
"id": 13,
|
"id": 13,
|
||||||
@ -203,7 +215,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"14": {
|
"14": {
|
||||||
"id": 14,
|
"id": 14,
|
||||||
@ -219,7 +232,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"15": {
|
"15": {
|
||||||
"id": 15,
|
"id": 15,
|
||||||
@ -235,7 +249,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"16": {
|
"16": {
|
||||||
"id": 16,
|
"id": 16,
|
||||||
@ -251,7 +266,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"17": {
|
"17": {
|
||||||
"id": 17,
|
"id": 17,
|
||||||
@ -267,7 +283,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"18": {
|
"18": {
|
||||||
"id": 18,
|
"id": 18,
|
||||||
@ -283,7 +300,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "gkts"
|
||||||
},
|
},
|
||||||
"101": {
|
"101": {
|
||||||
"id": 101,
|
"id": 101,
|
||||||
@ -302,7 +320,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 86400,
|
"displayCD": 86400,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "sclb"
|
||||||
},
|
},
|
||||||
"102": {
|
"102": {
|
||||||
"id": 102,
|
"id": 102,
|
||||||
@ -321,7 +340,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 86400,
|
"displayCD": 86400,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "sclb"
|
||||||
},
|
},
|
||||||
"103": {
|
"103": {
|
||||||
"id": 103,
|
"id": 103,
|
||||||
@ -340,7 +360,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 86400,
|
"displayCD": 86400,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "sclb"
|
||||||
},
|
},
|
||||||
"104": {
|
"104": {
|
||||||
"id": 104,
|
"id": 104,
|
||||||
@ -359,7 +380,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 86400,
|
"displayCD": 86400,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "sclb"
|
||||||
},
|
},
|
||||||
"401": {
|
"401": {
|
||||||
"id": 401,
|
"id": 401,
|
||||||
@ -373,7 +395,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"402": {
|
"402": {
|
||||||
"id": 402,
|
"id": 402,
|
||||||
@ -387,7 +410,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"403": {
|
"403": {
|
||||||
"id": 403,
|
"id": 403,
|
||||||
@ -402,7 +426,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"404": {
|
"404": {
|
||||||
"id": 404,
|
"id": 404,
|
||||||
@ -417,7 +442,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"405": {
|
"405": {
|
||||||
"id": 405,
|
"id": 405,
|
||||||
@ -432,7 +458,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"406": {
|
"406": {
|
||||||
"id": 406,
|
"id": 406,
|
||||||
@ -447,7 +474,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"407": {
|
"407": {
|
||||||
"id": 407,
|
"id": 407,
|
||||||
@ -462,7 +490,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"408": {
|
"408": {
|
||||||
"id": 408,
|
"id": 408,
|
||||||
@ -477,7 +506,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"409": {
|
"409": {
|
||||||
"id": 409,
|
"id": 409,
|
||||||
@ -492,7 +522,8 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"410": {
|
"410": {
|
||||||
"id": 410,
|
"id": 410,
|
||||||
@ -507,12 +538,45 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
},
|
},
|
||||||
"411": {
|
"411": {
|
||||||
"id": 411,
|
"id": 411,
|
||||||
"type": 5,
|
"type": 5,
|
||||||
"typeName": "tuisonglibao_name_1",
|
"typeName": "tuisonglibao_name_1",
|
||||||
|
"num": [
|
||||||
|
76
|
||||||
|
],
|
||||||
|
"payId": [
|
||||||
|
"lv76_1",
|
||||||
|
"lv76_2"
|
||||||
|
],
|
||||||
|
"time": 3600,
|
||||||
|
"displayCD": 3600,
|
||||||
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
|
},
|
||||||
|
"412": {
|
||||||
|
"id": 412,
|
||||||
|
"type": 5,
|
||||||
|
"typeName": "tuisonglibao_name_1",
|
||||||
|
"num": [
|
||||||
|
79
|
||||||
|
],
|
||||||
|
"payId": [
|
||||||
|
"lv79_1",
|
||||||
|
"lv79_2"
|
||||||
|
],
|
||||||
|
"time": 3600,
|
||||||
|
"displayCD": 3600,
|
||||||
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
|
},
|
||||||
|
"413": {
|
||||||
|
"id": 413,
|
||||||
|
"type": 5,
|
||||||
|
"typeName": "tuisonglibao_name_1",
|
||||||
"num": [
|
"num": [
|
||||||
82
|
82
|
||||||
],
|
],
|
||||||
@ -522,6 +586,7 @@
|
|||||||
],
|
],
|
||||||
"time": 3600,
|
"time": 3600,
|
||||||
"displayCD": 3600,
|
"displayCD": 3600,
|
||||||
"scale": 3000
|
"scale": 3000,
|
||||||
|
"icon": "djlb"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1773,6 +1773,24 @@ type gc_yuyuemail = {
|
|||||||
'prize': { "a": string, "t": string, "n": number, [x: string]: any }[]
|
'prize': { "a": string, "t": string, "n": number, [x: string]: any }[]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type gc_push_gift = {
|
||||||
|
[k: string]: {
|
||||||
|
/**礼包id*/
|
||||||
|
id: number
|
||||||
|
/**礼包类型*/
|
||||||
|
type: number
|
||||||
|
/**礼包参数*/
|
||||||
|
num: any[]
|
||||||
|
/**购买id*/
|
||||||
|
payId: string[]
|
||||||
|
/**持续时间*/
|
||||||
|
time: number
|
||||||
|
/**冷却时间*/
|
||||||
|
displayCD: number
|
||||||
|
/**显示返利比*/
|
||||||
|
scale: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type gcType = {
|
type gcType = {
|
||||||
[key: string]: any
|
[key: string]: any
|
||||||
@ -1922,6 +1940,7 @@ type gcType = {
|
|||||||
kfcb_content: gc_kfcb_content
|
kfcb_content: gc_kfcb_content
|
||||||
kfcb_prize: gc_kfcb_prize
|
kfcb_prize: gc_kfcb_prize
|
||||||
yuyuemail: gc_yuyuemail
|
yuyuemail: gc_yuyuemail
|
||||||
|
tuisonglibao: gc_push_gift
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ class Lng {
|
|||||||
huoqupaihang: "huoqupaihang";
|
huoqupaihang: "huoqupaihang";
|
||||||
wucigonghui: "wucigonghui";
|
wucigonghui: "wucigonghui";
|
||||||
nameyicunzai: "nameyicunzai";
|
nameyicunzai: "nameyicunzai";
|
||||||
|
ljlibaotips_8:"ljlibaotips_8";
|
||||||
|
|
||||||
"11111" = "globalThis.lng.chat_1"
|
"11111" = "globalThis.lng.chat_1"
|
||||||
// return call.error('', { code: -3, message: globalThis.lng.chat_2 });
|
// return call.error('', { code: -3, message: globalThis.lng.chat_2 });
|
||||||
|
@ -21,6 +21,8 @@ import {ResOpen as ResOpenZhoulibao} from '../shared/protocols/event/zhoulibao/P
|
|||||||
import {ResOpen as ResOpenZixuanlibao} from '../shared/protocols/event/zixuanlibao/PtlOpen';
|
import {ResOpen as ResOpenZixuanlibao} from '../shared/protocols/event/zixuanlibao/PtlOpen';
|
||||||
import {ResOpen as ResOpenKaifujingsai} from '../shared/protocols/kaifujingsai/PtlOpen';
|
import {ResOpen as ResOpenKaifujingsai} from '../shared/protocols/kaifujingsai/PtlOpen';
|
||||||
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 ResOpenLeiChongLiBao} from '../shared/protocols/event/leichonglibao/PtlOpen';
|
||||||
|
|
||||||
export type eventType = {
|
export type eventType = {
|
||||||
shouchong: {
|
shouchong: {
|
||||||
@ -50,7 +52,11 @@ export type eventType = {
|
|||||||
qirichongzhi: Omit<ResOpenQirichongzhi, 'finished'>;
|
qirichongzhi: Omit<ResOpenQirichongzhi, 'finished'>;
|
||||||
jierihuodong: Omit<ResOpenJierihuodong, 'taskFinish'> & { refreshTime: number; };
|
jierihuodong: Omit<ResOpenJierihuodong, 'taskFinish'> & { refreshTime: number; };
|
||||||
kaifujingsai: ResOpenKaifujingsai;
|
kaifujingsai: ResOpenKaifujingsai;
|
||||||
zhoumolibao: ResOpenZhoumolibao & { refreshTime: number; }
|
zhoumolibao: ResOpenZhoumolibao & { refreshTime: number; };
|
||||||
|
pobinglibao: ResOpenPobinglibao
|
||||||
|
payForDiamond: {
|
||||||
|
[time: number]: number
|
||||||
|
}
|
||||||
} & {
|
} & {
|
||||||
[k: `${number}jijin`]: ResOpenYuedujijin;
|
[k: `${number}jijin`]: ResOpenYuedujijin;
|
||||||
[k: `yangchengmubiao${number}`]: yangchengmubiao;
|
[k: `yangchengmubiao${number}`]: yangchengmubiao;
|
||||||
@ -60,6 +66,7 @@ export type eventType = {
|
|||||||
[k: `zixuanlibao${number}`]: ResOpenZixuanlibao;
|
[k: `zixuanlibao${number}`]: ResOpenZixuanlibao;
|
||||||
[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 };
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CollectionEvent<T extends keyof eventType> = {
|
export type CollectionEvent<T extends keyof eventType> = {
|
||||||
|
13
src/module/collection_pushgift.ts
Normal file
13
src/module/collection_pushgift.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import {ObjectId} from "mongodb";
|
||||||
|
import {ResOpen} from "../shared/protocols/pushgift/PtlOpen";
|
||||||
|
|
||||||
|
export type Gift = {
|
||||||
|
id: string
|
||||||
|
uid: string
|
||||||
|
buy: number[]
|
||||||
|
ctime: number
|
||||||
|
passTime: number
|
||||||
|
ext_data: { [key: string]: any }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type CollectionPushGift = Gift & { _id: ObjectId };
|
@ -59,6 +59,7 @@ import {CollectionPlayerBehavior} from "./collection_player_behavior";
|
|||||||
import {CollectionRmbuse} from "./collection_rmbuse";
|
import {CollectionRmbuse} from "./collection_rmbuse";
|
||||||
import {CollectionFightLog} from "./collection_fightLog";
|
import {CollectionFightLog} from "./collection_fightLog";
|
||||||
import {CollectionShop} from "./collection_shop";
|
import {CollectionShop} from "./collection_shop";
|
||||||
|
import {CollectionPushGift} from "./collection_pushgift";
|
||||||
|
|
||||||
export type MongodbCollections = {
|
export type MongodbCollections = {
|
||||||
user: CollectionUser;
|
user: CollectionUser;
|
||||||
@ -131,4 +132,5 @@ export type MongodbCollections = {
|
|||||||
rmbuse: CollectionRmbuse
|
rmbuse: CollectionRmbuse
|
||||||
fightLog: CollectionFightLog
|
fightLog: CollectionFightLog
|
||||||
shop: CollectionShop
|
shop: CollectionShop
|
||||||
|
pushgift:CollectionPushGift
|
||||||
};
|
};
|
@ -9,6 +9,7 @@ import {HeroFun} from './hero';
|
|||||||
import {UserFun} from './user';
|
import {UserFun} from './user';
|
||||||
import {re, string} from "mathjs";
|
import {re, string} from "mathjs";
|
||||||
import {getGud} from './gud';
|
import {getGud} from './gud';
|
||||||
|
import {PushGiftFun} from "./pushgift";
|
||||||
|
|
||||||
type fightType = 'tanxian' | 'pata' | 'jjc' | 'gbtx' | 'qjzzd' | 'meirishilian' | 'wzrycross';
|
type fightType = 'tanxian' | 'pata' | 'jjc' | 'gbtx' | 'qjzzd' | 'meirishilian' | 'wzrycross';
|
||||||
|
|
||||||
@ -86,9 +87,16 @@ export class FightFun {
|
|||||||
|
|
||||||
/**挑战竞技场 */
|
/**挑战竞技场 */
|
||||||
static async fightJJc(call: ApiCall, rankInfo: rankInfo) {
|
static async fightJJc(call: ApiCall, rankInfo: rankInfo) {
|
||||||
|
|
||||||
if (rankInfo.player.uid.indexOf('npc_') != -1) return await this.fightNpc(call, G.gc.jjc_npc[rankInfo.player.uid].npcId, 'jjc', await this.getPlayerFightData(call.conn.uid));
|
if (rankInfo.player.uid.indexOf('npc_') != -1) return await this.fightNpc(call, G.gc.jjc_npc[rankInfo.player.uid].npcId, 'jjc', await this.getPlayerFightData(call.conn.uid));
|
||||||
return this.fight([await this.getPlayerFightData(call.conn.uid), await this.getPlayerFightData(rankInfo.player.uid)]);
|
|
||||||
|
let result = this.fight([await this.getPlayerFightData(call.conn.uid), await this.getPlayerFightData(rankInfo.player.uid)]);
|
||||||
|
|
||||||
|
// 竞技场 战败触发推送礼包
|
||||||
|
if (result.winSide != 0) {
|
||||||
|
PushGiftFun.chkLoseGift(call.uid)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
/**挑战npc */
|
/**挑战npc */
|
||||||
@ -106,7 +114,13 @@ export class FightFun {
|
|||||||
|
|
||||||
let npc = formatNpcData(npcId);
|
let npc = formatNpcData(npcId);
|
||||||
|
|
||||||
return this.fight([my, npc], 30, 'pve');
|
let result = this.fight([my, npc], 30, 'pve');
|
||||||
|
|
||||||
|
// 主线 爬塔 战败触发推送礼包
|
||||||
|
if (result.winSide != 0 && ["tanxian", "pata"].includes(type)) {
|
||||||
|
PushGiftFun.chkLoseGift(call.uid)
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -14,9 +14,10 @@ import {PublicShared} from '../shared/public/public';
|
|||||||
import {HeroFun} from './hero';
|
import {HeroFun} from './hero';
|
||||||
import {ShiwuFun} from './shiwu';
|
import {ShiwuFun} from './shiwu';
|
||||||
import {UserFun} from './user';
|
import {UserFun} from './user';
|
||||||
import { getItemByItemId, getItemNum } from './item';
|
import {getItemByItemId, getItemNum} from './item';
|
||||||
import { getGud, setGud } from './gud';
|
import {getGud, setGud} from './gud';
|
||||||
import {addGameLog} from "../gameLog";
|
import {addGameLog} from "../gameLog";
|
||||||
|
import {PushGiftFun} from "./pushgift";
|
||||||
|
|
||||||
|
|
||||||
export type call = {
|
export type call = {
|
||||||
@ -35,7 +36,7 @@ export type call = {
|
|||||||
};
|
};
|
||||||
service: { name: string };
|
service: { name: string };
|
||||||
addEventMsg: ApiCall['addEventMsg'];
|
addEventMsg: ApiCall['addEventMsg'];
|
||||||
req: { }
|
req: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
export class PlayerFun {
|
export class PlayerFun {
|
||||||
@ -66,6 +67,8 @@ export class PlayerFun {
|
|||||||
|
|
||||||
if (has < atn.n) {
|
if (has < atn.n) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
// 消耗不足 触发推送礼包
|
||||||
|
PushGiftFun.chkItemGift(call.uid, atn)
|
||||||
throw new TsrpcError('', {code: -104, atn: atn});
|
throw new TsrpcError('', {code: -104, atn: atn});
|
||||||
} else {
|
} else {
|
||||||
return {isOk: false, atn: atn};
|
return {isOk: false, atn: atn};
|
||||||
@ -148,10 +151,10 @@ export class PlayerFun {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//attr里的指定字段的值,不能小于0
|
//attr里的指定字段的值,不能小于0
|
||||||
static fixAttrLteZero(t:string, val:number){
|
static fixAttrLteZero(t: string, val: number) {
|
||||||
if(['jinbi','rmbmoney','payExp','nexp'].includes(t) && val < 0){
|
if (['jinbi', 'rmbmoney', 'payExp', 'nexp'].includes(t) && val < 0) {
|
||||||
return 0
|
return 0
|
||||||
}else{
|
} else {
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,6 +201,16 @@ export class PlayerFun {
|
|||||||
// 修改属性应在相关奖励领取之前,否则奖励内获取的用户数据是旧数据
|
// 修改属性应在相关奖励领取之前,否则奖励内获取的用户数据是旧数据
|
||||||
// await this.changeAttr(call.conn.uid, change);
|
// await this.changeAttr(call.conn.uid, change);
|
||||||
call.addEventMsg('msg_s2c/PlayerChange', change);
|
call.addEventMsg('msg_s2c/PlayerChange', change);
|
||||||
|
|
||||||
|
// 等级改变 触发推送礼包
|
||||||
|
if (change["lv"]) {
|
||||||
|
PushGiftFun.chkLvGift(call.uid, change["lv"])
|
||||||
|
}
|
||||||
|
// 关卡改变 触发推送礼包
|
||||||
|
if (change["mapId"]) {
|
||||||
|
PushGiftFun.chkLevelGift(call.uid, change["mapId"])
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static async changeAttrLog(uid: string, change, atn, before) {
|
static async changeAttrLog(uid: string, change, atn, before) {
|
||||||
@ -216,9 +229,9 @@ export class PlayerFun {
|
|||||||
|
|
||||||
static async changeAttr(uid: string, change: Partial<player>) {
|
static async changeAttr(uid: string, change: Partial<player>) {
|
||||||
//for (let k in change) {
|
//for (let k in change) {
|
||||||
//G.redis.set('user', uid, k as any, change[k]);
|
//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});
|
||||||
|
|
||||||
@ -299,7 +312,11 @@ export class PlayerFun {
|
|||||||
|
|
||||||
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}, {"filter": upObj.filter, "update": upObj.update, "options": upObj.options})
|
addGameLog(call.uid, "_itemChange", {"additem": 1}, {
|
||||||
|
"filter": upObj.filter,
|
||||||
|
"update": upObj.update,
|
||||||
|
"options": upObj.options
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
if (item.num + atn.n <= 0) {
|
if (item.num + atn.n <= 0) {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
@ -311,7 +328,7 @@ export class PlayerFun {
|
|||||||
//await G.redis.del('item', call.uid, atn.t);
|
//await G.redis.del('item', call.uid, atn.t);
|
||||||
//await G.mongodb.collection('item').deleteOne({uid: call.uid, itemId: 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相关
|
////去掉item Redis相关
|
||||||
@ -327,7 +344,12 @@ export class PlayerFun {
|
|||||||
num: item.num + atn.n,
|
num: item.num + atn.n,
|
||||||
lastTime: upObj.update.$set.lastTime
|
lastTime: upObj.update.$set.lastTime
|
||||||
});
|
});
|
||||||
addGameLog(call.uid, "_itemChange",{"attritem":1}, {"filter": upObj.filter, "update": upObj.update, "options": upObj.options,newNum:item.num + atn.n})
|
addGameLog(call.uid, "_itemChange", {"attritem": 1}, {
|
||||||
|
"filter": upObj.filter,
|
||||||
|
"update": upObj.update,
|
||||||
|
"options": upObj.options,
|
||||||
|
newNum: item.num + atn.n
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -353,7 +375,7 @@ export class PlayerFun {
|
|||||||
}).reduce((a, b) => a.concat(b));
|
}).reduce((a, b) => a.concat(b));
|
||||||
|
|
||||||
let result = await G.mongodb.collection('equip').insertMany(insertData);
|
let result = await G.mongodb.collection('equip').insertMany(insertData);
|
||||||
addGameLog(call.uid, "_addEquip",{}, insertData)
|
addGameLog(call.uid, "_addEquip", {}, insertData)
|
||||||
|
|
||||||
insertData.forEach((v, key) => {
|
insertData.forEach((v, key) => {
|
||||||
let id = result.insertedIds[key].toHexString();
|
let id = result.insertedIds[key].toHexString();
|
||||||
@ -400,7 +422,7 @@ export class PlayerFun {
|
|||||||
G.mongodb.collection('equip').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
G.mongodb.collection('equip').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
||||||
call.addEventMsg('msg_s2c/EquipChange', _id, {num: 0});
|
call.addEventMsg('msg_s2c/EquipChange', _id, {num: 0});
|
||||||
|
|
||||||
addGameLog(call.uid, "_cutEquip",{}, {_id:_id})
|
addGameLog(call.uid, "_cutEquip", {}, {_id: _id})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,7 +450,7 @@ export class PlayerFun {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let result = await G.mongodb.collection('hero').insertMany(insertData);
|
let result = await G.mongodb.collection('hero').insertMany(insertData);
|
||||||
addGameLog(call.uid, "_addHero",{}, insertData)
|
addGameLog(call.uid, "_addHero", {}, insertData)
|
||||||
|
|
||||||
for (let key = 0; key < insertData.length; key++) {
|
for (let key = 0; key < insertData.length; key++) {
|
||||||
let v = insertData[key]
|
let v = insertData[key]
|
||||||
@ -483,7 +505,7 @@ export class PlayerFun {
|
|||||||
G.redis.del('hero', call.uid, _id);
|
G.redis.del('hero', call.uid, _id);
|
||||||
G.mongodb.collection('hero').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
G.mongodb.collection('hero').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
||||||
call.addEventMsg('msg_s2c/HeroChange', _id, {num: 0});
|
call.addEventMsg('msg_s2c/HeroChange', _id, {num: 0});
|
||||||
addGameLog(call.uid, "_cutHero",{}, {_id:_id})
|
addGameLog(call.uid, "_cutHero", {}, {_id: _id})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,7 +536,7 @@ export class PlayerFun {
|
|||||||
}).reduce((a, b) => a.concat(b));
|
}).reduce((a, b) => a.concat(b));
|
||||||
|
|
||||||
let result = await G.mongodb.collection('shiwu').insertMany(insertData);
|
let result = await G.mongodb.collection('shiwu').insertMany(insertData);
|
||||||
addGameLog(call.uid, "_addShiWu",{}, insertData)
|
addGameLog(call.uid, "_addShiWu", {}, insertData)
|
||||||
|
|
||||||
insertData.forEach((v, key) => {
|
insertData.forEach((v, key) => {
|
||||||
let id = result.insertedIds[key].toHexString();
|
let id = result.insertedIds[key].toHexString();
|
||||||
@ -546,7 +568,7 @@ export class PlayerFun {
|
|||||||
// G.redis.del('shiwu', call.uid, _id);
|
// 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})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,7 +590,7 @@ export class PlayerFun {
|
|||||||
}).reduce((a, b) => a.concat(b));
|
}).reduce((a, b) => a.concat(b));
|
||||||
|
|
||||||
let result = await G.mongodb.collection('peijian').insertMany(insertData);
|
let result = await G.mongodb.collection('peijian').insertMany(insertData);
|
||||||
addGameLog(call.uid, "_addPeiJian",{}, insertData)
|
addGameLog(call.uid, "_addPeiJian", {}, insertData)
|
||||||
|
|
||||||
insertData.forEach((v, key) => {
|
insertData.forEach((v, key) => {
|
||||||
let {_id, uid, ...ops} = v;
|
let {_id, uid, ...ops} = v;
|
||||||
@ -609,7 +631,7 @@ export class PlayerFun {
|
|||||||
G.redis.del('peijian', call.uid, _id);
|
G.redis.del('peijian', call.uid, _id);
|
||||||
G.mongodb.collection('peijian').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
G.mongodb.collection('peijian').deleteOne({uid: call.uid, _id: new ObjectId(_id)});
|
||||||
call.addEventMsg('msg_s2c/PeijianChange', _id, {num: 0});
|
call.addEventMsg('msg_s2c/PeijianChange', _id, {num: 0});
|
||||||
addGameLog(call.uid, "_cutPeijian",{}, {_id:_id})
|
addGameLog(call.uid, "_cutPeijian", {}, {_id: _id})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
179
src/public/pushgift.ts
Normal file
179
src/public/pushgift.ts
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
import {PayFun} from "./pay";
|
||||||
|
|
||||||
|
const PushGiftType = {
|
||||||
|
LevelGift: 1, // 关卡推送
|
||||||
|
ItemGift: 2, // 道具推送
|
||||||
|
LoseGift: 3, // 战败推送
|
||||||
|
RecruitGift: 4, // 十连推送
|
||||||
|
LvGift: 5, // 等级推送
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PushGiftFun {
|
||||||
|
|
||||||
|
static async getGift(uid: string) {
|
||||||
|
// 查询所有礼包
|
||||||
|
return (await G.mongodb.collection("pushgift").find({
|
||||||
|
uid: uid
|
||||||
|
}).toArray()).map((i) => {
|
||||||
|
let {_id, ...gift} = i;
|
||||||
|
return gift
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
static async chkItemGift(uid: string, atn: atn) {
|
||||||
|
let gift_ids = [];
|
||||||
|
for (let id in G.gc.tuisonglibao) {
|
||||||
|
let conf = G.gc.tuisonglibao[id];
|
||||||
|
if (conf.type == PushGiftType.ItemGift && conf.num[0].a == atn.a && conf.num[0].t == atn.t) {
|
||||||
|
gift_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gift_ids.length <= 0) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.pushGift(uid, gift_ids)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async chkLevelGift(uid: string, level: number) {
|
||||||
|
let gift_ids = [];
|
||||||
|
for (let id in G.gc.tuisonglibao) {
|
||||||
|
let conf = G.gc.tuisonglibao[id];
|
||||||
|
if (conf.type == PushGiftType.LevelGift && conf.num[0] == level) {
|
||||||
|
gift_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gift_ids.length <= 0) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.pushGift(uid, gift_ids)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async chkLvGift(uid: string, lv: number) {
|
||||||
|
let gift_ids = [];
|
||||||
|
for (let id in G.gc.tuisonglibao) {
|
||||||
|
let conf = G.gc.tuisonglibao[id];
|
||||||
|
if (conf.type == PushGiftType.LvGift && conf.num[0] == lv) {
|
||||||
|
gift_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gift_ids.length <= 0) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.pushGift(uid, gift_ids)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async chkLoseGift(uid: string) {
|
||||||
|
let gift_ids = [];
|
||||||
|
for (let id in G.gc.tuisonglibao) {
|
||||||
|
let conf = G.gc.tuisonglibao[id];
|
||||||
|
if (conf.type == PushGiftType.LoseGift) {
|
||||||
|
gift_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gift_ids.length <= 0) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.pushGift(uid, gift_ids)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async chkRecruitGift(uid: string) {
|
||||||
|
let gift_ids = [];
|
||||||
|
for (let id in G.gc.tuisonglibao) {
|
||||||
|
let conf = G.gc.tuisonglibao[id];
|
||||||
|
if (conf.type == PushGiftType.RecruitGift) {
|
||||||
|
gift_ids.push(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gift_ids.length <= 0) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
this.pushGift(uid, gift_ids)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async pushGift(uid: string, gift_ids: string[]) {
|
||||||
|
let gifts = {};
|
||||||
|
(await this.getGift(uid)).forEach(i => gifts[i.id] = i)
|
||||||
|
for (let gift_id of gift_ids) {
|
||||||
|
let conf = G.gc.tuisonglibao[gift_id];
|
||||||
|
if (gifts[gift_id] && conf.displayCD > 0 && gifts[gift_id].ctime + conf.displayCD > G.time) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if (conf.type == PushGiftType.RecruitGift) {
|
||||||
|
if (gifts[gift_id]) {
|
||||||
|
if (gift_ids[gift_id].ext_data.num + 1 >= conf.num[0]) {
|
||||||
|
this.addGift(uid, gift_id, {num: 0})
|
||||||
|
} else {
|
||||||
|
G.mongodb.collection("pushgift").updateOne({
|
||||||
|
uid: uid, id: gift_id
|
||||||
|
}, {"$inc": {"ext_data.num": 1}})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 招募礼包不存在 初始化数据 记录招募次数
|
||||||
|
G.mongodb.collection("pushgift").updateOne({
|
||||||
|
uid: uid, id: gift_id
|
||||||
|
}, {
|
||||||
|
$set: {
|
||||||
|
ctime: 0,
|
||||||
|
passTime: 0,
|
||||||
|
ext_data: {num: 1},
|
||||||
|
buy: conf.payId.map(() => 0),
|
||||||
|
}
|
||||||
|
}, {upsert: true})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.addGift(uid, gift_id, {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static async addGift(uid: string, giftid: string, ext_data: { [key: string]: any }) {
|
||||||
|
let conf = G.gc.tuisonglibao[giftid];
|
||||||
|
// 更新礼包
|
||||||
|
await G.mongodb.collection("pushgift").updateOne({
|
||||||
|
uid: uid, id: giftid
|
||||||
|
}, {
|
||||||
|
$set: {
|
||||||
|
ctime: G.time,
|
||||||
|
ext_data: ext_data,
|
||||||
|
passTime: G.time + conf.time,
|
||||||
|
buy: conf.payId.map(() => 0),
|
||||||
|
}
|
||||||
|
}, {upsert: true})
|
||||||
|
|
||||||
|
// 删除购买记录
|
||||||
|
PayFun.delPayLog(uid, ...conf.payId.map(i => {
|
||||||
|
return {payId: i, val: []}
|
||||||
|
}))
|
||||||
|
// 推送客户端消息
|
||||||
|
G.server.sendMsgByUid(uid, "msg_s2c/PushGiftChange", conf.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static async buy(uid: string, payId: string) {
|
||||||
|
// 购买礼包
|
||||||
|
let gift;
|
||||||
|
for (let gift_id in G.gc.tuisonglibao) {
|
||||||
|
let temp = G.gc.tuisonglibao[gift_id];
|
||||||
|
if (temp.payId.includes(payId)) {
|
||||||
|
gift = temp;
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!gift) return;
|
||||||
|
let index = gift.payId.indexOf(payId);
|
||||||
|
let info = await G.mongodb.collection("pushgift").findOne({
|
||||||
|
uid: uid, id: gift.id.toString()
|
||||||
|
})
|
||||||
|
if (info.passTime >= G.time) {
|
||||||
|
await G.mongodb.collection("pushgift").updateOne({
|
||||||
|
uid: uid, id: gift.id.toString()
|
||||||
|
}, {$inc: {[`buy.${index}`]: 1}})
|
||||||
|
// 推送客户端消息
|
||||||
|
G.server.sendMsgByUid(uid, "msg_s2c/PushGiftChange", gift.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -37,7 +37,8 @@ export type schedulerType =
|
|||||||
| 'hbzb_zbs_clear'
|
| 'hbzb_zbs_clear'
|
||||||
| 'hbzb_zbs_group'
|
| 'hbzb_zbs_group'
|
||||||
| 'wzry_zuanshi16to8'
|
| 'wzry_zuanshi16to8'
|
||||||
| "cross_email_pull";
|
| "cross_email_pull"
|
||||||
|
| "xiaofeijingsai_local_ctor";
|
||||||
|
|
||||||
export class SchedulerManage {
|
export class SchedulerManage {
|
||||||
static logTime = false;
|
static logTime = false;
|
||||||
@ -102,7 +103,7 @@ export abstract class Scheduler {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init(){
|
init() {
|
||||||
Scheduler.schedulers.push(this);
|
Scheduler.schedulers.push(this);
|
||||||
this.read().then(_ => {
|
this.read().then(_ => {
|
||||||
this.log(`state: 准备完毕 预计下次执行时间:${new Date(this.startTime * 1000).format("YYYY-MM-DD hh:mm:ss")}`);
|
this.log(`state: 准备完毕 预计下次执行时间:${new Date(this.startTime * 1000).format("YYYY-MM-DD hh:mm:ss")}`);
|
||||||
|
69
src/public/scheduler/scheduler_xiaofeijingsai.ts
Normal file
69
src/public/scheduler/scheduler_xiaofeijingsai.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import {Scheduler, schedulerType} from './scheduler';
|
||||||
|
import {PublicShared} from "../../shared/public/public";
|
||||||
|
import {Wjjl} from "../../module/collection_wjjl";
|
||||||
|
import {ZhanLingTasks} from "../zhanling";
|
||||||
|
import {setGud} from '../gud';
|
||||||
|
import {HuoDongFun} from "../huodongfun";
|
||||||
|
import {EmailFun} from "../email";
|
||||||
|
import {sortRankList} from "../../api_s2c/event/xiaofeijingsai/ApiOpen";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费竞赛发奖定时器
|
||||||
|
* 每天0点5分检测活动结束
|
||||||
|
*/
|
||||||
|
export class Scheduler_xfjs_Local_Ctor extends Scheduler {
|
||||||
|
id: schedulerType = 'xiaofeijingsai_local_ctor';
|
||||||
|
time = 300;
|
||||||
|
name = '消费竞赛发奖定时器';
|
||||||
|
type: 'day' | 'week' = 'day';
|
||||||
|
|
||||||
|
// todo 测试
|
||||||
|
// get nextTime() {
|
||||||
|
// return G.time + 30;
|
||||||
|
// }
|
||||||
|
|
||||||
|
async read() {
|
||||||
|
await this.ctorStartTime();
|
||||||
|
this.isReady = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async start() {
|
||||||
|
let _hd = (await G.mongodb.collection('hdinfo').find({
|
||||||
|
htype: 11,
|
||||||
|
ttype: 0,
|
||||||
|
etime: {$lt: G.time, $gt: 99999999},
|
||||||
|
$or: [{isSendPrize: {$exists: false}}, {isSendPrize: false}],
|
||||||
|
}).sort({etime: -1}).limit(1).toArray())[0]
|
||||||
|
|
||||||
|
if (!_hd) return
|
||||||
|
|
||||||
|
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 ranklist = sortRankList(_hd.data.rank, list)
|
||||||
|
|
||||||
|
R.forEach(i => {
|
||||||
|
let users = R.slice(i.rank[0] - 1, i.rank[1])(ranklist)
|
||||||
|
users.map(v => {
|
||||||
|
if (v._id == 'system') return
|
||||||
|
EmailFun.addEmail({
|
||||||
|
uid: v._id,
|
||||||
|
type: 'system',
|
||||||
|
title: _hd.data.mailTitle,
|
||||||
|
content: _hd.data.mailDes,
|
||||||
|
prize: i.prize,
|
||||||
|
contentInsertArr: [v.rank + 1]
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})(_hd.data.rank)
|
||||||
|
|
||||||
|
await G.mongodb.collection('hdinfo').findOneAndUpdate({hdid: _hd.hdid}, {$set: {isSendPrize: true}})
|
||||||
|
}
|
||||||
|
}
|
@ -1,35 +0,0 @@
|
|||||||
import {MongoClient} from "mongodb";
|
|
||||||
import * as ramda from 'ramda'
|
|
||||||
import fs from "fs";
|
|
||||||
|
|
||||||
let R = ramda
|
|
||||||
|
|
||||||
async function start() {
|
|
||||||
//连接mongodb
|
|
||||||
let client = await MongoClient.connect('mongodbUrl');
|
|
||||||
|
|
||||||
console.log('链接成功')
|
|
||||||
|
|
||||||
let a: any = {}
|
|
||||||
|
|
||||||
for (let i = 1; i < 20; i++) {
|
|
||||||
let dbName = `blacklagoon_s${i}`
|
|
||||||
console.log(dbName)
|
|
||||||
let mongodb = client.db(dbName);
|
|
||||||
a[dbName] = {};
|
|
||||||
(await mongodb.collection('email').find({type: 'gm', uid: 'system'}).toArray()).map(i => {
|
|
||||||
a[dbName][i.title] = R.compose(R.map(i => ({[i[0]]: i.length})), R.values, R.filter(i => i.length > 1), R.groupBy(i => i))(i.prizelist)
|
|
||||||
console.log(a[dbName][i.title])
|
|
||||||
})
|
|
||||||
console.log(dbName, '查询完成')
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync('tab.json', JSON.stringify(a, null, 2))
|
|
||||||
}
|
|
||||||
|
|
||||||
//定义全局变量
|
|
||||||
// ctor();
|
|
||||||
//启动服务
|
|
||||||
start().then(() => {
|
|
||||||
process.exit()
|
|
||||||
});
|
|
@ -505,7 +505,7 @@ export async function setDbIndexes() {
|
|||||||
index.key,
|
index.key,
|
||||||
option
|
option
|
||||||
);
|
);
|
||||||
console.log('创建索引成功', coll, index);
|
// console.log('创建索引成功', coll, index);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.codeName == 'IndexKeySpecsConflict') {
|
if (error.codeName == 'IndexKeySpecsConflict') {
|
||||||
//当相同索引存在,但是配置(如:unique expireAfterSeconds)不同时,会收到这个报错
|
//当相同索引存在,但是配置(如:unique expireAfterSeconds)不同时,会收到这个报错
|
||||||
@ -519,7 +519,7 @@ export async function setDbIndexes() {
|
|||||||
index.key,
|
index.key,
|
||||||
option
|
option
|
||||||
);
|
);
|
||||||
console.log('创建索引成功', coll, index);
|
// console.log('创建索引成功', coll, index);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('创建索引失败==>', coll, index, error.message);
|
console.log('创建索引失败==>', coll, index, error.message);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import { clusterRunOnce } from './clusterUtils';
|
|||||||
import { addListener } from './globalListener';
|
import { addListener } from './globalListener';
|
||||||
import { SchedulerManage } from './public/scheduler/scheduler';
|
import { SchedulerManage } from './public/scheduler/scheduler';
|
||||||
import {CrossEmailPull} from "./public/scheduler/scheduler_cross_email_pull";
|
import {CrossEmailPull} from "./public/scheduler/scheduler_cross_email_pull";
|
||||||
|
import {Scheduler_xfjs_Local_Ctor} from "./public/scheduler/scheduler_xiaofeijingsai";
|
||||||
export async function startAfter() {
|
export async function startAfter() {
|
||||||
|
|
||||||
//事件监听和定时器初始化
|
//事件监听和定时器初始化
|
||||||
@ -70,6 +71,7 @@ export async function startAfter() {
|
|||||||
new Scheduler_hbzb_zbs_local_prize().init();
|
new Scheduler_hbzb_zbs_local_prize().init();
|
||||||
new Scheduler_hbzb_zbs_local_ready().init();
|
new Scheduler_hbzb_zbs_local_ready().init();
|
||||||
new SchedulerKbzzAutoApply().init();
|
new SchedulerKbzzAutoApply().init();
|
||||||
|
new Scheduler_xfjs_Local_Ctor().init();
|
||||||
|
|
||||||
new SchedulerSlzdClean().init();
|
new SchedulerSlzdClean().init();
|
||||||
new SchedulerSlzdPrize().init();
|
new SchedulerSlzdPrize().init();
|
||||||
|
@ -98,6 +98,15 @@ function setWs(server: WsServer<ServiceType>) {
|
|||||||
|
|
||||||
//执行 API 接口实现之前
|
//执行 API 接口实现之前
|
||||||
server.flows.preApiCallFlow.push(async call => {
|
server.flows.preApiCallFlow.push(async call => {
|
||||||
|
// 临时停服维护方案
|
||||||
|
// let lng = {
|
||||||
|
// "zh-TW": "停服維護中,請等待!",
|
||||||
|
// "ko": "서버 점검 중, 잠시만 기다려 주세요.",
|
||||||
|
// "ja": "サーバーメンテナンス中、しばらくお待ちください。",
|
||||||
|
// "en": "Server under maintenance. Please wait.",
|
||||||
|
// }
|
||||||
|
// call.error("", {code: -1, message: lng[call.req.lng] || lng["ja"]})
|
||||||
|
// return null;
|
||||||
|
|
||||||
//是否短时间内重复请求某个api
|
//是否短时间内重复请求某个api
|
||||||
// let timeIntervalLimit = call.service.conf?.timeIntervalLimit == undefined ? 500 : call.service.conf?.timeIntervalLimit;
|
// let timeIntervalLimit = call.service.conf?.timeIntervalLimit == undefined ? 500 : call.service.conf?.timeIntervalLimit;
|
||||||
|
@ -1,151 +0,0 @@
|
|||||||
{
|
|
||||||
"hdid" : 91029302193,
|
|
||||||
"htype" : 8,
|
|
||||||
"stype" : 800,
|
|
||||||
"ttype" : 0,
|
|
||||||
"stime" : 1702396800,
|
|
||||||
"rtime" : 1703088000,
|
|
||||||
"etime" : 1703088000,
|
|
||||||
"name" : "christmas",
|
|
||||||
"icon" : "icon_xfdj",
|
|
||||||
"showtime" : "根据玩家注册时间,游戏返回时复写",
|
|
||||||
"data" : {
|
|
||||||
"task" : {
|
|
||||||
"1": {
|
|
||||||
"pval" : 1,
|
|
||||||
"stype" : "",
|
|
||||||
"cond": [],
|
|
||||||
"prize" : [
|
|
||||||
{
|
|
||||||
"a" : "item",
|
|
||||||
"t" : "1",
|
|
||||||
"n" : 500000
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"des" : "intr_cszl_des_1"
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
"pval" : 1,
|
|
||||||
"stype" : "101",
|
|
||||||
"cond": [],
|
|
||||||
"prize" : [
|
|
||||||
{
|
|
||||||
"a" : "item",
|
|
||||||
"t" : "1",
|
|
||||||
"n" : 500000
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"des" : "intr_cszl_des_1"
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
"pval" : 2,
|
|
||||||
"stype" : "101",
|
|
||||||
"cond": [],
|
|
||||||
"prize" : [
|
|
||||||
{
|
|
||||||
"a" : "item",
|
|
||||||
"t" : "1",
|
|
||||||
"n" : 500000
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"des" : "intr_cszl_des_1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gameneed": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"game": [0,1, 2, 3, 4, 5],
|
|
||||||
"gamefree": 3,
|
|
||||||
"zhanling":[{
|
|
||||||
"val": 1,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 2,
|
|
||||||
"pt": [{"a": "attr", "t":"rmbmoney", "n": 100}],
|
|
||||||
"gj": [{"a": "attr", "t":"rmbmoney", "n": 100},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 3,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},{
|
|
||||||
"val": 4,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 5,
|
|
||||||
"pt": [{"a": "attr", "t":"rmbmoney", "n": 100}],
|
|
||||||
"gj": [{"a": "attr", "t":"rmbmoney", "n": 100},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 6,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},{
|
|
||||||
"val": 7,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 8,
|
|
||||||
"pt": [{"a": "attr", "t":"rmbmoney", "n": 100}],
|
|
||||||
"gj": [{"a": "attr", "t":"rmbmoney", "n": 100},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"val": 9,
|
|
||||||
"pt": [{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
"gj": [{"a": "attr", "t":"jinbi", "n": 1},{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
}],
|
|
||||||
"zlpayid":"ycmb_1_1",
|
|
||||||
"libao": {
|
|
||||||
"1": {
|
|
||||||
"payid": "",
|
|
||||||
"buynum": 2,
|
|
||||||
"basep": [{"a": "attr", "t":"rmbmoney", "n": 1}],
|
|
||||||
"des" : "intr_cszl_des_1",
|
|
||||||
"dlz": [
|
|
||||||
{
|
|
||||||
"1": {"a": "attr", "t":"rmbmoney", "n": 1},
|
|
||||||
"2": {"a": "attr", "t":"rmbmoney", "n": 2},
|
|
||||||
"3": {"a": "attr", "t":"rmbmoney", "n": 3}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"1": {"a": "attr", "t":"rmbmoney", "n": 1},
|
|
||||||
"2": {"a": "attr", "t":"rmbmoney", "n": 2},
|
|
||||||
"3": {"a": "attr", "t":"rmbmoney", "n": 3}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
"payid": "ycmb_1_2",
|
|
||||||
"buynum": 2,
|
|
||||||
"basep": [{"a": "attr", "t":"rmbmoney", "n": 2}],
|
|
||||||
"des" : "intr_cszl_des_2",
|
|
||||||
"dlz": [
|
|
||||||
{
|
|
||||||
"1": {"a": "attr", "t":"rmbmoney", "n": 1},
|
|
||||||
"2": {"a": "attr", "t":"rmbmoney", "n": 2},
|
|
||||||
"3": {"a": "attr", "t":"rmbmoney", "n": 3}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"1": {"a": "attr", "t":"rmbmoney", "n": 1},
|
|
||||||
"2": {"a": "attr", "t":"rmbmoney", "n": 2},
|
|
||||||
"3": {"a": "attr", "t":"rmbmoney", "n": 3}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"qiandao": [
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}],
|
|
||||||
[{"a": "attr", "t":"jinbi", "n": 1}]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
8
src/shared/protocols/event/leichonglibao/PtlOpen.ts
Normal file
8
src/shared/protocols/event/leichonglibao/PtlOpen.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export type ReqOpen = {
|
||||||
|
hdid: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResOpen = {
|
||||||
|
sc: boolean // 自选奖励领取标识
|
||||||
|
buy: string[] // 特价礼包购买记录
|
||||||
|
}
|
10
src/shared/protocols/event/leichonglibao/PtlReceive.ts
Normal file
10
src/shared/protocols/event/leichonglibao/PtlReceive.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import {prizeType} from "../../type";
|
||||||
|
|
||||||
|
export interface ReqReceive {
|
||||||
|
hdid: number
|
||||||
|
select: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ResReceive {
|
||||||
|
prize: prizeType[]
|
||||||
|
}
|
12
src/shared/protocols/event/payForDiamond/PtlCanReceive.ts
Normal file
12
src/shared/protocols/event/payForDiamond/PtlCanReceive.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
export type ReqCanReceive = {
|
||||||
|
activityId?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ResCanReceive = {
|
||||||
|
payNum: number;
|
||||||
|
remaining?: number;
|
||||||
|
result: boolean;
|
||||||
|
price: number;
|
||||||
|
showOffList: any[];
|
||||||
|
gotAmount: number;
|
||||||
|
};
|
9
src/shared/protocols/event/payForDiamond/PtlReceive.ts
Normal file
9
src/shared/protocols/event/payForDiamond/PtlReceive.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export type ReqReceive = {
|
||||||
|
activityId: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ResReceive = {
|
||||||
|
amount: number,
|
||||||
|
timesRemaining?: number;
|
||||||
|
showOff?: boolean;
|
||||||
|
};
|
16
src/shared/protocols/event/pobinglibao/PtlOpen.ts
Normal file
16
src/shared/protocols/event/pobinglibao/PtlOpen.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* 破冰礼包
|
||||||
|
*/
|
||||||
|
export type ReqOpen = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ResOpen = {
|
||||||
|
record:{
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
||||||
|
buyLog:{
|
||||||
|
[k: string]: any;
|
||||||
|
}
|
||||||
|
};
|
11
src/shared/protocols/event/pobinglibao/PtlReceive.ts
Normal file
11
src/shared/protocols/event/pobinglibao/PtlReceive.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* 破冰礼包领奖
|
||||||
|
*/
|
||||||
|
export interface ReqReceive {
|
||||||
|
id: string
|
||||||
|
recId: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ResReceive {
|
||||||
|
|
||||||
|
}
|
18
src/shared/protocols/event/xiaofeijingsai/PtlOpen.ts
Normal file
18
src/shared/protocols/event/xiaofeijingsai/PtlOpen.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* 消费竞赛
|
||||||
|
*/
|
||||||
|
export type ReqOpen = {
|
||||||
|
limit?: number
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ResOpen = {
|
||||||
|
list: data[]
|
||||||
|
myData: data
|
||||||
|
};
|
||||||
|
|
||||||
|
type data = {
|
||||||
|
_id: string,
|
||||||
|
total: number,
|
||||||
|
rank: number,
|
||||||
|
player: any
|
||||||
|
}
|
@ -51,9 +51,10 @@ export type hongdianKey =
|
|||||||
| 'heishiMrjx'
|
| 'heishiMrjx'
|
||||||
| 'weixiuchang'
|
| 'weixiuchang'
|
||||||
| 'kaifujingsai'
|
| 'kaifujingsai'
|
||||||
| 'zhoumolibao';
|
| 'zhoumolibao'
|
||||||
|
| 'pobinglibao'
|
||||||
|
| 'payForDiamond'
|
||||||
|
| 'leichonglibao';
|
||||||
export type hongdianVal = {
|
export type hongdianVal = {
|
||||||
show?: boolean;
|
show?: boolean;
|
||||||
// 看功能需要
|
// 看功能需要
|
||||||
|
1
src/shared/protocols/msg_s2c/MsgPushGiftChange.ts
Normal file
1
src/shared/protocols/msg_s2c/MsgPushGiftChange.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type MsgPushGiftChange = number;
|
5
src/shared/protocols/pushgift/PtlItemNoEnough.ts
Normal file
5
src/shared/protocols/pushgift/PtlItemNoEnough.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export type ReqItemNoEnough = {
|
||||||
|
need: { a: string, t: string }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ResItemNoEnough = {}
|
5
src/shared/protocols/pushgift/PtlOpen.ts
Normal file
5
src/shared/protocols/pushgift/PtlOpen.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import {Gift} from "../../../module/collection_pushgift";
|
||||||
|
|
||||||
|
export type ReqOpen = {}
|
||||||
|
|
||||||
|
export type ResOpen = { gifts: Gift[] }
|
File diff suppressed because it is too large
Load Diff
8
src/shared/protocols/user/PtlDot.ts
Normal file
8
src/shared/protocols/user/PtlDot.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export interface ReqDot {
|
||||||
|
type: string,
|
||||||
|
data?: any
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ResDot {
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user