feat(兼容): 配表使用后台隐藏物品

This commit is contained in:
luying
2022-11-09 18:01:02 +08:00
parent 5d0873630a
commit 53d4af4e09
54 changed files with 768 additions and 102 deletions

View File

@@ -12,6 +12,7 @@ import { getActivityById } from "./activityService";
import { transPiece } from "../role/util";
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
import { SimpleResult, GuideGachaData } from "../../domain/activityField/guideGachaField";
import { isGoodsHidden, isHeroHidden } from "../dataService";
/**
* 获取招募列表
@@ -211,7 +212,17 @@ export class GachaResults {
}
private getRandomDetail(planId: number) {
let details = gameData.gachaPlan.get(planId)||[]
let details = (gameData.gachaPlan.get(planId)||[]).filter(detail => {
switch(detail.type) {
case GACHA_PLAN_TYPE.HERO:
return !isHeroHidden(detail.content);
case GACHA_PLAN_TYPE.ITEM:
return !isGoodsHidden(detail.content);
case GACHA_PLAN_TYPE.ASSIGN_HERO:
case GACHA_PLAN_TYPE.ASSIGN_ITEM:
return true;
}
});
let { dic } = getRandEelmWithWeight(details);
return dic
}

View File

@@ -11,6 +11,7 @@ import { GuildModel } from '../../db/Guild';
import { pushGuildInfoUpdate } from '../guildService';
import { combineItems } from '../role/util';
import { recordGuildFund } from './timeLimitRankService';
import { filterGoods, isGoodsHidden, isHeroHidden } from '../dataService';
@@ -53,8 +54,8 @@ export async function useGiftPackage(roleId: string, roleName: string, sid: stri
if (selected.length != count) {
break;
}
let selectedReward = getSelectedReward(giftPackageData, selected)
let allReward = [];
let selectedReward = getSelectedReward(giftPackageData.reward, selected)
let allReward: { type: number, id: number, count: number }[] = [];
if (giftCount > 1) {
for (let obj of selectedReward) {
allReward.push({ type: obj.type, id: obj.id, count: obj.count * giftCount })
@@ -62,17 +63,23 @@ export async function useGiftPackage(roleId: string, roleName: string, sid: stri
} else {
allReward = selectedReward;
}
let gids = allReward.filter(cur => cur.type == 2).map(cur => cur.id);
if(gids.length > 0 && isGoodsHidden(...gids)) return resResult(STATUS.ITEM_IS_HIDDEN);
let hids = allReward.filter(cur => cur.type == 1).map(cur => cur.id);
if(hids.length > 0 && isHeroHidden(...gids)) return resResult(STATUS.HERO_IS_HIDDEN);
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
break;
}
case GIFT_PACKAGE_TYPE.RANDOM_X://随机
{
let count = giftPackageData.count;//随机个数
let allReward = [];
let pool = giftPackageData.reward.filter(cur => cur.type == 1? !isHeroHidden(cur.id): !isGoodsHidden(cur.id));
let allReward: { type: number, id: number, count: number }[] = [];
for (let i = 0; i < giftCount; i++) {
let selectedArray = randomSelectedData(giftPackageData.reward.length, count);
let selectedReward = getSelectedReward(giftPackageData, selectedArray)
allReward = allReward.concat(selectedReward);
let selectedArray = randomSelectedData(pool.length, count);
let selectedReward = getSelectedReward(pool, selectedArray)
allReward.push(...selectedReward);
}
result = await addReward(roleId, roleName, sid, serverId, allReward, ITEM_CHANGE_REASON.USE_GIFT_PACKAGE);
break;
@@ -137,14 +144,14 @@ export function rewardItemData(reward: Array<RewardParam>) {
return { goods, heroes }
}
export function getSelectedReward(giftData: DicGiftPackage, selected: Array<number>): Array<RewardParam> {
console.log('bbbbbbbbbbbbbbbbbbb', JSON.stringify(selected), JSON.stringify(giftData))
export function getSelectedReward(reward: RewardParam[], selected: Array<number>): Array<RewardParam> {
console.log('bbbbbbbbbbbbbbbbbbb', JSON.stringify(selected), JSON.stringify(reward))
let selectedReward: Array<RewardParam> = [];
for (let i = 0; i < selected.length; i++) {
let index = selected[i];
if (giftData.reward.length > index) {
selectedReward.push(giftData.reward[index]);
if (reward.length > index) {
selectedReward.push(reward[index]);
}
}
return selectedReward;

View File

@@ -1,7 +1,7 @@
import { DividendModel } from './../db/Dividend';
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN, DIVIDEND_STATUS, LOT_STATUS, MAIL_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_RECEIVE_STATUS, AUCTION_BID_STATUS, DEBUG_MAGIC_WORD, AUCTION_SOURCE, TA_EVENT, getAuctionSourceTypeName, PUSH_ROUTE, GUILD_JOB } from './../consts';
import { DividendRec, } from "../domain/dbGeneral";
import { genCode, getRandSingleEelm } from '../pubUtils/util';
import { genCode, getRandEelmWithWeight, getRandSingleEelm } from '../pubUtils/util';
import Lot, { LotModel, LotParam, LotType } from '../db/Lot';
import { getCurDay, getSeconds, getTimeFunD, getTimeFunM, nowSeconds } from '../pubUtils/timeUtil';
import { gameData, getGoodById } from '../pubUtils/data';
@@ -19,6 +19,7 @@ import { isDebugTime } from '../pubUtils/sdkUtil';
import { pick } from 'underscore';
import { AuctionRewardInter } from '../domain/battleField/auction';
import { CounterLotsModel } from '../db/CounterAuction';
import { isGoodsHidden } from './dataService';
// ! 获取底价,假数据
export function getBasePrice(gid: number, count: number) {
@@ -568,4 +569,50 @@ export function processSingleLotFormat(lot: LotType) {
export function processLotsFormat(lots: LotType[]) {
return lots.map(processSingleLotFormat);
}
/**
* 根据军团活动排名获得奖励
* @param aid 活动id
* @param rank 排名
*/
function getGuildAuction(aid: number, rank: number, struLv: number, cityId: number = 0) {
let ranksReward = gameData.guildAuction.get(`${aid}_${struLv}_${cityId}`) || [];
return ranksReward.find(cur => {
return rank >= cur.min && (rank <= cur.max || cur.max == 0);
});
}
export function getGuildAuctionBasicNum(aid: number, rank: number, struLv: number, cityId: number = 0) {
let dic = getGuildAuction(aid, rank, struLv, cityId);
return dic?.basicDividend||0;
}
export function getGuildAuctionRewards(aid: number, rank: number, struLv: number, cityId: number = 0) {
let dic = getGuildAuction(aid, rank, struLv, cityId);
if(dic) {
return getAuctionRewardByPoolId(dic.rewards);
} else {
return new Map();
}
}
export function getAuctionRewardByPoolId(poolId: number) {
let pools = gameData.auctionPool.get(poolId);
let rewards: Map<number, AuctionRewardInter[]> = new Map();
for(let { count, basicPool } of pools) {
let { rewardBasicPool, basePrice, maxPrice, sort } = basicPool
for(let i = 0; i < count; i++) {
let result = getRandEelmWithWeight(rewardBasicPool);
if(result && result.dic) {
let { id, count } = result.dic;
if(isGoodsHidden(id)) continue;
if(!rewards.has(id)) {
rewards.set(id, []);
}
rewards.get(id).push({ goods: {id, count}, basePrice, maxPrice, sort });
}
}
}
return rewards;
}

