军团:补发活跃宝箱

This commit is contained in:
luying
2022-05-10 16:55:58 +08:00
parent 2695d7e9fb
commit 9658fd8059
9 changed files with 106 additions and 69 deletions

View File

@@ -2,12 +2,12 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pi
import { resResult, getRandEelm, shouldRefresh, sortArrRandom } from '../../../pubUtils/util'; import { resResult, getRandEelm, shouldRefresh, sortArrRandom } from '../../../pubUtils/util';
import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT, TASK_TYPE, DEBUG_MAGIC_WORD, CHANNEL_PREFIX, MSG_TYPE, MSG_SOURCE, ITEM_CHANGE_REASON, TA_EVENT, GUILD_DISMISS_WAY, GUILD_MASTER_CHANGE_WAY, GUILD_QUIT_WAY, PUSH_ROUTE } from '../../../consts'; import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT, TASK_TYPE, DEBUG_MAGIC_WORD, CHANNEL_PREFIX, MSG_TYPE, MSG_SOURCE, ITEM_CHANGE_REASON, TA_EVENT, GUILD_DISMISS_WAY, GUILD_MASTER_CHANGE_WAY, GUILD_QUIT_WAY, PUSH_ROUTE } from '../../../consts';
import { UserGuildModel, UserGuildType } from '../../../db/UserGuild'; import { UserGuildModel, UserGuildType } from '../../../db/UserGuild';
import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, settleGuildWeekly, getMyGuildInfo, refreshUserGuild, setUserGuildSession, getInvitationList, addGuildRecord, pushChangeGuildLeader, pushGuildMemberQuit, pushGuildDismiss, pushGuildInfoUpdate } from '../../../services/guildService'; import { checkAuth, joinGuild, getUserGuildWithRefActive, addActive, settleGuildWeekly, getMyGuildInfo, refreshUserGuild, setUserGuildSession, getInvitationList, addGuildRecord, pushChangeGuildLeader, pushGuildMemberQuit, pushGuildDismiss, pushGuildInfoUpdate, getTodayGuildActive } from '../../../services/guildService';
import { GuildModel, GuildType, GuildUpdateParam } from '../../../db/Guild'; import { GuildModel, GuildType, GuildUpdateParam } from '../../../db/Guild';
import { RoleModel, RoleType } from '../../../db/Role'; import { RoleModel, RoleType } from '../../../db/Role';
import { ARMY } from '../../../pubUtils/dicParam'; import { ARMY } from '../../../pubUtils/dicParam';
import { handleCost, addItems, getGoldObject } from '../../../services/role/rewardService'; import { handleCost, addItems, getGoldObject } from '../../../services/role/rewardService';
import { nowSeconds, getTimeFun, getSeconds } from '../../../pubUtils/timeUtil'; import { nowSeconds, getTimeFun, getSeconds, getZeroPointD } from '../../../pubUtils/timeUtil';
import { GuildListInfo, GuildMemberParam } from '../../../domain/battleField/guild'; import { GuildListInfo, GuildMemberParam } from '../../../domain/battleField/guild';
import { GuildLeader } from '../../../domain/rank'; import { GuildLeader } from '../../../domain/rank';
import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { UserGuildApplyModel } from '../../../db/UserGuildApply';
@@ -28,6 +28,7 @@ import * as dicParam from '../../../pubUtils/dicParam';
import { reportTAEvent } from '../../../services/sdkService'; import { reportTAEvent } from '../../../services/sdkService';
import { changeGuildActivity, guildDismisActivity } from '../../../services/activity/guildPayService'; import { changeGuildActivity, guildDismisActivity } from '../../../services/activity/guildPayService';
import { sendMessageToUserWithSuc } from '../../../services/pushService'; import { sendMessageToUserWithSuc } from '../../../services/pushService';
import { GuildActiveModel } from '../../../db/GuildActive';
export default function (app: Application) { export default function (app: Application) {
@@ -270,7 +271,7 @@ export class GuildHandler {
return resResult(STATUS.SUCCESS, { hasGuild: false }) return resResult(STATUS.SUCCESS, { hasGuild: false })
}; };
let guild = await getGuildWithRefActive(userGuild.guildCode, serverId); let guild = await GuildModel.findByCode(userGuild.guildCode, serverId);
if (!guild) { if (!guild) {
return resResult(STATUS.GUILD_NOT_FOUND); return resResult(STATUS.GUILD_NOT_FOUND);
} }
@@ -831,13 +832,11 @@ export class GuildHandler {
let userGuild = await refreshUserGuild(myUserGuild, roleId); let userGuild = await refreshUserGuild(myUserGuild, roleId);
if (!userGuild) return resResult(STATUS.GUILD_NOT_FOUND); if (!userGuild) return resResult(STATUS.GUILD_NOT_FOUND);
const guild = await getGuildWithRefActive(code, serverId);
if (!guild) return resResult(STATUS.GUILD_NOT_FOUND);
let activeDayReward = gameData.guildActiveDayReward.get(id); let activeDayReward = gameData.guildActiveDayReward.get(id);
if (!activeDayReward) return resResult(STATUS.GUILD_ACTIVE_BOX_NOT_FOUND); if (!activeDayReward) return resResult(STATUS.GUILD_ACTIVE_BOX_NOT_FOUND);
if (guild.activeDaily < activeDayReward.activeDayPoint) { const guildActive = await getTodayGuildActive(code);
if (guildActive < activeDayReward.activeDayPoint) {
return resResult(STATUS.GUILD_ACTIVE_POINT_NOT_REACH); return resResult(STATUS.GUILD_ACTIVE_POINT_NOT_REACH);
} }
@@ -882,10 +881,12 @@ export class GuildHandler {
const result = await addActive(roleId, serverId, id, null, active); const result = await addActive(roleId, serverId, id, null, active);
if (result.status == 0) return result.resResult; if (result.status == 0) return result.resResult;
const { guild, userGuild } = result; const { guild, userGuild } = result;
let today = getZeroPointD();
let guildActive = await GuildActiveModel.addActive(code, today, active);
let { activeDaily, activeWeekly } = guild; let { activeWeekly } = guild;
await pushGuildInfoUpdate(code, { activeDaily, activeWeekly }); await pushGuildInfoUpdate(code, { activeDaily: guildActive? guildActive.active: 0, activeWeekly });
return resResult(STATUS.SUCCESS, { activeDaily, activeWeekly, myInfo: userGuild }); return resResult(STATUS.SUCCESS, { activeDaily: guildActive? guildActive.active: 0, activeWeekly, myInfo: userGuild });
} }
// debug接口 调用定时任务 // debug接口 调用定时任务

View File

@@ -22,13 +22,13 @@ import { nowSeconds, getZeroPoint } from '../pubUtils/timeUtil';
import { getGachaList, getVisitedHeroList } from './activity/gachaService'; import { getGachaList, getVisitedHeroList } from './activity/gachaService';
import { getSchoolList } from './roleService'; import { getSchoolList } from './roleService';
import { addRoleToGuildChannel } from './chatChannelService'; import { addRoleToGuildChannel } from './chatChannelService';
import { getMyGuildInfo, getGuildWithRefActive, getUserGuildWithRefActive, getWishPool, getInvitationList } from './guildService'; import { getMyGuildInfo, getUserGuildWithRefActive, getWishPool, getInvitationList } from './guildService';
import { getAuction } from './auctionService'; import { getAuction } from './auctionService';
import { getGuildTrainInstance, getTrainBoxRewardsResult } from './guildTrainService'; import { getGuildTrainInstance, getTrainBoxRewardsResult } from './guildTrainService';
import { getBossInstanceInfo } from './guildBossService'; import { getBossInstanceInfo } from './guildBossService';
import { getEvent } from './eventSercive'; import { getEvent } from './eventSercive';
import { getBattleListOfMain, getMainChapter } from './normalBattleService'; import { getBattleListOfMain, getMainChapter } from './normalBattleService';
import { GuildType } from '../db/Guild'; import { GuildModel, GuildType } from '../db/Guild';
import UserGuild, { UserGuildType } from '../db/UserGuild'; import UserGuild, { UserGuildType } from '../db/UserGuild';
import { setPreDayActiveData, getAllGuildActivityStatus } from './guildActivity/guildActivityService'; import { setPreDayActiveData, getAllGuildActivityStatus } from './guildActivity/guildActivityService';
import { getAllOnlineRoles, getAllServers } from './redisService'; import { getAllOnlineRoles, getAllServers } from './redisService';
@@ -270,7 +270,7 @@ async function getGuildEntryData(role: RoleType, sid: string, session: FrontendO
if (role.hasGuild) { if (role.hasGuild) {
let userGuild = await getUserGuildWithRefActive(role.roleId); let userGuild = await getUserGuildWithRefActive(role.roleId);
if (userGuild) { if (userGuild) {
let guild = await getGuildWithRefActive(userGuild.guildCode, role.serverId); let guild = await GuildModel.findByCode(userGuild.guildCode, role.serverId);
if (guild) { if (guild) {
addRoleToGuildChannel(role.roleId, sid, userGuild.guildCode); addRoleToGuildChannel(role.roleId, sid, userGuild.guildCode);

View File

@@ -3,10 +3,10 @@ import { GuildModel, GuildType, GuildUpdateParam } from "../db/Guild";
import { resResult, shouldRefresh } from "../pubUtils/util"; import { resResult, shouldRefresh } from "../pubUtils/util";
import { STATUS, MAIL_TYPE, GUILD_AUTH, GUILD_JOB, REDIS_KEY, CHAT_SERVER, TASK_TYPE, COUNTER, GUILD_REC_TYPE, PUSH_ROUTE } from "../consts"; import { STATUS, MAIL_TYPE, GUILD_AUTH, GUILD_JOB, REDIS_KEY, CHAT_SERVER, TASK_TYPE, COUNTER, GUILD_REC_TYPE, PUSH_ROUTE } from "../consts";
import { RoleModel, RoleType } from "../db/Role"; import { RoleModel, RoleType } from "../db/Role";
import { UserGuildModel, UserGuildType } from "../db/UserGuild"; import { UserGuildModel, UserGuildType, WishGood } from "../db/UserGuild";
import { UserGuildApplyModel } from "../db/UserGuildApply"; import { UserGuildApplyModel } from "../db/UserGuildApply";
import { PVPConfigModel } from "../db/SystemConfig"; import { PVPConfigModel } from "../db/SystemConfig";
import { nowSeconds } from "../pubUtils/timeUtil"; import { getZeroPointD, getZeroPointOfTimeD, nowSeconds } from "../pubUtils/timeUtil";
import { pinus, BackendSession, FrontendOrBackendSession } from "pinus"; import { pinus, BackendSession, FrontendOrBackendSession } from "pinus";
import { ARMY } from "../pubUtils/dicParam"; import { ARMY } from "../pubUtils/dicParam";
import { sendMailByContent } from "./mailService"; import { sendMailByContent } from "./mailService";
@@ -23,6 +23,8 @@ import { changeGuildActivity } from "./activity/guildPayService";
import { GuildRecModel } from "../db/GuildRec"; import { GuildRecModel } from "../db/GuildRec";
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "./pushService"; import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "./pushService";
import { delGuildChannel, leaveGuildChannel } from "./chatChannelService"; import { delGuildChannel, leaveGuildChannel } from "./chatChannelService";
import { GuildActiveModel, } from "../db/GuildActive";
import { RewardInter } from "../pubUtils/interface";
export async function getMyGuildInfo(roleId: string, sid: string, userGuild: UserGuildType, guild: GuildType, serverId: number, session: FrontendOrBackendSession) { export async function getMyGuildInfo(roleId: string, sid: string, userGuild: UserGuildType, guild: GuildType, serverId: number, session: FrontendOrBackendSession) {
@@ -44,8 +46,10 @@ export async function getMyGuildInfo(roleId: string, sid: string, userGuild: Use
let dicGuild = gameData.centerBase.get(guildLv); let dicGuild = gameData.centerBase.get(guildLv);
let guildMemberMax = dicGuild && memberCnt >= dicGuild.peopleNum; let guildMemberMax = dicGuild && memberCnt >= dicGuild.peopleNum;
let guildActive = await getTodayGuildActive(guild.code);
// 返回 // 返回
return { hasGuild: true, guildMemberMax, ...guild, leader: { ...leader, isOnline: leaderIsOnline }, rank, myInfo: { ...userGuild } }; return { hasGuild: true, guildMemberMax, ...guild, activeDaily: guildActive, leader: { ...leader, isOnline: leaderIsOnline }, rank, myInfo: { ...userGuild } };
} }
/** /**
@@ -131,33 +135,14 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol
return { status: 0, guild, userGuild, roleName: role.roleName, memberCnt: guild.memberCnt, guildCe: guild.guildCe } return { status: 0, guild, userGuild, roleName: role.roleName, memberCnt: guild.memberCnt, guildCe: guild.guildCe }
} }
/** export async function getTodayGuildActive(guildCode: string) {
* 刷新军团日活跃 let today = getZeroPointD();
* @param guildCode 军团唯一code return await getGuildActiveByRefTime(guildCode, today);
* @param serverId 区 }
*/
export async function getGuildWithRefActive(guildCode: string, serverId: number) {
let res: any = await lockData(serverId, DATA_NAME.REFRESH_ACTIVE, guildCode);// 加锁 export async function getGuildActiveByRefTime(guildCode: string, refTime: Date) {
if (!!res.err) return false; let guildActive = await GuildActiveModel.getActive(guildCode, refTime);
return guildActive? guildActive.active: 0;
let guild = await GuildModel.findByCode(guildCode, serverId, '+refTimeDaily');
if (!guild) {
res.releaseCallback();//解锁
return false;
}
const now = new Date();
let { activeDaily, refTimeDaily } = guild;
let isRefDaily = shouldRefresh(refTimeDaily, now);
if (isRefDaily) {
activeDaily = 0; refTimeDaily = now;
guild = await GuildModel.updateInfoWithLeader(guildCode, { activeDaily, refTimeDaily }, {});
}
res.releaseCallback();//解锁
return guild;
} }
/** /**
@@ -182,9 +167,6 @@ export async function addActive(roleId: string, serverId: number, id: number, ty
if (!userGuild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) }; if (!userGuild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
let guildCode = userGuild.guildCode; let guildCode = userGuild.guildCode;
let guild = await getGuildWithRefActive(guildCode, serverId);
if (!guild) return { status: 0, resResult: resResult(STATUS.GUILD_NOT_FOUND) };
// 周结算锁 // 周结算锁
let weeklySumLock = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, guildCode); let weeklySumLock = await lockDataNoRetry(serverId, DATA_NAME.WEEKLY_GUILD_SUM, guildCode);
if (!!weeklySumLock.err) { if (!!weeklySumLock.err) {
@@ -208,14 +190,15 @@ export async function addActive(roleId: string, serverId: number, id: number, ty
} }
userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord, activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active }); userGuild = await UserGuildModel.updateInfo(roleId, { activeRecord, activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active });
guild = await GuildModel.updateInfo(guildCode, { activeUpdateTime: nowSeconds() }, { activeDaily: active, activeWeekly: active }); let guild = await GuildModel.updateInfo(guildCode, { activeUpdateTime: nowSeconds() }, { activeWeekly: active });
let guildActive = await GuildActiveModel.addActive(guildCode, getZeroPointD(), active);
// 排行榜更新 // 排行榜更新
let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId }); let r = new Rank(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
await r.setRankWithGuildInfo(guildCode, guild.activeWeekly, guild.activeUpdateTime, guild); await r.setRankWithGuildInfo(guildCode, guild.activeWeekly, guild.activeUpdateTime, guild);
let r2 = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId }); let r2 = new Rank(REDIS_KEY.GUILD_LV_RANK, { serverId });
await r2.setRankWithGuildInfo2(guildCode, guild.lv, guild.activeWeekly, guild.lvUpdateTime, guild); await r2.setRankWithGuildInfo2(guildCode, guild.lv, guild.activeWeekly, guild.lvUpdateTime, guild);
await pushGuildInfoUpdate(guildCode, { activeDaily: guild.activeDaily, activeWeekly: guild.activeWeekly }); await pushGuildInfoUpdate(guildCode, { activeDaily: guildActive.active, activeWeekly: guild.activeWeekly });
return { status: 1, guild, userGuild }; return { status: 1, guild, userGuild };
} }
@@ -238,19 +221,8 @@ export async function refreshUserGuild(userGuild: UserGuildType, roleId: string)
const now = new Date(); const now = new Date();
let isRefDaily = shouldRefresh(refTimeDaily, now); let isRefDaily = shouldRefresh(refTimeDaily, now);
if (isRefDaily) { if (isRefDaily) {
wishGoods.map(async function ({ donateNames, goodId, drawCnt }) { await sendUnreceivedWishPool(wishGoods, roleId);
let goodInfo = getGoodById(goodId) await sendUnreceivedActiveBox(roleId, userGuild.guildCode, refTimeDaily, receivedActive);
if (!goodInfo)
return;
for (let i = 0; i < drawCnt; i++) {
let donateName = donateNames[donateNames.length - i - 1];
await sendMailByContent(MAIL_TYPE.WISH_POOL_REWARD, roleId, {
params: [donateName, goodInfo.name],
goods: [{ id: goodId, count: 1 }]
});
}
});
receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = []; wishGoods = []; receivedWishPool = []; receivedActive = []; refTimeDaily = now; activeDaily = 0; activeRecord = []; wishGoods = []; receivedWishPool = [];
let receiveBoxs = [], wishDntCnt = 0, donateCnt = 0; let receiveBoxs = [], wishDntCnt = 0, donateCnt = 0;
userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receiveBoxs, wishDntCnt, donateCnt, receivedWishPool }, {}); userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive, refTimeDaily, activeDaily, activeRecord, wishGoods, receiveBoxs, wishDntCnt, donateCnt, receivedWishPool }, {});
@@ -260,6 +232,34 @@ export async function refreshUserGuild(userGuild: UserGuildType, roleId: string)
return userGuild; return userGuild;
} }
async function sendUnreceivedWishPool(wishGoods: WishGood[], roleId: string) {
wishGoods.map(async function ({ donateNames, goodId, drawCnt }) {
let goodInfo = getGoodById(goodId)
if (!goodInfo)
return;
for (let i = 0; i < drawCnt; i++) {
let donateName = donateNames[donateNames.length - i - 1];
await sendMailByContent(MAIL_TYPE.WISH_POOL_REWARD, roleId, {
params: [donateName, goodInfo.name],
goods: [{ id: goodId, count: 1 }]
});
}
});
}
async function sendUnreceivedActiveBox(roleId: string, guildCode: string, refTimeDaily: Date, receiveActiveBox: number[]) {
let refTime = getZeroPointOfTimeD(refTimeDaily);
let guildActive = await getGuildActiveByRefTime(guildCode, refTime);
let goods: RewardInter[] = [];
for(let [id, { activeDayPoint, reward }] of gameData.guildActiveDayReward) {
console.log('####', guildActive, activeDayPoint, receiveActiveBox)
if(guildActive >= activeDayPoint && receiveActiveBox.indexOf(id) == -1) goods.push(...reward);
}
if(goods.length > 0) {
await sendMailByContent(MAIL_TYPE.GUILD_DAILY_BOX, roleId, { goods });
}
}
/** /**
* 每周结算上周公会周功勋和 活跃并发奖励(未完) * 每周结算上周公会周功勋和 活跃并发奖励(未完)
* *

View File

@@ -818,7 +818,7 @@ export class CheckSingleTask {
} }
break; break;
} }
case TASK_TYPE.GUILD_GOLD_DONATE: // 64. 军团捐献x次 case TASK_TYPE.GUILD_DONATE: // 64. 军团捐献x次
{ {
result = { inc: 1 }; result = { inc: 1 };
break; break;

View File

@@ -64,17 +64,11 @@ export default class Guild extends BaseModel {
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
refTodayFund: Date; refTodayFund: Date;
@prop({ required: true, default: 0 })
activeDaily: number;
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
activeWeekly: number; activeWeekly: number;
@prop({ required: true, default: nowSeconds() }) @prop({ required: true, default: nowSeconds() })
activeUpdateTime: number; activeUpdateTime: number;
@prop({ required: true, default: new Date(), select: false })
refTimeDaily: Date;
@prop({ required: true, default: 0 }) @prop({ required: true, default: 0 })
guildCe: number; // 总战力 guildCe: number; // 总战力

31
shared/db/GuildActive.ts Normal file
View File

@@ -0,0 +1,31 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
@index({ guildCode: 1, refTime: 1 })
export default class GuildActive extends BaseModel {
@prop({ required: true })
guildCode: string; // 军团
@prop({ required: true })
refTime: Date; // 刷新时间
@prop({ required: true, default: 0 })
active: number; // 活跃
// 更新
public static async addActive(guildCode: string, refTime: Date, active: number) {
let rec: GuildActiveType = await GuildActiveModel.findOneAndUpdate({ guildCode, refTime }, { $inc: { active } }, { new: true, upsert: true }).lean();
return rec;
}
public static async getActive(guildCode: string, refTime: Date) {
let rec: GuildActiveType = await GuildActiveModel.findOne({ guildCode, refTime }).lean();
return rec;
}
}
export const GuildActiveModel = getModelForClass(GuildActive);
export interface GuildActiveType extends Pick<DocumentType<GuildActive>, keyof GuildActive> { };
export type GuildActiveUpdateParam = Partial<GuildActiveType>; // 将所有字段变成可选项

View File

@@ -11,7 +11,7 @@ class ActiveRecord {
count: number; count: number;
} }
class WishGood { export class WishGood {
@prop({ required: true }) @prop({ required: true })
id: string;//随机生成的唯一id id: string;//随机生成的唯一id
@prop({ required: true }) @prop({ required: true })

View File

@@ -489,6 +489,16 @@ export function getZeroPointD(refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE
} }
} }
export function getZeroPointOfTimeD(refTime: Date, refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.DAILY) {
let t = new Time(TIME_OUTPUT_TYPE.DATE, refTime);
if(refreshType == SHOP_REFRESH_TYPE.DAILY) {
return <Date>t.getDayZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.WEEKLY) {
return <Date>t.getWeekZeroPoint();
} else if (refreshType == SHOP_REFRESH_TYPE.MONTHLY) {
return <Date>t.getMonthZeroPoint();
}
}
/** /**
* 根据 yy-dd-mm格式获取年龄 * 根据 yy-dd-mm格式获取年龄

View File

@@ -14,6 +14,7 @@
{ "id": 5, "desc": "发送弹幕", "route": "battle.barrageHandler.sendBarrage", "param": {}, "interval": 1000 }, { "id": 5, "desc": "发送弹幕", "route": "battle.barrageHandler.sendBarrage", "param": {}, "interval": 1000 },
{ "id": 6, "desc": "获取信息", "route": "connector.entryHandler.getData", "param": {}, "interval": 1000 }, { "id": 6, "desc": "获取信息", "route": "connector.entryHandler.getData", "param": {}, "interval": 1000 },
{ "id": 7, "desc": "刷新信息", "route": "connector.entryHandler.refresh", "param": {}, "interval": 1000 }, { "id": 7, "desc": "刷新信息", "route": "connector.entryHandler.refresh", "param": {}, "interval": 1000 },
{ "id": 8, "desc": "捐赠", "route": "guild.donateHandler.donate", "param": {}, "interval": 200 } { "id": 8, "desc": "捐赠", "route": "guild.donateHandler.donate", "param": {}, "interval": 200 },
{ "id": 9, "desc": "碾压镇念塔", "route": "battle.towerBattleHandler.skipTower", "param": {}, "interval": 200 }
] ]
} }