View File

@@ -49,6 +49,7 @@ import { INFO_WINDOW } from '../pubUtils/dicParam';
import { getLadderData } from './ladderService';
import { dispatch } from '../pubUtils/dispatcher';
import { PvpDataReturn } from '../domain/battleField/pvp';
import { getHiddenData } from './dataService';
/**
* init: 初始的时候是否推送 true-推 false-不推
@@ -83,6 +84,7 @@ const modules = [
{ id: 25, type: 'shop', init: false, refresh: true, guild: false },
{ id: 26, type: 'survey', init: false, refresh: true, guild: false },
{ id: 27, type: 'ladder', init: false, refresh: true, guild: false },
{ id: 28, type: 'hiddenData', init: true, refresh: true, guild: false },
]
export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') {
@@ -212,6 +214,8 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio
return await getSurvey(role.roleId, role.lv);
case 'ladder':
return await getLadderData(role.roleId, false);
case 'hiddenData':
return getHiddenData();
default:
return null;
}

View File

@@ -0,0 +1,96 @@
import { pinus } from 'pinus';
import { isEqual } from 'underscore';
import { ITEM_CHANGE_REASON, PUSH_ROUTE } from '../consts';
import { HiddenDataModelType } from '../db/HiddenData';
import { sendMessageToAllServersWithSuc } from './pushService';
import { itemLogger } from '../util/logger';
export function setHiddenData(heroes: number[], goods: number[], refTime: number) {
pinus.app.set('hiddenHeroees', heroes||[]);
pinus.app.set('hiddenGoods', goods||[]);
pinus.app.set('hiddenRefTime', refTime||0);
}
export async function setHiddenDataToMemory(data: HiddenDataModelType, nextData: HiddenDataModelType) {
let heroes = data?.heroes??[];
let goods = data?.goods??[];
let refTime = nextData?.refTime||0;
sendUpdateMessage(getHiddenData(), heroes, goods, refTime);
pinus.app.rpc.activity.activityRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.battle.battleRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.chat.chatRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.connector.connectorRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.guild.guildRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.order.orderRemote.setHiddenData.broadcast(heroes, goods, refTime);
pinus.app.rpc.role.roleRemote.setHiddenData.broadcast(heroes, goods, refTime);
if(pinus.app.getServerType() != 'gm') {
pinus.app.rpc.gm.gmRemote.setHiddenData.broadcast(heroes, goods, refTime);
}
if(pinus.app.getServerType() != 'systimer') {
pinus.app.rpc.systimer.systimerRemote.setHiddenData.broadcast(heroes, goods, refTime);
}
setHiddenData(heroes, goods, refTime);
}
async function sendUpdateMessage(origin: {heroes: number[], items: number[], refTime: number}, heroes: number[], goods: number[], refTime: number) {
console.log('##### sendUpdateMessage', origin.refTime, refTime, origin.heroes, heroes, origin.items, goods)
if(origin.refTime != refTime || !isEqual(origin.heroes, heroes) || !isEqual(origin.items, goods)) {
console.log('******');
await sendMessageToAllServersWithSuc(PUSH_ROUTE.HIDDEN_DATA, { heroes, items: goods, refTime });
}
}
export function getHiddenData() {
let heroes: number[] = pinus.app.get('hiddenHeroees')||[];
let goods: number[] = pinus.app.get('hiddenGoods')||[];
let refTime = pinus.app.get('hiddenRefTime')||0;
return {
refTime, heroes, items: goods
}
}
export function filterHeroes<T>(arr: T[], cb?: (obj: T) => number, roleId?: string) {
return arr.filter(obj => {
let hid = cb? cb(obj): (typeof obj == 'number'? obj: 0);
let { heroes } = getHiddenData();
if(heroes.indexOf(hid) != -1) {
if(roleId) itemLogger.error(`玩家 ${roleId} 的武将 ${hid} 未获得`);
return false;
}
return true;
});
}
export function filterGoods<T>(arr: T[], cb?: (obj: T) => number, roleId?: string, reason?: ITEM_CHANGE_REASON) {
return arr.filter(obj => {
let gid = cb? cb(obj): (typeof obj == 'number'? obj: 0);
let { items } = getHiddenData();
if(items.indexOf(gid) != -1) {
if(roleId) itemLogger.error(`玩家 ${roleId} 的道具 ${gid} 未获得 (${reason})`);
return false;
}
return true;
});
}
export function isHeroHidden(...hids: number[]) {
for(let hid of hids) {
let { heroes } = getHiddenData();
if(heroes.indexOf(hid) != -1) {
itemLogger.error(`武将 ${hid} 被拦截`);
return true;
}
}
return false;
}
export function isGoodsHidden(...gids: number[]) {
for(let gid of gids) {
let { items } = getHiddenData();
if(items.indexOf(gid) != -1) {
itemLogger.error(`道具 ${gid} 被拦截`);
return true;
}
}
return false;
}

View File

@@ -37,6 +37,9 @@ import { gameData } from "../pubUtils/data";
import { GuildModel } from "../db/Guild";
import { GuildTrainModel } from "../db/GuildTrain";
import { unlockTrain } from "./guildTrainService";
import { HiddenDataModel, HiddenDataModelType } from "../db/HiddenData";
import { HiddenDataByIdModel } from "../db/HiddenDataById";
import moment = require("moment");
// —————————————— 跑马灯 —————————————— //
// 初始
@@ -388,4 +391,27 @@ export async function setTrainLv(guildCode: string, trainLv: string) {
await unlockTrain(guildCode, trainId);
}
}
}
export async function calHiddenData(uid: number) {
let result = await HiddenDataByIdModel.findAllData();
console.log('####', JSON.stringify(result))
let heroes: number[] = [], goods: number[] = [];
await HiddenDataModel.clearData();
for(let { _id, ids } of result) {
await HiddenDataModel.updateHiddenData(_id, heroes, goods, uid);
for(let {type, id} of ids) {
if(type == 1) heroes.push(id);
if(type == 2) goods.push(id);
}
}
await HiddenDataModel.updateHiddenData(getPastTime(), heroes, goods, uid);
}
export function getPastTime() {
return moment('2022-01-01').unix();
}
export function getFutureTime() {
return moment('2100-01-01').unix();
}

View File

@@ -1,7 +1,7 @@
import { ServerlistModel, ServerlistType } from "../../db/Serverlist";
import { RoleModel } from "../../db/Role";
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
import { gameData, getGuildAuctionRewards, getCityActivityRewards, getGuildAuctionBasicNum } from "../../pubUtils/data";
import { gameData, getCityActivityRewards } from "../../pubUtils/data";
import { getCurDay, nowSeconds, getTimeFun, getZeroPoint } from "../../pubUtils/timeUtil";
import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE, CITY_STATUS, DEBUG_MAGIC_WORD, GUILD_POINT_WAYS, TASK_TYPE, AUCTION_TIME, CITY_ACTIVITY_DOOR, ABI_TYPE, PUSH_ROUTE, RACE_ACTIVITY_STATUS, SHOP_REFRESH_TYPE, COUNTER, RACE_EVENT_TYPE } from "../../consts";
import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec";
@@ -11,7 +11,7 @@ import { getAllServers, getRoleOnlineInfo } from "../redisService";
import { SimpleGuildRankParam, SimpleRoleRankParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank";
import { pinus } from "pinus";
import { GuildActivityRecordModel } from "../../db/GuildActivityRec";
import { genAuction, getRewardToDbFromMap, guildAuctionPreview } from "../auctionService";
import { genAuction, getGuildAuctionBasicNum, getGuildAuctionRewards, getRewardToDbFromMap, guildAuctionPreview } from "../auctionService";
import { sendMailByContent } from "../mailService";
import { GuildActivityCityType, GuildActivityCityModel } from "../../db/GuildActivityCity";
import { DicCityActivity } from "../../pubUtils/dictionary/DicCityActivity";

View File

@@ -6,7 +6,7 @@ import { pinus } from 'pinus';
import { STATUS } from '../consts/statusCode';
import { resResult, shouldRefresh } from '../pubUtils/util';
import { BattleRecordModel } from '../db/BattleRecord';
import { getArmyBossRank, gameData, getAuctionRewardByPoolId } from '../pubUtils/data';
import { getArmyBossRank, gameData } from '../pubUtils/data';
import { sendMailToGuildByContent } from '../services/mailService';
import { MAIL_TYPE, AUCTION_SOURCE, ABI_TYPE, PUSH_ROUTE } from '../consts';
import { GUILD_BOSS_STATUS } from '../consts/constModules/guildConst';

View File

@@ -2,7 +2,7 @@ import { Channel, pinus } from "pinus";
import { CHANNEL_PREFIX, PUSH_BATCH, PUSH_INTERVAL, PUSH_ROUTE, STATUS } from "../consts";
import { genCode, resResult } from "../pubUtils/util";
import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId, getGroupShopSid } from "./chatService";
import { getAllOnlineRoles, getRoleOnlineInfo } from "./redisService";
import { getAllOnlineRoles, getAllServers, getRoleOnlineInfo } from "./redisService";
import { errlogger, infologger } from '../util/logger';
import { MsgEncrypt } from "../pubUtils/sysUtil";
import { isSkipEncode } from "../pubUtils/sdkUtil";
@@ -34,6 +34,13 @@ export async function sendMessageToAll(route: string, data: any, filterCb?: ({ l
}, PUSH_INTERVAL);
}
export async function sendMessageToAllServersWithSuc(route: string, data: any) {
let servers = await getAllServers();
for(let serverId of servers) {
await sendMessageToServerWithSuc(serverId, route, data);
}
}
export async function sendMessageToServerWithSuc(serverId: number, route: string, data: any, isBatch = false) {
await sendMessageToServer(serverId, route, resResult(STATUS.SUCCESS, data), isBatch);
}

View File

@@ -513,10 +513,12 @@ async function setServerList() {
await redisClient().delAsync(REDIS_KEY.SERVER);
await redisClient().delAsync(REDIS_KEY.SERVER_OPEN_TIME);
for(let { id, name, openTime } of serverList) {
// console.log(roleId);
await redisClient().hsetAsync(REDIS_KEY.SERVER, `${id}`, `${name}`);
await redisClient().hsetAsync(REDIS_KEY.SERVER_OPEN_TIME, `${id}`, `${openTime}`);
for(let { id, name, openTime, env } of serverList) {
if(env == pinus.app.get('env')) {
// console.log(roleId);
await redisClient().hsetAsync(REDIS_KEY.SERVER, `${id}`, `${name}`);
await redisClient().hsetAsync(REDIS_KEY.SERVER_OPEN_TIME, `${id}`, `${openTime}`);
}
}
}

View File

@@ -14,7 +14,7 @@ import { calculateCes } from "../playerCeService";
import { RoleModel, RoleType, RoleUpdate } from "../../db/Role";
import { sendMessageToUserWithSuc } from "../pushService";
import { checkTaskInCreateHero } from "../task/taskService";
import { Rank } from "../rankService";
import { filterHeroes } from "../dataService";
/**
* 创建多个武将
@@ -24,6 +24,7 @@ import { Rank } from "../rankService";
* @param heroInfo
*/
export async function createHeroes(roleId: string, roleName: string, sid: string, serverId: number, heroInfo: CreateHeroParam[], initRoleInfos?: RoleUpdate) {
heroInfo = filterHeroes(heroInfo, obj => obj.hid, roleId);
let hids = heroInfo.map(cur => cur.hid);
let userHeroesMap = await HeroModel.findMapByHidRange(hids, roleId);

View File

@@ -26,6 +26,7 @@ import { combineItems, getCoinEventProperties, getGoldEventProperties, sortItems
import { nowSeconds } from '../../pubUtils/timeUtil';
import { calculateCeWithHero, calculateCeWithRole } from '../playerCeService';
import { sendMessageToUsersWithSuc, sendMessageToUserWithSuc } from '../pushService';
import { filterGoods } from '../dataService';
@@ -113,6 +114,7 @@ export async function handleCost(roleId: string, sid: string, goods: Array<ItemI
}
export async function addItems(roleId: string, roleName: string, sid: string, goods: Array<ItemInter>, reason: ITEM_CHANGE_REASON) {
goods = filterGoods(goods, obj => obj.id, roleId, reason);
let { items, jewels, gold, coin, ap, skins, figures } = sortItems(goods, HANDLE_REWARD_TYPE.RECEIVE);
let showItems: { id: number, seqId?: number, count: number, isBag?: boolean }[] = [];
let role = await RoleModel.findByRoleId(roleId);
@@ -494,11 +496,12 @@ export function getHonourObject(count: number) {
*/
export function unlockFigureWithoutSave(conditions: { type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number, paramWinStreakNum?: number }[], role: RoleType) {
let { heads, frames, spines } = role;
let { heads, frames, spines, roleId } = role;
let figureInfo = { heads: new Array<Figure>(), frames: new Array<Figure>(), spines: new Array<Figure>() };
for (let { type, paramHid, paramFavourLv, paramSkinId, paramWinStreakNum } of conditions) {
let canUnLockList = gameData.figureCondition.get(type);
if (canUnLockList) {
canUnLockList = filterGoods(canUnLockList, obj => obj.gid, roleId, ITEM_CHANGE_REASON.GET_HERO_UNLOCK_FIGURE);
let reason = 0;
for (let { id, params, gid } of canUnLockList) {

View File

@@ -13,6 +13,7 @@ import { BackendSession, pinus } from "pinus";
import { ActivityModelType } from "../db/Activity";
import { addItems } from "./role/rewardService";
import { LadderMatchModel } from "../db/LadderMatch";
import { isGoodsHidden } from "./dataService";
export async function getAllShopList(roleId: string, serverId: number) {
let seasonNum = pinus.app.get('pvpSeasonNum');
@@ -178,6 +179,9 @@ export async function checkShopItemCanBuy(activityId: number, shopItemId: number
}
}
}
if(isGoodsHidden(dicShopItem.goodId)) {
return STATUS.ITEM_IS_HIDDEN;
}
return STATUS.SUCCESS
}

View File

@@ -15,7 +15,6 @@ import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
import { dispatch } from '../pubUtils/dispatcher';
import { createNewServer, initMarquee, setServerMainten } from './gmService';
import moment = require('moment');
import { CounterModel } from '../db/Counter';
import { reportOneOnline } from './authenticateService';
import { LADDER, PVP } from '../pubUtils/dicParam';
import { fetch37Words } from './sdkService';
@@ -32,7 +31,7 @@ import { ActivityModel, ActivityModelType } from '../db/Activity';
import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField';
import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService';
import { ActivityGroupModel } from '../db/ActivityGroup';
import { sendMessageToGroupShopWithSuc, sendMessageToServer } from './pushService';
import { sendMessageToServer } from './pushService';
import { resResult } from '../pubUtils/util';
import { checkPopUpConditionWhenGuildActivityEnd } from './activity/popUpShopService';
import { pushRefreshTime } from './connectorService';
@@ -41,6 +40,8 @@ import { ladderTimeout, ladderTimeWillout, sendLadderDailyReward } from './ladde
import { LadderMatchRecModel } from '../db/LadderMatchRec';
import { LadderMatchModel } from '../db/LadderMatch';
import { getGroupShopTimers, refundGroupShop, setGroupShopToSetSum } from './activity/groupShopService';
import { HiddenDataModel, HiddenDataModelType } from '../db/HiddenData';
import { setHiddenData, setHiddenDataToMemory } from './dataService';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
@@ -102,6 +103,9 @@ export async function init() {
// 团购定时器
initGroupShopSchedule();
// 隐藏数据定时器
initHiddenDataSchedule(true);
}
// 每日刷新
@@ -854,4 +858,35 @@ export async function initSumSchedule() {
}
}
// —————————————— 团购定时器 end —————————————— //
// —————————————— 团购定时器 end —————————————— //
// —————————————— 配表兼容 start —————————————— //
let hiddenDataJob: Job;
export async function initHiddenData(data?: HiddenDataModelType, nextData?: HiddenDataModelType) {
let now = nowSeconds();
if(!data) data = await HiddenDataModel.findCurData(now);
if(!nextData) nextData = await HiddenDataModel.findNextData(now);
setHiddenData(data?.heroes, data?.goods, nextData?.refTime);
}
export async function initHiddenDataSchedule(isInit: boolean, data?: HiddenDataModelType) {
if(hiddenDataJob) hiddenDataJob.cancel();
let now = nowSeconds();
if(!data) data = await HiddenDataModel.findCurData(now);
let nextData = await HiddenDataModel.findNextData(data?.refTime??now);
if(isInit) {
await initHiddenData(data, nextData)
} else {
await setHiddenDataToMemory(data, nextData);
}
console.log('######## initHiddenDataSchedule', nextData);
if(nextData) {
scheduleJob(`hiddenData`, nextData.refTime * 1000, async () => {
console.log('######## hiddenDataSchedule', nextData);
await initHiddenDataSchedule(false, nextData);
});
}
}
// —————————————— 配表兼容 end —————————————— //